<?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>67440</bug_id>
          
          <creation_ts>2011-09-01 14:55:55 -0700</creation_ts>
          <short_desc>[chromium] Move contents texture manager from LayerRendererChromium to CCLayerTreeHost</short_desc>
          <delta_ts>2011-09-14 11:01:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67438</dependson>
    
    <dependson>67984</dependson>
          <blocked>66995</blocked>
    
    <blocked>67417</blocked>
    
    <blocked>67883</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>enne</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460803</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-01 14:55:55 -0700</bug_when>
    <thetext>Currently the contents texture manager lives on the LayerRendererChromium, but is accessed by both threads.  It needs to be owned by the CCLayerTreeHost, so the main thread layers can access it indiscriminately.  This also means that there needs to be an explicit synchronous shutdown where the main thread can ask for the compositor thread&apos;s context in order to delete the textures that it owns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461702</commentid>
    <comment_count>1</comment_count>
      <attachid>106238</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-02 19:34:27 -0700</bug_when>
    <thetext>Created attachment 106238
wip, crashes all the time not fully baked</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461719</commentid>
    <comment_count>2</comment_count>
      <attachid>106238</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-02 21:03:48 -0700</bug_when>
    <thetext>Comment on attachment 106238
wip, crashes all the time not fully baked

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

Thanks James! I got stuck in testing land today :/

What&apos;s the distinction between setNeedsCommit and setNeedsCommitAndRedraw?

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:48
&gt; +    // FIXME: Make these limit adjustable and give it a useful value.

If this were adjustable, which side would do the adjusting? Or is your vision that this would be state we access on both sides via a mutex/?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:103
&gt; +void CCLayerTreeHost::deleteContentsTextures(GraphicsContext3D* context)

Awkward method name

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:106
&gt; +    m_contentsTextureManager-&gt;unprotectAllTextures();

What about m_contentsTextureManager-&gt;deleteAllTextures(context)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:-230
&gt; -    m_proxy-&gt;setNeedsCommitAndRedraw();

I think we still should propagate visibility to the impl side --- the scheduler is going to live on the impl side in CCThreadMode, and it needs visibility information to decide when to draw.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:252
&gt; +        m_proxy-&gt;setNeedsCommit();

Why not just setNeedsCommitAndRedraw? The impl can ignore the redraw if it knows its invisible...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:150
&gt; +void CCSingleThreadProxy::setNeedsCommit()

You shouldn&apos;t need the flag? We&apos;ve been trying to use the THREADED_COMPOSITING define only when there&apos;d be a compilation error resulting from threaded usage. And, since this code is in CCSingleThreadProxy, you&apos;re guaranteed it wont get called during thread mode...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:140
&gt; +    if (m_commitPending)

A source of your crashes may be that the CCSingleThreadProxy can&apos;t reliably catch all setNeedsCommit usage. Most setNeedsComitAndRedraw calls bypass the CCLayerTreeHost and go up to the render_widget. When we finish the inversion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462366</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-05 22:39:06 -0700</bug_when>
    <thetext>Thanks for the feedback.  This definitely isn&apos;t ready to go yet, I mostly posted it so that I could ponder about it over the weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463804</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-07 18:27:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 106238 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106238&amp;action=review
&gt; 
&gt; Thanks James! I got stuck in testing land today :/
&gt; 
&gt; What&apos;s the distinction between setNeedsCommit and setNeedsCommitAndRedraw?
&gt; 

the problem is setNeedsCommitAndRedraw() right now in the single threaded proxy just does scheduleComposite(), which the caller will happily ignore for offscreen content.  What I really need here is a way to say &quot;hey thread, i need access to your context&quot; and I&apos;m trying to reuse the commit mechanism to do so.  It&apos;s just interacting awkwardly with the visibility stuff right now.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:48
&gt; &gt; +    // FIXME: Make these limit adjustable and give it a useful value.
&gt; 
&gt; If this were adjustable, which side would do the adjusting? Or is your vision that this would be state we access on both sides via a mutex/?

At this point I don&apos;t know, I just blindly copied that FIXME.

I&apos;ll try to pick this up again tomorrow.  Too brain fried today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464515</commentid>
    <comment_count>5</comment_count>
      <attachid>106820</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-08 17:14:05 -0700</bug_when>
    <thetext>Created attachment 106820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464534</commentid>
    <comment_count>6</comment_count>
      <attachid>106820</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-08 17:42:30 -0700</bug_when>
    <thetext>Comment on attachment 106820
Patch

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

So much awesome cleanup.  :)

I&apos;m a little bit unsure about the setNeedsCommit() addition, but it sounds like you&apos;re working that out with nduca and I&apos;ll wait for an updated patch.

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:-97
&gt; -#ifndef NDEBUG
&gt; -    GraphicsContext3D* m_associatedContextDebugOnly;
&gt; -#endif
&gt; -

Why is this going away? I&apos;ve had that assert trip in the past while refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464538</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-08 17:51:29 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 106820 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106820&amp;action=review
&gt; 
&gt; So much awesome cleanup.  :)
&gt; 
&gt; I&apos;m a little bit unsure about the setNeedsCommit() addition, but it sounds like you&apos;re working that out with nduca and I&apos;ll wait for an updated patch.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:-97
&gt; &gt; -#ifndef NDEBUG
&gt; &gt; -    GraphicsContext3D* m_associatedContextDebugOnly;
&gt; &gt; -#endif
&gt; &gt; -
&gt; 
&gt; Why is this going away? I&apos;ve had that assert trip in the past while refactoring.

This used to be set at creation time for the contents TextureManager, since the contents TextureManager used to be created in LayerRendererChromium&apos;s c&apos;tor.  Now we create the contents TextureManager before we have a context, so I can&apos;t set it there.  I could set the pointer in every commit, but that doesn&apos;t really seem to be very beneficial since in theory the context _could_ be different and that&apos;s OK.  It might make more sense to stash this on every ManagedTexture to match up the contexts on ManagedTexture::bindTexture(), do you think that would be better?  Unfortunately texture destruction doesn&apos;t go through ManagedTexture so there&apos;s not an obvious way to match the contexts up there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464540</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-08 17:56:29 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 106820 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106820&amp;action=review
&gt; &gt; 
&gt; &gt; So much awesome cleanup.  :)
&gt; &gt; 
&gt; &gt; I&apos;m a little bit unsure about the setNeedsCommit() addition, but it sounds like you&apos;re working that out with nduca and I&apos;ll wait for an updated patch.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:-97
&gt; &gt; &gt; -#ifndef NDEBUG
&gt; &gt; &gt; -    GraphicsContext3D* m_associatedContextDebugOnly;
&gt; &gt; &gt; -#endif
&gt; &gt; &gt; -
&gt; &gt; 
&gt; &gt; Why is this going away? I&apos;ve had that assert trip in the past while refactoring.
&gt; 
&gt; This used to be set at creation time for the contents TextureManager, since the contents TextureManager used to be created in LayerRendererChromium&apos;s c&apos;tor.  Now we create the contents TextureManager before we have a context, so I can&apos;t set it there.  I could set the pointer in every commit, but that doesn&apos;t really seem to be very beneficial since in theory the context _could_ be different and that&apos;s OK.  It might make more sense to stash this on every ManagedTexture to match up the contexts on ManagedTexture::bindTexture(), do you think that would be better?  Unfortunately texture destruction doesn&apos;t go through ManagedTexture so there&apos;s not an obvious way to match the contexts up there.

Yeah, maybe it&apos;d be better to put the context on the ManagedTexture and add a ManagedTexture::deleteTexture() function as a pair to the bindTexture().

That&apos;s how I caught the VideoLayerChromium keeping around stale textures and not calling cleanupResources properly, so I&apos;d love if this logic didn&apos;t go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464544</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-08 18:01:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; 
&gt; &gt; This used to be set at creation time for the contents TextureManager, since the contents TextureManager used to be created in LayerRendererChromium&apos;s c&apos;tor.  Now we create the contents TextureManager before we have a context, so I can&apos;t set it there.  I could set the pointer in every commit, but that doesn&apos;t really seem to be very beneficial since in theory the context _could_ be different and that&apos;s OK.  It might make more sense to stash this on every ManagedTexture to match up the contexts on ManagedTexture::bindTexture(), do you think that would be better?  Unfortunately texture destruction doesn&apos;t go through ManagedTexture so there&apos;s not an obvious way to match the contexts up there.
&gt; 
&gt; Yeah, maybe it&apos;d be better to put the context on the ManagedTexture and add a ManagedTexture::deleteTexture() function as a pair to the bindTexture().

That would imply making TextureManager aware of ManagedTexture (right now it just deals with tokens and texture IDs).  I&apos;m worried about that adding another layer of back pointers we have to sort out...

&gt; 
&gt; That&apos;s how I caught the VideoLayerChromium keeping around stale textures and not calling cleanupResources properly, so I&apos;d love if this logic didn&apos;t go away.

Did it show up as a delete being called after a context recreation?

How about this instead: in debug whenever the TextureManager allocates a texture, it stashes a pointer to the context in its TextureInfo.  The eviction list changes from just a list of texture ids to a list of texture id, context ptr pairs.  When the texture finally gets deleted the context pointer is compared.

One weakness with this (and the existing logic) is that pointer identity != object identity since a new GraphicsContext3D might get allocated at the same address as a previous incarnation, but it would provide some protection.  WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464555</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-08 18:18:09 -0700</bug_when>
    <thetext>Hah, I added in the assertions and they trip on platform/chromium/compositing/lost-compositor-context*.  We&apos;re trying to delete textures from the previous context on the new one.

Good call, I guess we do need the assertions after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464558</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-08 18:22:56 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)

&gt; &gt; Yeah, maybe it&apos;d be better to put the context on the ManagedTexture and add a ManagedTexture::deleteTexture() function as a pair to the bindTexture().
&gt; 
&gt; That would imply making TextureManager aware of ManagedTexture (right now it just deals with tokens and texture IDs).  I&apos;m worried about that adding another layer of back pointers we have to sort out...

Ack, good call.
 
&gt; How about this instead: in debug whenever the TextureManager allocates a texture, it stashes a pointer to the context in its TextureInfo.  The eviction list changes from just a list of texture ids to a list of texture id, context ptr pairs.  When the texture finally gets deleted the context pointer is compared.
&gt; 
&gt; One weakness with this (and the existing logic) is that pointer identity != object identity since a new GraphicsContext3D might get allocated at the same address as a previous incarnation, but it would provide some protection.  WDYT?

That sounds quite reasonable to me.  Pointer aliasing was a problem even with the previous scheme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464630</commentid>
    <comment_count>12</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-08 21:17:26 -0700</bug_when>
    <thetext>Any sense in casting away the type (eg cast it to void* to prevent newcomers from the code thinking that its usable?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465053</commentid>
    <comment_count>13</comment_count>
      <attachid>106929</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-09 15:21:09 -0700</bug_when>
    <thetext>Created attachment 106929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465056</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-09 15:22:24 -0700</bug_when>
    <thetext>Adding those assertions revealed a lot of issues with managed textures, both for content textures and render surfaces.  I added a new lost context test to hit the render surface case and fixed all the bugs that popped up.  Yay testing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465694</commentid>
    <comment_count>15</comment_count>
      <attachid>107066</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 11:15:31 -0700</bug_when>
    <thetext>Created attachment 107066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465695</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 11:16:59 -0700</bug_when>
    <thetext>Patch merged up to ToT, no other changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465698</commentid>
    <comment_count>17</comment_count>
      <attachid>107066</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-12 11:37:03 -0700</bug_when>
    <thetext>Comment on attachment 107066
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:163
&gt; +#ifndef NDEBUG
&gt; +            ASSERT(m_evictedTextures[i].allocatingContext == context);
&gt; +#endif
&gt; +            if (m_evictedTextures[i].textureId)
&gt; +                GLC(context, context-&gt;deleteTexture(m_evictedTextures[i].textureId));

What about textures that have never been bound? Wouldn&apos;t they have a null context or am I missing something? If so, would it be better to just skip eviction entries for texture infos without an id/context and then just assert that the context and texture id are non-null here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465704</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 11:51:05 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 107066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107066&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:163
&gt; &gt; +#ifndef NDEBUG
&gt; &gt; +            ASSERT(m_evictedTextures[i].allocatingContext == context);
&gt; &gt; +#endif
&gt; &gt; +            if (m_evictedTextures[i].textureId)
&gt; &gt; +                GLC(context, context-&gt;deleteTexture(m_evictedTextures[i].textureId));
&gt; 
&gt; What about textures that have never been bound? Wouldn&apos;t they have a null context or am I missing something? If so, would it be better to just skip eviction entries for texture infos without an id/context and then just assert that the context and texture id are non-null here?

They&apos;ll have a null context and a zero ID.  I&apos;ll switch the order of the assertion and the if check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465709</commentid>
    <comment_count>19</comment_count>
      <attachid>107069</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 11:52:08 -0700</bug_when>
    <thetext>Created attachment 107069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465714</commentid>
    <comment_count>20</comment_count>
      <attachid>107069</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-12 11:59:35 -0700</bug_when>
    <thetext>Comment on attachment 107069
Patch

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

Ok, two more things and then I&apos;m all out of nits.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:164
&gt; +#if !USE(THREADED_COMPOSITING)
&gt; +    // Commit immediately
&gt; +    {
&gt; +        ScopedSetImplThread impl;
&gt; +        m_layerTreeHostImpl-&gt;beginCommit();
&gt; +        m_layerTreeHost-&gt;commitTo(m_layerTreeHostImpl.get());
&gt; +        m_layerTreeHostImpl-&gt;commitComplete();
&gt; +    }
&gt; +#else
&gt; +    // Single threaded only works with THREADED_COMPOSITING.
&gt; +    CRASH();
&gt; +#endif

Why does this need an #ifdef guard and a CRASH()? The choice of proxy is a runtime decision.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:242
&gt; +void CCThreadProxy::setNeedsCommitOnCCThread()
&gt; +{
&gt; +    TRACE_EVENT(&quot;CCThreadProxy::setNeedsCommitOnCCThread&quot;, this, 0);
&gt; +    ASSERT(isImplThread());
&gt; +    ASSERT(m_layerTreeHostImpl);
&gt; +    ASSERT_NOT_REACHED();
&gt; +}

Just to check my own understanding, this is really just &quot;// FIXME: not implemented yet&quot;, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465717</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 12:03:31 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 107069 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107069&amp;action=review
&gt; 
&gt; Ok, two more things and then I&apos;m all out of nits.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:164
&gt; &gt; +#if !USE(THREADED_COMPOSITING)
&gt; &gt; +    // Commit immediately
&gt; &gt; +    {
&gt; &gt; +        ScopedSetImplThread impl;
&gt; &gt; +        m_layerTreeHostImpl-&gt;beginCommit();
&gt; &gt; +        m_layerTreeHost-&gt;commitTo(m_layerTreeHostImpl.get());
&gt; &gt; +        m_layerTreeHostImpl-&gt;commitComplete();
&gt; &gt; +    }
&gt; &gt; +#else
&gt; &gt; +    // Single threaded only works with THREADED_COMPOSITING.
&gt; &gt; +    CRASH();
&gt; &gt; +#endif
&gt; 
&gt; Why does this need an #ifdef guard and a CRASH()? The choice of proxy is a runtime decision.

Oops, Nat told me this was wrong as well and I forgot to take care of it.  Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:242
&gt; &gt; +void CCThreadProxy::setNeedsCommitOnCCThread()
&gt; &gt; +{
&gt; &gt; +    TRACE_EVENT(&quot;CCThreadProxy::setNeedsCommitOnCCThread&quot;, this, 0);
&gt; &gt; +    ASSERT(isImplThread());
&gt; &gt; +    ASSERT(m_layerTreeHostImpl);
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt; &gt; +}
&gt; 
&gt; Just to check my own understanding, this is really just &quot;// FIXME: not implemented yet&quot;, right?

Indeed.  I&apos;ll write it that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465719</commentid>
    <comment_count>22</comment_count>
      <attachid>107072</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 12:05:33 -0700</bug_when>
    <thetext>Created attachment 107072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465720</commentid>
    <comment_count>23</comment_count>
      <attachid>107072</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-12 12:08:29 -0700</bug_when>
    <thetext>Comment on attachment 107072
Patch

Thanks! Unofficial LGTM from me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465726</commentid>
    <comment_count>24</comment_count>
      <attachid>107072</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-09-12 12:13:43 -0700</bug_when>
    <thetext>Comment on attachment 107072
Patch

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

After cursory look seems good to me; nice test case. rs=me

&gt; Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.h:55
&gt; +    virtual const char* layerTypeAsString() const { return &quot;CanvasLayer&quot;; }

Can we move the definition of virtuals into the .cpp file? Here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465742</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 12:51:15 -0700</bug_when>
    <thetext>That&apos;s definitely a good idea to do at this point, I&apos;ll do that before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465763</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 13:29:19 -0700</bug_when>
    <thetext>Committed r94975: &lt;http://trac.webkit.org/changeset/94975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466363</commentid>
    <comment_count>27</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-13 10:14:50 -0700</bug_when>
    <thetext>Was reverted due to browser_tests failure: http://trac.webkit.org/changeset/95014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466386</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-13 10:49:37 -0700</bug_when>
    <thetext>The problem on that test is that if context creation fails, the CCLayerTreeHost&apos;s m_contentsTextureManager will be null, but we try to call evictAndDeleteTextures() on it. This issue only shows up if this test page is run and GL initialization fails.  I can repro locally by passing --use-gl=egl on my linux box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466398</commentid>
    <comment_count>29</comment_count>
      <attachid>107196</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-13 11:00:21 -0700</bug_when>
    <thetext>Created attachment 107196
added null checks for CCLayerTreeHost::m_contentsTextureManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466860</commentid>
    <comment_count>30</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-13 23:29:50 -0700</bug_when>
    <thetext>Bawe. Added this type of thing to our test design doc :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467107</commentid>
    <comment_count>31</comment_count>
      <attachid>107196</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-14 10:23:11 -0700</bug_when>
    <thetext>Comment on attachment 107196
added null checks for CCLayerTreeHost::m_contentsTextureManager

That unofficially looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467129</commentid>
    <comment_count>32</comment_count>
      <attachid>107196</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-09-14 10:47:36 -0700</bug_when>
    <thetext>Comment on attachment 107196
added null checks for CCLayerTreeHost::m_contentsTextureManager

Looks OK. r/rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467147</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-14 11:01:38 -0700</bug_when>
    <thetext>Committed r95100: &lt;http://trac.webkit.org/changeset/95100&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106238</attachid>
            <date>2011-09-02 19:34:27 -0700</date>
            <delta_ts>2011-09-08 17:14:02 -0700</delta_ts>
            <desc>wip, crashes all the time not fully baked</desc>
            <filename>bug-67440-20110902193426.patch</filename>
            <type>text/plain</type>
            <size>22992</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ0NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NjRhNTM5YjYwNzZjYzI0
Zjg1YmFjYjhmNWE1YzFkZWNmMmYyMzQwLi5mNzU4MDJjYTAzYmI0OGY5N2QyZjQ4ZjdhYjM5ZmNk
ZTJkNjhiY2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDktMDIgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRv
IENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVw
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0
VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4
dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6c3RvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisKIDIwMTEtMDktMDIgIEFkcmllbm5l
IFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIE1vdmUgdXBk
YXRlTGF5ZXJzIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNDUxOWRlZDIzOWM2ZmQ2
ZjEzMTdmYmJlYzZiNTM4OTM5YTNmMWY5NS4uZmU1NDVkOTRiZTAxNWY3NzBhM2JmNDIyOTVjNTJk
N2ExNGJmYTIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC03
MCwyMCArNzAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLS8vIEZJWE1FOiBNYWtlIHRoaXMgbGltaXQgYWRqdXN0YWJsZSBhbmQgZ2l2ZSBpdCBhIHVz
ZWZ1bCB2YWx1ZS4KLQotLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBhbGxv
Y2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLXN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9yeUhp
Z2hMaW1pdEJ5dGVzID0gMTI4ICogMTAyNCAqIDEwMjQ7Ci0vLyBQcmVmZXJyZWQgdGV4dHVyZSBz
aXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotc3RhdGljIHNpemVfdCB0ZXh0
dXJlTWVtb3J5UmVjbGFpbUxpbWl0Qnl0ZXMgPSA2NCAqIDEwMjQgKiAxMDI0OwotLy8gVGhlIG1h
eGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVz
Lgotc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyA9IDMgKiAxMDI0ICog
MTAyNDsKLQotc2l6ZV90IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZU1lbW9yeVJlY2xh
aW1MaW1pdCgpCi17Ci0gICAgcmV0dXJuIHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlczsK
LX0KLQogbmFtZXNwYWNlIHsKIAogc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0
cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKQEAg
LTIyNCwxNCArMjEwLDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxs
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJS
T1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVz
LCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJv
cikpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVz
KCkKIHsKLSAgICAvLyBSZWR1Y2VzIHRleHR1cmUgbWVtb3J5IHVzYWdlIHRvIHRleHR1cmVNZW1v
cnlMb3dMaW1pdEJ5dGVzIGJ5IGRlbGV0aW5nIG5vbiByb290IGxheWVyCi0gICAgLy8gdGV4dHVy
ZXMuCi0gICAgbV9vd25lci0+bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCktPnByb3RlY3RWaXNp
YmxlVGlsZVRleHR1cmVzKCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzKTsKLSAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0gICAgbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKICAg
ICAvLyBFdmljdCBhbGwgUmVuZGVyU3VyZmFjZSB0ZXh0dXJlcy4KICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAgICBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKQEAgLTI2MCwxMyAr
MjQwLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAv
LyBGSVhNRTogTm8gbmVlZCB0byB3YWxrIHRoZSB0cmVlIGhlcmUuIFRoaXMgY291bGQgYmUgcGFz
c2VkIHZpYSBkcmF3LgogICAgIHJvb3RMYXllckltcGwoKS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vy
c2l2ZSh0aGlzKTsKIAotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1v
cnlMaW1pdEJ5dGVzKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcyAtIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdo
TGltaXRCeXRlcygpIC0gbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgZHJh
d0xheWVyc0ludGVybmFsKCk7CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJv
dGVjdEFsbFRleHR1cmVzKCk7Ci0KLSAgICBpZiAodGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5
dGVzID4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSkK
LSAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGlt
aXQodGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5dGVzIC0gbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CisgICAgaWYgKFRleHR1cmVNYW5hZ2VyOjpy
ZWNsYWltTGltaXRCeXRlcygpID4gbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcykKKyAg
ICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQo
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgLSBtX2NvbnRlbnRzVGV4dHVyZU1l
bW9yeVVzZUJ5dGVzKTsKICAgICBlbHNlCiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKQEAgLTYw
MCwxMCArNTc4LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFy
ZWRPYmplY3RzKCkKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1c2go
KSk7CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcywgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVy
ZVNpemUpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fY2Fw
YWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgbV9jb250ZW50
c1RleHR1cmVNYW5hZ2VyLT5zZXRBc3NvY2lhdGVkQ29udGV4dERlYnVnT25seShtX2NvbnRleHQu
Z2V0KCkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRBc3NvY2lhdGVk
Q29udGV4dERlYnVnT25seShtX2NvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC03ODYsMTUgKzc2MiwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xl
YW51cFNoYXJlZE9iamVjdHMoKQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAg
ICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIo
bV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKLSAgICAvLyBDbGVhciB0aWxlcnMgYmVmb3Jl
IHRoZSB0ZXh0dXJlIG1hbmFnZXIsIGFzIHRoZXkgaGF2ZSByZWZlcmVuY2VzIHRvIHRleHR1cmVz
LgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsK
LSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0g
ICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250
ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKKyAgICBB
U1NFUlQoIW1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMpOwogICAgIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwogICAgIG1fcmVu
ZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250ZXh0
LmdldCgpKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci5jbGVhcigpOwogfQog
CiBTdHJpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpsYXllclRyZWVBc1RleHQoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBmMDUyZWQ2OWI5OGY4MGM1M2U2
N2I1NGZiM2Q3YWY1YTY4NzIxNGZiLi43ODZkZjJiNDg2OTdiNGEwZTM0MzI3ODM0ODJmNzQ4MTY3
MTRjZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTMzLDcgKzEz
Myw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KTsKIAotICAgIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50
c1RleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LmdldCgpOyB9CiAgICAgVGV4dHVyZU1hbmFnZXIqIHJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLmdldCgpOyB9
CiAKICAgICBDQ0hlYWRzVXBEaXNwbGF5KiBoZWFkc1VwRGlzcGxheSgpIHsgcmV0dXJuIG1faGVh
ZHNVcERpc3BsYXkuZ2V0KCk7IH0KQEAgLTE0NCwxNCArMTQzLDEzIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNDb250ZXh0TG9zdCgpOwogCi0gICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKKyAg
ICB2b2lkIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIAogICAgIEdDM0RlbnVtIGJl
c3RUZXh0dXJlRm9ybWF0KCk7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllcklt
cGw+ID4gQ0NMYXllckxpc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB0aGUg
Y29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIGhhcyBtb3ZlZCB0byBDQ0xheWVyVHJlZUhvc3QuCi0g
ICAgc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCk7CisgICAgdm9pZCBz
ZXRDb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyhzaXplX3QgY29udGVudHNUZXh0dXJlTWVt
b3J5VXNlQnl0ZXMpIHsgbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyA9IGNvbnRlbnRz
VGV4dHVyZU1lbW9yeVVzZUJ5dGVzOyB9CiAKIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPik7CkBAIC0yMTEsNyArMjA5LDcgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9n
cmFtOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3ZpZGVvTGF5
ZXJZVVZQcm9ncmFtOwogCi0gICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXI7CisgICAgc2l6ZV90IG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXM7
CiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
cjsKIAogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5PiBtX2hlYWRzVXBEaXNwbGF5OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDhmYTA2NTFiOTg1ZTlmOWM0OWRmYjM1NTYwODE3YzYy
OTNhNmMzNzUuLjcwZDhkYTA0NTE1YzY2MWYzYjBjZDcxMDc0OTY2ZmI2MWYwYjY5NmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTQ0LDYgKzQ0LDE4IEBAIHN0YXRpYyBzaXplX3QgbWVt
b3J5VXNlQnl0ZXMoSW50U2l6ZSBzaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQogICAgIHJl
dHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICog
Ynl0ZXNQZXJDb21wb25lbnQ7CiB9CiAKK3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0
Qnl0ZXMoKSB7CisgICAgcmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0OworfQorCitzaXplX3QgVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgeworICAgIHJldHVybiA2NCAqIDEwMjQg
KiAxMDI0OworfQorCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKSB7Cisg
ICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKK30KKwogVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVN
YW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAg
OiBtX21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcykKICAgICAsIG1fbWVtb3J5VXNl
Qnl0ZXMoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4IDEyYWQyMDgwMGI2Y2RjNmEyY2U3YTA0
NGY5NmQwYWYwNTUyMDA5MGEuLjY1Y2RlZGRmMjVhY2QyYjdmM2IyOTc1MjU2NDc1NGU1MTJiMmRl
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNDUsNiArNDUsMTQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMs
IG1heFRleHR1cmVTaXplKSk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgbGlt
aXQgYWRqdXN0YWJsZSBhbmQgZ2l2ZSBpdCBhIHVzZWZ1bCB2YWx1ZS4KKyAgICAvLyBBYnNvbHV0
ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNl
LgorICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsKKyAgICAvLyBQcmVmZXJyZWQg
dGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgorICAgIHN0YXRp
YyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJl
IG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCisgICAgc3RhdGlj
IHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7CisKICAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMo
c2l6ZV90KTsKIAogICAgIFRleHR1cmVUb2tlbiBnZXRUb2tlbigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggZjEyNDk1YjY1NWYzOWM3ZjY5YTRmNzBjMjRkNzdmODEzMDgx
NGNiYi4uOGQyMjU3MGVkZmY1NGRiNGU1NzVkZTAyMzFhMjQwM2RkYTQ0NmRmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC04NSwxNCArODUsMjcgQEAgYm9vbCBDQ0xheWVy
VHJlZUhvc3Q6OmluaXRpYWxpemUoKQogICAgIC8vIFdlIGNoYW5nZWQgdGhlIHJvb3QgbGF5ZXIu
IFRlbGwgdGhlIHByb3h5IGEgY29tbWl0IGlzIG5lZWRlZC4KICAgICBtX3Byb3h5LT5zZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpOwogCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9w
cm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKIHsK
KyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QiLCB0aGlzLCAwKTsKICAgICBtX3Byb3h5
LT5zdG9wKCk7CiAgICAgbV9wcm94eS5jbGVhcigpOworICAgIG1fdXBkYXRlTGlzdC5jbGVhcigp
OworICAgIEFTU0VSVCghbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNl
Qnl0ZXMoKSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLmNsZWFyKCk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Cisg
ICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKKyAgICBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhjb250ZXh0KTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKQpAQCAtMTA4LDcgKzEyMSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21t
aXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogICAgIGhvc3RJbXBsLT5zZXRTb3Vy
Y2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKIAotICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0
dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+
cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7
CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9z
dEltcGwtPmNvbnRleHQoKSk7CiAKICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKG1fdXBk
YXRlTGlzdCwgaG9zdEltcGwtPmNvbnRleHQoKSk7CkBAIC0xMTcsNiArMTMwLDkgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQog
ICAgIGhvc3RJbXBsLT5zZXRWaXNpYmxlKG1fdmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFZp
ZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAorICAgIGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkt
PnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKwogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBp
ZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIoKSkKICAgICAgICAgaG9z
dEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJv
b3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwpAQCAt
MjI3LDcgKzI0MywxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3Qg
SW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBjbwogdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1fdmlzaWJsZSA9IHZpc2li
bGU7Ci0gICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBpZiAodmlz
aWJsZSkKKyAgICAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnByb3RlY3RWaXNpYmxl
VGlsZVRleHR1cmVzKCk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNl
TWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpKTsKKyAgICAgICAg
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgICAg
ICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCkBAIC0yMzcsNyArMjYw
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVt
VGltZXMpCiAKIFRleHR1cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVy
ZU1hbmFnZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1cmVN
YW5hZ2VyKCk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsKIH0K
IAogI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IDQ4ODk0ODQ0MWQ4NWMwOWQwYjQxNzc1ZmEyYWM2NWNlMzNjY2VhMDcuLmFjNjI1
MjQ0OWZmNzg4ZGM5YjMzYTk1MGFmYmU5Mzk4OGRmNWU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCkBAIC0xNTYsNiArMTU2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVM
YXllcnMoKTsKIAorICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0NvbnRl
eHQzRCopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9z
dENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsKIApAQCAtMTgxLDYgKzE4Myw3IEBAIHByaXZh
dGU6CiAKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRy
PE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7Cisg
ICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXI7CiAKICAg
ICBMYXllckxpc3QgbV91cGRhdGVMaXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCmluZGV4IDlkZTIwMjlkZWM3ZDIzM2VjZWVhYWNhNTY2NjczOTE5MzM0ZWQzZGEu
LmUwMzI4MGY0MWE0MjMyMDgzMzBjZTZlZGJkNzBjMzY1MjEwOGQ1MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5
ZXIpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQog
ewogICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYgIXZpc2libGUpCi0gICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVs
ZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogaW1wbEhhY2ssIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKaW5kZXggYWFl
NjY5NDRiMDUzN2RiNmIzMDU3ZjViMTFkYzVlYjBlZTYxM2Q5MC4uNDI1OWE2ODgzOTM1N2RlNTYw
MTI5NDE0NTFkZWIxYmEzYzBhMzg1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApAQCAtNjIsNiArNjIsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdCA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNDb21taXQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpID0gMDsKIApA
QCAtODAsOSArODEsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUgcmVu
ZGVyX3dpZGdldCBzdGlsbCBkb2VzIHNjaGVkdWxpbmcgZm9yIENDTGF5ZXJUcmVlSG9zdE1haW5U
aHJlYWRJCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpID0gMDsKIAot
ICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNl
cyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciog
Y29udGVudHNUZXh0dXJlTWFuYWdlcigpID0gMDsKLQogcHJvdGVjdGVkOgogICAgIENDUHJveHko
KSB7IH0KICAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNjBiZTc1NjExOWJkY2ExZGQ4Y2IwMWU0
ZDg3MzcyN2FiY2UzNDk3YS4uMDhkZmI5ODAzYzNjOGZiY2QzOGJkZjRkYjMwMzNhMDdlODQwNDk2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE0Nyw2ICsx
NDcsMjQgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQo
aW50IG51bVRpbWVzKQogICAgIG1fdGltZXNSZWNyZWF0ZVNob3VsZEZhaWwgPSBudW1UaW1lcyAt
IDE7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICAvLyBDb21taXQgaW1tZWRpYXRlbHkKKyAgICB7CisgICAgICAgIFNjb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQo
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBs
LmdldCgpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsK
KyAgICB9CisjZWxzZQorICAgIC8vIFNpbmdsZSB0aHJlYWRlZCBvbmx5IHdvcmtzIHdpdGggVEhS
RUFERURfQ09NUE9TSVRJTkcuCisgICAgQ1JBU0goKTsKKyNlbmRpZgorCit9CisKIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzEsMTYgKzE4OSwxMiBAQCB2b2lkIENDU2luZ2xlVGhy
ZWFkUHJveHk6OnN0b3AoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgewogICAg
ICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOwog
ICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgfQogICAgIG1fbGF5ZXJU
cmVlSG9zdCA9IDA7CiB9CiAKLVRleHR1cmVNYW5hZ2VyKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpj
b250ZW50c1RleHR1cmVNYW5hZ2VyKCkKLXsKLSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Ci19Ci0KICNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1
bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykK
IHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDc2NWI4NTlmOTUxNTAyNmU5ZDc4NzUy
MWQ0OTlkNTFhOTgwZjhmOTcuLjdiMjNmOTZlMTg0YTVjMWUyN2MyYTNlMjU3YmU5ZTI4OWE4MTAz
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTQ3LDE0ICs0Nywx
MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKEND
TGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAg
dmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIC8v
IFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBM
YXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpOwotCiAgICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9ucy4KICNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRl
bHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggMWE4ODM4NGZlYTJiYWY1YjQ2
MzIyZjA0YmU4YWJiYzk5MTVhOTk0OS4uMmFlZjE4Yzk3MWNlNmIyNzUyOGE0OGRjZDc0ZGNlYmVi
YTliNzE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTEzNCw2ICsxMzQsMTcg
QEAgdm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVz
KQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICht
X2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGlu
ZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKSk7Cit9CisKIHZvaWQg
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CkBAIC0xNzIsMTIgKzE4Myw2IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
c3RvcCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAotVGV4dHVyZU1hbmFnZXIqIEND
VGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2lu
RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKQEAgLTIyOSw2
ICsyMzQsMTQgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKIH0KIAordm9pZCBDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBs
KTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5Ojpz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKQEAgLTI2Niw2ICsyNzksNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RD
bG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRS
QUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIs
IHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVI
b3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQo
KSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIGNvbXBsZXRpb24tPnNp
Z25hbCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDI0ZTFmZTEzZTcxOTc0NzY0
NmNjZjU1MmIzOGZhOGIzYjNiYzA1NDYuLjJiZWIyZWFlYjJlNWIyOWZjNWM2ZGRhMjc5MDM4ZjY5
ZWI3ZmNiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTQ4LDE0ICs0OCwxMiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJU
cmVlSG9zdCogb3duZXJIYWNrKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVh
bCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBv
cmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJl
bmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0
dXJlTWFuYWdlcigpOwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NM
YXllclRyZWVIb3N0Kik7CiAKQEAgLTY4LDYgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdMYXllcnNPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxldGlv
bkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyopOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKICAgICB2b2lkIHNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpOwogICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106820</attachid>
            <date>2011-09-08 17:14:05 -0700</date>
            <delta_ts>2011-09-09 15:21:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67440-20110908171404.patch</filename>
            <type>text/plain</type>
            <size>56293</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ3MzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZDI0N2QzYTM3YTE5YTlk
ZjRmODNiNjI5ZGE0ODNkMDM0ODdlYmRhLi40YjllYzZhZDk2NGIxN2ZlYjEwMWY1YzE2OTFjMzE2
NDA1ZGE2NzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDktMDcgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRv
IENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIG1vdmVzIHRoZSBjb250ZW50cyBUZXh0dXJlTWFuYWdlciBvdmVyIHRvIHRo
ZSBDQ0xheWVyVHJlZUhvc3QsIHdoZXJlIGl0IGJlbG9uZ3MsIGFuZCBhZGRzIGluIGEgY29tbWl0
IHBhdGgKKyAgICAgICAgdG8gbWFrZSBzdXJlIHRoYXQgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgZXZl
biBpZiB0aGUgcGFnZSBpcyBub3QgdmlzaWJsZS4gIFRoaXMgbW92ZSBhbHNvIHJlbW92ZWQgdGhl
IG5lZWQgZm9yCisgICAgICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSdzIENDTGF5ZXJUcmVlSG9z
dCBwb2ludGVyLCBzbyBJIHJlbW92ZWQgdGhhdCBhcyB3ZWxsLiAgVGhhdCBtZWFudCBtb3Zpbmcg
dGhlCisgICAgICAgIGxheWVyVHJlZUFzVGV4dCgpIGxvZ2ljIG92ZXIgdG8gdGhlIENDTGF5ZXJJ
bXBsIHNpZGUsIHdoaWNoIGlzIHdoZXJlIGl0IHJlYWxseSBiZWxvbmdlZCBhbnl3YXkuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZy8gdGVzdHMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyU3Vy
ZmFjZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRDb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgorCiAyMDEx
LTA5LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
ZCBoeXBoZW5hdGlvbiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgZm9yIGFuIHVzdXBwb3J0ZWQg
YnVpbGQgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAppbmRleCBl
YTI2ZGZlMTg3ZTYyYzU3NTU4NTdhZjExN2FjMzU3NDNlNWNiZDVkLi40YzJlNDQwODVmNzY0NDNh
YjEyMTgwZDc3NDA5YzQ4YjVmZDc0YWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5o
CkBAIC01Miw4ICs1Miw2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52
YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCi0gICAgdmly
dHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDYW52
YXNMYXllciI7IH0KLQogICAgIGJvb2wgbV9oYXNBbHBoYTsKICAgICBib29sIG1fcHJlbXVsdGlw
bGllZEFscGhhOwogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKaW5kZXggYmFjNDFmOWM4OGE0ZjA5MTMxYTE0YjY5NGE0ZmFiMDQ5MmQ5ZjU0
ZS4uOTQwOWFlMTJlOWYzMjY3NTIzNTBhZTYwZjRkMzBhZjk5MmZiYzkxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC01NCw4ICs1NCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBjbGVh
bnVwUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhv
c3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZDY5NzkxMzFiNTg4ZDUyMjgz
MzlhYjUzZWFmMGIwM2I5ODEzN2ZkZS4uNGFmZTA1ZDE1MWY4YjM2MzYyOTYzMDQzMzEwYTIwOTQ5
NDE4Mjk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTU3LDkgKzU3LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwogCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICJJbWFnZUxheWVyIjsgfQotCiBwcml2YXRlOgogICAgIEltYWdlTGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApp
bmRleCBiY2Q0ZDc3ODk5YjJiOWIzNWU3YmMzM2RiZjIwNmNmODhhYjFhOTY2Li5hMGQzNDY1NmU4
YzE1ZDUyZDA1ZTQwMmQyOTFmODU0MDUyMzhmNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApA
QCAtMzc2LDQ4ICszNzYsNiBAQCB2b2lkIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IFRyYW5zZm9ybQogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywg
NiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKLVN0cmluZyBM
YXllckNocm9taXVtOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAotewotICAgIFRleHRTdHJlYW0g
dHM7Ci0gICAgZHVtcExheWVyKHRzLCAwKTsKLSAgICByZXR1cm4gdHMucmVsZWFzZSgpOwotfQot
Ci1zdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKLXsK
LSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKLSAgICAgICAgdHMgPDwgIiAg
IjsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5ZXIoVGV4dFN0cmVhbSYgdHMsIGlu
dCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMg
PDwgbGF5ZXJUeXBlQXNTdHJpbmcoKSA8PCAiKCIgPDwgbV9uYW1lIDw8ICIpXG4iOwotICAgIGR1
bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCsyKTsKLSAgICBpZiAobV9yZXBsaWNhTGF5ZXIp
IHsKLSAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsyKTsKLSAgICAgICAgdHMgPDwgIlJl
cGxpY2E6XG4iOwotICAgICAgICBtX3JlcGxpY2FMYXllci0+ZHVtcExheWVyKHRzLCBpbmRlbnQr
Myk7Ci0gICAgfQotICAgIGlmIChtX21hc2tMYXllcikgewotICAgICAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50KzIpOwotICAgICAgICB0cyA8PCAiTWFzazpcbiI7Ci0gICAgICAgIG1fbWFza0xh
eWVyLT5kdW1wTGF5ZXIodHMsIGluZGVudCszKTsKLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuW2ldLT5k
dW1wTGF5ZXIodHMsIGluZGVudCsxKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIHdy
aXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJpZDogIiA8PCBpZCgpIDw8ICIgZHJh
d3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgpIDw8ICIgYm91bmRzICIgPDwgbV9ib3VuZHMu
d2lkdGgoKSA8PCAieCIgPDwgbV9ib3VuZHMuaGVpZ2h0KCkgPDwgIiB1c2VzTGF5ZXJTY2lzc29y
OiAiIDw8IHVzZXNMYXllclNjaXNzb3IoKQotICAgICAgICA8PCAiIHNjaXNzb3JSZWN0OiAoIiA8
PCBtX3NjaXNzb3JSZWN0LngoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QueSgpIDw8ICIsICIg
PDwgbV9zY2lzc29yUmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC5oZWlnaHQo
KSA8PCAiKSIKLSAgICAgICAgPDwgIiB2aXNpYmxlTGF5ZXJSZWN0OiAoIiA8PCBtX3Zpc2libGVM
YXllclJlY3QueCgpIDw8ICIsICIgPDwgbV92aXNpYmxlTGF5ZXJSZWN0LnkoKSA8PCAiLCAiIDw8
IG1fdmlzaWJsZUxheWVyUmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV92aXNpYmxlTGF5ZXJSZWN0
LmhlaWdodCgpIDw8ICIpIgotICAgICAgICA8PCAiXG4iOwotCi19Ci0KIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKICAgICByZXR1
cm4gQ0NMYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4
IGI2YWZjNmZkNGYxZmU3YzJkMzY5ZWNkNjhjY2U3YWJmNDUyY2JhYjQuLjljNjBhMTcyMjY4N2E1
OGI1NzU1MDVkMDE2MTljMDM4ODYyODVlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE3Miw3
ICsxNzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYp
OwogCiAgICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoKTsKLSAgICBTdHJpbmcgbGF5ZXJUcmVlQXNU
ZXh0KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0KTsKIApAQCAtMjIw
LDExICsyMTksNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZs
b2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHZvaWQgZHVtcExheWVy
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiTGF5ZXJDaHJvbWl1bSI7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudCkgY29uc3Q7Ci0KICAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgYm9vbCBtX2Nv
bnRlbnRzRGlydHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4
IDExNDY1ZGMzMTgzNzI4ZTZlYTJlMWYxZDBkMDMyNDMwNzEzOGQ3ODAuLjNmZjYxZmRiMzFkZmNj
ZjgxN2JjZGFlMDIyM2ExODM2YzEzYjZjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtNzAsMjAgKzcwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogTWFrZSB0aGlzIGxpbWl0IGFkanVzdGFibGUg
YW5kIGdpdmUgaXQgYSB1c2VmdWwgdmFsdWUuCi0KLS8vIEFic29sdXRlIG1heGltdW0gbGltaXQg
Zm9yIHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCi1zdGF0aWMgc2l6ZV90
IHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcyA9IDEyOCAqIDEwMjQgKiAxMDI0OwotLy8gUHJl
ZmVycmVkIHRleHR1cmUgc2l6ZSBsaW1pdC4gQ2FuIGJlIGV4Y2VlZGVkIGlmIG5lZWRlZC4KLXN0
YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5dGVzID0gNjQgKiAxMDI0ICog
MTAyNDsKLS8vIFRoZSBtYXhpbXVtIHRleHR1cmUgbWVtb3J5IHVzYWdlIHdoZW4gYXNrZWQgdG8g
cmVsZWFzZSB0ZXh0dXJlcy4KLXN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9yeUxvd0xpbWl0Qnl0
ZXMgPSAzICogMTAyNCAqIDEwMjQ7Ci0KLXNpemVfdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRl
eHR1cmVNZW1vcnlSZWNsYWltTGltaXQoKQotewotICAgIHJldHVybiB0ZXh0dXJlTWVtb3J5UmVj
bGFpbUxpbWl0Qnl0ZXM7Ci19Ci0KIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9t
LCBmbG9hdCB0b3ApCkBAIC0xNDMsMjQgKzEyOSwyMiBAQCBib29sIGNvbnRleHRTdXBwb3J0c0Fj
Y2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAKIH0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwgQ0NMYXll
clRyZWVIb3N0SW1wbCogb3duZXJJbXBsLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVyLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewogI2lmIFVTRShTS0lBKQogICAgIGlmIChvd25l
ci0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlUGFpbnRpbmcgJiYgIWNvbnRleHRTdXBwb3J0c0FjY2Vs
ZXJhdGVkUGFpbnRpbmcoY29udGV4dC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlm
Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJl
ZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBvd25lckltcGwsIGNvbnRleHQpKSk7
CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJl
ZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBjb250ZXh0KSkpOwogICAgIGlmICgh
bGF5ZXJSZW5kZXJlci0+aW5pdGlhbGl6ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJl
dHVybiBsYXllclJlbmRlcmVyLnJlbGVhc2UoKTsKIH0KIAotTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiBvd25lciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGwq
IG93bmVySW1wbCwKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkK
ICAgICA6IG1fb3duZXIob3duZXIpCi0gICAgLCBtX293bmVySW1wbChvd25lckltcGwpCiAgICAg
LCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVy
SWQoMCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQpAQCAtMjA5LDggKzE5Myw4IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJl
Y3Vyc2l2ZShDQ0xheWVySW1wCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSgp
CiB7Ci0gICAgaWYgKHJvb3RMYXllckltcGwoKSkKLSAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNl
c09uQ0NMYXllckltcGxSZWN1cnNpdmUocm9vdExheWVySW1wbCgpKTsKKyAgICBpZiAocm9vdExh
eWVyKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZl
KHJvb3RMYXllcigpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y29udGV4dCgpCkBAIC0yMjUsMTggKzIwOSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hh
cioKICAgICAgICAgTE9HX0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGlu
ZSAlZFxuXHRjb21tYW5kOiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIHN0
YXRpY19jYXN0PGludD4oZXJyb3IpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbGVhc2VUZXh0dXJlcygpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJl
bmRlclN1cmZhY2VUZXh0dXJlcygpCiB7Ci0gICAgLy8gUmVkdWNlcyB0ZXh0dXJlIG1lbW9yeSB1
c2FnZSB0byB0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyBieSBkZWxldGluZyBub24gcm9vdCBs
YXllcgotICAgIC8vIHRleHR1cmVzLgotICAgIG1fb3duZXItPm5vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdCgpLT5wcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRl
cyk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygp
OwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1f
Y29udGV4dC5nZXQoKSk7Ci0gICAgLy8gRXZpY3QgYWxsIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMu
Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGlt
aXQoMCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRU
ZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQpAQCAtMjU2LDE4ICsy
MzEsMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIC8v
IFJlbmRlcldpZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVu
dFRpbWUoKSk7CiAKLSAgICBpZiAoIXJvb3RMYXllckltcGwoKSkKKyAgICBpZiAoIXJvb3RMYXll
cigpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IE5vIG5lZWQgdG8gd2FsayB0aGUg
dHJlZSBoZXJlLiBUaGlzIGNvdWxkIGJlIHBhc3NlZCB2aWEgZHJhdy4KLSAgICByb290TGF5ZXJJ
bXBsKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CisgICAgcm9vdExheWVyKCkt
PnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CiAKLSAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0
Qnl0ZXMgLSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygp
KTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRl
cyhUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIG1fY29udGVudHNUZXh0dXJlTWVt
b3J5VXNlQnl0ZXMpOwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCi0gICAgbV9jb250ZW50
c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotCi0gICAgaWYgKHRleHR1
cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyA+IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3Vy
cmVudE1lbW9yeVVzZUJ5dGVzKCkpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyAt
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAg
IGlmIChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSA+IG1fY29udGVudHNUZXh0
dXJlTWVtb3J5VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
IC0gbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQogICAgICAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1f
Y29udGV4dC5nZXQoKSk7CkBAIC0yODIsNyArMjU1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNF
X0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKLSAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKKyAgICBDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC00
NDUsNyArNDE4LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxl
KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogTWFuYWdlZFRleHR1cmUq
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAg
ICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVySW1wbCgp
ID8gcm9vdExheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDog
MDsKKyAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVy
KCkgPyByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7
CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRv
RGlzcGxheSgpCkBAIC02MDEsMTIgKzU3NCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fY2FwYWJp
bGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkobV9jb250
ZXh0LmdldCgpKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0QXNzb2Np
YXRlZENvbnRleHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgpKTsKLSNlbmRpZgorICAgIG1fcmVu
ZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MTUsMjkgKzc4MywyMiBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogICAgIGlmIChtX29mZnNj
cmVlbkZyYW1lYnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKLSAgICAv
LyBDbGVhciB0aWxlcnMgYmVmb3JlIHRoZSB0ZXh0dXJlIG1hbmFnZXIsIGFzIHRoZXkgaGF2ZSBy
ZWZlcmVuY2VzIHRvIHRleHR1cmVzLgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5w
cm90ZWN0QWxsVGV4dHVyZXMoKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVj
ZU1lbW9yeVRvTGltaXQoMCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVF
dmljdGVkVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXIuY2xlYXIoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+dW5wcm90
ZWN0QWxsVGV4dHVyZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVk
dWNlTWVtb3J5VG9MaW1pdCgwKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1fY29udGVudHNUZXh0dXJl
TWVtb3J5VXNlQnl0ZXMpOworICAgIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIH0K
IAogU3RyaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QK
IHsKICAgICBUZXh0U3RyZWFtIHRzOwogICAgIGlmIChyb290TGF5ZXIoKSkgewotICAgICAgICB0
cyA8PCByb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5sYXllclRyZWVBc1RleHQoKTsKKyAg
ICAgICAgdHMgPDwgcm9vdExheWVyKCktPmxheWVyVHJlZUFzVGV4dCgpOwogICAgICAgICB0cyA8
PCAiUmVuZGVyU3VyZmFjZXM6XG4iOwotICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEs
IHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBkdW1wUmVuZGVyU3VyZmFj
ZXModHMsIDEsIHJvb3RMYXllcigpKTsKICAgICB9CiAgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsK
IH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJm
YWNlKCktPmR1bXBTdXJmYWNlKHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAppbmRleCAwZjEwMzY2ZjJlOWYzZGVlZTcxMjc0ZGI2ZGQ2YTM3NGI3ZWM1YTcwLi43
ZjQ3YTUwMWNkM2VjYzIxYzM3ZWFlM2M3ZjlhODNkZDA3ZWFlNWFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBOb25Db21wb3NpdGVk
Q29udGVudEhvc3Q7CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVk
IHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBw
dWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRl
KENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAK
ICAgICAvLyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJl
ckNocm9taXVtIHRvIGRlc3RydWN0CiAgICAgdm9pZCBjbG9zZSgpOwpAQCAtODQsMTkgKzg0LDEz
IEBAIHB1YmxpYzoKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0
dXJuIG1fb3duZXItPnNldHRpbmdzKCk7IH0KICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQog
Ci0gICAgQ0NMYXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KLSAgICBj
b25zdCBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQot
Ci0gICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9vd25lci0+cm9vdExh
eWVyKCk7IH0KLSAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQotCi0gICAgQ0NMYXllckltcGwqIHJvb3RMYXll
ckltcGwoKSB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0KLSAgICBjb25zdCBD
Q0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJJbXBsLT5y
b290TGF5ZXIoKTsgfQorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCiAgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQoKTsKICAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0
IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKLSAgICBjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVySW1wbC0+dmlld3BvcnRTaXplKCk7
IH0KKyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVyLT52
aWV3cG9ydFNpemUoKTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3Bv
cnRTaXplKCkud2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZp
ZXdwb3J0U2l6ZSgpLmhlaWdodCgpOyB9CiAKQEAgLTEzNyw3ICsxMzEsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVj
dCYgcmVjdCk7CiAKLSAgICBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogICAgIFRl
eHR1cmVNYW5hZ2VyKiByZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogCiAgICAgQ0NIZWFkc1Vw
RGlzcGxheSogaGVhZHNVcERpc3BsYXkoKSB7IHJldHVybiBtX2hlYWRzVXBEaXNwbGF5LmdldCgp
OyB9CkBAIC0xNDgsMTcgKzE0MSwxNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29udGV4dExv
c3QoKTsKIAotICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7CisgICAgdm9pZCByZWxlYXNlUmVu
ZGVyU3VyZmFjZVRleHR1cmVzKCk7CiAKICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgp
OwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0
OwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gdGhlIGNvbnRlbnRzIHRleHR1cmUg
bWFuYWdlciBoYXMgbW92ZWQgdG8gQ0NMYXllclRyZWVIb3N0LgotICAgIHN0YXRpYyBzaXplX3Qg
dGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdCgpOworICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJl
TWVtb3J5VXNlQnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKSB7IG1f
Y29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMgPSBjb250ZW50c1RleHR1cmVNZW1vcnlVc2VC
eXRlczsgfQogCiBwcml2YXRlOgotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJl
ZUhvc3QqLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4pOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAg
ICAgdm9pZCBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKQEAgLTE3NywxNyArMTY5LDE0IEBAIHByaXZh
dGU6CiAKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVy
SW1wbD4mLCBjb25zdCBSZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5k
ZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSop
IGNvbnN0OworICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50LCBjb25zdCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgYm9vbCBpbml0aWFsaXplU2hh
cmVkT2JqZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAogICAgIHZv
aWQgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwq
KTsKIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCi0gICAgQ0NM
YXllclRyZWVIb3N0KiBtX293bmVyOwotCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25l
ckltcGw7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lcjsKIAogICAgIExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKQEAgLTIxNyw3ICsyMDYsNyBAQCBw
cml2YXRlOgogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4gbV92aWRl
b0xheWVyUkdCQVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllVVlByb2dy
YW0+IG1fdmlkZW9MYXllcllVVlByb2dyYW07CiAKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlcjsKKyAgICBzaXplX3QgbV9jb250ZW50c1RleHR1cmVN
ZW1vcnlVc2VCeXRlczsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyOwogCiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+IG1faGVhZHNV
cERpc3BsYXk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKaW5kZXggNzkwYzcwZjAyN2FjYmExMzgx
NTM0ZmVlY2FhN2Q3NDdiMTM3ODUwYi4uZjFmODE4YjdlYzdlYTUwNmRkNTRhY2NkMjA5OWQ1NTNh
YzdlZWRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcApAQCAtODMsNyArODMsNiBAQCB2b2lk
IE1hbmFnZWRUZXh0dXJlOjp1bnJlc2VydmUoKQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVy
ZU1hbmFnZXItPmhhc1RleHR1cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1f
dGV4dHVyZU1hbmFnZXItPmFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICgh
bV90ZXh0dXJlSWQpCiAgICAgICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxs
b2NhdGVUZXh0dXJlKGNvbnRleHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CkBAIC05Miw3ICs5
MSw2IEBAIHZvaWQgTWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXIt
Pmhhc1RleHR1cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1h
bmFnZXItPmFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJl
SWQpCiAgICAgICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0
dXJlKGNvbnRleHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQs
IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg1MmRjMmVhNmZkMGQ3ZDg0
MTU0Yjk0OTI0ODI3NDhiN2FkNmEyOGIuLmQxY2ZjODAyOWViMjFmNGYyNmMyYjVjZTdlYjY4ZTA2
NDNjMTkzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKQEAgLTQ2LDkgKzQ2LDYg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllcklt
cGwqKTsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgUGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KTsKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwCmluZGV4IGE1ZmQ3NGIxOTAyMGZmNDIxZDQ2NTdmN2VjZGU5N2MzZmIyYzE4ZTku
LjczZjNhYjI3YTlhNTkxYzJlNjBiNWQ1ZTI3ZTliYTIxOGRmMWYzMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcApAQCAtNTksMjcgKzU5LDUgQEAgRmxvYXRSZWN0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0
dXJuIGRyYXdhYmxlQ29udGVudFJlY3Q7CiB9CiAKLVN0cmluZyBSZW5kZXJTdXJmYWNlQ2hyb21p
dW06Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3Vy
ZmFjZShpZD0lZCxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVy
LT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRl
eHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGlu
ZGVudDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17
Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgbmFtZSgpIDw8ICJcbiI7
Ci0KLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzEpOwotICAgIHRzIDw8ICJjb250ZW50UmVj
dDogKCIgPDwgbV9jb250ZW50UmVjdC54KCkgPDwgIiwgIiA8PCBtX2NvbnRlbnRSZWN0LnkoKSA8
PCAiLCAiIDw8IG1fY29udGVudFJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3Qu
aGVpZ2h0KCkKLSAgICAgICAgPDwgIiBzY2lzc29yUmVjdDogKCIgPDwgbV9zY2lzc29yUmVjdC54
KCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JSZWN0LnkoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3Qu
d2lkdGgoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QuaGVpZ2h0KCkgPDwgIikiCi0gICAgICAg
IDw8ICJcbiI7Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDRhMDYyYzU2NDBmZDQ0OTE4
ZDI5YjkzYzY2OWI5Mjc5NDY4NDMzNzEuLjhjMmZiNjk4YTQ1M2ZlZDliMTdkM2FjMWZhZTM1YmYw
N2EwNmQ5OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC01NCw5ICs1
NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2b2lkIGRy
YXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwogCi0gICAgU3RyaW5nIG5hbWUo
KSBjb25zdDsKLSAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBj
b25zdDsKLQogICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVy
U3VyZmFjZSBpbmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCiAgICAgRmxvYXRSZWN0IGRyYXdhYmxl
Q29udGVudFJlY3QoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDhmYTA2
NTFiOTg1ZTlmOWM0OWRmYjM1NTYwODE3YzYyOTNhNmMzNzUuLjhkZWNkY2EyYjQ1NTdjNzc4OWUw
OTY5YzQ4YjI5MDY2ZWM5ZTY1MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTQ0LDYg
KzQ0LDIxIEBAIHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoSW50U2l6ZSBzaXplLCBHQzNE
ZW51bSB0ZXh0dXJlRm9ybWF0KQogICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdo
dCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CiB9CiAKK3NpemVf
dCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQoreworICAgIHJldHVybiAxMjggKiAx
MDI0ICogMTAyNDsKK30KKworc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpCit7CisgICAgcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7Cit9CisKK3NpemVfdCBUZXh0dXJl
TWFuYWdlcjo6bG93TGltaXRCeXRlcygpCit7CisgICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsK
K30KKwogVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5
dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5
TGltaXRCeXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKQEAgLTEzOSw3ICsxNTQsNiBA
QCB2b2lkIFRleHR1cmVNYW5hZ2VyOjphZGRUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4
dHVyZUluZm8gaW5mbykKIAogdm9pZCBUZXh0dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1
cmVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewotICAgIEFTU0VSVChjb250ZXh0ID09
IG1fYXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9ldmljdGVkVGV4dHVyZUlkcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9ldmlj
dGVkVGV4dHVyZUlkc1tpXSkKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kZWxl
dGVUZXh0dXJlKG1fZXZpY3RlZFRleHR1cmVJZHNbaV0pKTsKQEAgLTE0Nyw2ICsxNjEsMTMgQEAg
dm9pZCBUZXh0dXJlTWFuYWdlcjo6ZGVsZXRlRXZpY3RlZFRleHR1cmVzKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQogICAgIG1fZXZpY3RlZFRleHR1cmVJZHMuY2xlYXIoKTsKIH0KIAordm9p
ZCBUZXh0dXJlTWFuYWdlcjo6ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKK3sKKyAgICB1bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgIHJlZHVj
ZU1lbW9yeVRvTGltaXQoMCk7CisgICAgZGVsZXRlRXZpY3RlZFRleHR1cmVzKGNvbnRleHQpOwor
fQorCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tl
biwgVGV4dHVyZUluZm8gaW5mbykKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTFJVU2V0LmNvbnRh
aW5zKHRva2VuKSk7CkBAIC0xNjAsNyArMTgxLDYgQEAgdm9pZCBUZXh0dXJlTWFuYWdlcjo6cmVt
b3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1cmVJbmZvIGluZm8pCiAKIHVuc2ln
bmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIFRleHR1cmVUb2tlbiB0b2tlbikKIHsKLSAgICBBU1NFUlQoY29udGV4dCA9PSBtX2Fz
c29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KTsKICAgICBUZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9
IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgQVNTRVJUKGl0ICE9IG1fdGV4dHVyZXMuZW5k
KCkpOwogICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgpLT5zZWNvbmQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuaAppbmRleCAxMmFkMjA4MDBiNmNkYzZhMmNlN2EwNDRmOTZkMGFmMDU1MjAwOTBh
Li45YjdlZmJlNmEwNDI0NjlhOTdmMjBhMTdhYjAwZDk0NWQwOWI2NDQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmgKQEAgLTQ1LDYgKzQ1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkp
OwogICAgIH0KIAorICAgIC8vIEFic29sdXRlIG1heGltdW0gbGltaXQgZm9yIHRleHR1cmUgYWxs
b2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCisgICAgc3RhdGljIHNpemVfdCBoaWdoTGltaXRC
eXRlcygpOworICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNpemUgbGltaXQuIENhbiBiZSBleGNl
ZWRlZCBpZiBuZWVkZWQuCisgICAgc3RhdGljIHNpemVfdCByZWNsYWltTGltaXRCeXRlcygpOwor
ICAgIC8vIFRoZSBtYXhpbXVtIHRleHR1cmUgbWVtb3J5IHVzYWdlIHdoZW4gYXNrZWQgdG8gcmVs
ZWFzZSB0ZXh0dXJlcy4KKyAgICBzdGF0aWMgc2l6ZV90IGxvd0xpbWl0Qnl0ZXMoKTsKKwogICAg
IHZvaWQgc2V0TWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOwogCiAgICAgVGV4dHVyZVRva2VuIGdl
dFRva2VuKCk7CkBAIC02MSwxNCArNjgsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFsbG9j
YXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVUb2tlbik7CiAgICAgdm9pZCBk
ZWxldGVFdmljdGVkVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAorICAgIHZvaWQgZXZp
Y3RBbmREZWxldGVBbGxUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOworCiAgICAgdm9pZCBy
ZWR1Y2VNZW1vcnlUb0xpbWl0KHNpemVfdCk7CiAgICAgc2l6ZV90IGN1cnJlbnRNZW1vcnlVc2VC
eXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5VXNlQnl0ZXM7IH0KIAotI2lmbmRlZiBOREVC
VUcKLSAgICB2b2lkIHNldEFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KSB7IG1fYXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkgPSBjb250ZXh0OyB9
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkgY29u
c3QgeyByZXR1cm4gbV9hc3NvY2lhdGVkQ29udGV4dERlYnVnT25seTsgfQotI2VuZGlmCi0KIHBy
aXZhdGU6CiAgICAgVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBt
YXhUZXh0dXJlU2l6ZSk7CiAKQEAgLTkxLDEwICs5NSw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1f
bWF4VGV4dHVyZVNpemU7CiAgICAgVGV4dHVyZVRva2VuIG1fbmV4dFRva2VuOwogCi0jaWZuZGVm
IE5ERUJVRwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdP
bmx5OwotI2VuZGlmCi0KICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZXZpY3RlZFRleHR1cmVJZHM7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBjOTFkYmE3YzQzOTEy
YWNkZTNmN2UwMDE1ZTVhNGIwMGM5ZDM3ZTlhLi44YjU2NjlkZDVlZThiNmU3YWIxNzZhMWQwZTY2
NWJjMDZjZjM1ZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI2NSwx
OSArMjY1LDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NM
YXllckltcGwqIGxheWVyKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4
dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5k
ZW50OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19Ci0KLXZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25z
dAotewotICAgIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7
Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgInNraXBzRHJhdzogIiA8
PCAoIW1fdGlsZXIgfHwgbV9za2lwc0RyYXcpIDw8ICJcbiI7Ci19Ci0KIFRleHR1cmVNYW5hZ2Vy
KiBUaWxlZExheWVyQ2hyb21pdW06OnRleHR1cmVNYW5hZ2VyKCkgY29uc3QKIHsKICAgICBpZiAo
IWxheWVyVHJlZUhvc3QoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggNTg1Njkx
ODE0NDA2OTNmNjBmNmRkNmIyOTljYmI5ZGM4OWQxYTQ1Yy4uNjkyNmUzZDUzYzA4NzQyMGQ0YWYx
OTNlZjY1ZDA3ODE1MzQ0Yzg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTc0
LDggKzc0LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVt
cExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqKTsKIAogICAgIHZv
aWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAppbmRl
eCA3YjE1NmZiMTQwYWIwMWQzZDVkOWYxN2Y0ZTM0YmU3M2YyNzNiZTI0Li45Zjc5MDMyNTZmYmU4
ODZhYzRlZTZjOWRmNmRhYjM2NjBjZjNlNTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
aApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYW51cFJlc291cmNlcygpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBl
QXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAogcHJpdmF0ZToKICAg
ICBzdHJ1Y3QgVGV4dHVyZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg2MmZh
ODhmM2ZiMDg4ZTk2ODg5MjQ4ZjgzMjRiYzQ2MjNmMDViMTEuLjIxNTUwZGZjMTQxM2YwYjQ3NmQ1
MGIwNjMyYWE4ZjUyNzliYzFjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC01
Nyw5ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIldlYkdMTGF5ZXIiOyB9Ci0KIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW1SYXRlTGlt
aXRUYXNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggZDg1ZWJhOGRlODgz
YWJlN2UwZTA5ZTU3ZTQwMDFmZjBmNmM0ZmE1MC4uNmZjZjg0MDQwMTkyNTUyMGMxN2U0Nzc2ZDFk
ZTBhNWE4MjIzZjc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC01Miw2
ICs1Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NDYW52YXNMYXllcklt
cGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIiOyB9CisKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJ
ZDsKICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAzMDBmNDcxMzNlYzhjMDQyMjZhMzRlZTFkMDUz
MzEyNDM2NmViMmM3Li5iMDJmMWVmMzE2NDRhY2U5OTVjY2Q2ZWM1OWRiMGJhNGIwMjBlODNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0yMjcsNiArMjI3LDMzIEBAIHZvaWQgc29ydExh
eWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9y
PFJlZlB0cjxDQ0xhCiAgICAgbGF5ZXJTb3J0ZXItPnNvcnQoZmlyc3QsIGVuZCk7CiB9CiAKK1N0
cmluZyBDQ0xheWVySW1wbDo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK3sKKyAgICBUZXh0U3Ry
ZWFtIHRzOworICAgIGR1bXBMYXllcih0cywgMCk7CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsK
K30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8IGxh
eWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsKKyAgICBkdW1wTGF5
ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7CisgICAgaWYgKG1fcmVwbGljYUxheWVyKSB7Cisg
ICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CisgICAgICAgIHRzIDw8ICJSZXBsaWNh
OlxuIjsKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPmR1bXBMYXllcih0cywgaW5kZW50KzMpOwor
ICAgIH0KKyAgICBpZiAobV9tYXNrTGF5ZXIpIHsKKyAgICAgICAgd3JpdGVJbmRlbnQodHMsIGlu
ZGVudCsyKTsKKyAgICAgICAgdHMgPDwgIk1hc2s6XG4iOworICAgICAgICBtX21hc2tMYXllci0+
ZHVtcExheWVyKHRzLCBpbmRlbnQrMyk7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+ZHVtcExh
eWVyKHRzLCBpbmRlbnQrMSk7CiB9CiAKK30KKworCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYzdkYzQ2OTU0N2Y1YzE1ZTdh
Mzc3ZWY5NTdmZTRmMzg5NzVmZGMwMS4uYzVjMTg1YTEzMzNkMmVjZGExN2FjMDFlYWNlM2M1YWZi
N2M0MDQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjUsMTEgKzE2NSwxMiBAQCBwdWJs
aWM6CiAgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQogICAgIHZvaWQgc2V0RHJhd2FibGVDb250ZW50
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZHJhd2FibGVDb250ZW50UmVjdCA9IHJlY3Q7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50KSBjb25zdDsKKyAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwogCisgICAgdmlydHVh
bCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
OwogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsK
IAogcHJpdmF0ZToKQEAgLTE3Nyw2ICsxNzgsMTAgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgVHJlZVN5bmNocm9uaXplcjsKICAgICB2b2lkIGNsZWFyQ2hpbGRMaXN0KCk7IC8vIFdhcm5p
bmc6IFRoaXMgZG9lcyBub3QgcHJlc2VydmUgdHJlZSBzdHJ1Y3R1cmUgaW52YXJpYW50cyBhbmQg
c28gaXMgb25seSBleHBvc2VkIHRvIHRoZSB0cmVlIHN5bmNocm9uaXplci4KIAorICAgIHZpcnR1
YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiTGF5ZXJD
aHJvbWl1bSI7IH0KKworICAgIHZvaWQgZHVtcExheWVyKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsKKwogICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8gQ0NMYXllckltcGwKICAg
ICBDQ0xheWVySW1wbCogbV9wYXJlbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiBtX2NoaWxkcmVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZjEyNDk1
YjY1NWYzOWM3ZjY5YTRmNzBjMjRkNzdmODEzMDgxNGNiYi4uZDcwNzllOTUxM2NjZDZhZGUxMmRl
ZGY1ZjkyMDM0NjMzYjc3YjQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBA
IC02OCw3ICs2OCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICAg
ICAgbV9wcm94eSA9IENDU2luZ2xlVGhyZWFkUHJveHk6OmNyZWF0ZSh0aGlzKTsKICAgICBtX3By
b3h5LT5zdGFydCgpOwogCi0gICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJl
cih0aGlzKSkKKyAgICBpZiAoIW1fcHJveHktPmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9u
IGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRlcmVyLgpAQCAtODUs
MTQgKzg1LDI1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICAvLyBX
ZSBjaGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNvbW1pdCBpcyBuZWVk
ZWQuCiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKIAorICAgIG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFn
ZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIENDTGF5ZXJUcmVlSG9z
dDo6fkNDTGF5ZXJUcmVlSG9zdCgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0
IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c3RvcCgpOwogICAgIG1fcHJveHkuY2xlYXIoKTsK
KyAgICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1fY29udGVudHNUZXh0dXJl
TWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci5jbGVhcigpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVu
dHNUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZXZp
Y3RBbmREZWxldGVBbGxUZXh0dXJlcyhjb250ZXh0KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQpAQCAtMTA4LDcgKzEx
OSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIs
IHRoaXMsIDApOwogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJl
cigpKTsKIAotICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1p
dChob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCkp
OworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0
dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CiAgICAgY29udGVudHNUZXh0dXJlTWFu
YWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRleHQoKSk7CiAKICAg
ICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKG1fdXBkYXRlTGlzdCwgaG9zdEltcGwtPmNvbnRl
eHQoKSk7CkBAIC0xMTcsNiArMTI4LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRv
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIGhvc3RJbXBsLT5zZXRWaXNpYmxl
KG1fdmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsK
IAorICAgIGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9y
eVVzZUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVz
KCkpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMo
KTsKKwogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgog
ICAgIGlmIChyb290TGF5ZXIoKSkKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVy
KCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwpAQCAtMjI3LDcgKzI0MSwxNCBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBj
b25zdCBJbnRTaXplJiBjbwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2
aXNpYmxlKQogewogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0gICAgbV9wcm94eS0+c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9wcm94eS0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3QtPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CisgICAgICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFu
YWdlcjo6bG93TGltaXRCeXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1p
dCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29u
dGV4dChpbnQgbnVtVGltZXMpCkBAIC0yMzcsNyArMjU4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAKIFRleHR1cmVNYW5hZ2Vy
KiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBjb25zdAogewotICAg
IHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CisgICAgcmV0dXJuIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsKIH0KIAogI2lmICFVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDQ4ODk0ODQ0MWQ4NWMw
OWQwYjQxNzc1ZmEyYWM2NWNlMzNjY2VhMDcuLmFjNjI1MjQ0OWZmNzg4ZGM5YjMzYTk1MGFmYmU5
Mzk4OGRmNWU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xNTYsNiArMTU2
LDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKIAorICAgIHZvaWQgZGVs
ZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOworCiBwcm90ZWN0ZWQ6CiAg
ICAgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0IENDU2V0dGlu
Z3MmKTsKIApAQCAtMTgxLDYgKzE4Myw3IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8R3JhcGhp
Y3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2Vy
PiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDlkZTIwMjlk
ZWM3ZDIzM2VjZWVhYWNhNTY2NjczOTE5MzM0ZWQzZGEuLmYwNjFkZjcwYjg4MTFlMDkwOTJlODI1
MjllZTU2NjFhN2Q2MDRlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVy
cygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMi
LCB0aGlzLCAwKTsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9sYXll
clJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkKKyAgICBpZiAobV9sYXllclJlbmRlcmVy
LT5yb290TGF5ZXIoKSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CiAK
ICAgICArK21fZnJhbWVOdW1iZXI7CkBAIC0xMTYsMTAgKzExNiwxMCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAg
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlciAmJiAhdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNl
UmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBpbXBsSGFjaywgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCkKIHsKICAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0aGVuIHdlIGFy
ZSByZWNvdmVyaW5nIGZyb20gYSBsb3N0IGNvbnRleHQKICAgICBib29sIHJlY3JlYXRpbmdSZW5k
ZXJlciA9IG1fbGF5ZXJSZW5kZXJlcjsKQEAgLTEyNyw5ICsxMjcsOSBAQCBib29sIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogaW1w
bEhhY2ssIFBhcwogICAgIC8vIEZpcnN0IHRpbWUgbGF5ZXJSZW5kZXJlciBjcmVhdGlvbgogICAg
IFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXI7CiAgICAgaWYgKCFy
ZWNyZWF0aW5nUmVuZGVyZXIpCi0gICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7CisgICAgICAgIGxheWVy
UmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsK
ICAgICBlbHNlCi0gICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVyKCksIHRoaXMsIGNvbnRleHQpOworICAgICAg
ICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29u
dGV4dCk7CiAKIAogICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBm
b3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKQEAg
LTEzOCw5ICsxMzgsOSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogaW1wbEhhY2ssIFBhcwogICAgICAgICBtX3NldHRp
bmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOwogCiAgICAgICAgIGlmICghcmVjcmVhdGlu
Z1JlbmRlcmVyKQotICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKGltcGxIYWNrLCB0aGlzLCBjb250ZXh0KTsKKyAgICAgICAgICAgIGxheWVy
UmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKSwgdGhpcywgY29udGV4dCk7
CisgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUodGhpcywgY29udGV4dCk7CiAgICAgfQogCiAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJS
ZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA1M2E0ZDU1
MjRhNTdiODM1ZGU0ZDgzMjBlYWMwYzY0OWU2NjA2MmJmLi4xYzRlNjc3ZmMxZTczNmM0OWRiOTU0
NTI4ODFlNWU2NWI5Y2NjOGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygp
OwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0K
IAotICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25l
ckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBib29sIGluaXRpYWxp
emVMYXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29s
IGlzQ29udGV4dExvc3QoKTsKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KICAgICBjb25zdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CkBA
IC03Niw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSk7CiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29u
c3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KIAorICAgIGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIGludCBt
X3NvdXJjZUZyYW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXgg
OWI0YzUzNjcyM2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3Ny4uZTRjOGIyMGE3ODgzOGFk
YmI2ZTRmNWY5ZTFmZjJmNTEzNmQ4ZDQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1w
bC5oCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NQ
bHVnaW5MYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBl
QXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9CisKICAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaAppbmRleCBhYWU2Njk0NGIwNTM3ZGI2YjMw
NTdmNWIxMWRjNWViMGVlNjEzZDkwLi5mNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFiYTlhNjlk
ZmFjNmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC01OCwxMCArNTgsMTEgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpID0gMDsKIAogICAgIHZp
cnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwogCkBAIC04MCw5ICs4MSw2IEBA
IHB1YmxpYzoKICAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxs
IGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKICAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOwogCi0gICAgLy8gVGVtcG9yYXJ5
IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVy
ZXJDaHJvbWl1bXMKLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkgPSAwOwotCiBwcm90ZWN0ZWQ6CiAgICAgQ0NQcm94eSgpIHsgfQogICAgIGZyaWVu
ZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmNwcAppbmRleCAwYWYzMzBkYmQ4ZjQ2N2ZkYWZkN2RhNDAzNmYwNGJjODQ1MTYzZGUx
Li5jYzQwZjEyMTExZDI0OTQ3ZjA3MjJkYjY5MWNjY2VhN2I4ZmZiMjBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIGJvb2wgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllclRy
ZWVIb3N0SW1wbDsKIH0KIAotYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5
ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK2Jvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogewogICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpOwogICAgIGlmICghY29udGV4dCkKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29s
IENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVl
SG9zdCogb3duZXJIYWNrKQogCiAgICAgewogICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7Ci0gICAgICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihvd25lckhhY2ssIGNvbnRleHQpOworICAgICAgICByZXR1cm4gbV9sYXllclRyZWVI
b3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCk7CiAgICAgfQogfQogCkBA
IC0xNDYsNiArMTQ2LDI0IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KGludCBudW1UaW1lcykKICAgICBtX3RpbWVzUmVjcmVhdGVTaG91bGRGYWlsID0g
bnVtVGltZXMgLSAxOwogfQogCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29t
bWl0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworI2lmICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgLy8gQ29tbWl0IGltbWVkaWF0ZWx5CisgICAgeworICAgICAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJl
Z2luQ29tbWl0KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRy
ZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENv
bXBsZXRlKCk7CisgICAgfQorI2Vsc2UKKyAgICAvLyBTaW5nbGUgdGhyZWFkZWQgb25seSB3b3Jr
cyB3aXRoIFRIUkVBREVEX0NPTVBPU0lUSU5HLgorICAgIENSQVNIKCk7CisjZW5kaWYKKworfQor
CiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTcwLDE2ICsxODgsMTIgQEAgdm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMobV9sYXllclRyZWVIb3N0SW1wbC0+Y29u
dGV4dCgpKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIH0KICAg
ICBtX2xheWVyVHJlZUhvc3QgPSAwOwogfQogCi1UZXh0dXJlTWFuYWdlciogQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcigpCi17Ci0gICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOwot
fQotCiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKIC8vIENhbGxlZCBieSB0aGUgbGVn
YWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMgdGhlIHNj
aGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5
KCkKQEAgLTIwNyw3ICsyMjEsNyBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3JlYXRl
Q29udGV4dElmTmVlZGVkKCkKIAogICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgIEFTU0VSVChj
b250ZXh0LT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5p
bml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KSkgeworICAgICAgICBpZiAobV9sYXll
clRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCkpIHsKICAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1ZSk7
CiAgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dExvc3QgPSBmYWxzZTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDc2
NWI4NTlmOTUxNTAyNmU5ZDc4NzUyMWQ0OTlkNTFhOTgwZjhmOTcuLmJiYmU1ZjU5MDc2MmJlMThh
Mjg3NGE1ODhlYzQzNzBhNjU5N2Y5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmgKQEAgLTQ0LDE3ICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIGNv
bnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1U
aW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
UmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0
b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQg
cmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJl
TWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOwotCiAgICAgLy8gU3BlY2lhbCBjYXNl
IGZ1bmN0aW9ucy4KICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgY29t
cG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggMWE4
ODM4NGZlYTJiYWY1YjQ2MzIyZjA0YmU4YWJiYzk5MTVhOTk0OS4uMzI0NmE4NGI1YzRkMzRkODk2
NWY3N2RlM2IyZjhmMTM5ZmRiYzY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAg
LTk4LDcgKzk4LDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAogICAg
IHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwogfQogCi1ib29sIENDVGhyZWFkUHJveHk6Omlu
aXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQorYm9vbCBD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiB7CiAgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRy
ZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMTE1LDggKzExNSw3IEBA
IGJvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVI
b3N0KiBvd25lckhhY2spCiAgICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkOwogICAgIExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyT25DQ1RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mob3duZXJIYWNrKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyhjb250ZXh0UHRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y2FwYWJpbGl0aWVzKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVTdWNj
ZWVkZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CiAgICAgY29t
cGxldGlvbi53YWl0KCk7CiAKICAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKQEAgLTEzNCw2
ICsxMzMsMTcgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50
IG51bVRpbWVzKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIENDVGhyZWFk
UHJveHk6OnNldE5lZWRzQ29tbWl0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRoaXMsIDApOworICAgIG1fY29t
bWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKSk7Cit9
CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzIsMTIgKzE4Miw2IEBAIHZvaWQgQ0NUaHJl
YWRQcm94eTo6c3RvcCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAotVGV4dHVyZU1h
bmFnZXIqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiB2b2lkIENDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFDRV9FVkVOVCgi
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
QEAgLTIyOSw2ICsyMzMsMTQgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCgpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKIH0KIAor
dm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKQoreworICAgIFRS
QUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVyVHJl
ZUhvc3RJbXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNF
X0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQi
LCB0aGlzLCAwKTsKQEAgLTI1MSwxMiArMjYzLDEyIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5p
dGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxp
emVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9u
LCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBj
YXBhYmlsaXRpZXMpCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
T25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dFB0ciwgQ0NDb21wbGV0aW9uRXZl
bnQqIGNvbXBsZXRpb24sIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMqIGNhcGFiaWxpdGllcykKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAg
QVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQoYWRvcHRSZWYoY29udGV4dFB0cikpOwotICAgICppbml0aWFsaXplU3VjY2VlZGVkID0g
bV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBj
b250ZXh0KTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIGlmICgqaW5pdGlhbGl6ZVN1
Y2NlZWRlZCkKICAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKQEAg
LTI2Niw2ICsyNzgsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRP
bkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMs
IDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5k
ZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CiAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDI0ZTFmZTEzZTcxOTc0NzY0NmNjZjU1
MmIzOGZhOGIzYjNiYzA1NDYuLjI0Njc3MjQwY2FhYTY5MTI2NzZkN2VkZmUwZmFiMmNjMjEyNjJl
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTQ1LDE3ICs0NSwxNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJU
cmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNv
bXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
Q29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdo
aWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21p
dW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigp
OwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0
Kik7CiAKQEAgLTY3LDcgKzY1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbW1pdE9uQ0NUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7
CiAgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
LSAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhv
c3QqLCBHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlh
bGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAgIHZvaWQgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NDb21w
bGV0aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKTsKICAgICB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwogICAgIHZvaWQgc2V0TmVl
ZHNSZWRyYXdPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1Ro
cmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cAppbmRleCAxYTc1ODM0NGVjNTgzMzc5ZTZiNjRkZjAxMTRmMTAyYjA0OTAyOTYyLi45YmQ4YWVi
Y2JmOTYxODBkZDgyNWYwOGM1Y2Q0MzYxNWNlMTVkNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcApAQCAtNzUsOCArNzUsOSBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OmJp
bmRDb250ZW50c1RleHR1cmUoKQogCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXllclBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7CisgICAgQ0NUaWxl
ZExheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKICAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50KTsKLSAgICBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0
cywgaW5kZW50KTsKKyAgICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3Nr
aXBzRHJhdykgPDwgIlxuIjsKIH0KIAogRHJhd2FibGVUaWxlKiBDQ1RpbGVkTGF5ZXJJbXBsOjp0
aWxlQXQoaW50IGksIGludCBqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmlu
ZGV4IGNlZWM1ZjI1MzM5YzJmY2VkMzE1MjhlZGY4OTFhMzYyOWI2MzIwMjQuLmQwZGUzODcxNjc2
OWQ5NmVhMGNjZDg0YmY0MWZmZDAyNTM0ODBhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBD
Q1RpbGVkTGF5ZXJJbXBsKGludCBpZCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVy
VHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KKwogICAgIC8v
IERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KICAg
ICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCBiZDE2Mzc2YmI1ZjQ3MjYwOWVjNDEwZTBk
ZWYzMjk3NTc2N2RmMDliLi42YmYzNTI5MWVjMGJkMGY4ZGFkOTBmNTE4OGU1YjVhMzE1YzNlY2I0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC01OCw2ICs1OCw4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChpbnQpOwogCisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJW
aWRlb0xheWVyIjsgfQorCiAgICAgc3RydWN0IFRleHR1cmUgewogICAgICAgICBQbGF0Zm9ybTNE
T2JqZWN0IGlkOwogICAgICAgICBJbnRTaXplIHNpemU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106929</attachid>
            <date>2011-09-09 15:21:09 -0700</date>
            <delta_ts>2011-09-12 11:15:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67440-20110909152108.patch</filename>
            <type>text/plain</type>
            <size>61463</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ3MzgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVu
ZGVyc3VyZmFjZS1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3ItY29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhw
ZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZTQ5NWIyNmI5OWU1YzRhMTk3YzlkNjUyYTc5MTlhYmJl
NjM2MjcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI4NjYKemNtZUFTQE4/KG9sSHlgdVZCcSFp
YTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1RuNikkCnpHP1V+KzN2PGc8
TCRlZVVPVmVhP0d0PE9XaXhkK1JRJWozUGdIKDtyJVJWcUxhMkBlPGFTVy1MXlkrRkAtYWAlbwp6
dTh1dCNYT19saG1UVWBvQFRRWUZUa1k8WGNLXy0jWFA2bHAmSn0tV1V9KUdhN3tTMGAqdlFIdEFk
SkROaitNUHUKelUwWm1wS0tsN0JUU2tULWlncC1FRmcxO2VVPTdRRzUwO0l8WD1WOGczX0M+U2Jy
PjNFOUFJTVQ7MmRSKTJFdTRjCnI3fGpLdnhuTUxHak9LI1RUcmZ5LSE0M0ErZTd2ZyohfGMzKWpi
SHsoUzNqM15QNjxyXzFYbE13CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3It
Y29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZlOTY5Mjdh
ZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1j
b250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJm
YWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0ZGExMzgxMDE0YzBjZTg2MmY4MjAzNzdhYmY5MThhOGRh
NjE0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Nv
bXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAucmVkIHsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKworICAgIC5ncmVlbiB7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKworICAgIGRpdiB7CisgICAgICBoZWlnaHQ6
IDEwMHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAgIH0KKworICAgIC5jb21wb3NpdGVkIHsK
KyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgIH0KKworICAgIC5y
ZW5kZXJTdXJmYWNlIHsKKyAgICAgIG9wYWNpdHk6IDAuNTsKKyAgICB9CisgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBJbiB0aGUgcGl4ZWwgcmVzdWx0cywgb25lIGdyZWVuIHNx
dWFyZXMgc2hvdWxkIGJlIHZpc2libGUuIC0tPgorICA8ZGl2IGNsYXNzPSJyZWQgcmVuZGVyU3Vy
ZmFjZSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBjbGFzcz0icmVkIGNvbXBvc2l0ZWQiPjwvZGl2
PgorICA8L2Rpdj4KKyAgPHA+CisgIDxzY3JpcHQ+CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KHRydWUpOyAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWZ1bCBhcyBhIHBpeGVsIHRlc3QuCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzcGxheSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmxvc2VDb21wb3Np
dG9yQ29udGV4dCgxKTsKKyAgfQorICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpOworICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgicmVkIik7CisgIHRhcmdl
dC5jbGFzc0xpc3QuYWRkKCJncmVlbiIpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZDI0N2QzYTM3YTE5YTlkZjRmODNiNjI5ZGE0ODNkMDM0ODdlYmRhLi40
NmNhZjRjNWJhNzlmOTFiMTc0OGMyNDE1ZDExYjJhZTIzODcyNjBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTEgQEAKKzIwMTEtMDktMDcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2Vy
IGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1vdmVzIHRoZSBjb250
ZW50cyBUZXh0dXJlTWFuYWdlciBvdmVyIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QsIHdoZXJlIGl0
IGJlbG9uZ3MsIGFuZCBhZGRzIGluIGEgY29tbWl0IHBhdGgKKyAgICAgICAgdG8gbWFrZSBzdXJl
IHRoYXQgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgZXZlbiBpZiB0aGUgcGFnZSBpcyBub3QgdmlzaWJs
ZS4gIFRoaXMgbW92ZSBhbHNvIHJlbW92ZWQgdGhlIG5lZWQgZm9yCisgICAgICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSdzIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyLCBzbyBJIHJlbW92ZWQgdGhh
dCBhcyB3ZWxsLiAgVGhhdCBtZWFudCBtb3ZpbmcgdGhlCisgICAgICAgIGxheWVyVHJlZUFzVGV4
dCgpIGxvZ2ljIG92ZXIgdG8gdGhlIENDTGF5ZXJJbXBsIHNpZGUsIHdoaWNoIGlzIHdoZXJlIGl0
IHJlYWxseSBiZWxvbmdlZCBhbnl3YXkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBj
b21wb3NpdGluZy8gdGVzdHMgYW5kCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0
b3IvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJmYWNlLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5k
ZXJTdXJmYWNlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisK
IDIwMTEtMDktMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmVkIGh5cGhlbmF0aW9uIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgYW4gdXN1cHBv
cnRlZCBidWlsZCBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IGVhMjZkZmUxODdlNjJjNTc1NTg1N2FmMTE3YWMzNTc0M2U1Y2JkNWQuLjRjMmU0NDA4NWY3
NjQ0M2FiMTIxODBkNzc0MDljNDhiNWZkNzRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgKQEAgLTUyLDggKzUyLDYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IENhbnZhc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
IkNhbnZhc0xheWVyIjsgfQotCiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVt
dWx0aXBsaWVkQWxwaGE7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uaAppbmRleCBiYWM0MWY5Yzg4YTRmMDkxMzFhMTRiNjk0YTRmYWIwNDky
ZDlmNTRlLi45NDA5YWUxMmU5ZjMyNjc1MjM1MGFlNjBmNGQzMGFmOTkyZmJjOTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTU0LDggKzU0LDYgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJp
bmcoKSBjb25zdCB7IHJldHVybiAiQ29udGVudExheWVyIjsgfQotCiAgICAgdmlydHVhbCB2b2lk
IGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJU
cmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBkNjk3OTEzMWI1ODhk
NTIyODMzOWFiNTNlYWYwYjAzYjk4MTM3ZmRlLi40YWZlMDVkMTUxZjhiMzYzNjI5NjMwNDMzMTBh
MjA5NDk0MTgyOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcs
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CiAKLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIkltYWdlTGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgSW1hZ2VMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGJjZDRkNzc4OTliMmI5YjM1ZTdiYzMzZGJmMjA2Y2Y4OGFiMWE5NjYuLmEwZDM0
NjU2ZThjMTVkNTJkMDVlNDAyZDI5MWY4NTQwNTIzOGY0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC0zNzYsNDggKzM3Niw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVk
UXVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtCiAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5H
TEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotU3Ry
aW5nIExheWVyQ2hyb21pdW06OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAgVGV4dFN0
cmVhbSB0czsKLSAgICBkdW1wTGF5ZXIodHMsIDApOwotICAgIHJldHVybiB0cy5yZWxlYXNlKCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50
KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQotICAgICAgICB0cyA8
PCAiICAiOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAg
ICB0cyA8PCBsYXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7Ci0g
ICAgZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOwotICAgIGlmIChtX3JlcGxpY2FM
YXllcikgewotICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzIpOwotICAgICAgICB0cyA8
PCAiUmVwbGljYTpcbiI7Ci0gICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5ZXIodHMsIGlu
ZGVudCszKTsKLSAgICB9Ci0gICAgaWYgKG1fbWFza0xheWVyKSB7Ci0gICAgICAgIHdyaXRlSW5k
ZW50KHRzLCBpbmRlbnQrMik7Ci0gICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKLSAgICAgICAgbV9t
YXNrTGF5ZXItPmR1bXBMYXllcih0cywgaW5kZW50KzMpOwotICAgIH0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5b
aV0tPmR1bXBMYXllcih0cywgaW5kZW50KzEpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OmR1
bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0g
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgImlkOiAiIDw8IGlkKCkgPDwg
IiBkcmF3c0NvbnRlbnQ6ICIgPDwgZHJhd3NDb250ZW50KCkgPDwgIiBib3VuZHMgIiA8PCBtX2Jv
dW5kcy53aWR0aCgpIDw8ICJ4IiA8PCBtX2JvdW5kcy5oZWlnaHQoKSA8PCAiIHVzZXNMYXllclNj
aXNzb3I6ICIgPDwgdXNlc0xheWVyU2Npc3NvcigpCi0gICAgICAgIDw8ICIgc2Npc3NvclJlY3Q6
ICgiIDw8IG1fc2Npc3NvclJlY3QueCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC55KCkgPDwg
IiwgIiA8PCBtX3NjaXNzb3JSZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JSZWN0Lmhl
aWdodCgpIDw8ICIpIgotICAgICAgICA8PCAiIHZpc2libGVMYXllclJlY3Q6ICgiIDw8IG1fdmlz
aWJsZUxheWVyUmVjdC54KCkgPDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QueSgpIDw8ICIs
ICIgPDwgbV92aXNpYmxlTGF5ZXJSZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3Zpc2libGVMYXll
clJlY3QuaGVpZ2h0KCkgPDwgIikiCi0gICAgICAgIDw8ICJcbiI7Ci0KLX0KLQogUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewogICAg
IHJldHVybiBDQ0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
aW5kZXggYjZhZmM2ZmQ0ZjFmZTdjMmQzNjllY2Q2OGNjZTdhYmY0NTJjYmFiNC4uOWM2MGExNzIy
Njg3YTU4YjU3NTUwNWQwMTYxOWMwMzg4NjI4NWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAt
MTcyLDcgKzE3Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENv
bG9yJik7CiAKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOwotICAgIFN0cmluZyBsYXllclRy
ZWVBc1RleHQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCkBA
IC0yMjAsMTEgKzIxOSw2IEBAIHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRy
aXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkdW1w
TGF5ZXIoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBjb25z
dCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJMYXllckNocm9taXVt
IjsgfQotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50KSBjb25zdDsKLQogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29s
IG1fY29udGVudHNEaXJ0eTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
aW5kZXggMTE0NjVkYzMxODM3MjhlNmVhMmUxZjFkMGQwMzI0MzA3MTM4ZDc4MC4uM2ZmNjFmZGIz
MWRmY2NmODE3YmNkYWUwMjIzYTE4MzZjMTNiNmNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCkBAIC03MCwyMCArNzAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBNYWtlIHRoaXMgbGltaXQgYWRqdXN0
YWJsZSBhbmQgZ2l2ZSBpdCBhIHVzZWZ1bCB2YWx1ZS4KLQotLy8gQWJzb2x1dGUgbWF4aW11bSBs
aW1pdCBmb3IgdGV4dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLXN0YXRpYyBz
aXplX3QgdGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzID0gMTI4ICogMTAyNCAqIDEwMjQ7Ci0v
LyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVk
Lgotc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0Qnl0ZXMgPSA2NCAqIDEw
MjQgKiAxMDI0OwotLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tl
ZCB0byByZWxlYXNlIHRleHR1cmVzLgotc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5TG93TGlt
aXRCeXRlcyA9IDMgKiAxMDI0ICogMTAyNDsKLQotc2l6ZV90IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdCgpCi17Ci0gICAgcmV0dXJuIHRleHR1cmVNZW1v
cnlSZWNsYWltTGltaXRCeXRlczsKLX0KLQogbmFtZXNwYWNlIHsKIAogc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBi
b3R0b20sIGZsb2F0IHRvcCkKQEAgLTE0MywyNCArMTI5LDIyIEBAIGJvb2wgY29udGV4dFN1cHBv
cnRzQWNjZWxlcmF0ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIAogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQpCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXIsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYg
KG93bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRz
QWNjZWxlcmF0ZWRQYWludGluZyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAj
ZW5kaWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFk
b3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1wbCwgY29udGV4
dCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFk
b3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CiAgICAg
aWYgKCFsYXllclJlbmRlcmVyLT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIGxheWVyUmVuZGVyZXIucmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hy
b21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0
SW1wbCogb3duZXJJbXBsLAorTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hy
b21pdW0oQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0KQogICAgIDogbV9vd25lcihvd25lcikKLSAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkK
ICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVi
dWZmZXJJZCgwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC0yMDksOCArMTkzLDggQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJ
bXBsUmVjdXJzaXZlKENDTGF5ZXJJbXAKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNs
b3NlKCkKIHsKLSAgICBpZiAocm9vdExheWVySW1wbCgpKQotICAgICAgICBjbGVhclJlbmRlclN1
cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShyb290TGF5ZXJJbXBsKCkpOworICAgIGlmIChy
b290TGF5ZXIoKSkKKyAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1
cnNpdmUocm9vdExheWVyKCkpOwogfQogCiBHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjb250ZXh0KCkKQEAgLTIyNSwxOCArMjA5LDkgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBjaGFyKgogICAgICAgICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xu
XHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFu
ZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJvcikpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxl
YXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCkKIHsKLSAgICAvLyBSZWR1Y2VzIHRleHR1cmUgbWVt
b3J5IHVzYWdlIHRvIHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzIGJ5IGRlbGV0aW5nIG5vbiBy
b290IGxheWVyCi0gICAgLy8gdGV4dHVyZXMuCi0gICAgbV9vd25lci0+bm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0KCktPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7Ci0gICAgbV9jb250ZW50
c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlMb3dMaW1p
dEJ5dGVzKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1
cmVzKCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVy
ZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICAvLyBFdmljdCBhbGwgUmVuZGVyU3VyZmFjZSB0ZXh0
dXJlcy4KLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4
dHVyZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5
VG9MaW1pdCgwKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZp
Y3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCkBAIC0yNTYs
MTggKzIzMSwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAg
ICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihj
dXJyZW50VGltZSgpKTsKIAotICAgIGlmICghcm9vdExheWVySW1wbCgpKQorICAgIGlmICghcm9v
dExheWVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogTm8gbmVlZCB0byB3YWxr
IHRoZSB0cmVlIGhlcmUuIFRoaXMgY291bGQgYmUgcGFzc2VkIHZpYSBkcmF3LgotICAgIHJvb3RM
YXllckltcGwoKS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSh0aGlzKTsKKyAgICByb290TGF5
ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSh0aGlzKTsKIAotICAgIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVNZW1vcnlIaWdo
TGltaXRCeXRlcyAtIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5
dGVzKCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1p
dEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpIC0gbV9jb250ZW50c1RleHR1
cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKLSAgICBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0KLSAgICBpZiAo
dGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5dGVzID4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSkKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5
dGVzIC0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7
CisgICAgaWYgKFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpID4gbV9jb250ZW50
c1RleHR1cmVNZW1vcnlVc2VCeXRlcykKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1h
bmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5
dGVzKCkgLSBtX2NvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKTsKICAgICBlbHNlCiAgICAg
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDAp
OwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVy
ZXMobV9jb250ZXh0LmdldCgpKTsKQEAgLTI4Miw3ICsyNTUsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
VFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRoaXMsIDAp
OwotICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVySW1wbCgpOworICAg
IENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVyKCk7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkK
QEAgLTQ0NSw3ICs0MTgsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZp
c2libGUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybQogCiBNYW5hZ2VkVGV4
dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQog
ewotICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXJJ
bXBsKCkgPyByb290TGF5ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJl
KCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290
TGF5ZXIoKSA/IHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgp
IDogMDsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCkKQEAgLTYwMSwxMiArNTc0LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+Zmx1c2goKSk7CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIg
PSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcywgbV9j
YXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0
ZXMsIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5zZXRBc3NvY2lhdGVkQ29udGV4dERlYnVnT25seSht
X2NvbnRleHQuZ2V0KCkpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRB
c3NvY2lhdGVkQ29udGV4dERlYnVnT25seShtX2NvbnRleHQuZ2V0KCkpOwotI2VuZGlmCisgICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJl
U2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxNSwyOSArNzgzLDIyIEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgaWYgKG1f
b2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIAot
ICAgIC8vIENsZWFyIHRpbGVycyBiZWZvcmUgdGhlIHRleHR1cmUgbWFuYWdlciwgYXMgdGhleSBo
YXZlIHJlZmVyZW5jZXMgdG8gdGV4dHVyZXMuCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci5jbGVhcigpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT51
bnByb3RlY3RBbGxUZXh0dXJlcygpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci5jbGVhcigpOworICAgIEFTU0VSVCghbV9jb250ZW50c1Rl
eHR1cmVNZW1vcnlVc2VCeXRlcyk7CisgICAgcmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygp
OwogfQogCiBTdHJpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpsYXllclRyZWVBc1RleHQoKSBj
b25zdAogewogICAgIFRleHRTdHJlYW0gdHM7CiAgICAgaWYgKHJvb3RMYXllcigpKSB7Ci0gICAg
ICAgIHRzIDw8IHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPmxheWVyVHJlZUFzVGV4dCgp
OworICAgICAgICB0cyA8PCByb290TGF5ZXIoKS0+bGF5ZXJUcmVlQXNUZXh0KCk7CiAgICAgICAg
IHRzIDw8ICJSZW5kZXJTdXJmYWNlczpcbiI7Ci0gICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0
cywgMSwgcm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIGR1bXBSZW5kZXJT
dXJmYWNlcyh0cywgMSwgcm9vdExheWVyKCkpOwogICAgIH0KICAgICByZXR1cm4gdHMucmVsZWFz
ZSgpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2Vz
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9taXVtKiBsYXllcikg
Y29uc3QKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4
dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIGNvbnN0IENDTGF5ZXJJbXBsKiBsYXllcikgY29uc3QK
IHsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+ZHVtcFN1cmZhY2UodHMsIGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCmluZGV4IDBmMTAzNjZmMmU5ZjNkZWVlNzEyNzRkYjZkZDZhMzc0YjdlYzVh
NzAuLjdmNDdhNTAxY2QzZWNjMjFjMzdlYWUzYzdmOWE4M2RkMDdlYWU1YWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIE5vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdDsKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBv
c2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5
ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBj
cmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
KTsKIAogICAgIC8vIE11c3QgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGFsbG93IHRoZSBMYXllclJl
bmRlcmVyQ2hyb21pdW0gdG8gZGVzdHJ1Y3QKICAgICB2b2lkIGNsb3NlKCk7CkBAIC04NCwxOSAr
ODQsMTMgQEAgcHVibGljOgogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3Qg
eyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQogICAgIGNvbnN0IExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVz
OyB9CiAKLSAgICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQot
ICAgIGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVy
OyB9Ci0KLSAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5y
b290TGF5ZXIoKTsgfQotICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9Ci0KLSAgICBDQ0xheWVySW1wbCogcm9v
dExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQotICAgIGNv
bnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcklt
cGwtPnJvb3RMYXllcigpOyB9CisgICAgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIHsgcmV0dXJu
IG1fb3duZXItPnJvb3RMYXllcigpOyB9CisgICAgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKICAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkg
Y29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWI7IH0KIAotICAgIGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNp
emUoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3du
ZXItPnZpZXdwb3J0U2l6ZSgpOyB9CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2
aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1
cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIApAQCAtMTM3LDcgKzEzMSw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0JiByZWN0KTsKIAotICAgIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5h
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLmdldCgpOyB9CiAg
ICAgVGV4dHVyZU1hbmFnZXIqIHJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLmdldCgpOyB9CiAKICAgICBDQ0hl
YWRzVXBEaXNwbGF5KiBoZWFkc1VwRGlzcGxheSgpIHsgcmV0dXJuIG1faGVhZHNVcERpc3BsYXku
Z2V0KCk7IH0KQEAgLTE0OCwxNyArMTQxLDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNDb250
ZXh0TG9zdCgpOwogCi0gICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKKyAgICB2b2lkIHJlbGVh
c2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9y
bWF0KCk7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXll
ckxpc3Q7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB0aGUgY29udGVudHMgdGV4
dHVyZSBtYW5hZ2VyIGhhcyBtb3ZlZCB0byBDQ0xheWVyVHJlZUhvc3QuCi0gICAgc3RhdGljIHNp
emVfdCB0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1Rl
eHR1cmVNZW1vcnlVc2VCeXRlcyhzaXplX3QgY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMp
IHsgbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyA9IGNvbnRlbnRzVGV4dHVyZU1lbW9y
eVVzZUJ5dGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5
ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPik7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdEltcGwq
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7
CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwpAQCAtMTc3LDE3ICsxNjksMTQgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPEND
TGF5ZXJJbXBsPiYsIGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mKTsKIAotICAgIHZvaWQgZHVt
cFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9t
aXVtKikgY29uc3Q7CisgICAgdm9pZCBkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYsIGlu
dCBpbmRlbnQsIGNvbnN0IENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBib29sIGluaXRpYWxp
emVTaGFyZWRPYmplY3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCiAg
ICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVy
SW1wbCopOwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBDQ0xheWVyVHJlZUhvc3QgZmllbGQKLSAg
ICBDQ0xheWVyVHJlZUhvc3QqIG1fb3duZXI7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBt
X293bmVySW1wbDsKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBtX293bmVyOwogCiAgICAgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIApAQCAtMjE3LDcgKzIwNiw3
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtPiBt
X3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6WVVW
UHJvZ3JhbT4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbTsKIAotICAgIE93blB0cjxUZXh0dXJlTWFu
YWdlcj4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyOworICAgIHNpemVfdCBtX2NvbnRlbnRzVGV4
dHVyZU1lbW9yeVVzZUJ5dGVzOwogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXI7CiAKICAgICBPd25QdHI8Q0NIZWFkc1VwRGlzcGxheT4gbV9o
ZWFkc1VwRGlzcGxheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcAppbmRleCA3OTBjNzBmMDI3YWNi
YTEzODE1MzRmZWVjYWE3ZDc0N2IxMzc4NTBiLi5mMWY4MThiN2VjN2VhNTA2ZGQ1NGFjY2QyMDk5
ZDU1M2FjN2VlZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCkBAIC04Myw3ICs4Myw2IEBA
IHZvaWQgTWFuYWdlZFRleHR1cmU6OnVucmVzZXJ2ZSgpCiB2b2lkIE1hbmFnZWRUZXh0dXJlOjpi
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBBU1NFUlQobV90
ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7Ci0gICAgQVNTRVJUKGNvbnRleHQg
PT0gbV90ZXh0dXJlTWFuYWdlci0+YXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkoKSk7CiAgICAg
aWYgKCFtX3RleHR1cmVJZCkKICAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2Vy
LT5hbGxvY2F0ZVRleHR1cmUoY29udGV4dCwgbV90b2tlbik7CiAgICAgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKQEAgLTky
LDcgKzkxLDYgQEAgdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiB2b2lkIE1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTWFu
YWdlci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV90ZXh0
dXJlTWFuYWdlci0+YXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkoKSk7CiAgICAgaWYgKCFtX3Rl
eHR1cmVJZCkKICAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0
ZVRleHR1cmUoY29udGV4dCwgbV90b2tlbik7CiAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmVJZCwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKaW5kZXggODUyZGMyZWE2ZmQw
ZDdkODQxNTRiOTQ5MjQ4Mjc0OGI3YWQ2YTI4Yi4uZDFjZmM4MDI5ZWIyMWY0ZjI2YzJiNWNlN2Vi
NjhlMDY0M2MxOTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaApAQCAtNDYsOSAr
NDYsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xh
eWVySW1wbCopOwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5
cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJQbHVnaW5MYXllciI7IH0KLQogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIpOwogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZh
Y2VDaHJvbWl1bS5jcHAKaW5kZXggYTVmZDc0YjE5MDIwZmY0MjFkNDY1N2Y3ZWNkZTk3YzNmYjJj
MThlOS4uNzNmM2FiMjdhOWE1OTFjMmU2MGI1ZDVlMjdlOWJhMjE4ZGYxZjMxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC01OSwyNyArNTksNSBAQCBGbG9hdFJl
Y3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKICAg
ICByZXR1cm4gZHJhd2FibGVDb250ZW50UmVjdDsKIH0KIAotU3RyaW5nIFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5k
ZXJTdXJmYWNlKGlkPSVkLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5n
TGF5ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVJbmRl
bnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
IT0gaW5kZW50OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19Ci0KLXZvaWQgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCBuYW1lKCkgPDwg
IlxuIjsKLQotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMSk7Ci0gICAgdHMgPDwgImNvbnRl
bnRSZWN0OiAoIiA8PCBtX2NvbnRlbnRSZWN0LngoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3Qu
eSgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV9jb250ZW50
UmVjdC5oZWlnaHQoKQotICAgICAgICA8PCAiIHNjaXNzb3JSZWN0OiAoIiA8PCBtX3NjaXNzb3JS
ZWN0LngoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QueSgpIDw8ICIsICIgPDwgbV9zY2lzc29y
UmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC5oZWlnaHQoKSA8PCAiKSIKLSAg
ICAgICAgPDwgIlxuIjsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggNGEwNjJjNTY0MGZk
NDQ5MThkMjliOTNjNjY5YjkyNzk0Njg0MzM3MS4uOGMyZmI2OThhNDUzZmVkOWIxN2QzYWMxZmFl
MzViZjA3YTA2ZDk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTU0
LDkgKzU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogICAgIHZv
aWQgZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7CiAKLSAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0OwotICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQpIGNvbnN0OwotCiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSBS
ZW5kZXJTdXJmYWNlIGluY2x1ZGluZyBhbnkgcmVmbGVjdGlvbi4KICAgICBGbG9hdFJlY3QgZHJh
d2FibGVDb250ZW50UmVjdCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXgg
OGZhMDY1MWI5ODVlOWY5YzQ5ZGZiMzU1NjA4MTdjNjI5M2E2YzM3NS4uNzBkODRjY2UxMzlhMGUy
NTNkNmQ1MmFlZDM5YmQ2NDhiM2Q1NzIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAt
NDQsNiArNDQsMjEgQEAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRlcyhJbnRTaXplIHNpemUs
IEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCiAgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUu
aGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKIH0KIAor
c2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpCit7CisgICAgcmV0dXJuIDEy
OCAqIDEwMjQgKiAxMDI0OworfQorCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1p
dEJ5dGVzKCkKK3sKKyAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKK30KKworc2l6ZV90IFRl
eHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3sKKyAgICByZXR1cm4gMyAqIDEwMjQgKiAx
MDI0OworfQorCiBUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxp
bWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyht
ZW1vcnlMaW1pdEJ5dGVzKQogICAgICwgbV9tZW1vcnlVc2VCeXRlcygwKQpAQCAtMTM5LDEyICsx
NTQsMjMgQEAgdm9pZCBUZXh0dXJlTWFuYWdlcjo6YWRkVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9r
ZW4sIFRleHR1cmVJbmZvIGluZm8pCiAKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUV2aWN0
ZWRUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBBU1NFUlQoY29u
dGV4dCA9PSBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZXZpY3RlZFRleHR1cmVJZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fZXZpY3RlZFRleHR1cmVJZHNbaV0pCi0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+ZGVsZXRlVGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJlSWRzW2ldKSk7CisgICAgaWYgKGNvbnRl
eHQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V2aWN0ZWRUZXh0dXJlcy5z
aXplKCk7ICsraSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIEFTU0VSVChtX2V2aWN0
ZWRUZXh0dXJlc1tpXS5hbGxvY2F0aW5nQ29udGV4dCA9PSBjb250ZXh0KTsKKyNlbmRpZgorICAg
ICAgICAgICAgaWYgKG1fZXZpY3RlZFRleHR1cmVzW2ldLnRleHR1cmVJZCkKKyAgICAgICAgICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJl
c1tpXS50ZXh0dXJlSWQpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBtX2V2aWN0ZWRUZXh0dXJl
SWRzLmNsZWFyKCk7CisgICAgbV9ldmljdGVkVGV4dHVyZXMuY2xlYXIoKTsKK30KKwordm9pZCBU
ZXh0dXJlTWFuYWdlcjo6ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKK3sKKyAgICB1bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgIHJlZHVjZU1l
bW9yeVRvTGltaXQoMCk7CisgICAgZGVsZXRlRXZpY3RlZFRleHR1cmVzKGNvbnRleHQpOwogfQog
CiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwg
VGV4dHVyZUluZm8gaW5mbykKQEAgLTE1NSwxMiArMTgxLDE2IEBAIHZvaWQgVGV4dHVyZU1hbmFn
ZXI6OnJlbW92ZVRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQog
ICAgIG1fdGV4dHVyZXMucmVtb3ZlKHRva2VuKTsKICAgICBBU1NFUlQobV90ZXh0dXJlTFJVU2V0
LmNvbnRhaW5zKHRva2VuKSk7CiAgICAgbV90ZXh0dXJlTFJVU2V0LnJlbW92ZSh0b2tlbik7Ci0g
ICAgbV9ldmljdGVkVGV4dHVyZUlkcy5hcHBlbmQoaW5mby50ZXh0dXJlSWQpOworICAgIEV2aWN0
aW9uRW50cnkgZW50cnk7CisgICAgZW50cnkudGV4dHVyZUlkID0gaW5mby50ZXh0dXJlSWQ7Cisj
aWZuZGVmIE5ERUJVRworICAgIGVudHJ5LmFsbG9jYXRpbmdDb250ZXh0ID0gaW5mby5hbGxvY2F0
aW5nQ29udGV4dDsKKyNlbmRpZgorICAgIG1fZXZpY3RlZFRleHR1cmVzLmFwcGVuZChlbnRyeSk7
CiB9CiAKIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVUb2tlbiB0b2tlbikKIHsKLSAgICBBU1NFUlQoY29u
dGV4dCA9PSBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KTsKICAgICBUZXh0dXJlTWFwOjpp
dGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgQVNTRVJUKGl0ICE9IG1f
dGV4dHVyZXMuZW5kKCkpOwogICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0LmdldCgpLT5zZWNv
bmQ7CkBAIC0xNzcsNiArMjA3LDkgQEAgdW5zaWduZWQgVGV4dHVyZU1hbmFnZXI6OmFsbG9jYXRl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZVRva2UKICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbmZvLT5mb3Jt
YXQsIGluZm8tPnNpemUud2lkdGgoKSwgaW5mby0+c2l6ZS5oZWlnaHQoKSwgMCwgaW5mby0+Zm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOwogICAgIGluZm8tPnRleHR1
cmVJZCA9IHRleHR1cmVJZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5mby0+YWxsb2NhdGluZ0Nv
bnRleHQgPSBjb250ZXh0OworI2VuZGlmCiAgICAgcmV0dXJuIHRleHR1cmVJZDsKIH0KIApAQCAt
MjA0LDYgKzIzNyw5IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1
cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAgaW5mby5mb3JtYXQg
PSBmb3JtYXQ7CiAgICAgaW5mby50ZXh0dXJlSWQgPSAwOwogICAgIGluZm8uaXNQcm90ZWN0ZWQg
PSB0cnVlOworI2lmbmRlZiBOREVCVUcKKyAgICBpbmZvLmFsbG9jYXRpbmdDb250ZXh0ID0gMDsK
KyNlbmRpZgogICAgIGFkZFRleHR1cmUodG9rZW4sIGluZm8pOwogICAgIHJldHVybiB0cnVlOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggMTJhZDIwODAwYjZjZGM2YTJjZTdhMDQ0Zjk2ZDBh
ZjA1NTIwMDkwYS4uMjEwNWM1N2ZmOTZjMGJjYzY0YmNlMWQzMDQ5YzVmM2VmNTk1MGZlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00NSw2ICs0NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWVtb3J5TGltaXRCeXRlcywgbWF4VGV4
dHVyZVNpemUpKTsKICAgICB9CiAKKyAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0
ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgorICAgIHN0YXRpYyBzaXplX3Qg
aGlnaExpbWl0Qnl0ZXMoKTsKKyAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBD
YW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgorICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0
Qnl0ZXMoKTsKKyAgICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFz
a2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCisgICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVz
KCk7CisKICAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKIAogICAgIFRleHR1
cmVUb2tlbiBnZXRUb2tlbigpOwpAQCAtNjEsMTQgKzY4LDExIEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBhbGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlVG9rZW4pOwog
ICAgIHZvaWQgZGVsZXRlRXZpY3RlZFRleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAg
ICB2b2lkIGV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKwog
ICAgIHZvaWQgcmVkdWNlTWVtb3J5VG9MaW1pdChzaXplX3QpOwogICAgIHNpemVfdCBjdXJyZW50
TWVtb3J5VXNlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5dGVzOyB9CiAKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgdm9pZCBzZXRBc3NvY2lhdGVkQ29udGV4dERlYnVnT25seShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkgeyBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5ID0g
Y29udGV4dDsgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBhc3NvY2lhdGVkQ29udGV4dERlYnVn
T25seSgpIGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHk7IH0KLSNl
bmRpZgotCiBwcml2YXRlOgogICAgIFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5
dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCkBAIC03Nyw2ICs4MSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOwogICAg
ICAgICBib29sIGlzUHJvdGVjdGVkOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGFsbG9jYXRpbmdDb250ZXh0OworI2VuZGlmCiAgICAgfTsKIAogICAgIHZvaWQg
YWRkVGV4dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJbmZvKTsKQEAgLTkxLDExICs5OCwxNCBA
QCBwcml2YXRlOgogICAgIGludCBtX21heFRleHR1cmVTaXplOwogICAgIFRleHR1cmVUb2tlbiBt
X25leHRUb2tlbjsKIAorICAgIHN0cnVjdCBFdmljdGlvbkVudHJ5IHsKKyAgICAgICAgdW5zaWdu
ZWQgdGV4dHVyZUlkOwogI2lmbmRlZiBOREVCVUcKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9h
c3NvY2lhdGVkQ29udGV4dERlYnVnT25seTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGFs
bG9jYXRpbmdDb250ZXh0OwogI2VuZGlmCisgICAgfTsKIAotICAgIFZlY3Rvcjx1bnNpZ25lZD4g
bV9ldmljdGVkVGV4dHVyZUlkczsKKyAgICBWZWN0b3I8RXZpY3Rpb25FbnRyeT4gbV9ldmljdGVk
VGV4dHVyZXM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCBj
OTFkYmE3YzQzOTEyYWNkZTNmN2UwMDE1ZTVhNGIwMGM5ZDM3ZTlhLi44YjU2NjlkZDVlZThiNmU3
YWIxNzZhMWQwZTY2NWJjMDZjZjM1ZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTI2NSwxOSArMjY1LDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgd3Jp
dGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgIT0gaW5kZW50OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19Ci0KLXZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAotewotICAgIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMo
dHMsIGluZGVudCk7Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgInNr
aXBzRHJhdzogIiA8PCAoIW1fdGlsZXIgfHwgbV9za2lwc0RyYXcpIDw8ICJcbiI7Ci19Ci0KIFRl
eHR1cmVNYW5hZ2VyKiBUaWxlZExheWVyQ2hyb21pdW06OnRleHR1cmVNYW5hZ2VyKCkgY29uc3QK
IHsKICAgICBpZiAoIWxheWVyVHJlZUhvc3QoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgK
aW5kZXggNTg1NjkxODE0NDA2OTNmNjBmNmRkNmIyOTljYmI5ZGM4OWQxYTQ1Yy4uNjkyNmUzZDUz
YzA4NzQyMGQ0YWYxOTNlZjY1ZDA3ODE1MzQ0Yzg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmgKQEAgLTc0LDggKzc0LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3Qq
KTsKIAogICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uaAppbmRleCA3YjE1NmZiMTQwYWIwMWQzZDVkOWYxN2Y0ZTM0YmU3M2YyNzNiZTI0Li45
Zjc5MDMyNTZmYmU4ODZhYzRlZTZjOWRmNmRhYjM2NjBjZjNlNTFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAog
cHJpdmF0ZToKICAgICBzdHJ1Y3QgVGV4dHVyZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5o
CmluZGV4IDg2MmZhODhmM2ZiMDg4ZTk2ODg5MjQ4ZjgzMjRiYzQ2MjNmMDViMTEuLjIxNTUwZGZj
MTQxM2YwYjQ3NmQ1MGIwNjMyYWE4ZjUyNzliYzFjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCkBAIC01Nyw5ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbnRleHQoY29u
c3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIldlYkdMTGF5
ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hy
b21pdW1SYXRlTGltaXRUYXNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXgg
ZDg1ZWJhOGRlODgzYWJlN2UwZTA5ZTU3ZTQwMDFmZjBmNmM0ZmE1MC4uNmZjZjg0MDQwMTkyNTUy
MGMxN2U0Nzc2ZDFkZTBhNWE4MjIzZjc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5oCkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0ND
YW52YXNMYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBl
QXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIiOyB9CisKICAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3ByZW11bHRp
cGxpZWRBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAzMDBmNDcxMzNlYzhjMDQy
MjZhMzRlZTFkMDUzMzEyNDM2NmViMmM3Li5iMDJmMWVmMzE2NDRhY2U5OTVjY2Q2ZWM1OWRiMGJh
NGIwMjBlODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0yMjcsNiArMjI3LDMzIEBA
IHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBm
aXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xhCiAgICAgbGF5ZXJTb3J0ZXItPnNvcnQoZmlyc3QsIGVu
ZCk7CiB9CiAKK1N0cmluZyBDQ0xheWVySW1wbDo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK3sK
KyAgICBUZXh0U3RyZWFtIHRzOworICAgIGR1bXBMYXllcih0cywgMCk7CisgICAgcmV0dXJuIHRz
LnJlbGVhc2UoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHVtcExheWVyKFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwor
ICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsK
KyAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7CisgICAgaWYgKG1fcmVwbGlj
YUxheWVyKSB7CisgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CisgICAgICAgIHRz
IDw8ICJSZXBsaWNhOlxuIjsKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPmR1bXBMYXllcih0cywg
aW5kZW50KzMpOworICAgIH0KKyAgICBpZiAobV9tYXNrTGF5ZXIpIHsKKyAgICAgICAgd3JpdGVJ
bmRlbnQodHMsIGluZGVudCsyKTsKKyAgICAgICAgdHMgPDwgIk1hc2s6XG4iOworICAgICAgICBt
X21hc2tMYXllci0+ZHVtcExheWVyKHRzLCBpbmRlbnQrMyk7CisgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJl
bltpXS0+ZHVtcExheWVyKHRzLCBpbmRlbnQrMSk7CiB9CiAKK30KKworCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYzdkYzQ2
OTU0N2Y1YzE1ZTdhMzc3ZWY5NTdmZTRmMzg5NzVmZGMwMS4uYzVjMTg1YTEzMzNkMmVjZGExN2Fj
MDFlYWNlM2M1YWZiN2M0MDQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0xNjUsMTEgKzE2
NSwxMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQogICAgIHZvaWQgc2V0RHJh
d2FibGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZHJhd2FibGVDb250ZW50
UmVjdCA9IHJlY3Q7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKyAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0
KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwog
CisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50KTsKIAogcHJpdmF0ZToKQEAgLTE3Nyw2ICsxNzgsMTAgQEAgcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICB2b2lkIGNsZWFyQ2hpbGRMaXN0
KCk7IC8vIFdhcm5pbmc6IFRoaXMgZG9lcyBub3QgcHJlc2VydmUgdHJlZSBzdHJ1Y3R1cmUgaW52
YXJpYW50cyBhbmQgc28gaXMgb25seSBleHBvc2VkIHRvIHRoZSB0cmVlIHN5bmNocm9uaXplci4K
IAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAiTGF5ZXJDaHJvbWl1bSI7IH0KKworICAgIHZvaWQgZHVtcExheWVyKFRleHRTdHJlYW0m
LCBpbnQgaW5kZW50KSBjb25zdDsKKwogICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8gQ0NM
YXllckltcGwKICAgICBDQ0xheWVySW1wbCogbV9wYXJlbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiBtX2NoaWxkcmVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
aW5kZXggZjEyNDk1YjY1NWYzOWM3ZjY5YTRmNzBjMjRkNzdmODEzMDgxNGNiYi4uYjY5NTE0OWVi
ODg4NjIzYTExOTFiNDM5ODBiODc3NDA0OGRkNWQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFs
aXplKCkKICAgICAgICAgbV9wcm94eSA9IENDU2luZ2xlVGhyZWFkUHJveHk6OmNyZWF0ZSh0aGlz
KTsKICAgICBtX3Byb3h5LT5zdGFydCgpOwogCi0gICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcih0aGlzKSkKKyAgICBpZiAoIW1fcHJveHktPmluaXRpYWxpemVMYXllclJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFVwZGF0ZSBtX3NldHRp
bmdzIGJhc2VkIG9uIGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRl
cmVyLgpAQCAtODUsMTQgKzg1LDI1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
KCkKICAgICAvLyBXZSBjaGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNv
bW1pdCBpcyBuZWVkZWQuCiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
IAorICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
VGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIEND
TGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCiB7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NM
YXllclRyZWVIb3N0IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c3RvcCgpOwogICAgIG1fcHJv
eHkuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci5jbGVhcigpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci0+ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhjb250ZXh0KTsKIH0KIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQpA
QCAtMTA4LDcgKzExOSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVy
VHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
Ojpjb21taXRUbyIsIHRoaXMsIDApOwogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJl
cihmcmFtZU51bWJlcigpKTsKIAotICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNl
TWVtb3J5VG9MaW1pdChob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWVtb3J5UmVj
bGFpbUxpbWl0KCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5
VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CiAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
eHQoKSk7CiAKICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKG1fdXBkYXRlTGlzdCwgaG9z
dEltcGwtPmNvbnRleHQoKSk7CkBAIC0xMTcsNiArMTI4LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIGhvc3RJbXBs
LT5zZXRWaXNpYmxlKG1fdmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdw
b3J0U2l6ZSgpKTsKIAorICAgIGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNldENvbnRlbnRz
VGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1l
bW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0
QWxsVGV4dHVyZXMoKTsKKwogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3Rz
IGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIoKSkKICAgICAgICAgaG9zdEltcGwtPnNldFJv
b3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwpAQCAtMTQzLDYgKzE1Nyw4
IEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7CisgICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKDApOworCiAgICAgaWYgKHJvb3RMYXll
cigpKQogICAgICAgICByb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5jbGVhbnVwUmVzb3Vy
Y2VzUmVjdXJzaXZlKCk7CiAgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KHN1Y2Nlc3MpOwpAQCAtMjI3LDcgKzI0MywxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBjbwog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1f
dmlzaWJsZSA9IHZpc2libGU7Ci0gICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qt
PnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRl
cygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0
dXJlcygpOworICAgICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdCgpOworICAgIH0KIH0KIAog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMp
CkBAIC0yMzcsNyArMjYwLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9y
Q29udGV4dChpbnQgbnVtVGltZXMpCiAKIFRleHR1cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6
OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3Byb3h5LT5j
b250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFu
YWdlci5nZXQoKTsKIH0KIAogI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDQ4ODk0ODQ0MWQ4NWMwOWQwYjQxNzc1ZmEyYWM2NWNl
MzNjY2VhMDcuLmFjNjI1MjQ0OWZmNzg4ZGM5YjMzYTk1MGFmYmU5Mzk4OGRmNWU1MGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xNTYsNiArMTU2LDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKIAorICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJl
cyhHcmFwaGljc0NvbnRleHQzRCopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0
KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsKIApAQCAtMTgxLDYg
KzE4Myw3IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5
ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3Q7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4dHVy
ZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDlkZTIwMjlkZWM3ZDIzM2VjZWVhYWNhNTY2
NjczOTE5MzM0ZWQzZGEuLmVjMjEzMmVlZWNhNDBhN2ExNmIxODUwNDRlNDdmMDMyZjE2MjgxODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC03NCw3ICs3NCw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKICAgICBB
U1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigp
LT5yb290TGF5ZXIoKSkKKyAgICBpZiAobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSkKICAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CiAKICAgICArK21fZnJhbWVOdW1i
ZXI7CkBAIC0xMTYsMzEgKzExNiwyNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJv
b3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlciAmJiAhdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVy
ZXMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1
cmVzKCk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBpbXBsSGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCkKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKIHsKLSAgICAv
LyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0aGVuIHdlIGFyZSByZWNvdmVyaW5nIGZyb20g
YSBsb3N0IGNvbnRleHQKLSAgICBib29sIHJlY3JlYXRpbmdSZW5kZXJlciA9IG1fbGF5ZXJSZW5k
ZXJlcjsKLQotICAgIC8vIEZpcnN0IHRpbWUgbGF5ZXJSZW5kZXJlciBjcmVhdGlvbgogICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXI7Ci0gICAgaWYgKCFyZWNy
ZWF0aW5nUmVuZGVyZXIpCi0gICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7Ci0gICAgZWxzZQotICAgICAg
ICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9sYXllclJl
bmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0KTsKLQorICAgIGxheWVyUmVuZGVyZXIgPSBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKIAogICAgIC8vIElm
IGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRp
bmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKICAgICAvLyBhbmQgdHJ5IGNyZWF0aW5n
IHRoZSByZW5kZXJlciBhZ2Fpbi4KICAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5n
cy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKICAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFp
bnRpbmcgPSBmYWxzZTsKIAotICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikKLSAgICAg
ICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBs
SGFjaywgdGhpcywgY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93
bmVyKCksIHRoaXMsIGNvbnRleHQpOworICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7CisgICAgfQorCisgICAgLy8gSWYg
d2UgaGFkIGEgcHJldmlvdXMgbGF5ZXIgcmVuZGVyZXIsIHRoZW4gaXRzIGNvbnRleHQgbXVzdCBo
YXZlIGJlZW4gbG9zdCBhbG9uZyB3aXRoIGFsbCBvZiBpdHMgcmVzb3VyY2VzLgorICAgIC8vIExl
dCB0aGUgb2xkIGxheWVyIHJlbmRlcmVyIGtub3duIGl0cyByZXNvdXJjZXMgYXJlIGdvbmUuCisg
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldENv
bnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKDApOworICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmNsb3NlKCk7CiAgICAgfQogCiAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA1M2E0ZDU1MjRhNTdiODM1
ZGU0ZDgzMjBlYWMwYzY0OWU2NjA2MmJmLi4xYzRlNjc3ZmMxZTczNmM0OWRiOTU0NTI4ODFlNWU2
NWI5Y2NjOGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgIGlu
dCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KIAotICAgIGJv
b2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBib29sIGluaXRpYWxpemVMYXllclJl
bmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGlzQ29udGV4
dExvc3QoKTsKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSB7IHJl
dHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CkBAIC03Niw2ICs3
Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdw
b3J0U2l6ZSk7CiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV92aWV3cG9ydFNpemU7IH0KIAorICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEND
TGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIGludCBtX3NvdXJjZUZy
YW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggOWI0YzUzNjcy
M2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3Ny4uZTRjOGIyMGE3ODgzOGFkYmI2ZTRmNWY5
ZTFmZjJmNTEzNmQ4ZDQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC01
MSw2ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXll
ckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmco
KSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9CisKICAgICB1bnNpZ25lZCBtX3RleHR1
cmVJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaAppbmRleCBhYWU2Njk0NGIwNTM3ZGI2YjMwNTdmNWIxMWRj
NWViMGVlNjEzZDkwLi5mNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFiYTlhNjlkZmFjNmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcm94eS5oCkBAIC01OCwxMCArNTgsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBi
b29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpID0gMDsKIAogICAgIHZpcnR1YWwgY29u
c3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
IGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwogCkBAIC04MCw5ICs4MSw2IEBAIHB1YmxpYzoK
ICAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxsIGRvZXMgc2No
ZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hp
bGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1
bXMKLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkg
PSAwOwotCiBwcm90ZWN0ZWQ6CiAgICAgQ0NQcm94eSgpIHsgfQogICAgIGZyaWVuZCBjbGFzcyBT
Y29wZWRTZXRJbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cAppbmRleCAwYWYzMzBkYmQ4ZjQ2N2ZkYWZkN2RhNDAzNmYwNGJjODQ1MTYzZGUxLi4yM2NjMmM5
OTk1YTRjZjkzNWQwMDI1MjE4OGZmNGQ5MzY3Nzk3MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw5IEBAIGJvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1w
bDsKIH0KIAotYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0
LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzAsNyArMTMxLDcgQEAgYm9vbCBDQ1NpbmdsZVRocmVh
ZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFj
aykKIAogICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgICAgICBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJI
YWNrLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIH0KIH0KIApAQCAtMTQ2LDYgKzE0Nywy
NCBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQg
bnVtVGltZXMpCiAgICAgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbCA9IG51bVRpbWVzIC0gMTsK
IH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQor
ICAgIC8vIENvbW1pdCBpbW1lZGlhdGVseQorICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0
KCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOworICAg
IH0KKyNlbHNlCisgICAgLy8gU2luZ2xlIHRocmVhZGVkIG9ubHkgd29ya3Mgd2l0aCBUSFJFQURF
RF9DT01QT1NJVElORy4KKyAgICBDUkFTSCgpOworI2VuZGlmCisKK30KKwogdm9pZCBDQ1Npbmds
ZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKQEAgLTE3MCwxNiArMTg5LDEyIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6c3RvcCgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICB7CiAgICAgICAg
IFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxl
dGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9CiAgICAgbV9sYXllclRyZWVI
b3N0ID0gMDsKIH0KIAotVGV4dHVyZU1hbmFnZXIqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKQotewotICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5s
YXllclJlbmRlcmVyKCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKLX0KLQogI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5n
IHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQogdm9p
ZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCkBAIC0xOTcsNiAr
MjEyLDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgp
CiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQog
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX2dyYXBoaWNzQ29udGV4
dExvc3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dDsKQEAgLTIwNyw3ICsyMjMsNyBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6
OnJlY3JlYXRlQ29udGV4dElmTmVlZGVkKCkKIAogICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAg
IEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIGlmIChtX2xheWVyVHJlZUhv
c3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KSkgeworICAgICAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCkp
IHsKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRl
eHQodHJ1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dExvc3QgPSBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
CmluZGV4IDc2NWI4NTlmOTUxNTAyNmU5ZDc4NzUyMWQ0OTlkNTFhOTgwZjhmOTcuLmJiYmU1ZjU5
MDc2MmJlMThhMjg3NGE1ODhlYzQzNzBhNjU5N2Y5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgKQEAgLTQ0LDE3ICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxS
ZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJI
YWNrKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKTsKICAgICB2
aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0
KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21p
dW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVh
bCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOwotCiAgICAgLy8gU3Bl
Y2lhbCBjYXNlIGZ1bmN0aW9ucy4KICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAg
IHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAK
aW5kZXggMWE4ODM4NGZlYTJiYWY1YjQ2MzIyZjA0YmU4YWJiYzk5MTVhOTk0OS4uMzI0NmE4NGI1
YzRkMzRkODk2NWY3N2RlM2IyZjhmMTM5ZmRiYzY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBj
b25zdAogICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwogfQogCi1ib29sIENDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNr
KQorYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiB7CiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMTE1LDgg
KzExNSw3IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NM
YXllclRyZWVIb3N0KiBvd25lckhhY2spCiAgICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkOwog
ICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mob3duZXJIYWNrKSwgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2VzcygmY2FwYWJpbGl0aWVzKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRp
YWxpemVTdWNjZWVkZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7
CiAgICAgY29tcGxldGlvbi53YWl0KCk7CiAKICAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkK
QEAgLTEzNCw2ICsxMzMsMTcgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNv
bnRleHQoaW50IG51bVRpbWVzKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lk
IENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRoaXMsIDApOwor
ICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhy
ZWFkKSk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzIsMTIgKzE4Miw2IEBAIHZv
aWQgQ0NUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAot
VGV4dHVyZU1hbmFnZXIqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiB2b2lkIEND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKQEAgLTIyOSw2ICsyMzMsMTQgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5
ZXJzT25DQ1RocmVhZCgpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMo
KTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9p
ZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQogewog
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQiLCB0aGlzLCAwKTsKQEAgLTI1MSwxMiArMjYzLDEyIEBAIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVy
SGFjaywgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKiBjYXBhYmlsaXRpZXMpCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dFB0ciwgQ0NDb21w
bGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMqIGNhcGFiaWxpdGllcykKIHsKICAgICBUUkFDRV9FVkVOVCgi
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkIiwgdGhpcywg
MCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQoYWRvcHRSZWYoY29udGV4dFB0cikpOwotICAgICppbml0aWFsaXplU3Vj
Y2VlZGVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3du
ZXJIYWNrLCBjb250ZXh0KTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVl
SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIGlmICgqaW5p
dGlhbGl6ZVN1Y2NlZWRlZCkKICAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKICAgICBjb21wbGV0aW9uLT5zaWdu
YWwoKTsKQEAgLTI2Niw2ICsyNzgsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhv
c3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVh
ZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRy
ZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRl
eHQoKSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDI0ZTFmZTEzZTcxOTc0
NzY0NmNjZjU1MmIzOGZhOGIzYjNiYzA1NDYuLjI0Njc3MjQwY2FhYTY5MTI2NzZkN2VkZmUwZmFi
MmNjMjEyNjJlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTQ1LDE3ICs0NSwxNSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogICAg
IHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNT
dGFydGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVy
KENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFy
eSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRl
cmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJl
TWFuYWdlcigpOwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXll
clRyZWVIb3N0Kik7CiAKQEAgLTY3LDcgKzY1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbW1p
dE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbkND
VGhyZWFkKCk7CiAgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqKTsKLSAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xh
eWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9v
bCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAg
IHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKEdyYXBoaWNzQ29udGV4dDNE
KiwgQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQo
KTsKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwogICAgIHZv
aWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xv
c2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmNwcAppbmRleCAxYTc1ODM0NGVjNTgzMzc5ZTZiNjRkZjAxMTRmMTAyYjA0OTAyOTYy
Li4xMjNkODUwMTU1OGNhNDYyZDZiNDBjNzQ0NjM0OGMzNWQ3NWUxYjI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtNzUsOCArNzUsOSBAQCB2b2lkIENDVGlsZWRMYXll
ckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQogCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmR1
bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7Ci0g
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclBy
b3BlcnRpZXModHMsIGluZGVudCk7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAg
dHMgPDwgInNraXBzRHJhdzogIiA8PCAoIW1fdGlsZXIgfHwgbV9za2lwc0RyYXcpIDw8ICJcbiI7
CiB9CiAKIERyYXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6dGlsZUF0KGludCBpLCBpbnQg
aikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCBjZWVjNWYyNTMzOWMy
ZmNlZDMxNTI4ZWRmODkxYTM2MjliNjMyMDI0Li5kMGRlMzg3MTY3NjlkOTZlYTBjY2Q4NGJmNDFm
ZmQwMjUzNDgwYWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC02Nyw2ICs2
Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaWxlZExheWVySW1wbChp
bnQgaWQpOwogCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CisKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0
aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3QuCiAgICAgdm9pZCBkcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKaW5kZXggYmQxNjM3NmJiNWY0NzI2MDllYzQxMGUwZGVmMzI5NzU3NjdkZjA5Yi4u
NmJmMzUyOTFlYzBiZDBmOGRhZDkwZjUxODhlNWI1YTMxNWMzZWNiNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KKwog
ICAgIHN0cnVjdCBUZXh0dXJlIHsKICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBpZDsKICAgICAg
ICAgSW50U2l6ZSBzaXplOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107066</attachid>
            <date>2011-09-12 11:15:31 -0700</date>
            <delta_ts>2011-09-12 11:52:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67440-20110912111530.patch</filename>
            <type>text/plain</type>
            <size>61457</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ5NjYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVu
ZGVyc3VyZmFjZS1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3ItY29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhw
ZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZTQ5NWIyNmI5OWU1YzRhMTk3YzlkNjUyYTc5MTlhYmJl
NjM2MjcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI4NjYKemNtZUFTQE4/KG9sSHlgdVZCcSFp
YTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1RuNikkCnpHP1V+KzN2PGc8
TCRlZVVPVmVhP0d0PE9XaXhkK1JRJWozUGdIKDtyJVJWcUxhMkBlPGFTVy1MXlkrRkAtYWAlbwp6
dTh1dCNYT19saG1UVWBvQFRRWUZUa1k8WGNLXy0jWFA2bHAmSn0tV1V9KUdhN3tTMGAqdlFIdEFk
SkROaitNUHUKelUwWm1wS0tsN0JUU2tULWlncC1FRmcxO2VVPTdRRzUwO0l8WD1WOGczX0M+U2Jy
PjNFOUFJTVQ7MmRSKTJFdTRjCnI3fGpLdnhuTUxHak9LI1RUcmZ5LSE0M0ErZTd2ZyohfGMzKWpi
SHsoUzNqM15QNjxyXzFYbE13CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3It
Y29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZlOTY5Mjdh
ZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1j
b250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJm
YWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0ZGExMzgxMDE0YzBjZTg2MmY4MjAzNzdhYmY5MThhOGRh
NjE0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Nv
bXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAucmVkIHsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKworICAgIC5ncmVlbiB7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKworICAgIGRpdiB7CisgICAgICBoZWlnaHQ6
IDEwMHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAgIH0KKworICAgIC5jb21wb3NpdGVkIHsK
KyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgIH0KKworICAgIC5y
ZW5kZXJTdXJmYWNlIHsKKyAgICAgIG9wYWNpdHk6IDAuNTsKKyAgICB9CisgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBJbiB0aGUgcGl4ZWwgcmVzdWx0cywgb25lIGdyZWVuIHNx
dWFyZXMgc2hvdWxkIGJlIHZpc2libGUuIC0tPgorICA8ZGl2IGNsYXNzPSJyZWQgcmVuZGVyU3Vy
ZmFjZSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBjbGFzcz0icmVkIGNvbXBvc2l0ZWQiPjwvZGl2
PgorICA8L2Rpdj4KKyAgPHA+CisgIDxzY3JpcHQ+CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KHRydWUpOyAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWZ1bCBhcyBhIHBpeGVsIHRlc3QuCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzcGxheSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmxvc2VDb21wb3Np
dG9yQ29udGV4dCgxKTsKKyAgfQorICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpOworICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgicmVkIik7CisgIHRhcmdl
dC5jbGFzc0xpc3QuYWRkKCJncmVlbiIpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNGU5ODUyYTllYmRjNTZiNTViOTA1ZTk0NjhlZmJmNDY4MTEwM2I4Li44
NGQ3MjQ0NDVmYTdiNGQ0OGZhYTYyY2Q2YzczNGQwYTNhMzczOWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTEgQEAKKzIwMTEtMDktMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2Vy
IGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1vdmVzIHRoZSBjb250
ZW50cyBUZXh0dXJlTWFuYWdlciBvdmVyIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QsIHdoZXJlIGl0
IGJlbG9uZ3MsIGFuZCBhZGRzIGluIGEgY29tbWl0IHBhdGgKKyAgICAgICAgdG8gbWFrZSBzdXJl
IHRoYXQgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgZXZlbiBpZiB0aGUgcGFnZSBpcyBub3QgdmlzaWJs
ZS4gIFRoaXMgbW92ZSBhbHNvIHJlbW92ZWQgdGhlIG5lZWQgZm9yCisgICAgICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSdzIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyLCBzbyBJIHJlbW92ZWQgdGhh
dCBhcyB3ZWxsLiAgVGhhdCBtZWFudCBtb3ZpbmcgdGhlCisgICAgICAgIGxheWVyVHJlZUFzVGV4
dCgpIGxvZ2ljIG92ZXIgdG8gdGhlIENDTGF5ZXJJbXBsIHNpZGUsIHdoaWNoIGlzIHdoZXJlIGl0
IHJlYWxseSBiZWxvbmdlZCBhbnl3YXkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBj
b21wb3NpdGluZy8gdGVzdHMgYW5kCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0
b3IvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJmYWNlLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5k
ZXJTdXJmYWNlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisK
IDIwMTEtMDktMTIgIEFya28gU2FoYSAgPGFya29AbW90b3JvbGEuY29tPgogCiAgICAgICAgIFNl
bGVjdHN0YXJ0IGlzIG5vdCBmaXJlZCB3aGVuIHNlbGVjdGlvbiB3YXMgY3JlYXRlZCBieSBhcnJv
dyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGVhMjZkZmUxODdlNjJj
NTc1NTg1N2FmMTE3YWMzNTc0M2U1Y2JkNWQuLjRjMmU0NDA4NWY3NjQ0M2FiMTIxODBkNzc0MDlj
NDhiNWZkNzRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTUyLDggKzUy
LDYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xheWVyIjsgfQot
CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7CiAg
ICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApp
bmRleCBiYWM0MWY5Yzg4YTRmMDkxMzFhMTRiNjk0YTRmYWIwNDkyZDlmNTRlLi45NDA5YWUxMmU5
ZjMyNjc1MjM1MGFlNjBmNGQzMGFmOTkyZmJjOTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKQEAgLTU0LDggKzU0LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biAiQ29udGVudExheWVyIjsgfQotCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBkNjk3OTEzMWI1ODhkNTIyODMzOWFiNTNlYWYwYjAz
Yjk4MTM3ZmRlLi40YWZlMDVkMTUxZjhiMzYzNjI5NjMwNDMzMTBhMjA5NDk0MTgyOTU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkltYWdl
TGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgSW1hZ2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJjZDRkNzc4
OTliMmI5YjM1ZTdiYzMzZGJmMjA2Y2Y4OGFiMWE5NjYuLmEwZDM0NjU2ZThjMTVkNTJkMDVlNDAy
ZDI5MWY4NTQwNTIzOGY0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNzYsNDggKzM3
Niw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotU3RyaW5nIExheWVyQ2hyb21pdW06
OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICBkdW1w
TGF5ZXIodHMsIDApOwotICAgIHJldHVybiB0cy5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50
IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lk
IExheWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCBsYXllclR5cGVB
c1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7Ci0gICAgZHVtcExheWVyUHJvcGVy
dGllcyh0cywgaW5kZW50KzIpOwotICAgIGlmIChtX3JlcGxpY2FMYXllcikgewotICAgICAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzIpOwotICAgICAgICB0cyA8PCAiUmVwbGljYTpcbiI7Ci0g
ICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5ZXIodHMsIGluZGVudCszKTsKLSAgICB9Ci0g
ICAgaWYgKG1fbWFza0xheWVyKSB7Ci0gICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7
Ci0gICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKLSAgICAgICAgbV9tYXNrTGF5ZXItPmR1bXBMYXll
cih0cywgaW5kZW50KzMpOwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPmR1bXBMYXllcih0cywg
aW5kZW50KzEpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7Ci0gICAgdHMgPDwgImlkOiAiIDw8IGlkKCkgPDwgIiBkcmF3c0NvbnRlbnQ6ICIg
PDwgZHJhd3NDb250ZW50KCkgPDwgIiBib3VuZHMgIiA8PCBtX2JvdW5kcy53aWR0aCgpIDw8ICJ4
IiA8PCBtX2JvdW5kcy5oZWlnaHQoKSA8PCAiIHVzZXNMYXllclNjaXNzb3I6ICIgPDwgdXNlc0xh
eWVyU2Npc3NvcigpCi0gICAgICAgIDw8ICIgc2Npc3NvclJlY3Q6ICgiIDw8IG1fc2Npc3NvclJl
Y3QueCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC55KCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JS
ZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpIDw8ICIpIgotICAg
ICAgICA8PCAiIHZpc2libGVMYXllclJlY3Q6ICgiIDw8IG1fdmlzaWJsZUxheWVyUmVjdC54KCkg
PDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QueSgpIDw8ICIsICIgPDwgbV92aXNpYmxlTGF5
ZXJSZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QuaGVpZ2h0KCkgPDwg
IikiCi0gICAgICAgIDw8ICJcbiI7Ci0KLX0KLQogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewogICAgIHJldHVybiBDQ0xheWVySW1w
bDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOGQzMGQ3ZDQ0NWEx
MWY0YTY2ZWU2MTU0YmNhMzMwNTMzMmJkMzg0Ny4uN2Y2ZmZhNzRjNWY2YjJmMWZlYTk3MjhkODcz
NzE2ZTQ1ZGVjNjk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTcyLDcgKzE3Miw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICB2b2lk
IGRyYXdEZWJ1Z0JvcmRlcigpOwotICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCkBAIC0yMjAsMTEgKzIxOSw2IEBA
IHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkdW1wTGF5ZXIoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVB
c1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJMYXllckNocm9taXVtIjsgfQotICAgIHZpcnR1YWwg
dm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
LQogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNEaXJ0eTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNWQ1ZTRjNThjYTJh
MzhhMDcwNTdjMGRkNmU5NzllNGNjOTI5YWYyOS4uYzcyODE2OTc1ZDIyNDQ4NzZlMTgxY2I5MDc0
MDdiOWVlYTE1YWIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBA
IC03MCwyMCArNzAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIEZJWE1FOiBNYWtlIHRoaXMgbGltaXQgYWRqdXN0YWJsZSBhbmQgZ2l2ZSBpdCBh
IHVzZWZ1bCB2YWx1ZS4KLQotLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBh
bGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLXN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9y
eUhpZ2hMaW1pdEJ5dGVzID0gMTI4ICogMTAyNCAqIDEwMjQ7Ci0vLyBQcmVmZXJyZWQgdGV4dHVy
ZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotc3RhdGljIHNpemVfdCB0
ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0Qnl0ZXMgPSA2NCAqIDEwMjQgKiAxMDI0OwotLy8gVGhl
IG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1
cmVzLgotc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyA9IDMgKiAxMDI0
ICogMTAyNDsKLQotc2l6ZV90IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZU1lbW9yeVJl
Y2xhaW1MaW1pdCgpCi17Ci0gICAgcmV0dXJuIHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRl
czsKLX0KLQogbmFtZXNwYWNlIHsKIAogc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhv
TWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkK
QEAgLTE0MywyNCArMTI5LDIyIEBAIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBs
KiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCitQYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXIsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93bmVyLT5zZXR0aW5ncygp
LmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGlu
Zyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1wbCwgY29udGV4dCkpKTsKKyAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVy
LT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxheWVyUmVu
ZGVyZXIucmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXJJbXBsLAor
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVI
b3N0SW1wbCogb3duZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9vd25l
cihvd25lcikKLSAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwg
bV96b29tQW5pbWF0b3JTY2FsZSgxKQpAQCAtMjEwLDggKzE5NCw4IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShD
Q0xheWVySW1wCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSgpCiB7Ci0gICAg
aWYgKHJvb3RMYXllckltcGwoKSkKLSAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXll
ckltcGxSZWN1cnNpdmUocm9vdExheWVySW1wbCgpKTsKKyAgICBpZiAocm9vdExheWVyKCkpCisg
ICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKHJvb3RMYXll
cigpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dCgpCkBAIC0yMjYsMTggKzIxMCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
ZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhcioKICAgICAg
ICAgTE9HX0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRj
b21tYW5kOiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIHN0YXRpY19jYXN0
PGludD4oZXJyb3IpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VU
ZXh0dXJlcygpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclN1cmZh
Y2VUZXh0dXJlcygpCiB7Ci0gICAgLy8gUmVkdWNlcyB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB0byB0
ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyBieSBkZWxldGluZyBub24gcm9vdCBsYXllcgotICAg
IC8vIHRleHR1cmVzLgotICAgIG1fb3duZXItPm5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpLT5w
cm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7Ci0gICAg
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotICAgIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5n
ZXQoKSk7Ci0gICAgLy8gRXZpY3QgYWxsIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCi0gICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0gICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0g
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyht
X2NvbnRleHQuZ2V0KCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5ldmlj
dEFuZERlbGV0ZUFsbFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQpAQCAtMjU3LDE4ICsyMzIsMTYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIC8vIFJlbmRlcldp
ZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7
CiAKLSAgICBpZiAoIXJvb3RMYXllckltcGwoKSkKKyAgICBpZiAoIXJvb3RMYXllcigpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IE5vIG5lZWQgdG8gd2FsayB0aGUgdHJlZSBoZXJl
LiBUaGlzIGNvdWxkIGJlIHBhc3NlZCB2aWEgZHJhdy4KLSAgICByb290TGF5ZXJJbXBsKCktPnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CisgICAgcm9vdExheWVyKCktPnNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CiAKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFu
YWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKyAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0
ZXMpOwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotCi0gICAgaWYgKHRleHR1cmVNZW1vcnlS
ZWNsYWltTGltaXRCeXRlcyA+IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9y
eVVzZUJ5dGVzKCkpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyAtIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIGlmIChUZXh0
dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSA+IG1fY29udGVudHNUZXh0dXJlTWVtb3J5
VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpIC0gbV9jb250
ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQogICAgICAgICBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5n
ZXQoKSk7CkBAIC0yODMsNyArMjU2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKLSAgICBDQ0xheWVy
SW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKKyAgICBDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
CiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC00NDcsNyArNDIw
LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogTWFuYWdlZFRleHR1cmUqIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4g
c2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVySW1wbCgpID8gcm9vdExh
eWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKKyAgICBy
ZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVyKCkgPyByb290
TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgp
CkBAIC02MDMsMTIgKzU3Niw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmZsdXNoKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBtX2NhcGFiaWxp
dGllcy5tYXhUZXh0dXJlU2l6ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgp
KTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRl
eHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgpKTsKLSNlbmRpZgorICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6
aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC04MTcsMjkgKzc4NSwyMiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKLSAgICAvLyBDbGVhciB0
aWxlcnMgYmVmb3JlIHRoZSB0ZXh0dXJlIG1hbmFnZXIsIGFzIHRoZXkgaGF2ZSByZWZlcmVuY2Vz
IHRvIHRleHR1cmVzLgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxs
VGV4dHVyZXMoKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRv
TGltaXQoMCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xl
YXIoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4
dHVyZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5
VG9MaW1pdCgwKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZp
Y3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMpOworICAgIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIH0KIAogU3RyaW5n
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKICAgICBU
ZXh0U3RyZWFtIHRzOwogICAgIGlmIChyb290TGF5ZXIoKSkgewotICAgICAgICB0cyA8PCByb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgdHMg
PDwgcm9vdExheWVyKCktPmxheWVyVHJlZUFzVGV4dCgpOwogICAgICAgICB0cyA8PCAiUmVuZGVy
U3VyZmFjZXM6XG4iOwotICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEsIHJvb3RMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEs
IHJvb3RMYXllcigpKTsKICAgICB9CiAgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0Cit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBp
bnQgaW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmR1
bXBTdXJmYWNlKHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCBhZmJlMjJkODhlMGRlZmVjMWVmMGUxY2FhYTAxNGI5ZWI5YmI0NjhjLi41ZDgwNGFkMWYx
NjIyMDg2ODc2ZmRjZDI0MWViNjdlY2IxMDBjNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q7CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBs
YXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVm
Q291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJU
cmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAKICAgICAvLyBN
dXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVt
IHRvIGRlc3RydWN0CiAgICAgdm9pZCBjbG9zZSgpOwpAQCAtODQsMTkgKzg0LDEzIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3du
ZXItPnNldHRpbmdzKCk7IH0KICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBj
YXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCi0gICAgQ0NM
YXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KLSAgICBjb25zdCBDQ0xh
eWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQotCi0gICAgR3Jh
cGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9vd25lci0+cm9vdExheWVyKCk7IH0K
LSAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQotCi0gICAgQ0NMYXllckltcGwqIHJvb3RMYXllckltcGwoKSB7
IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0KLSAgICBjb25zdCBDQ0xheWVySW1w
bCogcm9vdExheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIo
KTsgfQorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290
TGF5ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQoKTsKICAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVySW1wbC0+dmlld3BvcnRTaXplKCk7IH0KKyAgICBj
b25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNp
emUoKTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCku
d2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6
ZSgpLmhlaWdodCgpOyB9CiAKQEAgLTEzOSw3ICsxMzMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCk7
CiAKLSAgICBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogICAgIFRleHR1cmVNYW5h
Z2VyKiByZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogCiAgICAgQ0NIZWFkc1VwRGlzcGxheSog
aGVhZHNVcERpc3BsYXkoKSB7IHJldHVybiBtX2hlYWRzVXBEaXNwbGF5LmdldCgpOyB9CkBAIC0x
NTAsMTcgKzE0MywxNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAot
ICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVzKCk7CiAKICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCiAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwogCi0gICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gdGhlIGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlciBo
YXMgbW92ZWQgdG8gQ0NMYXllclRyZWVIb3N0LgotICAgIHN0YXRpYyBzaXplX3QgdGV4dHVyZU1l
bW9yeVJlY2xhaW1MaW1pdCgpOworICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKSB7IG1fY29udGVudHNU
ZXh0dXJlTWVtb3J5VXNlQnl0ZXMgPSBjb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlczsgfQog
CiBwcml2YXRlOgotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKQEAgLTE3OSwxNyArMTcxLDE0IEBAIHByaXZhdGU6CiAKICAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mLCBj
b25zdCBSZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25z
dCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAogICAgIHZvaWQgY2xlYXJS
ZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIAotICAg
IC8vIEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCi0gICAgQ0NMYXllclRyZWVI
b3N0KiBtX293bmVyOwotCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7Cisg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lcjsKIAogICAgIExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKQEAgLTIyMCw3ICsyMDksNyBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4gbV92aWRlb0xheWVyUkdC
QVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0+IG1fdmlk
ZW9MYXllcllVVlByb2dyYW07CiAKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlcjsKKyAgICBzaXplX3QgbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VC
eXRlczsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyOwogCiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+IG1faGVhZHNVcERpc3BsYXk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKaW5kZXggNzkwYzcwZjAyN2FjYmExMzgxNTM0ZmVlY2Fh
N2Q3NDdiMTM3ODUwYi4uZjFmODE4YjdlYzdlYTUwNmRkNTRhY2NkMjA5OWQ1NTNhYzdlZWRmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFu
YWdlZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcApAQCAtODMsNyArODMsNiBAQCB2b2lkIE1hbmFnZWRU
ZXh0dXJlOjp1bnJlc2VydmUoKQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXIt
Pmhhc1RleHR1cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1h
bmFnZXItPmFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJl
SWQpCiAgICAgICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0
dXJlKGNvbnRleHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CkBAIC05Miw3ICs5MSw2IEBAIHZv
aWQgTWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1
cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1hbmFnZXItPmFz
c29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJlSWQpCiAgICAg
ICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0dXJlKGNvbnRl
eHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg1MmRjMmVhNmZkMGQ3ZDg0MTU0Yjk0OTI0
ODI3NDhiN2FkNmEyOGIuLmQxY2ZjODAyOWViMjFmNGYyNmMyYjVjZTdlYjY4ZTA2NDNjMTkzYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKQEAgLTQ2LDkgKzQ2LDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKIAot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
CmluZGV4IGE1ZmQ3NGIxOTAyMGZmNDIxZDQ2NTdmN2VjZGU5N2MzZmIyYzE4ZTkuLjczZjNhYjI3
YTlhNTkxYzJlNjBiNWQ1ZTI3ZTliYTIxOGRmMWYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmNwcApAQCAtNTksMjcgKzU5LDUgQEAgRmxvYXRSZWN0IFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGRyYXdh
YmxlQ29udGVudFJlY3Q7CiB9CiAKLVN0cmluZyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Om5hbWUo
KSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3VyZmFjZShpZD0l
ZCxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVyLT5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytp
KQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgbmFtZSgpIDw8ICJcbiI7Ci0KLSAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzEpOwotICAgIHRzIDw8ICJjb250ZW50UmVjdDogKCIgPDwg
bV9jb250ZW50UmVjdC54KCkgPDwgIiwgIiA8PCBtX2NvbnRlbnRSZWN0LnkoKSA8PCAiLCAiIDw8
IG1fY29udGVudFJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QuaGVpZ2h0KCkK
LSAgICAgICAgPDwgIiBzY2lzc29yUmVjdDogKCIgPDwgbV9zY2lzc29yUmVjdC54KCkgPDwgIiwg
IiA8PCBtX3NjaXNzb3JSZWN0LnkoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3Qud2lkdGgoKSA8
PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QuaGVpZ2h0KCkgPDwgIikiCi0gICAgICAgIDw8ICJcbiI7
Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDRhMDYyYzU2NDBmZDQ0OTE4ZDI5YjkzYzY2
OWI5Mjc5NDY4NDMzNzEuLjhjMmZiNjk4YTQ1M2ZlZDliMTdkM2FjMWZhZTM1YmYwN2EwNmQ5OGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC01NCw5ICs1NCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2b2lkIGRyYXcoY29uc3Qg
SW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwogCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsK
LSAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQog
ICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBp
bmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCiAgICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJl
Y3QoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDhmYTA2NTFiOTg1ZTlm
OWM0OWRmYjM1NTYwODE3YzYyOTNhNmMzNzUuLjcwZDg0Y2NlMTM5YTBlMjUzZDZkNTJhZWQzOWJk
NjQ4YjNkNTcyMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTQ0LDYgKzQ0LDIxIEBA
IHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoSW50U2l6ZSBzaXplLCBHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KQogICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogY29t
cG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CiB9CiAKK3NpemVfdCBUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQoreworICAgIHJldHVybiAxMjggKiAxMDI0ICogMTAy
NDsKK30KKworc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpCit7Cisg
ICAgcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7Cit9CisKK3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6
bG93TGltaXRCeXRlcygpCit7CisgICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKK30KKwogVGV4
dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRl
cykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKQEAgLTEzOSwxMiArMTU0LDIzIEBAIHZvaWQg
VGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5m
byBpbmZvKQogCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpkZWxldGVFdmljdGVkVGV4dHVyZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV9hc3Nv
Y2lhdGVkQ29udGV4dERlYnVnT25seSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V2
aWN0ZWRUZXh0dXJlSWRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0
dXJlSWRzW2ldKQotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1
cmUobV9ldmljdGVkVGV4dHVyZUlkc1tpXSkpOworICAgIGlmIChjb250ZXh0KSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ldmljdGVkVGV4dHVyZXMuc2l6ZSgpOyArK2kpIHsK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBBU1NFUlQobV9ldmljdGVkVGV4dHVyZXNbaV0u
YWxsb2NhdGluZ0NvbnRleHQgPT0gY29udGV4dCk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICht
X2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0dXJlSWQpCisgICAgICAgICAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9ldmljdGVkVGV4dHVyZXNbaV0udGV4dHVyZUlk
KSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgbV9ldmljdGVkVGV4dHVyZUlkcy5jbGVhcigpOwor
ICAgIG1fZXZpY3RlZFRleHR1cmVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6
OmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7
CisgICAgdW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KDAp
OworICAgIGRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhjb250ZXh0KTsKIH0KIAogdm9pZCBUZXh0dXJl
TWFuYWdlcjo6cmVtb3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1cmVJbmZvIGlu
Zm8pCkBAIC0xNTUsMTIgKzE4MSwxNiBAQCB2b2lkIFRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0
dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4dHVyZUluZm8gaW5mbykKICAgICBtX3RleHR1cmVz
LnJlbW92ZSh0b2tlbik7CiAgICAgQVNTRVJUKG1fdGV4dHVyZUxSVVNldC5jb250YWlucyh0b2tl
bikpOwogICAgIG1fdGV4dHVyZUxSVVNldC5yZW1vdmUodG9rZW4pOwotICAgIG1fZXZpY3RlZFRl
eHR1cmVJZHMuYXBwZW5kKGluZm8udGV4dHVyZUlkKTsKKyAgICBFdmljdGlvbkVudHJ5IGVudHJ5
OworICAgIGVudHJ5LnRleHR1cmVJZCA9IGluZm8udGV4dHVyZUlkOworI2lmbmRlZiBOREVCVUcK
KyAgICBlbnRyeS5hbGxvY2F0aW5nQ29udGV4dCA9IGluZm8uYWxsb2NhdGluZ0NvbnRleHQ7Cisj
ZW5kaWYKKyAgICBtX2V2aWN0ZWRUZXh0dXJlcy5hcHBlbmQoZW50cnkpOwogfQogCiB1bnNpZ25l
ZCBUZXh0dXJlTWFuYWdlcjo6YWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlVG9rZW4gdG9rZW4pCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV9hc3Nv
Y2lhdGVkQ29udGV4dERlYnVnT25seSk7CiAgICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIEFTU0VSVChpdCAhPSBtX3RleHR1cmVzLmVuZCgp
KTsKICAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZpdC5nZXQoKS0+c2Vjb25kOwpAQCAtMTc3LDYg
KzIwNyw5IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVUb2tlCiAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW5mby0+Zm9ybWF0LCBpbmZvLT5zaXpl
LndpZHRoKCksIGluZm8tPnNpemUuaGVpZ2h0KCksIDAsIGluZm8tPmZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKICAgICBpbmZvLT50ZXh0dXJlSWQgPSB0ZXh0dXJl
SWQ7CisjaWZuZGVmIE5ERUJVRworICAgIGluZm8tPmFsbG9jYXRpbmdDb250ZXh0ID0gY29udGV4
dDsKKyNlbmRpZgogICAgIHJldHVybiB0ZXh0dXJlSWQ7CiB9CiAKQEAgLTIwNCw2ICsyMzcsOSBA
QCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4s
IEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIGluZm8uZm9ybWF0ID0gZm9ybWF0OwogICAg
IGluZm8udGV4dHVyZUlkID0gMDsKICAgICBpbmZvLmlzUHJvdGVjdGVkID0gdHJ1ZTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgaW5mby5hbGxvY2F0aW5nQ29udGV4dCA9IDA7CisjZW5kaWYKICAgICBh
ZGRUZXh0dXJlKHRva2VuLCBpbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5oCmluZGV4IDEyYWQyMDgwMGI2Y2RjNmEyY2U3YTA0NGY5NmQwYWYwNTUyMDA5MGEuLjIx
MDVjNTdmZjk2YzBiY2M2NGJjZTFkMzA0OWM1ZjNlZjU5NTBmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaApAQCAtNDUsNiArNDUsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CiAg
ICAgfQogCisgICAgLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBhbGxvY2F0
aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KKyAgICBzdGF0aWMgc2l6ZV90IGhpZ2hMaW1pdEJ5dGVz
KCk7CisgICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBsaW1pdC4gQ2FuIGJlIGV4Y2VlZGVk
IGlmIG5lZWRlZC4KKyAgICBzdGF0aWMgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzKCk7CisgICAg
Ly8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNl
IHRleHR1cmVzLgorICAgIHN0YXRpYyBzaXplX3QgbG93TGltaXRCeXRlcygpOworCiAgICAgdm9p
ZCBzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CiAKICAgICBUZXh0dXJlVG9rZW4gZ2V0VG9r
ZW4oKTsKQEAgLTYxLDE0ICs2OCwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYWxsb2NhdGVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZVRva2VuKTsKICAgICB2b2lkIGRlbGV0
ZUV2aWN0ZWRUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOwogCisgICAgdm9pZCBldmljdEFu
ZERlbGV0ZUFsbFRleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKik7CisKICAgICB2b2lkIHJlZHVj
ZU1lbW9yeVRvTGltaXQoc2l6ZV90KTsKICAgICBzaXplX3QgY3VycmVudE1lbW9yeVVzZUJ5dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsgfQogCi0jaWZuZGVmIE5ERUJVRwot
ICAgIHZvaWQgc2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpIHsgbV9hc3NvY2lhdGVkQ29udGV4dERlYnVnT25seSA9IGNvbnRleHQ7IH0KLSAg
ICBHcmFwaGljc0NvbnRleHQzRCogYXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkoKSBjb25zdCB7
IHJldHVybiBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5OyB9Ci0jZW5kaWYKLQogcHJpdmF0
ZToKICAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRl
eHR1cmVTaXplKTsKIApAQCAtNzcsNiArODEsOSBAQCBwcml2YXRlOgogICAgICAgICBHQzNEZW51
bSBmb3JtYXQ7CiAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKICAgICAgICAgYm9vbCBpc1By
b3RlY3RlZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBhbGxv
Y2F0aW5nQ29udGV4dDsKKyNlbmRpZgogICAgIH07CiAKICAgICB2b2lkIGFkZFRleHR1cmUoVGV4
dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CkBAIC05MSwxMSArOTgsMTQgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0dXJlVG9rZW4gbV9uZXh0VG9rZW47CiAK
KyAgICBzdHJ1Y3QgRXZpY3Rpb25FbnRyeSB7CisgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsK
ICNpZm5kZWYgTkRFQlVHCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fYXNzb2NpYXRlZENvbnRl
eHREZWJ1Z09ubHk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBhbGxvY2F0aW5nQ29udGV4
dDsKICNlbmRpZgorICAgIH07CiAKLSAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZXZpY3RlZFRleHR1
cmVJZHM7CisgICAgVmVjdG9yPEV2aWN0aW9uRW50cnk+IG1fZXZpY3RlZFRleHR1cmVzOwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZGRlZmZlNzI4MjQyOTcx
NTEyMzM2ODI0OTYxZDZiM2VkYTUyMjk4ZS4uNmJkMjgyMWRjZjFkYjI5MWUzNDU1N2Q1MjJkZmVi
YjZkYjkxNDRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yNjUsMTkg
KzI2NSw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5
ZXJJbXBsKiBsYXllcikKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVu
dDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
LXsKLSAgICBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwot
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJza2lwc0RyYXc6ICIgPDwg
KCFtX3RpbGVyIHx8IG1fc2tpcHNEcmF3KSA8PCAiXG4iOwotfQotCiBUZXh0dXJlTWFuYWdlciog
VGlsZWRMYXllckNocm9taXVtOjp0ZXh0dXJlTWFuYWdlcigpIGNvbnN0CiB7CiAgICAgaWYgKCFs
YXllclRyZWVIb3N0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDU4NTY5MTgx
NDQwNjkzZjYwZjZkZDZiMjk5Y2JiOWRjODlkMWE0NWMuLjY5MjZlM2Q1M2MwODc0MjBkNGFmMTkz
ZWY2NWQwNzgxNTM0NGM4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC03NCw4
ICs3NCw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGR1bXBM
YXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwotCiAgICAgdmly
dHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7CiAKICAgICB2b2lk
IGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXgg
N2IxNTZmYjE0MGFiMDFkM2Q1ZDlmMTdmNGUzNGJlNzNmMjczYmUyNC4uOWY3OTAzMjU2ZmJlODg2
YWM0ZWU2YzlkZjZkYWIzNjYwY2YzZTUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgK
QEAgLTYzLDcgKzYzLDYgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFudXBSZXNvdXJjZXMoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFz
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIiOyB9CiAKIHByaXZhdGU6CiAgICAg
c3RydWN0IFRleHR1cmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAppbmRleCA4NjJmYTg4
ZjNmYjA4OGU5Njg4OTI0OGY4MzI0YmM0NjIzZjA1YjExLi4yMTU1MGRmYzE0MTNmMGI0NzZkNTBi
MDYzMmFhOGY1Mjc5YmMxYzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaApAQCAtNTcs
OSArNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0
dXJuIG1fY29udGV4dDsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBs
YXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJXZWJHTExheWVyIjsgfQotCiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xMYXllckNocm9taXVtUmF0ZUxpbWl0
VGFzazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCmluZGV4IGQ4NWViYThkZTg4M2Fi
ZTdlMGUwOWU1N2U0MDAxZmYwZjZjNGZhNTAuLjZmY2Y4NDA0MDE5MjU1MjBjMTdlNDc3NmQxZGUw
YTVhODIyM2Y3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApAQCAtNTIsNiAr
NTIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBs
KGludCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIkNhbnZhc0xheWVyIjsgfQorCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMzAwZjQ3MTMzZWM4YzA0MjI2YTM0ZWUxZDA1MzMx
MjQzNjZlYjJjNy4uYjAyZjFlZjMxNjQ0YWNlOTk1Y2NkNmVjNTlkYjBiYTRiMDIwZTgzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMjI3LDYgKzIyNywzMyBAQCB2b2lkIHNvcnRMYXll
cnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmlyc3QsIFZlY3RvcjxS
ZWZQdHI8Q0NMYQogICAgIGxheWVyU29ydGVyLT5zb3J0KGZpcnN0LCBlbmQpOwogfQogCitTdHJp
bmcgQ0NMYXllckltcGw6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVh
bSB0czsKKyAgICBkdW1wTGF5ZXIodHMsIDApOworICAgIHJldHVybiB0cy5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgQ0NMYXllckltcGw6OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCBsYXll
clR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7CisgICAgZHVtcExheWVy
UHJvcGVydGllcyh0cywgaW5kZW50KzIpOworICAgIGlmIChtX3JlcGxpY2FMYXllcikgeworICAg
ICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzIpOworICAgICAgICB0cyA8PCAiUmVwbGljYTpc
biI7CisgICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5ZXIodHMsIGluZGVudCszKTsKKyAg
ICB9CisgICAgaWYgKG1fbWFza0xheWVyKSB7CisgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQrMik7CisgICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKKyAgICAgICAgbV9tYXNrTGF5ZXItPmR1
bXBMYXllcih0cywgaW5kZW50KzMpOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPmR1bXBMYXll
cih0cywgaW5kZW50KzEpOwogfQogCit9CisKKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGM3ZGM0Njk1NDdmNWMxNWU3YTM3
N2VmOTU3ZmU0ZjM4OTc1ZmRjMDEuLmM1YzE4NWExMzMzZDJlY2RhMTdhYzAxZWFjZTNjNWFmYjdj
NDA0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTY1LDExICsxNjUsMTIgQEAgcHVibGlj
OgogICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KICAgICB2b2lkIHNldERyYXdhYmxlQ29udGVudFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxlQ29udGVudFJlY3QgPSByZWN0OyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50
IGluZGVudCkgY29uc3Q7CisgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwg
dm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
ICAgICBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CiAK
IHByaXZhdGU6CkBAIC0xNzcsNiArMTc4LDEwIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFRyZWVTeW5jaHJvbml6ZXI7CiAgICAgdm9pZCBjbGVhckNoaWxkTGlzdCgpOyAvLyBXYXJuaW5n
OiBUaGlzIGRvZXMgbm90IHByZXNlcnZlIHRyZWUgc3RydWN0dXJlIGludmFyaWFudHMgYW5kIHNv
IGlzIG9ubHkgZXhwb3NlZCB0byB0aGUgdHJlZSBzeW5jaHJvbml6ZXIuCiAKKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkxheWVyQ2hy
b21pdW0iOyB9CisKKyAgICB2b2lkIGR1bXBMYXllcihUZXh0U3RyZWFtJiwgaW50IGluZGVudCkg
Y29uc3Q7CisKICAgICAvLyBQcm9wZXJ0aWVzIGludGVybmFsIHRvIENDTGF5ZXJJbXBsCiAgICAg
Q0NMYXllckltcGwqIG1fcGFyZW50OwogICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4g
bV9jaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGVlMGRkNDM2
ZjQ5YTQ0NWEyNDdkNWNiNjEzZDUyYjllYjQ5ZjJhZjUuLjdiOGNiNDFmNGRhZWUwNGJiNmY1MjJl
NGQ2YzUyOWQyNDkwNTVlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAt
NjksNyArNjksNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAgICAgICAg
IG1fcHJveHkgPSBDQ1NpbmdsZVRocmVhZFByb3h5OjpjcmVhdGUodGhpcyk7CiAgICAgbV9wcm94
eS0+c3RhcnQoKTsKIAotICAgIGlmICghbV9wcm94eS0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
dGhpcykpCisgICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBj
YXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4KQEAgLTg2LDE0
ICs4NiwyNSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAgICAgLy8gV2Ug
Y2hhbmdlZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUgcHJveHkgYSBjb21taXQgaXMgbmVlZGVk
LgogICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAKKyAgICBtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2Vy
OjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
bWF4VGV4dHVyZVNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBDQ0xheWVyVHJlZUhvc3Q6
On5DQ0xheWVyVHJlZUhvc3QoKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCIs
IHRoaXMsIDApOwogICAgIG1fcHJveHktPnN0b3AoKTsKICAgICBtX3Byb3h5LmNsZWFyKCk7Cisg
ICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CisgICAgQVNTRVJUKCFtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXIuY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbnRlbnRz
VGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmV2aWN0
QW5kRGVsZXRlQWxsVGV4dHVyZXMoY29udGV4dCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKQEAgLTEwOSw3ICsxMjAs
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0
aGlzLCAwKTsKICAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIo
KSk7CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQo
aG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdCgpKTsK
KyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVy
ZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOwogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZXh0KCkpOwogCiAgICAg
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxpc3QsIGhvc3RJbXBsLT5jb250ZXh0
KCkpOwpAQCAtMTE5LDYgKzEzMCw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhD
Q0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBob3N0SW1wbC0+c2V0Wm9vbUFuaW1h
dG9yU2NhbGUobV96b29tQW5pbWF0b3JTY2FsZSk7CiAgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0
KHZpZXdwb3J0U2l6ZSgpKTsKIAorICAgIGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNldENv
bnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3Vy
cmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5w
cm90ZWN0QWxsVGV4dHVyZXMoKTsKKwogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUg
ZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIoKSkKICAgICAgICAgaG9zdEltcGwt
PnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwpAQCAtMTQ1LDYg
KzE1OSw4IEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7CisgICAgbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKDApOworCiAgICAgaWYgKHJv
b3RMYXllcigpKQogICAgICAgICByb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5jbGVhbnVw
UmVzb3VyY2VzUmVjdXJzaXZlKCk7CiAgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KHN1Y2Nlc3MpOwpAQCAtMjU5LDcgKzI3NSwxNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXpl
JiBjbwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewog
ICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0gICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QtPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CisgICAgICAgIG1fY29udGVudHNU
ZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGlt
aXRCeXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RB
bGxUZXh0dXJlcygpOworICAgICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdCgpOworICAgIH0K
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVt
VGltZXMpCkBAIC0yNjksNyArMjkyLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21w
b3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAKIFRleHR1cmVNYW5hZ2VyKiBDQ0xheWVyVHJl
ZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3By
b3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci5nZXQoKTsKIH0KIAogI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGVkOThjMmU5OGY0YWYwNTM5NGU3N2M5NDg0
OTZhZGI5YTE4MGJjNWQuLmM3MTNmMDNlN2FkMjMxNzlhYzg3NzYzMGEyM2M5ZjQ3ODFiNzFjNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xNTcsNiArMTU3LDggQEAgcHVibGlj
OgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKIAorICAgIHZvaWQgZGVsZXRlQ29udGVudHNU
ZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRy
ZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsKIApAQCAt
MTg0LDYgKzE4Niw3IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9y
b290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3Q7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91cGRhdGVMaXN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDcwODJkNjViM2I0YjU5ZjM2Mjgx
MmNiNzg3MTE4MDQ5NzU3NzM1MDAuLmJlYzdjMDJkMjVlZTUxM2E5Mjg1Njc1Y2M3NGI5MDU0NDE5
MzU5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC03NCw3
ICs3NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiB7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsK
ICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5v
d25lcigpLT5yb290TGF5ZXIoKSkKKyAgICBpZiAobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIo
KSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CiAKICAgICArK21fZnJh
bWVOdW1iZXI7CkBAIC0xMTYsMzEgKzExNiwyNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgaWYgKG1fbGF5
ZXJSZW5kZXJlciAmJiAhdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNl
VGV4dHVyZXMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVzKCk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBpbXBsSGFjaywgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCkKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKIHsK
LSAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0aGVuIHdlIGFyZSByZWNvdmVyaW5n
IGZyb20gYSBsb3N0IGNvbnRleHQKLSAgICBib29sIHJlY3JlYXRpbmdSZW5kZXJlciA9IG1fbGF5
ZXJSZW5kZXJlcjsKLQotICAgIC8vIEZpcnN0IHRpbWUgbGF5ZXJSZW5kZXJlciBjcmVhdGlvbgog
ICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXI7Ci0gICAgaWYg
KCFyZWNyZWF0aW5nUmVuZGVyZXIpCi0gICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7Ci0gICAgZWxzZQot
ICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9s
YXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0KTsKLQorICAgIGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKIAogICAg
IC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQg
cGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKICAgICAvLyBhbmQgdHJ5IGNy
ZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KICAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9z
ZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKICAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVy
YXRlUGFpbnRpbmcgPSBmYWxzZTsKIAotICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikK
LSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxh
eWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVy
ZXItPm93bmVyKCksIHRoaXMsIGNvbnRleHQpOworICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7CisgICAgfQorCisgICAg
Ly8gSWYgd2UgaGFkIGEgcHJldmlvdXMgbGF5ZXIgcmVuZGVyZXIsIHRoZW4gaXRzIGNvbnRleHQg
bXVzdCBoYXZlIGJlZW4gbG9zdCBhbG9uZyB3aXRoIGFsbCBvZiBpdHMgcmVzb3VyY2VzLgorICAg
IC8vIExldCB0aGUgb2xkIGxheWVyIHJlbmRlcmVyIGtub3duIGl0cyByZXNvdXJjZXMgYXJlIGdv
bmUuCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKDApOworICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPmNsb3NlKCk7CiAgICAgfQogCiAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5k
ZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCAwNTJmMjYwOWJi
NDQzMGQwY2ViMTI0YTM4ZTBkNjY3ZmI5YWNhMTBhLi5kZmY5NjgwNmQ4NWYyMGIxOGMwZjQ0ODFj
YTE0ZjAyOTVjZWM4YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwog
ICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KIAot
ICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhh
Y2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBib29sIGluaXRpYWxpemVM
YXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGlz
Q29udGV4dExvc3QoKTsKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIo
KSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KICAgICBjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CkBAIC03
Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBj
b25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQogICAgIHZvaWQgc2V0Wm9vbUFuaW1hdG9y
U2NhbGUoZG91YmxlKTsKIAorICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXR0aW5nczsgfQogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJU
cmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIGludCBtX3NvdXJjZUZyYW1lTnVt
YmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggOWI0YzUzNjcyM2QyYWIx
NmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3Ny4uZTRjOGIyMGE3ODgzOGFkYmI2ZTRmNWY5ZTFmZjJm
NTEzNmQ4ZDQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC01MSw2ICs1
MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXllckltcGwo
aW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25z
dCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9CisKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJveHkuaAppbmRleCBhYWU2Njk0NGIwNTM3ZGI2YjMwNTdmNWIxMWRjNWViMGVl
NjEzZDkwLi5mNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFiYTlhNjlkZmFjNmMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cm94eS5oCkBAIC01OCwxMCArNTgsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlz
U3RhcnRlZCgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpID0gMDsKIAogICAgIHZpcnR1YWwgY29uc3QgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0
ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzUmVkcmF3KCkgPSAwOwogCkBAIC04MCw5ICs4MSw2IEBAIHB1YmxpYzoKICAgICAv
LyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxsIGRvZXMgc2NoZWR1bGlu
ZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KCkgPSAwOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUgTGF5
ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bXMKLSAg
ICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgPSAwOwot
CiBwcm90ZWN0ZWQ6CiAgICAgQ0NQcm94eSgpIHsgfQogICAgIGZyaWVuZCBjbGFzcyBTY29wZWRT
ZXRJbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRl
eCAwYWYzMzBkYmQ4ZjQ2N2ZkYWZkN2RhNDAzNmYwNGJjODQ1MTYzZGUxLi4yM2NjMmM5OTk1YTRj
ZjkzNWQwMDI1MjE4OGZmNGQ5MzY3Nzk3MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw5IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6aXNTdGFydGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKIH0K
IAotYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xh
eWVyVHJlZUhvc3QqIG93bmVySGFjaykKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMzAsNyArMTMxLDcgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKIAog
ICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgICAgICByZXR1cm4g
bV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVM
YXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIH0KIH0KIApAQCAtMTQ2LDYgKzE0NywyNCBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGlt
ZXMpCiAgICAgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbCA9IG51bVRpbWVzIC0gMTsKIH0KIAor
dm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIC8v
IENvbW1pdCBpbW1lZGlhdGVseQorICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOworICAgIH0KKyNl
bHNlCisgICAgLy8gU2luZ2xlIHRocmVhZGVkIG9ubHkgd29ya3Mgd2l0aCBUSFJFQURFRF9DT01Q
T1NJVElORy4KKyAgICBDUkFTSCgpOworI2VuZGlmCisKK30KKwogdm9pZCBDQ1NpbmdsZVRocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKQEAgLTE3MCwxNiArMTg5LDEyIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
c3RvcCgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICB7CiAgICAgICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250
ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CiAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9CiAgICAgbV9sYXllclRyZWVIb3N0ID0g
MDsKIH0KIAotVGV4dHVyZU1hbmFnZXIqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4
dHVyZU1hbmFnZXIoKQotewotICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJl
bmRlcmVyKCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKLX0KLQogI2lmICFVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGgg
KGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQogdm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCkBAIC0xOTcsNiArMjEyLDcg
QEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiAKIGJv
b2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogeworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX2dyYXBoaWNzQ29udGV4dExvc3Qp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dDsKQEAgLTIwNyw3ICsyMjMsNyBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dElmTmVlZGVkKCkKIAogICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgIEFTU0VS
VChjb250ZXh0LT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KSkgeworICAgICAgICBpZiAobV9s
YXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCkpIHsKICAg
ICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1
ZSk7CiAgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dExvc3QgPSBmYWxzZTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4
IDc2NWI4NTlmOTUxNTAyNmU5ZDc4NzUyMWQ0OTlkNTFhOTgwZjhmOTcuLmJiYmU1ZjU5MDc2MmJl
MThhMjg3NGE1ODhlYzQzNzBhNjU5N2Y5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmgKQEAgLTQ0LDE3ICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJp
bmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKTsKICAgICB2aXJ0dWFs
IGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBu
dW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lk
IHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhv
bGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0
dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOwotCiAgICAgLy8gU3BlY2lhbCBj
YXNlIGZ1bmN0aW9ucy4KICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQg
Y29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXgg
MWE4ODM4NGZlYTJiYWY1YjQ2MzIyZjA0YmU4YWJiYzk5MTVhOTk0OS4uMzI0NmE4NGI1YzRkMzRk
ODk2NWY3N2RlM2IyZjhmMTM5ZmRiYzY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAK
QEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAog
ICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwogfQogCi1ib29sIENDVGhyZWFkUHJveHk6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQorYm9v
bCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiB7CiAgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMTE1LDggKzExNSw3
IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRy
ZWVIb3N0KiBvd25lckhhY2spCiAgICAgYm9vbCBpbml0aWFsaXplU3VjY2VlZGVkOwogICAgIExh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwogICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVM
YXllclJlbmRlcmVyT25DQ1RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mob3duZXJIYWNrKSwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3Nz
VGhyZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY2FwYWJpbGl0aWVzKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVT
dWNjZWVkZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CiAgICAg
Y29tcGxldGlvbi53YWl0KCk7CiAKICAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKQEAgLTEz
NCw2ICsxMzMsMTcgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQo
aW50IG51bVRpbWVzKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIENDVGhy
ZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNF
X0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCIsIHRoaXMsIDApOworICAgIG1f
Y29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKSk7
Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzIsMTIgKzE4Miw2IEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6c3RvcCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAotVGV4dHVy
ZU1hbmFnZXIqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCiB2b2lkIENDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKQEAgLTIyOSw2ICsyMzMsMTQgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25D
Q1RocmVhZCgpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKIH0K
IAordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVy
VHJlZUhvc3RJbXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQogewogICAgIFRS
QUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKQEAgLTI1MSwxMiArMjYzLDEyIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQog
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KiBjYXBhYmlsaXRpZXMpCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRl
cmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dFB0ciwgQ0NDb21wbGV0aW9u
RXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMqIGNhcGFiaWxpdGllcykKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAg
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQoYWRvcHRSZWYoY29udGV4dFB0cikpOwotICAgICppbml0aWFsaXplU3VjY2VlZGVk
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNr
LCBjb250ZXh0KTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIGlmICgqaW5pdGlhbGl6
ZVN1Y2NlZWRlZCkKICAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsK
QEAgLTI2Niw2ICsyNzgsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9z
ZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNF
X0VWRU5UKCJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRo
aXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0
LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7
CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIGNvbXBsZXRpb24tPnNpZ25h
bCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDI0ZTFmZTEzZTcxOTc0NzY0NmNj
ZjU1MmIzOGZhOGIzYjNiYzA1NDYuLjI0Njc3MjQwY2FhYTY5MTI2NzZkN2VkZmUwZmFiMmNjMjEy
NjJlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTQ1LDE3ICs0NSwxNSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVk
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5
ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMm
IGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9z
ZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0
YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNr
IHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hy
b21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdl
cigpOwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVI
b3N0Kik7CiAKQEAgLTY3LDcgKzY1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbW1pdE9uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFk
KCk7CiAgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQq
KTsKLSAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJl
ZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5p
dGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAgIHZvaWQg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0ND
b21wbGV0aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKTsKICAg
ICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwogICAgIHZvaWQgc2V0
TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25D
Q1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcAppbmRleCAxYTc1ODM0NGVjNTgzMzc5ZTZiNjRkZjAxMTRmMTAyYjA0OTAyOTYyLi4xMjNk
ODUwMTU1OGNhNDYyZDZiNDBjNzQ0NjM0OGMzNWQ3NWUxYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcApAQCAtNzUsOCArNzUsOSBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6
OmJpbmRDb250ZW50c1RleHR1cmUoKQogCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXll
clByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7Ci0gICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRp
ZXModHMsIGluZGVudCk7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwg
InNraXBzRHJhdzogIiA8PCAoIW1fdGlsZXIgfHwgbV9za2lwc0RyYXcpIDw8ICJcbiI7CiB9CiAK
IERyYXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6dGlsZUF0KGludCBpLCBpbnQgaikgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCBjZWVjNWYyNTMzOWMyZmNlZDMx
NTI4ZWRmODkxYTM2MjliNjMyMDI0Li5kMGRlMzg3MTY3NjlkOTZlYTBjY2Q4NGJmNDFmZmQwMjUz
NDgwYWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC02Nyw2ICs2Nyw4IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaWxlZExheWVySW1wbChpbnQgaWQp
OwogCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CisKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGlu
dGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3QuCiAgICAgdm9pZCBkcmF3KExheWVyUmVuZGVy
ZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmgKaW5kZXggYmQxNjM3NmJiNWY0NzI2MDllYzQxMGUwZGVmMzI5NzU3NjdkZjA5Yi4uNmJmMzUy
OTFlYzBiZDBmOGRhZDkwZjUxODhlNWI1YTMxNWMzZWNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENDVmlkZW9MYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5
ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KKwogICAgIHN0
cnVjdCBUZXh0dXJlIHsKICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBpZDsKICAgICAgICAgSW50
U2l6ZSBzaXplOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107069</attachid>
            <date>2011-09-12 11:52:08 -0700</date>
            <delta_ts>2011-09-12 12:05:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67440-20110912115206.patch</filename>
            <type>text/plain</type>
            <size>61478</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ5NjYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVu
ZGVyc3VyZmFjZS1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3ItY29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhw
ZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZTQ5NWIyNmI5OWU1YzRhMTk3YzlkNjUyYTc5MTlhYmJl
NjM2MjcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI4NjYKemNtZUFTQE4/KG9sSHlgdVZCcSFp
YTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1RuNikkCnpHP1V+KzN2PGc8
TCRlZVVPVmVhP0d0PE9XaXhkK1JRJWozUGdIKDtyJVJWcUxhMkBlPGFTVy1MXlkrRkAtYWAlbwp6
dTh1dCNYT19saG1UVWBvQFRRWUZUa1k8WGNLXy0jWFA2bHAmSn0tV1V9KUdhN3tTMGAqdlFIdEFk
SkROaitNUHUKelUwWm1wS0tsN0JUU2tULWlncC1FRmcxO2VVPTdRRzUwO0l8WD1WOGczX0M+U2Jy
PjNFOUFJTVQ7MmRSKTJFdTRjCnI3fGpLdnhuTUxHak9LI1RUcmZ5LSE0M0ErZTd2ZyohfGMzKWpi
SHsoUzNqM15QNjxyXzFYbE13CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3It
Y29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZlOTY5Mjdh
ZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1j
b250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJm
YWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0ZGExMzgxMDE0YzBjZTg2MmY4MjAzNzdhYmY5MThhOGRh
NjE0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Nv
bXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAucmVkIHsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKworICAgIC5ncmVlbiB7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKworICAgIGRpdiB7CisgICAgICBoZWlnaHQ6
IDEwMHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAgIH0KKworICAgIC5jb21wb3NpdGVkIHsK
KyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgIH0KKworICAgIC5y
ZW5kZXJTdXJmYWNlIHsKKyAgICAgIG9wYWNpdHk6IDAuNTsKKyAgICB9CisgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBJbiB0aGUgcGl4ZWwgcmVzdWx0cywgb25lIGdyZWVuIHNx
dWFyZXMgc2hvdWxkIGJlIHZpc2libGUuIC0tPgorICA8ZGl2IGNsYXNzPSJyZWQgcmVuZGVyU3Vy
ZmFjZSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBjbGFzcz0icmVkIGNvbXBvc2l0ZWQiPjwvZGl2
PgorICA8L2Rpdj4KKyAgPHA+CisgIDxzY3JpcHQ+CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KHRydWUpOyAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWZ1bCBhcyBhIHBpeGVsIHRlc3QuCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzcGxheSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmxvc2VDb21wb3Np
dG9yQ29udGV4dCgxKTsKKyAgfQorICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpOworICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgicmVkIik7CisgIHRhcmdl
dC5jbGFzc0xpc3QuYWRkKCJncmVlbiIpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNGU5ODUyYTllYmRjNTZiNTViOTA1ZTk0NjhlZmJmNDY4MTEwM2I4Li44
NGQ3MjQ0NDVmYTdiNGQ0OGZhYTYyY2Q2YzczNGQwYTNhMzczOWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTEgQEAKKzIwMTEtMDktMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2Vy
IGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1vdmVzIHRoZSBjb250
ZW50cyBUZXh0dXJlTWFuYWdlciBvdmVyIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QsIHdoZXJlIGl0
IGJlbG9uZ3MsIGFuZCBhZGRzIGluIGEgY29tbWl0IHBhdGgKKyAgICAgICAgdG8gbWFrZSBzdXJl
IHRoYXQgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgZXZlbiBpZiB0aGUgcGFnZSBpcyBub3QgdmlzaWJs
ZS4gIFRoaXMgbW92ZSBhbHNvIHJlbW92ZWQgdGhlIG5lZWQgZm9yCisgICAgICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSdzIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyLCBzbyBJIHJlbW92ZWQgdGhh
dCBhcyB3ZWxsLiAgVGhhdCBtZWFudCBtb3ZpbmcgdGhlCisgICAgICAgIGxheWVyVHJlZUFzVGV4
dCgpIGxvZ2ljIG92ZXIgdG8gdGhlIENDTGF5ZXJJbXBsIHNpZGUsIHdoaWNoIGlzIHdoZXJlIGl0
IHJlYWxseSBiZWxvbmdlZCBhbnl3YXkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBj
b21wb3NpdGluZy8gdGVzdHMgYW5kCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0
b3IvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJmYWNlLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5k
ZXJTdXJmYWNlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisK
IDIwMTEtMDktMTIgIEFya28gU2FoYSAgPGFya29AbW90b3JvbGEuY29tPgogCiAgICAgICAgIFNl
bGVjdHN0YXJ0IGlzIG5vdCBmaXJlZCB3aGVuIHNlbGVjdGlvbiB3YXMgY3JlYXRlZCBieSBhcnJv
dyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGVhMjZkZmUxODdlNjJj
NTc1NTg1N2FmMTE3YWMzNTc0M2U1Y2JkNWQuLjRjMmU0NDA4NWY3NjQ0M2FiMTIxODBkNzc0MDlj
NDhiNWZkNzRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTUyLDggKzUy
LDYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xheWVyIjsgfQot
CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7CiAg
ICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApp
bmRleCBiYWM0MWY5Yzg4YTRmMDkxMzFhMTRiNjk0YTRmYWIwNDkyZDlmNTRlLi45NDA5YWUxMmU5
ZjMyNjc1MjM1MGFlNjBmNGQzMGFmOTkyZmJjOTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKQEAgLTU0LDggKzU0LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biAiQ29udGVudExheWVyIjsgfQotCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBkNjk3OTEzMWI1ODhkNTIyODMzOWFiNTNlYWYwYjAz
Yjk4MTM3ZmRlLi40YWZlMDVkMTUxZjhiMzYzNjI5NjMwNDMzMTBhMjA5NDk0MTgyOTU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkltYWdl
TGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgSW1hZ2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJjZDRkNzc4
OTliMmI5YjM1ZTdiYzMzZGJmMjA2Y2Y4OGFiMWE5NjYuLmEwZDM0NjU2ZThjMTVkNTJkMDVlNDAy
ZDI5MWY4NTQwNTIzOGY0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNzYsNDggKzM3
Niw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotU3RyaW5nIExheWVyQ2hyb21pdW06
OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICBkdW1w
TGF5ZXIodHMsIDApOwotICAgIHJldHVybiB0cy5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50
IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lk
IExheWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCBsYXllclR5cGVB
c1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7Ci0gICAgZHVtcExheWVyUHJvcGVy
dGllcyh0cywgaW5kZW50KzIpOwotICAgIGlmIChtX3JlcGxpY2FMYXllcikgewotICAgICAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzIpOwotICAgICAgICB0cyA8PCAiUmVwbGljYTpcbiI7Ci0g
ICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5ZXIodHMsIGluZGVudCszKTsKLSAgICB9Ci0g
ICAgaWYgKG1fbWFza0xheWVyKSB7Ci0gICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7
Ci0gICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKLSAgICAgICAgbV9tYXNrTGF5ZXItPmR1bXBMYXll
cih0cywgaW5kZW50KzMpOwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPmR1bXBMYXllcih0cywg
aW5kZW50KzEpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7Ci0gICAgdHMgPDwgImlkOiAiIDw8IGlkKCkgPDwgIiBkcmF3c0NvbnRlbnQ6ICIg
PDwgZHJhd3NDb250ZW50KCkgPDwgIiBib3VuZHMgIiA8PCBtX2JvdW5kcy53aWR0aCgpIDw8ICJ4
IiA8PCBtX2JvdW5kcy5oZWlnaHQoKSA8PCAiIHVzZXNMYXllclNjaXNzb3I6ICIgPDwgdXNlc0xh
eWVyU2Npc3NvcigpCi0gICAgICAgIDw8ICIgc2Npc3NvclJlY3Q6ICgiIDw8IG1fc2Npc3NvclJl
Y3QueCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC55KCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JS
ZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpIDw8ICIpIgotICAg
ICAgICA8PCAiIHZpc2libGVMYXllclJlY3Q6ICgiIDw8IG1fdmlzaWJsZUxheWVyUmVjdC54KCkg
PDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QueSgpIDw8ICIsICIgPDwgbV92aXNpYmxlTGF5
ZXJSZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QuaGVpZ2h0KCkgPDwg
IikiCi0gICAgICAgIDw8ICJcbiI7Ci0KLX0KLQogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewogICAgIHJldHVybiBDQ0xheWVySW1w
bDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOGQzMGQ3ZDQ0NWEx
MWY0YTY2ZWU2MTU0YmNhMzMwNTMzMmJkMzg0Ny4uN2Y2ZmZhNzRjNWY2YjJmMWZlYTk3MjhkODcz
NzE2ZTQ1ZGVjNjk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTcyLDcgKzE3Miw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICB2b2lk
IGRyYXdEZWJ1Z0JvcmRlcigpOwotICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCkBAIC0yMjAsMTEgKzIxOSw2IEBA
IHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkdW1wTGF5ZXIoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVB
c1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJMYXllckNocm9taXVtIjsgfQotICAgIHZpcnR1YWwg
dm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
LQogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNEaXJ0eTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNWQ1ZTRjNThjYTJh
MzhhMDcwNTdjMGRkNmU5NzllNGNjOTI5YWYyOS4uYzcyODE2OTc1ZDIyNDQ4NzZlMTgxY2I5MDc0
MDdiOWVlYTE1YWIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBA
IC03MCwyMCArNzAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIEZJWE1FOiBNYWtlIHRoaXMgbGltaXQgYWRqdXN0YWJsZSBhbmQgZ2l2ZSBpdCBh
IHVzZWZ1bCB2YWx1ZS4KLQotLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBh
bGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLXN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9y
eUhpZ2hMaW1pdEJ5dGVzID0gMTI4ICogMTAyNCAqIDEwMjQ7Ci0vLyBQcmVmZXJyZWQgdGV4dHVy
ZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotc3RhdGljIHNpemVfdCB0
ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0Qnl0ZXMgPSA2NCAqIDEwMjQgKiAxMDI0OwotLy8gVGhl
IG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1
cmVzLgotc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyA9IDMgKiAxMDI0
ICogMTAyNDsKLQotc2l6ZV90IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZU1lbW9yeVJl
Y2xhaW1MaW1pdCgpCi17Ci0gICAgcmV0dXJuIHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRl
czsKLX0KLQogbmFtZXNwYWNlIHsKIAogc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhv
TWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkK
QEAgLTE0MywyNCArMTI5LDIyIEBAIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBs
KiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCitQYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXIsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93bmVyLT5zZXR0aW5ncygp
LmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGlu
Zyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1wbCwgY29udGV4dCkpKTsKKyAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVy
LT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxheWVyUmVu
ZGVyZXIucmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXJJbXBsLAor
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVI
b3N0SW1wbCogb3duZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9vd25l
cihvd25lcikKLSAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwg
bV96b29tQW5pbWF0b3JTY2FsZSgxKQpAQCAtMjEwLDggKzE5NCw4IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShD
Q0xheWVySW1wCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSgpCiB7Ci0gICAg
aWYgKHJvb3RMYXllckltcGwoKSkKLSAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXll
ckltcGxSZWN1cnNpdmUocm9vdExheWVySW1wbCgpKTsKKyAgICBpZiAocm9vdExheWVyKCkpCisg
ICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKHJvb3RMYXll
cigpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dCgpCkBAIC0yMjYsMTggKzIxMCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
ZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhcioKICAgICAg
ICAgTE9HX0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRj
b21tYW5kOiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIHN0YXRpY19jYXN0
PGludD4oZXJyb3IpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VU
ZXh0dXJlcygpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclN1cmZh
Y2VUZXh0dXJlcygpCiB7Ci0gICAgLy8gUmVkdWNlcyB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB0byB0
ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyBieSBkZWxldGluZyBub24gcm9vdCBsYXllcgotICAg
IC8vIHRleHR1cmVzLgotICAgIG1fb3duZXItPm5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpLT5w
cm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7Ci0gICAg
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotICAgIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5n
ZXQoKSk7Ci0gICAgLy8gRXZpY3QgYWxsIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCi0gICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0gICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0g
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyht
X2NvbnRleHQuZ2V0KCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5ldmlj
dEFuZERlbGV0ZUFsbFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQpAQCAtMjU3LDE4ICsyMzIsMTYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIC8vIFJlbmRlcldp
ZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7
CiAKLSAgICBpZiAoIXJvb3RMYXllckltcGwoKSkKKyAgICBpZiAoIXJvb3RMYXllcigpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IE5vIG5lZWQgdG8gd2FsayB0aGUgdHJlZSBoZXJl
LiBUaGlzIGNvdWxkIGJlIHBhc3NlZCB2aWEgZHJhdy4KLSAgICByb290TGF5ZXJJbXBsKCktPnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CisgICAgcm9vdExheWVyKCktPnNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CiAKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFu
YWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKyAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0
ZXMpOwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotCi0gICAgaWYgKHRleHR1cmVNZW1vcnlS
ZWNsYWltTGltaXRCeXRlcyA+IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9y
eVVzZUJ5dGVzKCkpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyAtIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIGlmIChUZXh0
dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSA+IG1fY29udGVudHNUZXh0dXJlTWVtb3J5
VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpIC0gbV9jb250
ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQogICAgICAgICBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5n
ZXQoKSk7CkBAIC0yODMsNyArMjU2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKLSAgICBDQ0xheWVy
SW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKKyAgICBDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
CiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC00NDcsNyArNDIw
LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogTWFuYWdlZFRleHR1cmUqIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4g
c2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVySW1wbCgpID8gcm9vdExh
eWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKKyAgICBy
ZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVyKCkgPyByb290
TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgp
CkBAIC02MDMsMTIgKzU3Niw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmZsdXNoKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBtX2NhcGFiaWxp
dGllcy5tYXhUZXh0dXJlU2l6ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgp
KTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRl
eHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgpKTsKLSNlbmRpZgorICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6
aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC04MTcsMjkgKzc4NSwyMiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKLSAgICAvLyBDbGVhciB0
aWxlcnMgYmVmb3JlIHRoZSB0ZXh0dXJlIG1hbmFnZXIsIGFzIHRoZXkgaGF2ZSByZWZlcmVuY2Vz
IHRvIHRleHR1cmVzLgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxs
VGV4dHVyZXMoKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRv
TGltaXQoMCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xl
YXIoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4
dHVyZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5
VG9MaW1pdCgwKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZp
Y3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMpOworICAgIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIH0KIAogU3RyaW5n
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKICAgICBU
ZXh0U3RyZWFtIHRzOwogICAgIGlmIChyb290TGF5ZXIoKSkgewotICAgICAgICB0cyA8PCByb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgdHMg
PDwgcm9vdExheWVyKCktPmxheWVyVHJlZUFzVGV4dCgpOwogICAgICAgICB0cyA8PCAiUmVuZGVy
U3VyZmFjZXM6XG4iOwotICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEsIHJvb3RMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEs
IHJvb3RMYXllcigpKTsKICAgICB9CiAgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0Cit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBp
bnQgaW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmR1
bXBTdXJmYWNlKHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCBhZmJlMjJkODhlMGRlZmVjMWVmMGUxY2FhYTAxNGI5ZWI5YmI0NjhjLi41ZDgwNGFkMWYx
NjIyMDg2ODc2ZmRjZDI0MWViNjdlY2IxMDBjNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q7CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBs
YXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVm
Q291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJU
cmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAKICAgICAvLyBN
dXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVt
IHRvIGRlc3RydWN0CiAgICAgdm9pZCBjbG9zZSgpOwpAQCAtODQsMTkgKzg0LDEzIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3du
ZXItPnNldHRpbmdzKCk7IH0KICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBj
YXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCi0gICAgQ0NM
YXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KLSAgICBjb25zdCBDQ0xh
eWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQotCi0gICAgR3Jh
cGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9vd25lci0+cm9vdExheWVyKCk7IH0K
LSAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQotCi0gICAgQ0NMYXllckltcGwqIHJvb3RMYXllckltcGwoKSB7
IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0KLSAgICBjb25zdCBDQ0xheWVySW1w
bCogcm9vdExheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIo
KTsgfQorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290
TGF5ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQoKTsKICAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVySW1wbC0+dmlld3BvcnRTaXplKCk7IH0KKyAgICBj
b25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNp
emUoKTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCku
d2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6
ZSgpLmhlaWdodCgpOyB9CiAKQEAgLTEzOSw3ICsxMzMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCk7
CiAKLSAgICBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogICAgIFRleHR1cmVNYW5h
Z2VyKiByZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogCiAgICAgQ0NIZWFkc1VwRGlzcGxheSog
aGVhZHNVcERpc3BsYXkoKSB7IHJldHVybiBtX2hlYWRzVXBEaXNwbGF5LmdldCgpOyB9CkBAIC0x
NTAsMTcgKzE0MywxNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAot
ICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVzKCk7CiAKICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCiAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwogCi0gICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gdGhlIGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlciBo
YXMgbW92ZWQgdG8gQ0NMYXllclRyZWVIb3N0LgotICAgIHN0YXRpYyBzaXplX3QgdGV4dHVyZU1l
bW9yeVJlY2xhaW1MaW1pdCgpOworICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKSB7IG1fY29udGVudHNU
ZXh0dXJlTWVtb3J5VXNlQnl0ZXMgPSBjb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlczsgfQog
CiBwcml2YXRlOgotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKQEAgLTE3OSwxNyArMTcxLDE0IEBAIHByaXZhdGU6CiAKICAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mLCBj
b25zdCBSZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25z
dCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAogICAgIHZvaWQgY2xlYXJS
ZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIAotICAg
IC8vIEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCi0gICAgQ0NMYXllclRyZWVI
b3N0KiBtX293bmVyOwotCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7Cisg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lcjsKIAogICAgIExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKQEAgLTIyMCw3ICsyMDksNyBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4gbV92aWRlb0xheWVyUkdC
QVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0+IG1fdmlk
ZW9MYXllcllVVlByb2dyYW07CiAKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlcjsKKyAgICBzaXplX3QgbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VC
eXRlczsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyOwogCiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+IG1faGVhZHNVcERpc3BsYXk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKaW5kZXggNzkwYzcwZjAyN2FjYmExMzgxNTM0ZmVlY2Fh
N2Q3NDdiMTM3ODUwYi4uZjFmODE4YjdlYzdlYTUwNmRkNTRhY2NkMjA5OWQ1NTNhYzdlZWRmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFu
YWdlZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcApAQCAtODMsNyArODMsNiBAQCB2b2lkIE1hbmFnZWRU
ZXh0dXJlOjp1bnJlc2VydmUoKQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXIt
Pmhhc1RleHR1cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1h
bmFnZXItPmFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJl
SWQpCiAgICAgICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0
dXJlKGNvbnRleHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CkBAIC05Miw3ICs5MSw2IEBAIHZv
aWQgTWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1
cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1hbmFnZXItPmFz
c29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJlSWQpCiAgICAg
ICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0dXJlKGNvbnRl
eHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg1MmRjMmVhNmZkMGQ3ZDg0MTU0Yjk0OTI0
ODI3NDhiN2FkNmEyOGIuLmQxY2ZjODAyOWViMjFmNGYyNmMyYjVjZTdlYjY4ZTA2NDNjMTkzYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKQEAgLTQ2LDkgKzQ2LDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKIAot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
CmluZGV4IGE1ZmQ3NGIxOTAyMGZmNDIxZDQ2NTdmN2VjZGU5N2MzZmIyYzE4ZTkuLjczZjNhYjI3
YTlhNTkxYzJlNjBiNWQ1ZTI3ZTliYTIxOGRmMWYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmNwcApAQCAtNTksMjcgKzU5LDUgQEAgRmxvYXRSZWN0IFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGRyYXdh
YmxlQ29udGVudFJlY3Q7CiB9CiAKLVN0cmluZyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Om5hbWUo
KSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3VyZmFjZShpZD0l
ZCxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVyLT5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytp
KQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgbmFtZSgpIDw8ICJcbiI7Ci0KLSAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzEpOwotICAgIHRzIDw8ICJjb250ZW50UmVjdDogKCIgPDwg
bV9jb250ZW50UmVjdC54KCkgPDwgIiwgIiA8PCBtX2NvbnRlbnRSZWN0LnkoKSA8PCAiLCAiIDw8
IG1fY29udGVudFJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QuaGVpZ2h0KCkK
LSAgICAgICAgPDwgIiBzY2lzc29yUmVjdDogKCIgPDwgbV9zY2lzc29yUmVjdC54KCkgPDwgIiwg
IiA8PCBtX3NjaXNzb3JSZWN0LnkoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3Qud2lkdGgoKSA8
PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QuaGVpZ2h0KCkgPDwgIikiCi0gICAgICAgIDw8ICJcbiI7
Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDRhMDYyYzU2NDBmZDQ0OTE4ZDI5YjkzYzY2
OWI5Mjc5NDY4NDMzNzEuLjhjMmZiNjk4YTQ1M2ZlZDliMTdkM2FjMWZhZTM1YmYwN2EwNmQ5OGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC01NCw5ICs1NCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2b2lkIGRyYXcoY29uc3Qg
SW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwogCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsK
LSAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQog
ICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBp
bmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCiAgICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJl
Y3QoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDhmYTA2NTFiOTg1ZTlm
OWM0OWRmYjM1NTYwODE3YzYyOTNhNmMzNzUuLjlhMDY4ZGNjNTc0MTMxOGI2YzVjNjEwOTlkYjBj
MTI4MDc0ZjEzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTQ0LDYgKzQ0LDIxIEBA
IHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoSW50U2l6ZSBzaXplLCBHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KQogICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogY29t
cG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CiB9CiAKK3NpemVfdCBUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQoreworICAgIHJldHVybiAxMjggKiAxMDI0ICogMTAy
NDsKK30KKworc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpCit7Cisg
ICAgcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7Cit9CisKK3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6
bG93TGltaXRCeXRlcygpCit7CisgICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKK30KKwogVGV4
dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRl
cykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKQEAgLTEzOSwxMiArMTU0LDI0IEBAIHZvaWQg
VGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5m
byBpbmZvKQogCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpkZWxldGVFdmljdGVkVGV4dHVyZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV9hc3Nv
Y2lhdGVkQ29udGV4dERlYnVnT25seSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V2
aWN0ZWRUZXh0dXJlSWRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0
dXJlSWRzW2ldKQotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1
cmUobV9ldmljdGVkVGV4dHVyZUlkc1tpXSkpOworICAgIGlmIChjb250ZXh0KSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ldmljdGVkVGV4dHVyZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0dXJlSWQpIHsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZXZpY3RlZFRleHR1cmVzW2ldLmFs
bG9jYXRpbmdDb250ZXh0ID09IGNvbnRleHQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9ldmljdGVkVGV4dHVyZXNbaV0udGV4
dHVyZUlkKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgbV9ldmljdGVk
VGV4dHVyZUlkcy5jbGVhcigpOworICAgIG1fZXZpY3RlZFRleHR1cmVzLmNsZWFyKCk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hbmFnZXI6OmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgdW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICBy
ZWR1Y2VNZW1vcnlUb0xpbWl0KDApOworICAgIGRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhjb250ZXh0
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFuYWdlcjo6cmVtb3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4g
dG9rZW4sIFRleHR1cmVJbmZvIGluZm8pCkBAIC0xNTUsMTIgKzE4MiwxNiBAQCB2b2lkIFRleHR1
cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4dHVyZUluZm8g
aW5mbykKICAgICBtX3RleHR1cmVzLnJlbW92ZSh0b2tlbik7CiAgICAgQVNTRVJUKG1fdGV4dHVy
ZUxSVVNldC5jb250YWlucyh0b2tlbikpOwogICAgIG1fdGV4dHVyZUxSVVNldC5yZW1vdmUodG9r
ZW4pOwotICAgIG1fZXZpY3RlZFRleHR1cmVJZHMuYXBwZW5kKGluZm8udGV4dHVyZUlkKTsKKyAg
ICBFdmljdGlvbkVudHJ5IGVudHJ5OworICAgIGVudHJ5LnRleHR1cmVJZCA9IGluZm8udGV4dHVy
ZUlkOworI2lmbmRlZiBOREVCVUcKKyAgICBlbnRyeS5hbGxvY2F0aW5nQ29udGV4dCA9IGluZm8u
YWxsb2NhdGluZ0NvbnRleHQ7CisjZW5kaWYKKyAgICBtX2V2aWN0ZWRUZXh0dXJlcy5hcHBlbmQo
ZW50cnkpOwogfQogCiB1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6YWxsb2NhdGVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlVG9rZW4gdG9rZW4pCiB7Ci0gICAgQVNT
RVJUKGNvbnRleHQgPT0gbV9hc3NvY2lhdGVkQ29udGV4dERlYnVnT25seSk7CiAgICAgVGV4dHVy
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIEFTU0VSVChp
dCAhPSBtX3RleHR1cmVzLmVuZCgpKTsKICAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZpdC5nZXQo
KS0+c2Vjb25kOwpAQCAtMTc3LDYgKzIwOCw5IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjph
bGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVUb2tlCiAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW5m
by0+Zm9ybWF0LCBpbmZvLT5zaXplLndpZHRoKCksIGluZm8tPnNpemUuaGVpZ2h0KCksIDAsIGlu
Zm8tPmZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKICAgICBpbmZv
LT50ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CisjaWZuZGVmIE5ERUJVRworICAgIGluZm8tPmFsbG9j
YXRpbmdDb250ZXh0ID0gY29udGV4dDsKKyNlbmRpZgogICAgIHJldHVybiB0ZXh0dXJlSWQ7CiB9
CiAKQEAgLTIwNCw2ICsyMzgsOSBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIGluZm8u
Zm9ybWF0ID0gZm9ybWF0OwogICAgIGluZm8udGV4dHVyZUlkID0gMDsKICAgICBpbmZvLmlzUHJv
dGVjdGVkID0gdHJ1ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5mby5hbGxvY2F0aW5nQ29udGV4
dCA9IDA7CisjZW5kaWYKICAgICBhZGRUZXh0dXJlKHRva2VuLCBpbmZvKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4IDEyYWQyMDgwMGI2Y2RjNmEyY2U3YTA0
NGY5NmQwYWYwNTUyMDA5MGEuLjIxMDVjNTdmZjk2YzBiY2M2NGJjZTFkMzA0OWM1ZjNlZjU5NTBm
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNDUsNiArNDUsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMs
IG1heFRleHR1cmVTaXplKSk7CiAgICAgfQogCisgICAgLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1p
dCBmb3IgdGV4dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KKyAgICBzdGF0aWMg
c2l6ZV90IGhpZ2hMaW1pdEJ5dGVzKCk7CisgICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBs
aW1pdC4gQ2FuIGJlIGV4Y2VlZGVkIGlmIG5lZWRlZC4KKyAgICBzdGF0aWMgc2l6ZV90IHJlY2xh
aW1MaW1pdEJ5dGVzKCk7CisgICAgLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ug
d2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVzLgorICAgIHN0YXRpYyBzaXplX3QgbG93TGlt
aXRCeXRlcygpOworCiAgICAgdm9pZCBzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CiAKICAg
ICBUZXh0dXJlVG9rZW4gZ2V0VG9rZW4oKTsKQEAgLTYxLDE0ICs2OCwxMSBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgYWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZVRv
a2VuKTsKICAgICB2b2lkIGRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCop
OwogCisgICAgdm9pZCBldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNE
Kik7CisKICAgICB2b2lkIHJlZHVjZU1lbW9yeVRvTGltaXQoc2l6ZV90KTsKICAgICBzaXplX3Qg
Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsg
fQogCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgc2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09u
bHkoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpIHsgbV9hc3NvY2lhdGVkQ29udGV4dERlYnVn
T25seSA9IGNvbnRleHQ7IH0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogYXNzb2NpYXRlZENvbnRl
eHREZWJ1Z09ubHkoKSBjb25zdCB7IHJldHVybiBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5
OyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5
TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsKIApAQCAtNzcsNiArODEsOSBAQCBwcml2
YXRlOgogICAgICAgICBHQzNEZW51bSBmb3JtYXQ7CiAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZDsKICAgICAgICAgYm9vbCBpc1Byb3RlY3RlZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBhbGxvY2F0aW5nQ29udGV4dDsKKyNlbmRpZgogICAgIH07CiAKICAg
ICB2b2lkIGFkZFRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CkBAIC05MSwxMSAr
OTgsMTQgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0dXJl
VG9rZW4gbV9uZXh0VG9rZW47CiAKKyAgICBzdHJ1Y3QgRXZpY3Rpb25FbnRyeSB7CisgICAgICAg
IHVuc2lnbmVkIHRleHR1cmVJZDsKICNpZm5kZWYgTkRFQlVHCi0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIG1fYXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBhbGxvY2F0aW5nQ29udGV4dDsKICNlbmRpZgorICAgIH07CiAKLSAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fZXZpY3RlZFRleHR1cmVJZHM7CisgICAgVmVjdG9yPEV2aWN0aW9uRW50cnk+IG1f
ZXZpY3RlZFRleHR1cmVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggZGRlZmZlNzI4MjQyOTcxNTEyMzM2ODI0OTYxZDZiM2VkYTUyMjk4ZS4uNmJkMjgyMWRj
ZjFkYjI5MWUzNDU1N2Q1MjJkZmViYjZkYjkxNDRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCkBAIC0yNjUsMTkgKzI2NSw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB9CiB9CiAKLXN0YXRpYyB2
b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9w
ZXJ0aWVzKHRzLCBpbmRlbnQpOwotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRz
IDw8ICJza2lwc0RyYXc6ICIgPDwgKCFtX3RpbGVyIHx8IG1fc2tpcHNEcmF3KSA8PCAiXG4iOwot
fQotCiBUZXh0dXJlTWFuYWdlciogVGlsZWRMYXllckNocm9taXVtOjp0ZXh0dXJlTWFuYWdlcigp
IGNvbnN0CiB7CiAgICAgaWYgKCFsYXllclRyZWVIb3N0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDU4NTY5MTgxNDQwNjkzZjYwZjZkZDZiMjk5Y2JiOWRjODlkMWE0NWMuLjY5
MjZlM2Q1M2MwODc0MjBkNGFmMTkzZWY2NWQwNzgxNTM0NGM4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCkBAIC03NCw4ICs3NCw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRy
ZWVIb3N0Kik7CiAKICAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmgKaW5kZXggN2IxNTZmYjE0MGFiMDFkM2Q1ZDlmMTdmNGUzNGJlNzNmMjcz
YmUyNC4uOWY3OTAzMjU2ZmJlODg2YWM0ZWU2YzlkZjZkYWIzNjYwY2YzZTUxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmgKQEAgLTYzLDcgKzYzLDYgQEAgcHVibGljOgogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIi
OyB9CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFRleHR1cmUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hy
b21pdW0uaAppbmRleCA4NjJmYTg4ZjNmYjA4OGU5Njg4OTI0OGY4MzI0YmM0NjIzZjA1YjExLi4y
MTU1MGRmYzE0MTNmMGI0NzZkNTBiMDYzMmFhOGY1Mjc5YmMxYzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJX
ZWJHTExheWVyIjsgfQotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xM
YXllckNocm9taXVtUmF0ZUxpbWl0VGFzazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5o
CmluZGV4IGQ4NWViYThkZTg4M2FiZTdlMGUwOWU1N2U0MDAxZmYwZjZjNGZhNTAuLjZmY2Y4NDA0
MDE5MjU1MjBjMTdlNDc3NmQxZGUwYTVhODIyM2Y3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaApAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxh
eWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xheWVyIjsgfQorCiAgICAg
dW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9w
cmVtdWx0aXBsaWVkQWxwaGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMzAwZjQ3MTMz
ZWM4YzA0MjI2YTM0ZWUxZDA1MzMxMjQzNjZlYjJjNy4uYjAyZjFlZjMxNjQ0YWNlOTk1Y2NkNmVj
NTlkYjBiYTRiMDIwZTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMjI3LDYgKzIy
NywzMyBAQCB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRl
cmF0b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYQogICAgIGxheWVyU29ydGVyLT5zb3J0KGZp
cnN0LCBlbmQpOwogfQogCitTdHJpbmcgQ0NMYXllckltcGw6OmxheWVyVHJlZUFzVGV4dCgpIGNv
bnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICBkdW1wTGF5ZXIodHMsIDApOworICAgIHJl
dHVybiB0cy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmR1bXBMYXllcihUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50KTsKKyAgICB0cyA8PCBsYXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwg
IilcbiI7CisgICAgZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOworICAgIGlmICht
X3JlcGxpY2FMYXllcikgeworICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzIpOworICAg
ICAgICB0cyA8PCAiUmVwbGljYTpcbiI7CisgICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5
ZXIodHMsIGluZGVudCszKTsKKyAgICB9CisgICAgaWYgKG1fbWFza0xheWVyKSB7CisgICAgICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CisgICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKKyAg
ICAgICAgbV9tYXNrTGF5ZXItPmR1bXBMYXllcih0cywgaW5kZW50KzMpOworICAgIH0KKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
Y2hpbGRyZW5baV0tPmR1bXBMYXllcih0cywgaW5kZW50KzEpOwogfQogCit9CisKKwogI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4
IGM3ZGM0Njk1NDdmNWMxNWU3YTM3N2VmOTU3ZmU0ZjM4OTc1ZmRjMDEuLmM1YzE4NWExMzMzZDJl
Y2RhMTdhYzAxZWFjZTNjNWFmYjdjNDA0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTY1
LDExICsxNjUsMTIgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVu
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KICAgICB2b2lk
IHNldERyYXdhYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxl
Q29udGVudFJlY3QgPSByZWN0OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisgICAgU3RyaW5nIGxheWVyVHJl
ZUFzVGV4dCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwo
aW50KTsKIAorICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0m
LCBpbnQgaW5kZW50KSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudCk7CiAKIHByaXZhdGU6CkBAIC0xNzcsNiArMTc4LDEwIEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CiAgICAgdm9pZCBjbGVhckNo
aWxkTGlzdCgpOyAvLyBXYXJuaW5nOiBUaGlzIGRvZXMgbm90IHByZXNlcnZlIHRyZWUgc3RydWN0
dXJlIGludmFyaWFudHMgYW5kIHNvIGlzIG9ubHkgZXhwb3NlZCB0byB0aGUgdHJlZSBzeW5jaHJv
bml6ZXIuCiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9CisKKyAgICB2b2lkIGR1bXBMYXllcihUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKICAgICAvLyBQcm9wZXJ0aWVzIGludGVybmFs
IHRvIENDTGF5ZXJJbXBsCiAgICAgQ0NMYXllckltcGwqIG1fcGFyZW50OwogICAgIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4gbV9jaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IGVlMGRkNDM2ZjQ5YTQ0NWEyNDdkNWNiNjEzZDUyYjllYjQ5ZjJhZjUuLjdi
OGNiNDFmNGRhZWUwNGJiNmY1MjJlNGQ2YzUyOWQyNDkwNTVlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcApAQCAtNjksNyArNjksNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZSgpCiAgICAgICAgIG1fcHJveHkgPSBDQ1NpbmdsZVRocmVhZFByb3h5OjpjcmVh
dGUodGhpcyk7CiAgICAgbV9wcm94eS0+c3RhcnQoKTsKIAotICAgIGlmICghbV9wcm94eS0+aW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIodGhpcykpCisgICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBVcGRhdGUg
bV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRo
ZSByZW5kZXJlci4KQEAgLTg2LDE0ICs4NiwyNSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5p
dGlhbGl6ZSgpCiAgICAgLy8gV2UgY2hhbmdlZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUgcHJv
eHkgYSBjb21taXQgaXMgbmVlZGVkLgogICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7CiAKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQogeworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dDo6fkNDTGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOwogICAgIG1fcHJveHktPnN0b3AoKTsKICAg
ICBtX3Byb3h5LmNsZWFyKCk7CisgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CisgICAgQVNTRVJU
KCFtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKyAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoY29udGV4dCk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkKQEAgLTEwOSw3ICsxMjAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8o
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKICAgICBob3N0SW1wbC0+c2V0U291cmNlRnJh
bWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkt
PnJlZHVjZU1lbW9yeVRvTGltaXQoaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1l
bW9yeVJlY2xhaW1MaW1pdCgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVj
ZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOwogICAg
IGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBs
LT5jb250ZXh0KCkpOwogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxp
c3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOwpAQCAtMTE5LDYgKzEzMCw5IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBo
b3N0SW1wbC0+c2V0Wm9vbUFuaW1hdG9yU2NhbGUobV96b29tQW5pbWF0b3JTY2FsZSk7CiAgICAg
aG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAorICAgIGhvc3RJbXBsLT5s
YXllclJlbmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKwogICAgIC8vIFN5bmNo
cm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIo
KSkKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290
TGF5ZXIoKSkpOwpAQCAtMTQ1LDYgKzE1OSw4IEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
CiB7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1
cmVzKDApOworCiAgICAgaWYgKHJvb3RMYXllcigpKQogICAgICAgICByb290TGF5ZXIoKS0+cGxh
dGZvcm1MYXllcigpLT5jbGVhbnVwUmVzb3VyY2VzUmVjdXJzaXZlKCk7CiAgICAgbV9jbGllbnQt
PmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwpAQCAtMjU5LDcgKzI3NSwxNCBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplLCBjb25zdCBJbnRTaXplJiBjbwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2li
bGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0gICAgbV9wcm94
eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAg
bV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7
CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChU
ZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgICAgICBtX3Byb3h5LT5zZXRO
ZWVkc0NvbW1pdCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21w
b3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCkBAIC0yNjksNyArMjkyLDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAKIFRleHR1
cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBjb25z
dAogewotICAgIHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CisgICAg
cmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsKIH0KIAogI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGVkOThj
MmU5OGY0YWYwNTM5NGU3N2M5NDg0OTZhZGI5YTE4MGJjNWQuLmM3MTNmMDNlN2FkMjMxNzlhYzg3
NzYzMGEyM2M5ZjQ3ODFiNzFjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0x
NTcsNiArMTU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKIAorICAg
IHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOworCiBwcm90
ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0
IENDU2V0dGluZ3MmKTsKIApAQCAtMTg0LDYgKzE4Niw3IEBAIHByaXZhdGU6CiAKICAgICBPd25Q
dHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CisgICAgT3duUHRyPFRleHR1
cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91
cGRhdGVMaXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4
IDcwODJkNjViM2I0YjU5ZjM2MjgxMmNiNzg3MTE4MDQ5NzU3NzM1MDAuLmJlYzdjMDJkMjVlZTUx
M2E5Mjg1Njc1Y2M3NGI5MDU0NDE5MzU5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVycygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRy
YXdMYXllcnMiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBp
ZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkKKyAgICBpZiAobV9sYXll
clJlbmRlcmVyLT5yb290TGF5ZXIoKSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5
ZXJzKCk7CiAKICAgICArK21fZnJhbWVOdW1iZXI7CkBAIC0xMTYsMzEgKzExNiwyNyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBsYXllcikKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2li
bGUpCiB7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlciAmJiAhdmlzaWJsZSkKLSAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5yZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVI
b3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBpbXBsSGFj
aywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK2Jvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCkKIHsKLSAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0
aGVuIHdlIGFyZSByZWNvdmVyaW5nIGZyb20gYSBsb3N0IGNvbnRleHQKLSAgICBib29sIHJlY3Jl
YXRpbmdSZW5kZXJlciA9IG1fbGF5ZXJSZW5kZXJlcjsKLQotICAgIC8vIEZpcnN0IHRpbWUgbGF5
ZXJSZW5kZXJlciBjcmVhdGlvbgogICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxh
eWVyUmVuZGVyZXI7Ci0gICAgaWYgKCFyZWNyZWF0aW5nUmVuZGVyZXIpCi0gICAgICAgIGxheWVy
UmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywg
Y29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0
KTsKLQorICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0
aGlzLCBjb250ZXh0KTsKIAogICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBh
c2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRp
bmcKICAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KICAgICBpZiAo
IWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKICAgICAg
ICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKIAotICAgICAgICBpZiAo
IXJlY3JlYXRpbmdSZW5kZXJlcikKLSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVyKCksIHRoaXMsIGNvbnRleHQpOworICAgICAg
ICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29u
dGV4dCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGFkIGEgcHJldmlvdXMgbGF5ZXIgcmVuZGVy
ZXIsIHRoZW4gaXRzIGNvbnRleHQgbXVzdCBoYXZlIGJlZW4gbG9zdCBhbG9uZyB3aXRoIGFsbCBv
ZiBpdHMgcmVzb3VyY2VzLgorICAgIC8vIExldCB0aGUgb2xkIGxheWVyIHJlbmRlcmVyIGtub3du
IGl0cyByZXNvdXJjZXMgYXJlIGdvbmUuCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKDAp
OworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNsb3NlKCk7CiAgICAgfQogCiAgICAgbV9sYXll
clJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAppbmRleCAwNTJmMjYwOWJiNDQzMGQwY2ViMTI0YTM4ZTBkNjY3ZmI5YWNhMTBhLi5kZmY5
NjgwNmQ4NWYyMGIxOGMwZjQ0ODFjYTE0ZjAyOTVjZWM4YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bmlzaEFsbFJlbmRlcmluZygpOwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVOdW1iZXI7IH0KIAotICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NM
YXllclRyZWVIb3N0KiBvd25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsK
KyAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+KTsKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKICAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0K
ICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkgY29uc3Q7CkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQogICAg
IHZvaWQgc2V0Wm9vbUFuaW1hdG9yU2NhbGUoZG91YmxlKTsKIAorICAgIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAg
IGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgK
aW5kZXggOWI0YzUzNjcyM2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3Ny4uZTRjOGIyMGE3
ODgzOGFkYmI2ZTRmNWY5ZTFmZjJmNTEzNmQ4ZDQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5oCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgQ0NQbHVnaW5MYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5
ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9CisKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaAppbmRleCBhYWU2Njk0NGIwNTM3
ZGI2YjMwNTdmNWIxMWRjNWViMGVlNjEzZDkwLi5mNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFi
YTlhNjlkZmFjNmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC01OCwxMCArNTgsMTEgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpID0gMDsKIAog
ICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Nv
bW1pdCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwogCkBAIC04MCw5ICs4
MSw2IEBAIHB1YmxpYzoKICAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0
IHN0aWxsIGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKICAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOwogCi0gICAgLy8gVGVt
cG9yYXJ5IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVy
UmVuZGVyZXJDaHJvbWl1bXMKLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCkgPSAwOwotCiBwcm90ZWN0ZWQ6CiAgICAgQ0NQcm94eSgpIHsgfQogICAg
IGZyaWVuZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAppbmRleCAwYWYzMzBkYmQ4ZjQ2N2ZkYWZkN2RhNDAzNmYwNGJjODQ1
MTYzZGUxLi4yM2NjMmM5OTk1YTRjZjkzNWQwMDI1MjE4OGZmNGQ5MzY3Nzk3MzBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw5IEBAIGJv
b2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9s
YXllclRyZWVIb3N0SW1wbDsKIH0KIAotYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK2Jvb2wgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogeworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
bV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzAsNyArMTMxLDcgQEAgYm9v
bCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJl
ZUhvc3QqIG93bmVySGFjaykKIAogICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOwotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIH0KIH0KIApA
QCAtMTQ2LDYgKzE0NywyNCBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb21wb3Np
dG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAgICAgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbCA9
IG51bVRpbWVzIC0gMTsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0Nv
bW1pdCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyNpZiAhVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgIC8vIENvbW1pdCBpbW1lZGlhdGVseQorICAgIHsKKyAgICAgICAg
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5i
ZWdpbkNvbW1pdCgpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJU
cmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRD
b21wbGV0ZSgpOworICAgIH0KKyNlbHNlCisgICAgLy8gU2luZ2xlIHRocmVhZGVkIG9ubHkgd29y
a3Mgd2l0aCBUSFJFQURFRF9DT01QT1NJVElORy4KKyAgICBDUkFTSCgpOworI2VuZGlmCisKK30K
Kwogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTE3MCwxNiArMTg5LDEyIEBAIHZvaWQg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICB7CiAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bnRleHQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9CiAg
ICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAotVGV4dHVyZU1hbmFnZXIqIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQotewotICAgIHJldHVybiBtX2xheWVy
VHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsK
LX0KLQogI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAvLyBDYWxsZWQgYnkgdGhlIGxl
Z2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBz
Y2hlZHVsaW5nKQogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVs
eSgpCkBAIC0xOTcsNiArMjEyLDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVJbW1lZGlhdGVseSgpCiAKIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250
ZXh0SWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFt
X2dyYXBoaWNzQ29udGV4dExvc3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dDsKQEAgLTIwNyw3ICsyMjMsNyBAQCBib29sIENDU2lu
Z2xlVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dElmTmVlZGVkKCkKIAogICAgIGlmIChjb250
ZXh0KSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7Ci0gICAgICAgIGlm
IChtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0
KSkgeworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoY29udGV4dCkpIHsKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjcmVh
dGVHcmFwaGljc0NvbnRleHQodHJ1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dExv
c3QgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oCmluZGV4IDc2NWI4NTlmOTUxNTAyNmU5ZDc4NzUyMWQ0OTlkNTFhOTgw
ZjhmOTcuLmJiYmU1ZjU5MDc2MmJlMThhMjg3NGE1ODhlYzQzNzBhNjU5N2Y5MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTQ0LDE3ICs0NCwxNSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJU
cmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNv
bXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
Q29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdo
aWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21p
dW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigp
OwotCiAgICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9ucy4KICNpZiAhVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHAKaW5kZXggMWE4ODM4NGZlYTJiYWY1YjQ2MzIyZjA0YmU4YWJiYzk5MTVh
OTk0OS4uMzI0NmE4NGI1YzRkMzRkODk2NWY3N2RlM2IyZjhmMTM5ZmRiYzY2NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5
Ojppc1N0YXJ0ZWQoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwogfQog
Ci1ib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVl
SG9zdCogb3duZXJIYWNrKQorYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcigpCiB7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXll
clRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYgKCFjb250
ZXh0KQpAQCAtMTE1LDggKzExNSw3IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spCiAgICAgYm9vbCBpbml0aWFs
aXplU3VjY2VlZGVkOwogICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVz
OwogICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mob3du
ZXJIYWNrKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb250ZXh0UHRyKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNv
bXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZpbml0aWFsaXplU3VjY2VlZGVkKSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY2FwYWJpbGl0aWVzKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb250ZXh0
UHRyKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmluaXRpYWxpemVTdWNjZWVkZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
YXBhYmlsaXRpZXMpKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CiAKICAgICBpZiAoaW5pdGlh
bGl6ZVN1Y2NlZWRlZCkKQEAgLTEzNCw2ICsxMzMsMTcgQEAgdm9pZCBDQ1RocmVhZFByb3h5Ojps
b3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAg
IHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1p
dCIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVl
ZHNDb21taXRPbkNDVGhyZWFkKSk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzIs
MTIgKzE4Miw2IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgbV9sYXllclRyZWVI
b3N0ID0gMDsKIH0KIAotVGV4dHVyZU1hbmFnZXIqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4
dHVyZU1hbmFnZXIoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCiB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKQEAgLTIyOSw2ICsyMzMsMTQgQEAgdm9pZCBDQ1RocmVh
ZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmRyYXdMYXllcnMoKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1p
dE9uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVk
c0NvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKQEAgLTI1MSwxMiArMjYzLDEyIEBA
IHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCi12b2lk
IENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVy
VHJlZUhvc3QqIG93bmVySGFjaywgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCit2b2lkIENDVGhyZWFkUHJveHk6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dFB0ciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGluaXRpYWxpemVT
dWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqIGNhcGFiaWxpdGllcykKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkND
VGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoYWRvcHRSZWYoY29udGV4dFB0cikpOwotICAg
ICppbml0aWFsaXplU3VjY2VlZGVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRl
ZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQp
OwogICAgIGlmICgqaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKICAgICAgICAgKmNhcGFiaWxpdGllcyA9
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKICAgICBj
b21wbGV0aW9uLT5zaWduYWwoKTsKQEAgLTI2Niw2ICsyNzgsNyBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0
Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CisgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVl
SG9zdEltcGwtPmNvbnRleHQoKSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwog
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4
IDI0ZTFmZTEzZTcxOTc0NzY0NmNjZjU1MmIzOGZhOGIzYjNiYzA1NDYuLjI0Njc3MjQwY2FhYTY5
MTI2NzZkN2VkZmUwZmFiMmNjMjEyNjJlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAg
LTQ1LDE3ICs0NSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxp
emVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIGNvbnN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcyk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAot
ICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNl
cyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciog
Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGhy
ZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAKQEAgLTY3LDcgKzY1LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKICAgICB2b2lk
IGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVy
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxl
dGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyopOworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKEdy
YXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3Vj
Y2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7CisgICAgdm9pZCBzZXROZWVkc0Nv
bW1pdE9uQ0NUaHJlYWQoKTsKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1Ro
cmVhZCgpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBs
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAxYTc1ODM0NGVjNTgzMzc5ZTZiNjRkZjAx
MTRmMTAyYjA0OTAyOTYyLi4xMjNkODUwMTU1OGNhNDYyZDZiNDBjNzQ0NjM0OGMzNWQ3NWUxYjI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtNzUsOCArNzUsOSBAQCB2
b2lkIENDVGlsZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQogCiB2b2lkIENDVGls
ZWRMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRl
bnQpIGNvbnN0CiB7Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgQ0NMYXllcklt
cGw6OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7CisgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7CisgICAgdHMgPDwgInNraXBzRHJhdzogIiA8PCAoIW1fdGlsZXIgfHwgbV9za2lw
c0RyYXcpIDw8ICJcbiI7CiB9CiAKIERyYXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6dGls
ZUF0KGludCBpLCBpbnQgaikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRl
eCBjZWVjNWYyNTMzOWMyZmNlZDMxNTI4ZWRmODkxYTM2MjliNjMyMDI0Li5kMGRlMzg3MTY3Njlk
OTZlYTBjY2Q4NGJmNDFmZmQwMjUzNDgwYWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NU
aWxlZExheWVySW1wbChpbnQgaWQpOwogCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5
cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CisKICAgICAvLyBE
cmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3QuCiAgICAg
dm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggYmQxNjM3NmJiNWY0NzI2MDllYzQxMGUwZGVm
MzI5NzU3NjdkZjA5Yi4uNmJmMzUyOTFlYzBiZDBmOGRhZDkwZjUxODhlNWI1YTMxNWMzZWNiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50KTsKIAorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlk
ZW9MYXllciI7IH0KKwogICAgIHN0cnVjdCBUZXh0dXJlIHsKICAgICAgICAgUGxhdGZvcm0zRE9i
amVjdCBpZDsKICAgICAgICAgSW50U2l6ZSBzaXplOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107072</attachid>
            <date>2011-09-12 12:05:33 -0700</date>
            <delta_ts>2011-09-13 11:00:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67440-20110912120532.patch</filename>
            <type>text/plain</type>
            <size>61439</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ5NjYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVu
ZGVyc3VyZmFjZS1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3ItY29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhw
ZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZTQ5NWIyNmI5OWU1YzRhMTk3YzlkNjUyYTc5MTlhYmJl
NjM2MjcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI4NjYKemNtZUFTQE4/KG9sSHlgdVZCcSFp
YTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1RuNikkCnpHP1V+KzN2PGc8
TCRlZVVPVmVhP0d0PE9XaXhkK1JRJWozUGdIKDtyJVJWcUxhMkBlPGFTVy1MXlkrRkAtYWAlbwp6
dTh1dCNYT19saG1UVWBvQFRRWUZUa1k8WGNLXy0jWFA2bHAmSn0tV1V9KUdhN3tTMGAqdlFIdEFk
SkROaitNUHUKelUwWm1wS0tsN0JUU2tULWlncC1FRmcxO2VVPTdRRzUwO0l8WD1WOGczX0M+U2Jy
PjNFOUFJTVQ7MmRSKTJFdTRjCnI3fGpLdnhuTUxHak9LI1RUcmZ5LSE0M0ErZTd2ZyohfGMzKWpi
SHsoUzNqM15QNjxyXzFYbE13CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3It
Y29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZlOTY5Mjdh
ZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1j
b250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJm
YWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0ZGExMzgxMDE0YzBjZTg2MmY4MjAzNzdhYmY5MThhOGRh
NjE0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Nv
bXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAucmVkIHsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKworICAgIC5ncmVlbiB7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKworICAgIGRpdiB7CisgICAgICBoZWlnaHQ6
IDEwMHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAgIH0KKworICAgIC5jb21wb3NpdGVkIHsK
KyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgIH0KKworICAgIC5y
ZW5kZXJTdXJmYWNlIHsKKyAgICAgIG9wYWNpdHk6IDAuNTsKKyAgICB9CisgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBJbiB0aGUgcGl4ZWwgcmVzdWx0cywgb25lIGdyZWVuIHNx
dWFyZXMgc2hvdWxkIGJlIHZpc2libGUuIC0tPgorICA8ZGl2IGNsYXNzPSJyZWQgcmVuZGVyU3Vy
ZmFjZSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBjbGFzcz0icmVkIGNvbXBvc2l0ZWQiPjwvZGl2
PgorICA8L2Rpdj4KKyAgPHA+CisgIDxzY3JpcHQ+CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KHRydWUpOyAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWZ1bCBhcyBhIHBpeGVsIHRlc3QuCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzcGxheSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmxvc2VDb21wb3Np
dG9yQ29udGV4dCgxKTsKKyAgfQorICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpOworICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgicmVkIik7CisgIHRhcmdl
dC5jbGFzc0xpc3QuYWRkKCJncmVlbiIpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNGU5ODUyYTllYmRjNTZiNTViOTA1ZTk0NjhlZmJmNDY4MTEwM2I4Li44
NGQ3MjQ0NDVmYTdiNGQ0OGZhYTYyY2Q2YzczNGQwYTNhMzczOWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTEgQEAKKzIwMTEtMDktMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2Vy
IGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1vdmVzIHRoZSBjb250
ZW50cyBUZXh0dXJlTWFuYWdlciBvdmVyIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QsIHdoZXJlIGl0
IGJlbG9uZ3MsIGFuZCBhZGRzIGluIGEgY29tbWl0IHBhdGgKKyAgICAgICAgdG8gbWFrZSBzdXJl
IHRoYXQgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgZXZlbiBpZiB0aGUgcGFnZSBpcyBub3QgdmlzaWJs
ZS4gIFRoaXMgbW92ZSBhbHNvIHJlbW92ZWQgdGhlIG5lZWQgZm9yCisgICAgICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSdzIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyLCBzbyBJIHJlbW92ZWQgdGhh
dCBhcyB3ZWxsLiAgVGhhdCBtZWFudCBtb3ZpbmcgdGhlCisgICAgICAgIGxheWVyVHJlZUFzVGV4
dCgpIGxvZ2ljIG92ZXIgdG8gdGhlIENDTGF5ZXJJbXBsIHNpZGUsIHdoaWNoIGlzIHdoZXJlIGl0
IHJlYWxseSBiZWxvbmdlZCBhbnl3YXkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBj
b21wb3NpdGluZy8gdGVzdHMgYW5kCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0
b3IvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJmYWNlLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5k
ZXJTdXJmYWNlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisK
IDIwMTEtMDktMTIgIEFya28gU2FoYSAgPGFya29AbW90b3JvbGEuY29tPgogCiAgICAgICAgIFNl
bGVjdHN0YXJ0IGlzIG5vdCBmaXJlZCB3aGVuIHNlbGVjdGlvbiB3YXMgY3JlYXRlZCBieSBhcnJv
dyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGVhMjZkZmUxODdlNjJj
NTc1NTg1N2FmMTE3YWMzNTc0M2U1Y2JkNWQuLjRjMmU0NDA4NWY3NjQ0M2FiMTIxODBkNzc0MDlj
NDhiNWZkNzRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKQEAgLTUyLDggKzUy
LDYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENhbnZhc0xheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xheWVyIjsgfQot
CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7CiAg
ICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApp
bmRleCBiYWM0MWY5Yzg4YTRmMDkxMzFhMTRiNjk0YTRmYWIwNDkyZDlmNTRlLi45NDA5YWUxMmU5
ZjMyNjc1MjM1MGFlNjBmNGQzMGFmOTkyZmJjOTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKQEAgLTU0LDggKzU0LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biAiQ29udGVudExheWVyIjsgfQotCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCBkNjk3OTEzMWI1ODhkNTIyODMzOWFiNTNlYWYwYjAz
Yjk4MTM3ZmRlLi40YWZlMDVkMTUxZjhiMzYzNjI5NjMwNDMzMTBhMjA5NDk0MTgyOTU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkltYWdl
TGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgSW1hZ2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGJjZDRkNzc4
OTliMmI5YjM1ZTdiYzMzZGJmMjA2Y2Y4OGFiMWE5NjYuLmEwZDM0NjU2ZThjMTVkNTJkMDVlNDAy
ZDI5MWY4NTQwNTIzOGY0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNzYsNDggKzM3
Niw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotU3RyaW5nIExheWVyQ2hyb21pdW06
OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Ci17Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICBkdW1w
TGF5ZXIodHMsIDApOwotICAgIHJldHVybiB0cy5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50
IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lk
IExheWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCBsYXllclR5cGVB
c1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7Ci0gICAgZHVtcExheWVyUHJvcGVy
dGllcyh0cywgaW5kZW50KzIpOwotICAgIGlmIChtX3JlcGxpY2FMYXllcikgewotICAgICAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzIpOwotICAgICAgICB0cyA8PCAiUmVwbGljYTpcbiI7Ci0g
ICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5ZXIodHMsIGluZGVudCszKTsKLSAgICB9Ci0g
ICAgaWYgKG1fbWFza0xheWVyKSB7Ci0gICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7
Ci0gICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKLSAgICAgICAgbV9tYXNrTGF5ZXItPmR1bXBMYXll
cih0cywgaW5kZW50KzMpOwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPmR1bXBMYXllcih0cywg
aW5kZW50KzEpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7Ci0gICAgdHMgPDwgImlkOiAiIDw8IGlkKCkgPDwgIiBkcmF3c0NvbnRlbnQ6ICIg
PDwgZHJhd3NDb250ZW50KCkgPDwgIiBib3VuZHMgIiA8PCBtX2JvdW5kcy53aWR0aCgpIDw8ICJ4
IiA8PCBtX2JvdW5kcy5oZWlnaHQoKSA8PCAiIHVzZXNMYXllclNjaXNzb3I6ICIgPDwgdXNlc0xh
eWVyU2Npc3NvcigpCi0gICAgICAgIDw8ICIgc2Npc3NvclJlY3Q6ICgiIDw8IG1fc2Npc3NvclJl
Y3QueCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC55KCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JS
ZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpIDw8ICIpIgotICAg
ICAgICA8PCAiIHZpc2libGVMYXllclJlY3Q6ICgiIDw8IG1fdmlzaWJsZUxheWVyUmVjdC54KCkg
PDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QueSgpIDw8ICIsICIgPDwgbV92aXNpYmxlTGF5
ZXJSZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX3Zpc2libGVMYXllclJlY3QuaGVpZ2h0KCkgPDwg
IikiCi0gICAgICAgIDw8ICJcbiI7Ci0KLX0KLQogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewogICAgIHJldHVybiBDQ0xheWVySW1w
bDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOGQzMGQ3ZDQ0NWEx
MWY0YTY2ZWU2MTU0YmNhMzMwNTMzMmJkMzg0Ny4uN2Y2ZmZhNzRjNWY2YjJmMWZlYTk3MjhkODcz
NzE2ZTQ1ZGVjNjk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTcyLDcgKzE3Miw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICB2b2lk
IGRyYXdEZWJ1Z0JvcmRlcigpOwotICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCkBAIC0yMjAsMTEgKzIxOSw2IEBA
IHByb3RlY3RlZDoKIAogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBkdW1wTGF5ZXIoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVB
c1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJMYXllckNocm9taXVtIjsgfQotICAgIHZpcnR1YWwg
dm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
LQogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNEaXJ0eTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNWQ1ZTRjNThjYTJh
MzhhMDcwNTdjMGRkNmU5NzllNGNjOTI5YWYyOS4uYzcyODE2OTc1ZDIyNDQ4NzZlMTgxY2I5MDc0
MDdiOWVlYTE1YWIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBA
IC03MCwyMCArNzAsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIEZJWE1FOiBNYWtlIHRoaXMgbGltaXQgYWRqdXN0YWJsZSBhbmQgZ2l2ZSBpdCBh
IHVzZWZ1bCB2YWx1ZS4KLQotLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBh
bGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLXN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9y
eUhpZ2hMaW1pdEJ5dGVzID0gMTI4ICogMTAyNCAqIDEwMjQ7Ci0vLyBQcmVmZXJyZWQgdGV4dHVy
ZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotc3RhdGljIHNpemVfdCB0
ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0Qnl0ZXMgPSA2NCAqIDEwMjQgKiAxMDI0OwotLy8gVGhl
IG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1
cmVzLgotc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyA9IDMgKiAxMDI0
ICogMTAyNDsKLQotc2l6ZV90IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZU1lbW9yeVJl
Y2xhaW1MaW1pdCgpCi17Ci0gICAgcmV0dXJuIHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRl
czsKLX0KLQogbmFtZXNwYWNlIHsKIAogc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhv
TWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkK
QEAgLTE0MywyNCArMTI5LDIyIEBAIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBs
KiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCitQYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXIsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93bmVyLT5zZXR0aW5ncygp
LmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGlu
Zyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1wbCwgY29udGV4dCkpKTsKKyAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVy
LT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxheWVyUmVu
ZGVyZXIucmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogb3duZXJJbXBsLAor
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVI
b3N0SW1wbCogb3duZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9vd25l
cihvd25lcikKLSAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwg
bV96b29tQW5pbWF0b3JTY2FsZSgxKQpAQCAtMjEwLDggKzE5NCw4IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShD
Q0xheWVySW1wCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSgpCiB7Ci0gICAg
aWYgKHJvb3RMYXllckltcGwoKSkKLSAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXll
ckltcGxSZWN1cnNpdmUocm9vdExheWVySW1wbCgpKTsKKyAgICBpZiAocm9vdExheWVyKCkpCisg
ICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKHJvb3RMYXll
cigpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dCgpCkBAIC0yMjYsMTggKzIxMCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
ZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhcioKICAgICAg
ICAgTE9HX0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRj
b21tYW5kOiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIHN0YXRpY19jYXN0
PGludD4oZXJyb3IpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VU
ZXh0dXJlcygpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclN1cmZh
Y2VUZXh0dXJlcygpCiB7Ci0gICAgLy8gUmVkdWNlcyB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB0byB0
ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyBieSBkZWxldGluZyBub24gcm9vdCBsYXllcgotICAg
IC8vIHRleHR1cmVzLgotICAgIG1fb3duZXItPm5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpLT5w
cm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7Ci0gICAg
bV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotICAgIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5n
ZXQoKSk7Ci0gICAgLy8gRXZpY3QgYWxsIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCi0gICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0gICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0g
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyht
X2NvbnRleHQuZ2V0KCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5ldmlj
dEFuZERlbGV0ZUFsbFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQpAQCAtMjU3LDE4ICsyMzIsMTYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIC8vIFJlbmRlcldp
ZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7
CiAKLSAgICBpZiAoIXJvb3RMYXllckltcGwoKSkKKyAgICBpZiAoIXJvb3RMYXllcigpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IE5vIG5lZWQgdG8gd2FsayB0aGUgdHJlZSBoZXJl
LiBUaGlzIGNvdWxkIGJlIHBhc3NlZCB2aWEgZHJhdy4KLSAgICByb290TGF5ZXJJbXBsKCktPnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CisgICAgcm9vdExheWVyKCktPnNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUodGhpcyk7CiAKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFu
YWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBt
X2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKyAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0
ZXMpOwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwotCi0gICAgaWYgKHRleHR1cmVNZW1vcnlS
ZWNsYWltTGltaXRCeXRlcyA+IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9y
eVVzZUJ5dGVzKCkpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyAtIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIGlmIChUZXh0
dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSA+IG1fY29udGVudHNUZXh0dXJlTWVtb3J5
VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpIC0gbV9jb250
ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQogICAgICAgICBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5n
ZXQoKSk7CkBAIC0yODMsNyArMjU2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKLSAgICBDQ0xheWVy
SW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKKyAgICBDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
CiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC00NDcsNyArNDIw
LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogTWFuYWdlZFRleHR1cmUqIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4g
c2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVySW1wbCgpID8gcm9vdExh
eWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKKyAgICBy
ZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVyKCkgPyByb290
TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgp
CkBAIC02MDMsMTIgKzU3Niw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmZsdXNoKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFn
ZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBtX2NhcGFiaWxp
dGllcy5tYXhUZXh0dXJlU2l6ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgp
KTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0QXNzb2NpYXRlZENvbnRl
eHREZWJ1Z09ubHkobV9jb250ZXh0LmdldCgpKTsKLSNlbmRpZgorICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6
aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC04MTcsMjkgKzc4NSwyMiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogICAgIGlmIChtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7CiAKLSAgICAvLyBDbGVhciB0
aWxlcnMgYmVmb3JlIHRoZSB0ZXh0dXJlIG1hbmFnZXIsIGFzIHRoZXkgaGF2ZSByZWZlcmVuY2Vz
IHRvIHRleHR1cmVzLgotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxs
VGV4dHVyZXMoKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRv
TGltaXQoMCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xl
YXIoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4
dHVyZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5
VG9MaW1pdCgwKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZp
Y3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMpOworICAgIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIH0KIAogU3RyaW5n
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKIHsKICAgICBU
ZXh0U3RyZWFtIHRzOwogICAgIGlmIChyb290TGF5ZXIoKSkgewotICAgICAgICB0cyA8PCByb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgdHMg
PDwgcm9vdExheWVyKCktPmxheWVyVHJlZUFzVGV4dCgpOwogICAgICAgICB0cyA8PCAiUmVuZGVy
U3VyZmFjZXM6XG4iOwotICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEsIHJvb3RMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEs
IHJvb3RMYXllcigpKTsKICAgICB9CiAgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0Cit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBp
bnQgaW5kZW50LCBjb25zdCBDQ0xheWVySW1wbCogbGF5ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmR1
bXBTdXJmYWNlKHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCBhZmJlMjJkODhlMGRlZmVjMWVmMGUxY2FhYTAxNGI5ZWI5YmI0NjhjLi41ZDgwNGFkMWYx
NjIyMDg2ODc2ZmRjZDI0MWViNjdlY2IxMDBjNGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q7CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBs
YXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVm
Q291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJU
cmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAKICAgICAvLyBN
dXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVt
IHRvIGRlc3RydWN0CiAgICAgdm9pZCBjbG9zZSgpOwpAQCAtODQsMTkgKzg0LDEzIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3du
ZXItPnNldHRpbmdzKCk7IH0KICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBj
YXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCi0gICAgQ0NM
YXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KLSAgICBjb25zdCBDQ0xh
eWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQotCi0gICAgR3Jh
cGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9vd25lci0+cm9vdExheWVyKCk7IH0K
LSAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQotCi0gICAgQ0NMYXllckltcGwqIHJvb3RMYXllckltcGwoKSB7
IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0KLSAgICBjb25zdCBDQ0xheWVySW1w
bCogcm9vdExheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIo
KTsgfQorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290
TGF5ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQoKTsKICAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVySW1wbC0+dmlld3BvcnRTaXplKCk7IH0KKyAgICBj
b25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNp
emUoKTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCku
d2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6
ZSgpLmhlaWdodCgpOyB9CiAKQEAgLTEzOSw3ICsxMzMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCk7
CiAKLSAgICBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogICAgIFRleHR1cmVNYW5h
Z2VyKiByZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQogCiAgICAgQ0NIZWFkc1VwRGlzcGxheSog
aGVhZHNVcERpc3BsYXkoKSB7IHJldHVybiBtX2hlYWRzVXBEaXNwbGF5LmdldCgpOyB9CkBAIC0x
NTAsMTcgKzE0MywxNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAot
ICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyU3VyZmFj
ZVRleHR1cmVzKCk7CiAKICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCiAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwogCi0gICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gdGhlIGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlciBo
YXMgbW92ZWQgdG8gQ0NMYXllclRyZWVIb3N0LgotICAgIHN0YXRpYyBzaXplX3QgdGV4dHVyZU1l
bW9yeVJlY2xhaW1MaW1pdCgpOworICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMoc2l6ZV90IGNvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKSB7IG1fY29udGVudHNU
ZXh0dXJlTWVtb3J5VXNlQnl0ZXMgPSBjb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlczsgfQog
CiBwcml2YXRlOgotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKQEAgLTE3OSwxNyArMTcxLDE0IEBAIHByaXZhdGU6CiAKICAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mLCBj
b25zdCBSZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgY29uc3QgTGF5ZXJDaHJvbWl1bSopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25z
dCBDQ0xheWVySW1wbCopIGNvbnN0OwogCiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0
cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAogICAgIHZvaWQgY2xlYXJS
ZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIAotICAg
IC8vIEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCi0gICAgQ0NMYXllclRyZWVI
b3N0KiBtX293bmVyOwotCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7Cisg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lcjsKIAogICAgIExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKQEAgLTIyMCw3ICsyMDksNyBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4gbV92aWRlb0xheWVyUkdC
QVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0+IG1fdmlk
ZW9MYXllcllVVlByb2dyYW07CiAKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlcjsKKyAgICBzaXplX3QgbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VC
eXRlczsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyOwogCiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+IG1faGVhZHNVcERpc3BsYXk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKaW5kZXggNzkwYzcwZjAyN2FjYmExMzgxNTM0ZmVlY2Fh
N2Q3NDdiMTM3ODUwYi4uZjFmODE4YjdlYzdlYTUwNmRkNTRhY2NkMjA5OWQ1NTNhYzdlZWRmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFu
YWdlZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcApAQCAtODMsNyArODMsNiBAQCB2b2lkIE1hbmFnZWRU
ZXh0dXJlOjp1bnJlc2VydmUoKQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXIt
Pmhhc1RleHR1cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1h
bmFnZXItPmFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJl
SWQpCiAgICAgICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0
dXJlKGNvbnRleHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CkBAIC05Miw3ICs5MSw2IEBAIHZv
aWQgTWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogdm9pZCBNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1
cmUobV90b2tlbikpOwotICAgIEFTU0VSVChjb250ZXh0ID09IG1fdGV4dHVyZU1hbmFnZXItPmFz
c29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KCkpOwogICAgIGlmICghbV90ZXh0dXJlSWQpCiAgICAg
ICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0dXJlKGNvbnRl
eHQsIG1fdG9rZW4pOwogICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg1MmRjMmVhNmZkMGQ3ZDg0MTU0Yjk0OTI0
ODI3NDhiN2FkNmEyOGIuLmQxY2ZjODAyOWViMjFmNGYyNmMyYjVjZTdlYjY4ZTA2NDNjMTkzYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKQEAgLTQ2LDkgKzQ2LDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKIAot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
CmluZGV4IGE1ZmQ3NGIxOTAyMGZmNDIxZDQ2NTdmN2VjZGU5N2MzZmIyYzE4ZTkuLjczZjNhYjI3
YTlhNTkxYzJlNjBiNWQ1ZTI3ZTliYTIxOGRmMWYzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmNwcApAQCAtNTksMjcgKzU5LDUgQEAgRmxvYXRSZWN0IFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGRyYXdh
YmxlQ29udGVudFJlY3Q7CiB9CiAKLVN0cmluZyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Om5hbWUo
KSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3VyZmFjZShpZD0l
ZCxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVyLT5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytp
KQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgbmFtZSgpIDw8ICJcbiI7Ci0KLSAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50KzEpOwotICAgIHRzIDw8ICJjb250ZW50UmVjdDogKCIgPDwg
bV9jb250ZW50UmVjdC54KCkgPDwgIiwgIiA8PCBtX2NvbnRlbnRSZWN0LnkoKSA8PCAiLCAiIDw8
IG1fY29udGVudFJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QuaGVpZ2h0KCkK
LSAgICAgICAgPDwgIiBzY2lzc29yUmVjdDogKCIgPDwgbV9zY2lzc29yUmVjdC54KCkgPDwgIiwg
IiA8PCBtX3NjaXNzb3JSZWN0LnkoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3Qud2lkdGgoKSA8
PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QuaGVpZ2h0KCkgPDwgIikiCi0gICAgICAgIDw8ICJcbiI7
Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IDRhMDYyYzU2NDBmZDQ0OTE4ZDI5YjkzYzY2
OWI5Mjc5NDY4NDMzNzEuLjhjMmZiNjk4YTQ1M2ZlZDliMTdkM2FjMWZhZTM1YmYwN2EwNmQ5OGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC01NCw5ICs1NCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2b2lkIGRyYXcoY29uc3Qg
SW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpOwogCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsK
LSAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQog
ICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBp
bmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCiAgICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJl
Y3QoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDhmYTA2NTFiOTg1ZTlm
OWM0OWRmYjM1NTYwODE3YzYyOTNhNmMzNzUuLjlhMDY4ZGNjNTc0MTMxOGI2YzVjNjEwOTlkYjBj
MTI4MDc0ZjEzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTQ0LDYgKzQ0LDIxIEBA
IHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoSW50U2l6ZSBzaXplLCBHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KQogICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogY29t
cG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CiB9CiAKK3NpemVfdCBUZXh0dXJl
TWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQoreworICAgIHJldHVybiAxMjggKiAxMDI0ICogMTAy
NDsKK30KKworc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpCit7Cisg
ICAgcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7Cit9CisKK3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6
bG93TGltaXRCeXRlcygpCit7CisgICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKK30KKwogVGV4
dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRl
cykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKQEAgLTEzOSwxMiArMTU0LDI0IEBAIHZvaWQg
VGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5m
byBpbmZvKQogCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpkZWxldGVFdmljdGVkVGV4dHVyZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV9hc3Nv
Y2lhdGVkQ29udGV4dERlYnVnT25seSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V2
aWN0ZWRUZXh0dXJlSWRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0
dXJlSWRzW2ldKQotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1
cmUobV9ldmljdGVkVGV4dHVyZUlkc1tpXSkpOworICAgIGlmIChjb250ZXh0KSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ldmljdGVkVGV4dHVyZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0dXJlSWQpIHsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZXZpY3RlZFRleHR1cmVzW2ldLmFs
bG9jYXRpbmdDb250ZXh0ID09IGNvbnRleHQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9ldmljdGVkVGV4dHVyZXNbaV0udGV4
dHVyZUlkKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgbV9ldmljdGVk
VGV4dHVyZUlkcy5jbGVhcigpOworICAgIG1fZXZpY3RlZFRleHR1cmVzLmNsZWFyKCk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hbmFnZXI6OmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgdW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICBy
ZWR1Y2VNZW1vcnlUb0xpbWl0KDApOworICAgIGRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhjb250ZXh0
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFuYWdlcjo6cmVtb3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4g
dG9rZW4sIFRleHR1cmVJbmZvIGluZm8pCkBAIC0xNTUsMTIgKzE4MiwxNiBAQCB2b2lkIFRleHR1
cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4dHVyZUluZm8g
aW5mbykKICAgICBtX3RleHR1cmVzLnJlbW92ZSh0b2tlbik7CiAgICAgQVNTRVJUKG1fdGV4dHVy
ZUxSVVNldC5jb250YWlucyh0b2tlbikpOwogICAgIG1fdGV4dHVyZUxSVVNldC5yZW1vdmUodG9r
ZW4pOwotICAgIG1fZXZpY3RlZFRleHR1cmVJZHMuYXBwZW5kKGluZm8udGV4dHVyZUlkKTsKKyAg
ICBFdmljdGlvbkVudHJ5IGVudHJ5OworICAgIGVudHJ5LnRleHR1cmVJZCA9IGluZm8udGV4dHVy
ZUlkOworI2lmbmRlZiBOREVCVUcKKyAgICBlbnRyeS5hbGxvY2F0aW5nQ29udGV4dCA9IGluZm8u
YWxsb2NhdGluZ0NvbnRleHQ7CisjZW5kaWYKKyAgICBtX2V2aWN0ZWRUZXh0dXJlcy5hcHBlbmQo
ZW50cnkpOwogfQogCiB1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6YWxsb2NhdGVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlVG9rZW4gdG9rZW4pCiB7Ci0gICAgQVNT
RVJUKGNvbnRleHQgPT0gbV9hc3NvY2lhdGVkQ29udGV4dERlYnVnT25seSk7CiAgICAgVGV4dHVy
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQodG9rZW4pOwogICAgIEFTU0VSVChp
dCAhPSBtX3RleHR1cmVzLmVuZCgpKTsKICAgICBUZXh0dXJlSW5mbyogaW5mbyA9ICZpdC5nZXQo
KS0+c2Vjb25kOwpAQCAtMTc3LDYgKzIwOCw5IEBAIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjph
bGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVUb2tlCiAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW5m
by0+Zm9ybWF0LCBpbmZvLT5zaXplLndpZHRoKCksIGluZm8tPnNpemUuaGVpZ2h0KCksIDAsIGlu
Zm8tPmZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKICAgICBpbmZv
LT50ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CisjaWZuZGVmIE5ERUJVRworICAgIGluZm8tPmFsbG9j
YXRpbmdDb250ZXh0ID0gY29udGV4dDsKKyNlbmRpZgogICAgIHJldHVybiB0ZXh0dXJlSWQ7CiB9
CiAKQEAgLTIwNCw2ICsyMzgsOSBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIGluZm8u
Zm9ybWF0ID0gZm9ybWF0OwogICAgIGluZm8udGV4dHVyZUlkID0gMDsKICAgICBpbmZvLmlzUHJv
dGVjdGVkID0gdHJ1ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5mby5hbGxvY2F0aW5nQ29udGV4
dCA9IDA7CisjZW5kaWYKICAgICBhZGRUZXh0dXJlKHRva2VuLCBpbmZvKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4IDEyYWQyMDgwMGI2Y2RjNmEyY2U3YTA0
NGY5NmQwYWYwNTUyMDA5MGEuLjIxMDVjNTdmZjk2YzBiY2M2NGJjZTFkMzA0OWM1ZjNlZjU5NTBm
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNDUsNiArNDUsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMs
IG1heFRleHR1cmVTaXplKSk7CiAgICAgfQogCisgICAgLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1p
dCBmb3IgdGV4dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KKyAgICBzdGF0aWMg
c2l6ZV90IGhpZ2hMaW1pdEJ5dGVzKCk7CisgICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBs
aW1pdC4gQ2FuIGJlIGV4Y2VlZGVkIGlmIG5lZWRlZC4KKyAgICBzdGF0aWMgc2l6ZV90IHJlY2xh
aW1MaW1pdEJ5dGVzKCk7CisgICAgLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ug
d2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVzLgorICAgIHN0YXRpYyBzaXplX3QgbG93TGlt
aXRCeXRlcygpOworCiAgICAgdm9pZCBzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CiAKICAg
ICBUZXh0dXJlVG9rZW4gZ2V0VG9rZW4oKTsKQEAgLTYxLDE0ICs2OCwxMSBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgYWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZVRv
a2VuKTsKICAgICB2b2lkIGRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCop
OwogCisgICAgdm9pZCBldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNE
Kik7CisKICAgICB2b2lkIHJlZHVjZU1lbW9yeVRvTGltaXQoc2l6ZV90KTsKICAgICBzaXplX3Qg
Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsg
fQogCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgc2V0QXNzb2NpYXRlZENvbnRleHREZWJ1Z09u
bHkoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpIHsgbV9hc3NvY2lhdGVkQ29udGV4dERlYnVn
T25seSA9IGNvbnRleHQ7IH0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogYXNzb2NpYXRlZENvbnRl
eHREZWJ1Z09ubHkoKSBjb25zdCB7IHJldHVybiBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5
OyB9Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVtb3J5
TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsKIApAQCAtNzcsNiArODEsOSBAQCBwcml2
YXRlOgogICAgICAgICBHQzNEZW51bSBmb3JtYXQ7CiAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZDsKICAgICAgICAgYm9vbCBpc1Byb3RlY3RlZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBhbGxvY2F0aW5nQ29udGV4dDsKKyNlbmRpZgogICAgIH07CiAKICAg
ICB2b2lkIGFkZFRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CkBAIC05MSwxMSAr
OTgsMTQgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKICAgICBUZXh0dXJl
VG9rZW4gbV9uZXh0VG9rZW47CiAKKyAgICBzdHJ1Y3QgRXZpY3Rpb25FbnRyeSB7CisgICAgICAg
IHVuc2lnbmVkIHRleHR1cmVJZDsKICNpZm5kZWYgTkRFQlVHCi0gICAgR3JhcGhpY3NDb250ZXh0
M0QqIG1fYXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBhbGxvY2F0aW5nQ29udGV4dDsKICNlbmRpZgorICAgIH07CiAKLSAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fZXZpY3RlZFRleHR1cmVJZHM7CisgICAgVmVjdG9yPEV2aWN0aW9uRW50cnk+IG1f
ZXZpY3RlZFRleHR1cmVzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggZGRlZmZlNzI4MjQyOTcxNTEyMzM2ODI0OTYxZDZiM2VkYTUyMjk4ZS4uNmJkMjgyMWRj
ZjFkYjI5MWUzNDU1N2Q1MjJkZmViYjZkYjkxNDRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCkBAIC0yNjUsMTkgKzI2NSw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB9CiB9CiAKLXN0YXRpYyB2
b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9w
ZXJ0aWVzKHRzLCBpbmRlbnQpOwotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRz
IDw8ICJza2lwc0RyYXc6ICIgPDwgKCFtX3RpbGVyIHx8IG1fc2tpcHNEcmF3KSA8PCAiXG4iOwot
fQotCiBUZXh0dXJlTWFuYWdlciogVGlsZWRMYXllckNocm9taXVtOjp0ZXh0dXJlTWFuYWdlcigp
IGNvbnN0CiB7CiAgICAgaWYgKCFsYXllclRyZWVIb3N0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDU4NTY5MTgxNDQwNjkzZjYwZjZkZDZiMjk5Y2JiOWRjODlkMWE0NWMuLjY5
MjZlM2Q1M2MwODc0MjBkNGFmMTkzZWY2NWQwNzgxNTM0NGM4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCkBAIC03NCw4ICs3NCw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRy
ZWVIb3N0Kik7CiAKICAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmgKaW5kZXggN2IxNTZmYjE0MGFiMDFkM2Q1ZDlmMTdmNGUzNGJlNzNmMjcz
YmUyNC4uOWY3OTAzMjU2ZmJlODg2YWM0ZWU2YzlkZjZkYWIzNjYwY2YzZTUxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmgKQEAgLTYzLDcgKzYzLDYgQEAgcHVibGljOgogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIi
OyB9CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFRleHR1cmUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hy
b21pdW0uaAppbmRleCA4NjJmYTg4ZjNmYjA4OGU5Njg4OTI0OGY4MzI0YmM0NjIzZjA1YjExLi4y
MTU1MGRmYzE0MTNmMGI0NzZkNTBiMDYzMmFhOGY1Mjc5YmMxYzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uaApAQCAtNTcsOSArNTcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJX
ZWJHTExheWVyIjsgfQotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xM
YXllckNocm9taXVtUmF0ZUxpbWl0VGFzazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5o
CmluZGV4IGQ4NWViYThkZTg4M2FiZTdlMGUwOWU1N2U0MDAxZmYwZjZjNGZhNTAuLjZmY2Y4NDA0
MDE5MjU1MjBjMTdlNDc3NmQxZGUwYTVhODIyM2Y3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaApAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxh
eWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNhbnZhc0xheWVyIjsgfQorCiAgICAg
dW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9w
cmVtdWx0aXBsaWVkQWxwaGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMzAwZjQ3MTMz
ZWM4YzA0MjI2YTM0ZWUxZDA1MzMxMjQzNjZlYjJjNy4uYjAyZjFlZjMxNjQ0YWNlOTk1Y2NkNmVj
NTlkYjBiYTRiMDIwZTgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMjI3LDYgKzIy
NywzMyBAQCB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRl
cmF0b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYQogICAgIGxheWVyU29ydGVyLT5zb3J0KGZp
cnN0LCBlbmQpOwogfQogCitTdHJpbmcgQ0NMYXllckltcGw6OmxheWVyVHJlZUFzVGV4dCgpIGNv
bnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICBkdW1wTGF5ZXIodHMsIDApOworICAgIHJl
dHVybiB0cy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OmR1bXBMYXllcihUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50KTsKKyAgICB0cyA8PCBsYXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwg
IilcbiI7CisgICAgZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOworICAgIGlmICht
X3JlcGxpY2FMYXllcikgeworICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzIpOworICAg
ICAgICB0cyA8PCAiUmVwbGljYTpcbiI7CisgICAgICAgIG1fcmVwbGljYUxheWVyLT5kdW1wTGF5
ZXIodHMsIGluZGVudCszKTsKKyAgICB9CisgICAgaWYgKG1fbWFza0xheWVyKSB7CisgICAgICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CisgICAgICAgIHRzIDw8ICJNYXNrOlxuIjsKKyAg
ICAgICAgbV9tYXNrTGF5ZXItPmR1bXBMYXllcih0cywgaW5kZW50KzMpOworICAgIH0KKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
Y2hpbGRyZW5baV0tPmR1bXBMYXllcih0cywgaW5kZW50KzEpOwogfQogCit9CisKKwogI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4
IGM3ZGM0Njk1NDdmNWMxNWU3YTM3N2VmOTU3ZmU0ZjM4OTc1ZmRjMDEuLmM1YzE4NWExMzMzZDJl
Y2RhMTdhYzAxZWFjZTNjNWFmYjdjNDA0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMTY1
LDExICsxNjUsMTIgQEAgcHVibGljOgogICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVu
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KICAgICB2b2lk
IHNldERyYXdhYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxl
Q29udGVudFJlY3QgPSByZWN0OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisgICAgU3RyaW5nIGxheWVyVHJl
ZUFzVGV4dCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwo
aW50KTsKIAorICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0m
LCBpbnQgaW5kZW50KSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudCk7CiAKIHByaXZhdGU6CkBAIC0xNzcsNiArMTc4LDEwIEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CiAgICAgdm9pZCBjbGVhckNo
aWxkTGlzdCgpOyAvLyBXYXJuaW5nOiBUaGlzIGRvZXMgbm90IHByZXNlcnZlIHRyZWUgc3RydWN0
dXJlIGludmFyaWFudHMgYW5kIHNvIGlzIG9ubHkgZXhwb3NlZCB0byB0aGUgdHJlZSBzeW5jaHJv
bml6ZXIuCiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9CisKKyAgICB2b2lkIGR1bXBMYXllcihUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKICAgICAvLyBQcm9wZXJ0aWVzIGludGVybmFs
IHRvIENDTGF5ZXJJbXBsCiAgICAgQ0NMYXllckltcGwqIG1fcGFyZW50OwogICAgIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4gbV9jaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IGVlMGRkNDM2ZjQ5YTQ0NWEyNDdkNWNiNjEzZDUyYjllYjQ5ZjJhZjUuLjdi
OGNiNDFmNGRhZWUwNGJiNmY1MjJlNGQ2YzUyOWQyNDkwNTVlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcApAQCAtNjksNyArNjksNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZSgpCiAgICAgICAgIG1fcHJveHkgPSBDQ1NpbmdsZVRocmVhZFByb3h5OjpjcmVh
dGUodGhpcyk7CiAgICAgbV9wcm94eS0+c3RhcnQoKTsKIAotICAgIGlmICghbV9wcm94eS0+aW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIodGhpcykpCisgICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBVcGRhdGUg
bV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRo
ZSByZW5kZXJlci4KQEAgLTg2LDE0ICs4NiwyNSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5p
dGlhbGl6ZSgpCiAgICAgLy8gV2UgY2hhbmdlZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUgcHJv
eHkgYSBjb21taXQgaXMgbmVlZGVkLgogICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7CiAKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QoKQogeworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dDo6fkNDTGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOwogICAgIG1fcHJveHktPnN0b3AoKTsKICAg
ICBtX3Byb3h5LmNsZWFyKCk7CisgICAgbV91cGRhdGVMaXN0LmNsZWFyKCk7CisgICAgQVNTRVJU
KCFtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKKyAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoY29udGV4dCk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkKQEAgLTEwOSw3ICsxMjAsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8o
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKICAgICBob3N0SW1wbC0+c2V0U291cmNlRnJh
bWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkt
PnJlZHVjZU1lbW9yeVRvTGltaXQoaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1l
bW9yeVJlY2xhaW1MaW1pdCgpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVj
ZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOwogICAg
IGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBs
LT5jb250ZXh0KCkpOwogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhtX3VwZGF0ZUxp
c3QsIGhvc3RJbXBsLT5jb250ZXh0KCkpOwpAQCAtMTE5LDYgKzEzMCw5IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBo
b3N0SW1wbC0+c2V0Wm9vbUFuaW1hdG9yU2NhbGUobV96b29tQW5pbWF0b3JTY2FsZSk7CiAgICAg
aG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKIAorICAgIGhvc3RJbXBsLT5s
YXllclJlbmRlcmVyKCktPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOworICAgIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKwogICAgIC8vIFN5bmNo
cm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgogICAgIGlmIChyb290TGF5ZXIo
KSkKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290
TGF5ZXIoKSkpOwpAQCAtMTQ1LDYgKzE1OSw4IEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
CiB7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1
cmVzKDApOworCiAgICAgaWYgKHJvb3RMYXllcigpKQogICAgICAgICByb290TGF5ZXIoKS0+cGxh
dGZvcm1MYXllcigpLT5jbGVhbnVwUmVzb3VyY2VzUmVjdXJzaXZlKCk7CiAgICAgbV9jbGllbnQt
PmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwpAQCAtMjU5LDcgKzI3NSwxNCBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplLCBjb25zdCBJbnRTaXplJiBjbwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2li
bGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7Ci0gICAgbV9wcm94
eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAg
bV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7
CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChU
ZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgICAgICBtX3Byb3h5LT5zZXRO
ZWVkc0NvbW1pdCgpOworICAgIH0KIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21w
b3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCkBAIC0yNjksNyArMjkyLDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAKIFRleHR1
cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBjb25z
dAogewotICAgIHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CisgICAg
cmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKTsKIH0KIAogI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGVkOThj
MmU5OGY0YWYwNTM5NGU3N2M5NDg0OTZhZGI5YTE4MGJjNWQuLmM3MTNmMDNlN2FkMjMxNzlhYzg3
NzYzMGEyM2M5ZjQ3ODFiNzFjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0x
NTcsNiArMTU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKIAorICAg
IHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOworCiBwcm90
ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0
IENDU2V0dGluZ3MmKTsKIApAQCAtMTg0LDYgKzE4Niw3IEBAIHByaXZhdGU6CiAKICAgICBPd25Q
dHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CisgICAgT3duUHRyPFRleHR1
cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXI7CiAKICAgICBMYXllckxpc3QgbV91
cGRhdGVMaXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4
IDcwODJkNjViM2I0YjU5ZjM2MjgxMmNiNzg3MTE4MDQ5NzU3NzM1MDAuLmJlYzdjMDJkMjVlZTUx
M2E5Mjg1Njc1Y2M3NGI5MDU0NDE5MzU5MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVycygpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRy
YXdMYXllcnMiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBp
ZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkKKyAgICBpZiAobV9sYXll
clJlbmRlcmVyLT5yb290TGF5ZXIoKSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5
ZXJzKCk7CiAKICAgICArK21fZnJhbWVOdW1iZXI7CkBAIC0xMTYsMzEgKzExNiwyNyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBsYXllcikKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2li
bGUpCiB7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlciAmJiAhdmlzaWJsZSkKLSAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5yZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiB9CiAKLWJvb2wgQ0NMYXllclRyZWVI
b3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBpbXBsSGFj
aywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK2Jvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCkKIHsKLSAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0
aGVuIHdlIGFyZSByZWNvdmVyaW5nIGZyb20gYSBsb3N0IGNvbnRleHQKLSAgICBib29sIHJlY3Jl
YXRpbmdSZW5kZXJlciA9IG1fbGF5ZXJSZW5kZXJlcjsKLQotICAgIC8vIEZpcnN0IHRpbWUgbGF5
ZXJSZW5kZXJlciBjcmVhdGlvbgogICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxh
eWVyUmVuZGVyZXI7Ci0gICAgaWYgKCFyZWNyZWF0aW5nUmVuZGVyZXIpCi0gICAgICAgIGxheWVy
UmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywg
Y29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0
KTsKLQorICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0
aGlzLCBjb250ZXh0KTsKIAogICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBh
c2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRp
bmcKICAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KICAgICBpZiAo
IWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKICAgICAg
ICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKIAotICAgICAgICBpZiAo
IXJlY3JlYXRpbmdSZW5kZXJlcikKLSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVyKCksIHRoaXMsIGNvbnRleHQpOworICAgICAg
ICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29u
dGV4dCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGFkIGEgcHJldmlvdXMgbGF5ZXIgcmVuZGVy
ZXIsIHRoZW4gaXRzIGNvbnRleHQgbXVzdCBoYXZlIGJlZW4gbG9zdCBhbG9uZyB3aXRoIGFsbCBv
ZiBpdHMgcmVzb3VyY2VzLgorICAgIC8vIExldCB0aGUgb2xkIGxheWVyIHJlbmRlcmVyIGtub3du
IGl0cyByZXNvdXJjZXMgYXJlIGdvbmUuCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgeworICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKDAp
OworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmNsb3NlKCk7CiAgICAgfQogCiAgICAgbV9sYXll
clJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAppbmRleCAwNTJmMjYwOWJiNDQzMGQwY2ViMTI0YTM4ZTBkNjY3ZmI5YWNhMTBhLi5kZmY5
NjgwNmQ4NWYyMGIxOGMwZjQ0ODFjYTE0ZjAyOTVjZWM4YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bmlzaEFsbFJlbmRlcmluZygpOwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVOdW1iZXI7IH0KIAotICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NM
YXllclRyZWVIb3N0KiBvd25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsK
KyAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+KTsKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKICAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0K
ICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkgY29uc3Q7CkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQogICAg
IHZvaWQgc2V0Wm9vbUFuaW1hdG9yU2NhbGUoZG91YmxlKTsKIAorICAgIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAg
IGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgK
aW5kZXggOWI0YzUzNjcyM2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3Ny4uZTRjOGIyMGE3
ODgzOGFkYmI2ZTRmNWY5ZTFmZjJmNTEzNmQ4ZDQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5oCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgQ0NQbHVnaW5MYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5
ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiUGx1Z2luTGF5ZXIiOyB9CisKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaAppbmRleCBhYWU2Njk0NGIwNTM3
ZGI2YjMwNTdmNWIxMWRjNWViMGVlNjEzZDkwLi5mNWU0MThiMGU4M2RjNjdhYzJjMzZlNmZhNWFi
YTlhNjlkZmFjNmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC01OCwxMCArNTgsMTEgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpID0gMDsKIAog
ICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Nv
bW1pdCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAwOwogCkBAIC04MCw5ICs4
MSw2IEBAIHB1YmxpYzoKICAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0
IHN0aWxsIGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKICAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOwogCi0gICAgLy8gVGVt
cG9yYXJ5IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVy
UmVuZGVyZXJDaHJvbWl1bXMKLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCkgPSAwOwotCiBwcm90ZWN0ZWQ6CiAgICAgQ0NQcm94eSgpIHsgfQogICAg
IGZyaWVuZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAppbmRleCAwYWYzMzBkYmQ4ZjQ2N2ZkYWZkN2RhNDAzNmYwNGJjODQ1
MTYzZGUxLi4yZDI3ZDcyOWIzODIxMTM5ZjA4MTdjZWRiNDdlYWVlZmFmMzg1ODg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTIxLDggKzEyMSw5IEBAIGJv
b2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9s
YXllclRyZWVIb3N0SW1wbDsKIH0KIAotYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK2Jvb2wgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogeworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
bV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzAsNyArMTMxLDcgQEAgYm9v
bCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJl
ZUhvc3QqIG93bmVySGFjaykKIAogICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOwotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgIH0KIH0KIApA
QCAtMTQ2LDYgKzE0NywxOCBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb21wb3Np
dG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAgICAgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbCA9
IG51bVRpbWVzIC0gMTsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0Nv
bW1pdCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBDb21taXQgaW1t
ZWRpYXRlbHkKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9Cit9CisKIHZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC0xNzAsMTYgKzE4MywxMiBAQCB2b2lkIENDU2luZ2xlVGhy
ZWFkUHJveHk6OnN0b3AoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgewogICAg
ICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOwog
ICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgfQogICAgIG1fbGF5ZXJU
cmVlSG9zdCA9IDA7CiB9CiAKLVRleHR1cmVNYW5hZ2VyKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpj
b250ZW50c1RleHR1cmVNYW5hZ2VyKCkKLXsKLSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Ci19Ci0KICNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1
bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykK
IHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQpAQCAtMTk3
LDYgKzIwNiw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRl
bHkoKQogCiBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dElmTmVlZGVk
KCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9ncmFwaGljc0Nv
bnRleHRMb3N0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQ7CkBAIC0yMDcsNyArMjE3LDcgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFBy
b3h5OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpCiAKICAgICBpZiAoY29udGV4dCkgewogICAg
ICAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOwotICAgICAgICBpZiAobV9sYXllclRy
ZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoMCwgY29udGV4dCkpIHsKKyAgICAg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRl
eHQpKSB7CiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KHRydWUpOwogICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHRMb3N0ID0gZmFsc2U7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaAppbmRleCA3NjViODU5Zjk1MTUwMjZlOWQ3ODc1MjFkNDk5ZDUxYTk4MGY4Zjk3Li5iYmJl
NWY1OTA3NjJiZTE4YTI4NzRhNTg4ZWM0MzcwYTY1OTdmOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oCkBAIC00NCwxNyArNDQsMTUgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
QWxsUmVuZGVyaW5nKCk7CiAgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93
bmVySGFjayk7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKCk7CiAg
ICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29u
dGV4dChpbnQgbnVtVGltZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1JlZHJhdygpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOwogICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSBMYXllckNo
cm9taXVtcyBob2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVtcwotICAgIHZp
cnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKLQogICAgIC8v
IFNwZWNpYWwgY2FzZSBmdW5jdGlvbnMuCiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykK
ICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
Y3BwCmluZGV4IDFhODgzODRmZWEyYmFmNWI0NjMyMmYwNGJlOGFiYmM5OTE1YTk5NDkuLjEyYjVi
MzYxYTdiNWMyNmUwZDAwNmI3NzNmMDA4NjcwOTVjODczNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwCkBAIC05OCw3ICs5OCw3IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVk
KCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKIH0KIAotYm9vbCBDQ1Ro
cmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVy
SGFjaykKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKQogewog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+
Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIGlmICghY29udGV4dCkKQEAgLTEx
NSw4ICsxMTUsNyBAQCBib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQogICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRl
ZDsKICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKICAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpp
bml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG93bmVySGFjayksIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3MoJmNhcGFiaWxpdGllcykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZp
bml0aWFsaXplU3VjY2VlZGVkKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY2FwYWJpbGl0aWVz
KSkpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOwogCiAgICAgaWYgKGluaXRpYWxpemVTdWNjZWVk
ZWQpCkBAIC0xMzQsNiArMTMzLDE3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KGludCBudW1UaW1lcykKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAor
dm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQiLCB0aGlzLCAw
KTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25D
Q1RocmVhZCkpOworfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTcyLDEyICsxODIsNiBA
QCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CiB9
CiAKLVRleHR1cmVNYW5hZ2VyKiBDQ1RocmVhZFByb3h5Ojpjb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogdm9p
ZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpCiB7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
IiwgdGhpcywgMCk7CkBAIC0yMjksNiArMjMzLDE1IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJh
d0xheWVyc09uQ0NUaHJlYWQoKQogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5
ZXJzKCk7CiB9CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFk
KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NF
UlQobV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTcKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKQEAg
LTI1MSwxMiArMjY0LDEyIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogICAgIGNvbXBsZXRpb24tPnNp
Z25hbCgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBpbml0aWFs
aXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCit2
b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dFB0ciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24s
IGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqIGNh
cGFiaWxpdGllcykKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpKTsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoYWRvcHRSZWYo
Y29udGV4dFB0cikpOwotICAgICppbml0aWFsaXplU3VjY2VlZGVkID0gbV9sYXllclRyZWVIb3N0
SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICAq
aW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXll
clJlbmRlcmVyKGNvbnRleHQpOwogICAgIGlmICgqaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKICAgICAg
ICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKQEAgLTI2Niw2ICsyNzksNyBA
QCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1Rl
eHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CiAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC5jbGVhcigpOwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5oCmluZGV4IDI0ZTFmZTEzZTcxOTc0NzY0NmNjZjU1MmIzOGZhOGIzYjNiYzA1
NDYuLjI0Njc3MjQwY2FhYTY5MTI2NzZkN2VkZmUwZmFiMmNjMjEyNjJlYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmgKQEAgLTQ1LDE3ICs0NSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxS
ZW5kZXJpbmcoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJI
YWNrKTsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoKTsKICAgICB2
aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0
KGludCBudW1UaW1lcyk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21p
dW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVh
bCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOwotCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CiAKQEAgLTY3LDcg
KzY1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqKTsKICAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CiAgICAgdm9pZCBpbml0
aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGluaXRp
YWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0Nv
bnRleHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJPbkNDVGhyZWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQqLCBi
b29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7Cisg
ICAgdm9pZCBzZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQoKTsKICAgICB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhy
ZWFkKCk7CiAgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRp
b25FdmVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAxYTc1ODM0
NGVjNTgzMzc5ZTZiNjRkZjAxMTRmMTAyYjA0OTAyOTYyLi4xMjNkODUwMTU1OGNhNDYyZDZiNDBj
NzQ0NjM0OGMzNWQ3NWUxYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApA
QCAtNzUsOCArNzUsOSBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1
cmUoKQogCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7Cisg
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgInNraXBzRHJhdzogIiA8PCAo
IW1fdGlsZXIgfHwgbV9za2lwc0RyYXcpIDw8ICJcbiI7CiB9CiAKIERyYXdhYmxlVGlsZSogQ0NU
aWxlZExheWVySW1wbDo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaAppbmRleCBjZWVjNWYyNTMzOWMyZmNlZDMxNTI4ZWRmODkxYTM2MjliNjMy
MDI0Li5kMGRlMzg3MTY3NjlkOTZlYTBjY2Q4NGJmNDFmZmQwMjUzNDgwYWRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgQ0NUaWxlZExheWVySW1wbChpbnQgaWQpOwogCisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5
ZXIiOyB9CisKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBj
b250ZW50IHJlY3QuCiAgICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0
IG9wYWNpdHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggYmQxNjM3NmJi
NWY0NzI2MDllYzQxMGUwZGVmMzI5NzU3NjdkZjA5Yi4uNmJmMzUyOTFlYzBiZDBmOGRhZDkwZjUx
ODhlNWI1YTMxNWMzZWNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtNTgs
NiArNTgsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVmlkZW9MYXllcklt
cGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KKwogICAgIHN0cnVjdCBUZXh0dXJlIHsKICAg
ICAgICAgUGxhdGZvcm0zRE9iamVjdCBpZDsKICAgICAgICAgSW50U2l6ZSBzaXplOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107196</attachid>
            <date>2011-09-13 11:00:21 -0700</date>
            <delta_ts>2011-09-14 10:47:36 -0700</delta_ts>
            <desc>added null checks for CCLayerTreeHost::m_contentsTextureManager</desc>
            <filename>bug-67440-20110913110020.patch</filename>
            <type>text/plain</type>
            <size>61512</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUwMzMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVu
ZGVyc3VyZmFjZS1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9j
b21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3ItY29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhw
ZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZTQ5NWIyNmI5OWU1YzRhMTk3YzlkNjUyYTc5MTlhYmJl
NjM2MjcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDI4NjYKemNtZUFTQE4/KG9sSHlgdVZCcSFp
YTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1RuNikkCnpHP1V+KzN2PGc8
TCRlZVVPVmVhP0d0PE9XaXhkK1JRJWozUGdIKDtyJVJWcUxhMkBlPGFTVy1MXlkrRkAtYWAlbwp6
dTh1dCNYT19saG1UVWBvQFRRWUZUa1k8WGNLXy0jWFA2bHAmSn0tV1V9KUdhN3tTMGAqdlFIdEFk
SkROaitNUHUKelUwWm1wS0tsN0JUU2tULWlncC1FRmcxO2VVPTdRRzUwO0l8WD1WOGczX0M+U2Jy
PjNFOUFJTVQ7MmRSKTJFdTRjCnI3fGpLdnhuTUxHak9LI1RUcmZ5LSE0M0ErZTd2ZyohfGMzKWpi
SHsoUzNqM15QNjxyXzFYbE13CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3N0LWNvbXBvc2l0b3It
Y29udGV4dC13aXRoLXJlbmRlcnN1cmZhY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEzNzg5MTc5MWZlOTY5Mjdh
ZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1y
ZW5kZXJzdXJmYWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1j
b250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vY29tcG9zaXRpbmcvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJm
YWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA0ZGExMzgxMDE0YzBjZTg2MmY4MjAzNzdhYmY5MThhOGRh
NjE0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Nv
bXBvc2l0aW5nL2xvc3QtY29tcG9zaXRvci1jb250ZXh0LXdpdGgtcmVuZGVyc3VyZmFjZS5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAucmVkIHsKKyAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIH0KKworICAgIC5ncmVlbiB7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKworICAgIGRpdiB7CisgICAgICBoZWlnaHQ6
IDEwMHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAgIH0KKworICAgIC5jb21wb3NpdGVkIHsK
KyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOworICAgIH0KKworICAgIC5y
ZW5kZXJTdXJmYWNlIHsKKyAgICAgIG9wYWNpdHk6IDAuNTsKKyAgICB9CisgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBJbiB0aGUgcGl4ZWwgcmVzdWx0cywgb25lIGdyZWVuIHNx
dWFyZXMgc2hvdWxkIGJlIHZpc2libGUuIC0tPgorICA8ZGl2IGNsYXNzPSJyZWQgcmVuZGVyU3Vy
ZmFjZSI+CisgICAgPGRpdiBpZD0idGFyZ2V0IiBjbGFzcz0icmVkIGNvbXBvc2l0ZWQiPjwvZGl2
PgorICA8L2Rpdj4KKyAgPHA+CisgIDxzY3JpcHQ+CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KHRydWUpOyAg
Ly8gVGhpcyBpcyBvbmx5IHVzZWZ1bCBhcyBhIHBpeGVsIHRlc3QuCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzcGxheSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmxvc2VDb21wb3Np
dG9yQ29udGV4dCgxKTsKKyAgfQorICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpOworICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgicmVkIik7CisgIHRhcmdl
dC5jbGFzc0xpc3QuYWRkKCJncmVlbiIpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNTc0MzU4MzYxZTM1MmU0OWY5YjE4MmYzOTU5NDc0MmQyZDhhODQ2Li4x
MmQ5ZGQ3YTEwNGZmNWU2ZWU5NThlYTc2NzRmZjUyNjEzZGEwZmFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTEgQEAKKzIwMTEtMDktMTMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2Vy
IGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIENDTGF5ZXJUcmVlSG9zdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1vdmVzIHRoZSBjb250
ZW50cyBUZXh0dXJlTWFuYWdlciBvdmVyIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QsIHdoZXJlIGl0
IGJlbG9uZ3MsIGFuZCBhZGRzIGluIGEgY29tbWl0IHBhdGgKKyAgICAgICAgdG8gbWFrZSBzdXJl
IHRoYXQgdGV4dHVyZXMgYXJlIGRlbGV0ZWQgZXZlbiBpZiB0aGUgcGFnZSBpcyBub3QgdmlzaWJs
ZS4gIFRoaXMgbW92ZSBhbHNvIHJlbW92ZWQgdGhlIG5lZWQgZm9yCisgICAgICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSdzIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyLCBzbyBJIHJlbW92ZWQgdGhh
dCBhcyB3ZWxsLiAgVGhhdCBtZWFudCBtb3ZpbmcgdGhlCisgICAgICAgIGxheWVyVHJlZUFzVGV4
dCgpIGxvZ2ljIG92ZXIgdG8gdGhlIENDTGF5ZXJJbXBsIHNpZGUsIHdoaWNoIGlzIHdoZXJlIGl0
IHJlYWxseSBiZWxvbmdlZCBhbnl3YXkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBj
b21wb3NpdGluZy8gdGVzdHMgYW5kCisgICAgICAgIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0
b3IvbG9zdC1jb21wb3NpdG9yLWNvbnRleHQtd2l0aC1yZW5kZXJzdXJmYWNlLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5k
ZXJTdXJmYWNlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisK
IDIwMTEtMDktMTIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
W0NTUzMgQmFja2dyb3VuZHMgYW5kIEJvcmRlcnNdIEFkZCB1bnByZWZpeGVkIGJvcmRlci1pbWFn
ZSBzaG9ydGhhbmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKaW5kZXggZWEyNmRmZTE4
N2U2MmM1NzU1ODU3YWYxMTdhYzM1NzQzZTVjYmQ1ZC4uNGMyZTQ0MDg1Zjc2NDQzYWIxMjE4MGQ3
NzQwOWM0OGI1ZmQ3NGFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaApAQCAtNTIs
OCArNTIsNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJD
aHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIi
OyB9Ci0KICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBo
YTsKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGJhYzQxZjljODhhNGYwOTEzMWExNGI2OTRhNGZhYjA0OTJkOWY1NGUuLjk0MDlh
ZTEyZTlmMzI2NzUyMzUwYWU2MGY0ZDMwYWY5OTJmYmM5MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uaApAQCAtNTQsOCArNTQsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
OwogCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICJDb250ZW50TGF5ZXIiOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291
cmNlcygpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0Kik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGQ2OTc5MTMxYjU4OGQ1MjI4MzM5YWI1M2Vh
ZjBiMDNiOTgxMzdmZGUuLjRhZmUwNWQxNTFmOGIzNjM2Mjk2MzA0MzMxMGEyMDk0OTQxODI5NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCkBAIC01Nyw5ICs1Nyw2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0Q29udGVudHMoSW1hZ2UqIGltYWdlKTsKIAotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAi
SW1hZ2VMYXllciI7IH0KLQogcHJpdmF0ZToKICAgICBJbWFnZUxheWVyQ2hyb21pdW0oR3JhcGhp
Y3NMYXllckNocm9taXVtKiBvd25lcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYmNk
NGQ3Nzg5OWIyYjliMzVlN2JjMzNkYmYyMDZjZjg4YWIxYTk2Ni4uYTBkMzQ2NTZlOGMxNWQ1MmQw
NWU0MDJkMjkxZjg1NDA1MjM4ZjQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM3Niw0
OCArMzc2LDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBUcmFuc2Zvcm0KICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCkpOwogfQogCi1TdHJpbmcgTGF5ZXJDaHJv
bWl1bTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsKLSAgICBUZXh0U3RyZWFtIHRzOwotICAg
IGR1bXBMYXllcih0cywgMCk7Ci0gICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsKLX0KLQotc3RhdGlj
IHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19Ci0K
LXZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50
KSBjb25zdAotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8IGxheWVy
VHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsKLSAgICBkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7Ci0gICAgaWYgKG1fcmVwbGljYUxheWVyKSB7Ci0gICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7Ci0gICAgICAgIHRzIDw8ICJSZXBsaWNhOlxu
IjsKLSAgICAgICAgbV9yZXBsaWNhTGF5ZXItPmR1bXBMYXllcih0cywgaW5kZW50KzMpOwotICAg
IH0KLSAgICBpZiAobV9tYXNrTGF5ZXIpIHsKLSAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCsyKTsKLSAgICAgICAgdHMgPDwgIk1hc2s6XG4iOwotICAgICAgICBtX21hc2tMYXllci0+ZHVt
cExheWVyKHRzLCBpbmRlbnQrMyk7Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jaGlsZHJlbltpXS0+ZHVtcExheWVy
KHRzLCBpbmRlbnQrMSk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICB3cml0ZUluZGVu
dCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiaWQ6ICIgPDwgaWQoKSA8PCAiIGRyYXdzQ29udGVu
dDogIiA8PCBkcmF3c0NvbnRlbnQoKSA8PCAiIGJvdW5kcyAiIDw8IG1fYm91bmRzLndpZHRoKCkg
PDwgIngiIDw8IG1fYm91bmRzLmhlaWdodCgpIDw8ICIgdXNlc0xheWVyU2Npc3NvcjogIiA8PCB1
c2VzTGF5ZXJTY2lzc29yKCkKLSAgICAgICAgPDwgIiBzY2lzc29yUmVjdDogKCIgPDwgbV9zY2lz
c29yUmVjdC54KCkgPDwgIiwgIiA8PCBtX3NjaXNzb3JSZWN0LnkoKSA8PCAiLCAiIDw8IG1fc2Np
c3NvclJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QuaGVpZ2h0KCkgPDwgIiki
Ci0gICAgICAgIDw8ICIgdmlzaWJsZUxheWVyUmVjdDogKCIgPDwgbV92aXNpYmxlTGF5ZXJSZWN0
LngoKSA8PCAiLCAiIDw8IG1fdmlzaWJsZUxheWVyUmVjdC55KCkgPDwgIiwgIiA8PCBtX3Zpc2li
bGVMYXllclJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fdmlzaWJsZUxheWVyUmVjdC5oZWlnaHQo
KSA8PCAiKSIKLSAgICAgICAgPDwgIlxuIjsKLQotfQotCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7CiAgICAgcmV0dXJuIENDTGF5
ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA4ZDMwZDdk
NDQ1YTExZjRhNjZlZTYxNTRiY2EzMzA1MzMyYmQzODQ3Li43ZjZmZmE3NGM1ZjZiMmYxZmVhOTcy
OGQ4NzM3MTZlNDVkZWM2OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNzIsNyArMTcyLDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImKTsKIAogICAg
IHZvaWQgZHJhd0RlYnVnQm9yZGVyKCk7Ci0gICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNv
bnN0OwogCiAgICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CiAKQEAgLTIyMCwxMSArMjE5
LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICB2b2lkIGR1bXBMYXllcihUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVy
VHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNv
bnN0OwotCiAgICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OwogICAgIGJvb2wgbV9jb250ZW50c0Rp
cnR5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1ZDVlNGM1
OGNhMmEzOGEwNzA1N2MwZGQ2ZTk3OWU0Y2M5MjlhZjI5Li5jNzI4MTY5NzVkMjI0NDg3NmUxODFj
YjkwNzQwN2I5ZWVhMTVhYjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKQEAgLTcwLDIwICs3MCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gRklYTUU6IE1ha2UgdGhpcyBsaW1pdCBhZGp1c3RhYmxlIGFuZCBnaXZl
IGl0IGEgdXNlZnVsIHZhbHVlLgotCi0vLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0
dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgotc3RhdGljIHNpemVfdCB0ZXh0dXJl
TWVtb3J5SGlnaExpbWl0Qnl0ZXMgPSAxMjggKiAxMDI0ICogMTAyNDsKLS8vIFByZWZlcnJlZCB0
ZXh0dXJlIHNpemUgbGltaXQuIENhbiBiZSBleGNlZWRlZCBpZiBuZWVkZWQuCi1zdGF0aWMgc2l6
ZV90IHRleHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyA9IDY0ICogMTAyNCAqIDEwMjQ7Ci0v
LyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2Ug
dGV4dHVyZXMuCi1zdGF0aWMgc2l6ZV90IHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzID0gMyAq
IDEwMjQgKiAxMDI0OwotCi1zaXplX3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTWVt
b3J5UmVjbGFpbUxpbWl0KCkKLXsKLSAgICByZXR1cm4gdGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1p
dEJ5dGVzOwotfQotCiBuYW1lc3BhY2UgewogCiBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXgg
b3J0aG9NYXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQg
dG9wKQpAQCAtMTQzLDI0ICsxMjksMjIgQEAgYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRl
ZFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogCiB9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsIENDTGF5ZXJUcmVlSG9z
dEltcGwqIG93bmVySW1wbCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkK
K1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lciwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCkKIHsKICNpZiBVU0UoU0tJQSkKICAgICBpZiAob3duZXItPnNldHRp
bmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBh
aW50aW5nKGNvbnRleHQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgotICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExh
eWVyUmVuZGVyZXJDaHJvbWl1bShvd25lciwgb3duZXJJbXBsLCBjb250ZXh0KSkpOworICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExh
eWVyUmVuZGVyZXJDaHJvbWl1bShvd25lciwgY29udGV4dCkpKTsKICAgICBpZiAoIWxheWVyUmVu
ZGVyZXItPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5
ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lcklt
cGwsCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVy
VHJlZUhvc3RJbXBsKiBvd25lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiAgICAgOiBt
X293bmVyKG93bmVyKQotICAgICwgbV9vd25lckltcGwob3duZXJJbXBsKQogICAgICwgbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDApCiAg
ICAgLCBtX3pvb21BbmltYXRvclNjYWxlKDEpCkBAIC0yMTAsOCArMTk0LDggQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJz
aXZlKENDTGF5ZXJJbXAKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsb3NlKCkKIHsK
LSAgICBpZiAocm9vdExheWVySW1wbCgpKQotICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25D
Q0xheWVySW1wbFJlY3Vyc2l2ZShyb290TGF5ZXJJbXBsKCkpOworICAgIGlmIChyb290TGF5ZXIo
KSkKKyAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUocm9v
dExheWVyKCkpOwogfQogCiBHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpjb250ZXh0KCkKQEAgLTIyNiwxOCArMjEwLDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRlYnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgog
ICAgICAgICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVk
XG5cdGNvbW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGlj
X2Nhc3Q8aW50PihlcnJvcikpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVs
ZWFzZVRleHR1cmVzKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVy
U3VyZmFjZVRleHR1cmVzKCkKIHsKLSAgICAvLyBSZWR1Y2VzIHRleHR1cmUgbWVtb3J5IHVzYWdl
IHRvIHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzIGJ5IGRlbGV0aW5nIG5vbiByb290IGxheWVy
Ci0gICAgLy8gdGV4dHVyZXMuCi0gICAgbV9vd25lci0+bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
KCktPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzKTsK
LSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0g
ICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250
ZXh0LmdldCgpKTsKLSAgICAvLyBFdmljdCBhbGwgUmVuZGVyU3VyZmFjZSB0ZXh0dXJlcy4KLSAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsK
LSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgw
KTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1
cmVzKG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIt
PmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCkBAIC0yNTcsMTggKzIzMiwx
NiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgLy8gUmVu
ZGVyV2lkZ2V0LgogICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGlt
ZSgpKTsKIAotICAgIGlmICghcm9vdExheWVySW1wbCgpKQorICAgIGlmICghcm9vdExheWVyKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogTm8gbmVlZCB0byB3YWxrIHRoZSB0cmVl
IGhlcmUuIFRoaXMgY291bGQgYmUgcGFzc2VkIHZpYSBkcmF3LgotICAgIHJvb3RMYXllckltcGwo
KS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSh0aGlzKTsKKyAgICByb290TGF5ZXIoKS0+c2V0
TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSh0aGlzKTsKIAotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRl
cyAtIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwor
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpIC0gbV9jb250ZW50c1RleHR1cmVNZW1vcnlV
c2VCeXRlcyk7CiAgICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKLSAgICBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0KLSAgICBpZiAodGV4dHVyZU1l
bW9yeVJlY2xhaW1MaW1pdEJ5dGVzID4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50
TWVtb3J5VXNlQnl0ZXMoKSkKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIt
PnJlZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5dGVzIC0gbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CisgICAgaWYg
KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpID4gbV9jb250ZW50c1RleHR1cmVN
ZW1vcnlVc2VCeXRlcykKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJl
ZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgLSBt
X2NvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKTsKICAgICBlbHNlCiAgICAgICAgIG1fcmVu
ZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwogICAgIG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9jb250
ZXh0LmdldCgpKTsKQEAgLTI4Myw3ICsyNTYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVySW1wbCgpOworICAgIENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVyKCk7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKQEAgLTQ0Nyw3
ICs0MjAsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybQogCiBNYW5hZ2VkVGV4dHVyZSogTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQogewotICAgIHJl
dHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXJJbXBsKCkgPyBy
b290TGF5ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwor
ICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXIoKSA/
IHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNw
bGF5KCkKQEAgLTYwMywxMiArNTc2LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Zmx1c2goKSk7CiAKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcywgbV9jYXBhYmlsaXRp
ZXMubWF4VGV4dHVyZVNpemUpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0g
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fY2Fw
YWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9jb250ZW50
c1RleHR1cmVNYW5hZ2VyLT5zZXRBc3NvY2lhdGVkQ29udGV4dERlYnVnT25seShtX2NvbnRleHQu
Z2V0KCkpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRBc3NvY2lhdGVk
Q29udGV4dERlYnVnT25seShtX2NvbnRleHQuZ2V0KCkpOwotI2VuZGlmCisgICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5h
Z2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxNywyOSArNzg1LDIyIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgaWYgKG1fb2Zmc2NyZWVu
RnJhbWVidWZmZXJJZCkKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5k
ZWxldGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIAotICAgIC8vIENs
ZWFyIHRpbGVycyBiZWZvcmUgdGhlIHRleHR1cmUgbWFuYWdlciwgYXMgdGhleSBoYXZlIHJlZmVy
ZW5jZXMgdG8gdGV4dHVyZXMuCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3Rl
Y3RBbGxUZXh0dXJlcygpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVt
b3J5VG9MaW1pdCgwKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0
ZWRUZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci5jbGVhcigpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RB
bGxUZXh0dXJlcygpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KDApOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxl
dGVFdmljdGVkVGV4dHVyZXMobV9jb250ZXh0LmdldCgpKTsKLSAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlci5jbGVhcigpOworICAgIEFTU0VSVCghbV9jb250ZW50c1RleHR1cmVNZW1v
cnlVc2VCeXRlcyk7CisgICAgcmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogfQogCiBT
dHJpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogewog
ICAgIFRleHRTdHJlYW0gdHM7CiAgICAgaWYgKHJvb3RMYXllcigpKSB7Ci0gICAgICAgIHRzIDw8
IHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPmxheWVyVHJlZUFzVGV4dCgpOworICAgICAg
ICB0cyA8PCByb290TGF5ZXIoKS0+bGF5ZXJUcmVlQXNUZXh0KCk7CiAgICAgICAgIHRzIDw8ICJS
ZW5kZXJTdXJmYWNlczpcbiI7Ci0gICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgMSwgcm9v
dExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0
cywgMSwgcm9vdExheWVyKCkpOwogICAgIH0KICAgICByZXR1cm4gdHMucmVsZWFzZSgpOwogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9taXVtKiBsYXllcikgY29uc3QKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYg
dHMsIGludCBpbmRlbnQsIGNvbnN0IENDTGF5ZXJJbXBsKiBsYXllcikgY29uc3QKIHsKICAgICBp
ZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+ZHVtcFN1cmZhY2UodHMsIGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCmluZGV4IGFmYmUyMmQ4OGUwZGVmZWMxZWYwZTFjYWFhMDE0YjllYjliYjQ2OGMuLjVkODA0
YWQxZjE2MjIwODY4NzZmZGNkMjQxZWI2N2VjYjEwMGM0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIE5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdDsKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVu
ZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1Ymxp
YyBSZWZDb3VudGVkPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9z
dCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NM
YXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKIAogICAg
IC8vIE11c3QgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGFsbG93IHRoZSBMYXllclJlbmRlcmVyQ2hy
b21pdW0gdG8gZGVzdHJ1Y3QKICAgICB2b2lkIGNsb3NlKCk7CkBAIC04NCwxOSArODQsMTMgQEAg
cHVibGljOgogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lci0+c2V0dGluZ3MoKTsgfQogICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9CiAKLSAg
ICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQotICAgIGNvbnN0
IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9Ci0KLSAg
ICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIo
KTsgfQotICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXItPnJvb3RMYXllcigpOyB9Ci0KLSAgICBDQ0xheWVySW1wbCogcm9vdExheWVySW1w
bCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQotICAgIGNvbnN0IENDTGF5
ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckltcGwtPnJvb3RM
YXllcigpOyB9CisgICAgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXIt
PnJvb3RMYXllcigpOyB9CisgICAgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOwogICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWI7IH0KIAotICAgIGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNpemUoKTsgfQor
ICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXItPnZpZXdw
b3J0U2l6ZSgpOyB9CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2aWV3cG9ydFNp
emUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4gdmlld3Bv
cnRTaXplKCkuaGVpZ2h0KCk7IH0KIApAQCAtMTM5LDcgKzEzMyw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KTsKIAotICAgIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLmdldCgpOyB9CiAgICAgVGV4dHVy
ZU1hbmFnZXIqIHJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLmdldCgpOyB9CiAKICAgICBDQ0hlYWRzVXBEaXNw
bGF5KiBoZWFkc1VwRGlzcGxheSgpIHsgcmV0dXJuIG1faGVhZHNVcERpc3BsYXkuZ2V0KCk7IH0K
QEAgLTE1MCwxNyArMTQzLDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgp
OwogCi0gICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJT
dXJmYWNlVGV4dHVyZXMoKTsKIAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CiAK
ICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAK
LSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiB0aGUgY29udGVudHMgdGV4dHVyZSBtYW5h
Z2VyIGhhcyBtb3ZlZCB0byBDQ0xheWVyVHJlZUhvc3QuCi0gICAgc3RhdGljIHNpemVfdCB0ZXh0
dXJlTWVtb3J5UmVjbGFpbUxpbWl0KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1RleHR1cmVNZW1v
cnlVc2VCeXRlcyhzaXplX3QgY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMpIHsgbV9jb250
ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcyA9IGNvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVz
OyB9CiAKIHByaXZhdGU6Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9z
dCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7
CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2
b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOwpAQCAtMTc5LDE3ICsxNzEsMTQgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyBib29sIGNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBs
PiYsIGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mKTsKIAotICAgIHZvaWQgZHVtcFJlbmRlclN1
cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9taXVtKikgY29u
c3Q7CisgICAgdm9pZCBkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQs
IGNvbnN0IENDTGF5ZXJJbXBsKikgY29uc3Q7CiAKICAgICBib29sIGluaXRpYWxpemVTaGFyZWRP
YmplY3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCiAgICAgdm9pZCBj
bGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wbCopOwog
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBDQ0xheWVyVHJlZUhvc3QgZmllbGQKLSAgICBDQ0xheWVy
VHJlZUhvc3QqIG1fb3duZXI7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBtX293bmVySW1w
bDsKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBtX293bmVyOwogCiAgICAgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIApAQCAtMjIwLDcgKzIwOSw3IEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtPiBtX3ZpZGVvTGF5
ZXJSR0JBUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6WVVWUHJvZ3JhbT4g
bV92aWRlb0xheWVyWVVWUHJvZ3JhbTsKIAotICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyOworICAgIHNpemVfdCBtX2NvbnRlbnRzVGV4dHVyZU1lbW9y
eVVzZUJ5dGVzOwogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9yZW5kZXJTdXJmYWNlVGV4
dHVyZU1hbmFnZXI7CiAKICAgICBPd25QdHI8Q0NIZWFkc1VwRGlzcGxheT4gbV9oZWFkc1VwRGlz
cGxheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL01hbmFnZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcAppbmRleCA3OTBjNzBmMDI3YWNiYTEzODE1MzRm
ZWVjYWE3ZDc0N2IxMzc4NTBiLi5mMWY4MThiN2VjN2VhNTA2ZGQ1NGFjY2QyMDk5ZDU1M2FjN2Vl
ZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9NYW5hZ2VkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCkBAIC04Myw3ICs4Myw2IEBAIHZvaWQgTWFu
YWdlZFRleHR1cmU6OnVucmVzZXJ2ZSgpCiB2b2lkIE1hbmFnZWRUZXh0dXJlOjpiaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTWFu
YWdlci0+aGFzVGV4dHVyZShtX3Rva2VuKSk7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV90ZXh0
dXJlTWFuYWdlci0+YXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkoKSk7CiAgICAgaWYgKCFtX3Rl
eHR1cmVJZCkKICAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0
ZVRleHR1cmUoY29udGV4dCwgbV90b2tlbik7CiAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKQEAgLTkyLDcgKzkxLDYg
QEAgdm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCiB2b2lkIE1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdlci0+aGFz
VGV4dHVyZShtX3Rva2VuKSk7Ci0gICAgQVNTRVJUKGNvbnRleHQgPT0gbV90ZXh0dXJlTWFuYWdl
ci0+YXNzb2NpYXRlZENvbnRleHREZWJ1Z09ubHkoKSk7CiAgICAgaWYgKCFtX3RleHR1cmVJZCkK
ICAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUo
Y29udGV4dCwgbV90b2tlbik7CiAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCwgMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Q
bHVnaW5MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKaW5kZXggODUyZGMyZWE2ZmQwZDdkODQxNTRi
OTQ5MjQ4Mjc0OGI3YWQ2YTI4Yi4uZDFjZmM4MDI5ZWIyMWY0ZjI2YzJiNWNlN2ViNjhlMDY0M2Mx
OTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaApAQCAtNDYsOSArNDYsNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCop
OwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuICJQbHVnaW5MYXllciI7IH0KLQogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwog
ICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHAKaW5kZXggYTVmZDc0YjE5MDIwZmY0MjFkNDY1N2Y3ZWNkZTk3YzNmYjJjMThlOS4uNzNm
M2FiMjdhOWE1OTFjMmU2MGI1ZDVlMjdlOWJhMjE4ZGYxZjMxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC01OSwyNyArNTksNSBAQCBGbG9hdFJlY3QgUmVuZGVy
U3VyZmFjZUNocm9taXVtOjpkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKICAgICByZXR1cm4g
ZHJhd2FibGVDb250ZW50UmVjdDsKIH0KIAotU3RyaW5nIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNl
KGlkPSVkLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50
OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCBuYW1lKCkgPDwgIlxuIjsKLQot
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMSk7Ci0gICAgdHMgPDwgImNvbnRlbnRSZWN0OiAo
IiA8PCBtX2NvbnRlbnRSZWN0LngoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QueSgpIDw8ICIs
ICIgPDwgbV9jb250ZW50UmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC5oZWln
aHQoKQotICAgICAgICA8PCAiIHNjaXNzb3JSZWN0OiAoIiA8PCBtX3NjaXNzb3JSZWN0LngoKSA8
PCAiLCAiIDw8IG1fc2Npc3NvclJlY3QueSgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC53aWR0
aCgpIDw8ICIsICIgPDwgbV9zY2lzc29yUmVjdC5oZWlnaHQoKSA8PCAiKSIKLSAgICAgICAgPDwg
IlxuIjsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggNGEwNjJjNTY0MGZkNDQ5MThkMjli
OTNjNjY5YjkyNzk0Njg0MzM3MS4uOGMyZmI2OThhNDUzZmVkOWIxN2QzYWMxZmFlMzViZjA3YTA2
ZDk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTU0LDkgKzU0LDYg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogICAgIHZvaWQgZHJhdyhj
b25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OwotICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
OwotCiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSBSZW5kZXJTdXJm
YWNlIGluY2x1ZGluZyBhbnkgcmVmbGVjdGlvbi4KICAgICBGbG9hdFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggOGZhMDY1MWI5
ODVlOWY5YzQ5ZGZiMzU1NjA4MTdjNjI5M2E2YzM3NS4uOWEwNjhkY2M1NzQxMzE4YjZjNWM2MTA5
OWRiMGMxMjgwNzRmMTMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtNDQsNiArNDQs
MjEgQEAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRlcyhJbnRTaXplIHNpemUsIEdDM0RlbnVt
IHRleHR1cmVGb3JtYXQpCiAgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkg
KiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKIH0KIAorc2l6ZV90IFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpCit7CisgICAgcmV0dXJuIDEyOCAqIDEwMjQg
KiAxMDI0OworfQorCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkK
K3sKKyAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKK30KKworc2l6ZV90IFRleHR1cmVNYW5h
Z2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3sKKyAgICByZXR1cm4gMyAqIDEwMjQgKiAxMDI0OworfQor
CiBUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMs
IGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1p
dEJ5dGVzKQogICAgICwgbV9tZW1vcnlVc2VCeXRlcygwKQpAQCAtMTM5LDEyICsxNTQsMjQgQEAg
dm9pZCBUZXh0dXJlTWFuYWdlcjo6YWRkVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1
cmVJbmZvIGluZm8pCiAKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUV2aWN0ZWRUZXh0dXJl
cyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBBU1NFUlQoY29udGV4dCA9PSBt
X2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZXZpY3RlZFRleHR1cmVJZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZXZpY3Rl
ZFRleHR1cmVJZHNbaV0pCi0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVsZXRl
VGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJlSWRzW2ldKSk7CisgICAgaWYgKGNvbnRleHQpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2V2aWN0ZWRUZXh0dXJlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKG1fZXZpY3RlZFRleHR1cmVzW2ldLnRleHR1cmVJZCkgewor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ldmljdGVkVGV4dHVyZXNb
aV0uYWxsb2NhdGluZ0NvbnRleHQgPT0gY29udGV4dCk7CisjZW5kaWYKKyAgICAgICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJlc1tp
XS50ZXh0dXJlSWQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICBtX2V2
aWN0ZWRUZXh0dXJlSWRzLmNsZWFyKCk7CisgICAgbV9ldmljdGVkVGV4dHVyZXMuY2xlYXIoKTsK
K30KKwordm9pZCBUZXh0dXJlTWFuYWdlcjo6ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICB1bnByb3RlY3RBbGxUZXh0dXJlcygpOwor
ICAgIHJlZHVjZU1lbW9yeVRvTGltaXQoMCk7CisgICAgZGVsZXRlRXZpY3RlZFRleHR1cmVzKGNv
bnRleHQpOwogfQogCiB2b2lkIFRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKFRleHR1cmVU
b2tlbiB0b2tlbiwgVGV4dHVyZUluZm8gaW5mbykKQEAgLTE1NSwxMiArMTgyLDE2IEBAIHZvaWQg
VGV4dHVyZU1hbmFnZXI6OnJlbW92ZVRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJl
SW5mbyBpbmZvKQogICAgIG1fdGV4dHVyZXMucmVtb3ZlKHRva2VuKTsKICAgICBBU1NFUlQobV90
ZXh0dXJlTFJVU2V0LmNvbnRhaW5zKHRva2VuKSk7CiAgICAgbV90ZXh0dXJlTFJVU2V0LnJlbW92
ZSh0b2tlbik7Ci0gICAgbV9ldmljdGVkVGV4dHVyZUlkcy5hcHBlbmQoaW5mby50ZXh0dXJlSWQp
OworICAgIEV2aWN0aW9uRW50cnkgZW50cnk7CisgICAgZW50cnkudGV4dHVyZUlkID0gaW5mby50
ZXh0dXJlSWQ7CisjaWZuZGVmIE5ERUJVRworICAgIGVudHJ5LmFsbG9jYXRpbmdDb250ZXh0ID0g
aW5mby5hbGxvY2F0aW5nQ29udGV4dDsKKyNlbmRpZgorICAgIG1fZXZpY3RlZFRleHR1cmVzLmFw
cGVuZChlbnRyeSk7CiB9CiAKIHVuc2lnbmVkIFRleHR1cmVNYW5hZ2VyOjphbGxvY2F0ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVUb2tlbiB0b2tlbikKIHsKLSAg
ICBBU1NFUlQoY29udGV4dCA9PSBtX2Fzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KTsKICAgICBU
ZXh0dXJlTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgQVNT
RVJUKGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpOwogICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0
LmdldCgpLT5zZWNvbmQ7CkBAIC0xNzcsNiArMjA4LDkgQEAgdW5zaWduZWQgVGV4dHVyZU1hbmFn
ZXI6OmFsbG9jYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZVRv
a2UKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBpbmZvLT5mb3JtYXQsIGluZm8tPnNpemUud2lkdGgoKSwgaW5mby0+c2l6ZS5oZWlnaHQoKSwg
MCwgaW5mby0+Zm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOwogICAg
IGluZm8tPnRleHR1cmVJZCA9IHRleHR1cmVJZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5mby0+
YWxsb2NhdGluZ0NvbnRleHQgPSBjb250ZXh0OworI2VuZGlmCiAgICAgcmV0dXJuIHRleHR1cmVJ
ZDsKIH0KIApAQCAtMjA0LDYgKzIzOCw5IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RU
ZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAg
aW5mby5mb3JtYXQgPSBmb3JtYXQ7CiAgICAgaW5mby50ZXh0dXJlSWQgPSAwOwogICAgIGluZm8u
aXNQcm90ZWN0ZWQgPSB0cnVlOworI2lmbmRlZiBOREVCVUcKKyAgICBpbmZvLmFsbG9jYXRpbmdD
b250ZXh0ID0gMDsKKyNlbmRpZgogICAgIGFkZFRleHR1cmUodG9rZW4sIGluZm8pOwogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggMTJhZDIwODAwYjZjZGM2YTJj
ZTdhMDQ0Zjk2ZDBhZjA1NTIwMDkwYS4uMjEwNWM1N2ZmOTZjMGJjYzY0YmNlMWQzMDQ5YzVmM2Vm
NTk1MGZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00NSw2ICs0NSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWVtb3J5TGltaXRC
eXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9CiAKKyAgICAvLyBBYnNvbHV0ZSBtYXhpbXVt
IGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgorICAgIHN0
YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsKKyAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBz
aXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgorICAgIHN0YXRpYyBzaXplX3Qg
cmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1
c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCisgICAgc3RhdGljIHNpemVfdCBs
b3dMaW1pdEJ5dGVzKCk7CisKICAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsK
IAogICAgIFRleHR1cmVUb2tlbiBnZXRUb2tlbigpOwpAQCAtNjEsMTQgKzY4LDExIEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBhbGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0
dXJlVG9rZW4pOwogICAgIHZvaWQgZGVsZXRlRXZpY3RlZFRleHR1cmVzKEdyYXBoaWNzQ29udGV4
dDNEKik7CiAKKyAgICB2b2lkIGV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoR3JhcGhpY3NDb250
ZXh0M0QqKTsKKwogICAgIHZvaWQgcmVkdWNlTWVtb3J5VG9MaW1pdChzaXplX3QpOwogICAgIHNp
emVfdCBjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5
dGVzOyB9CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBzZXRBc3NvY2lhdGVkQ29udGV4dERl
YnVnT25seShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkgeyBtX2Fzc29jaWF0ZWRDb250ZXh0
RGVidWdPbmx5ID0gY29udGV4dDsgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBhc3NvY2lhdGVk
Q29udGV4dERlYnVnT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZENvbnRleHREZWJ1
Z09ubHk7IH0KLSNlbmRpZgotCiBwcml2YXRlOgogICAgIFRleHR1cmVNYW5hZ2VyKHNpemVfdCBt
ZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCkBAIC03Nyw2ICs4MSw5IEBA
IHByaXZhdGU6CiAgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAgICAgICAgdW5zaWduZWQgdGV4
dHVyZUlkOwogICAgICAgICBib29sIGlzUHJvdGVjdGVkOworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGFsbG9jYXRpbmdDb250ZXh0OworI2VuZGlmCiAgICAgfTsK
IAogICAgIHZvaWQgYWRkVGV4dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJbmZvKTsKQEAgLTkx
LDExICs5OCwxNCBAQCBwcml2YXRlOgogICAgIGludCBtX21heFRleHR1cmVTaXplOwogICAgIFRl
eHR1cmVUb2tlbiBtX25leHRUb2tlbjsKIAorICAgIHN0cnVjdCBFdmljdGlvbkVudHJ5IHsKKyAg
ICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOwogI2lmbmRlZiBOREVCVUcKLSAgICBHcmFwaGljc0Nv
bnRleHQzRCogbV9hc3NvY2lhdGVkQ29udGV4dERlYnVnT25seTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGFsbG9jYXRpbmdDb250ZXh0OwogI2VuZGlmCisgICAgfTsKIAotICAgIFZlY3Rv
cjx1bnNpZ25lZD4gbV9ldmljdGVkVGV4dHVyZUlkczsKKyAgICBWZWN0b3I8RXZpY3Rpb25FbnRy
eT4gbV9ldmljdGVkVGV4dHVyZXM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcAppbmRleCBkZGVmZmU3MjgyNDI5NzE1MTIzMzY4MjQ5NjFkNmIzZWRhNTIyOThlLi42YmQy
ODIxZGNmMWRiMjkxZTM0NTU3ZDUyMmRmZWJiNmRiOTE0NGY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTI2NSwxOSArMjY1LDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIH0KIH0KIAotc3Rh
dGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19
Ci0KLXZvaWQgVGlsZWRMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAotewotICAgIExheWVyQ2hyb21pdW06OmR1bXBMYXll
clByb3BlcnRpZXModHMsIGluZGVudCk7Ci0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0g
ICAgdHMgPDwgInNraXBzRHJhdzogIiA8PCAoIW1fdGlsZXIgfHwgbV9za2lwc0RyYXcpIDw8ICJc
biI7Ci19Ci0KIFRleHR1cmVNYW5hZ2VyKiBUaWxlZExheWVyQ2hyb21pdW06OnRleHR1cmVNYW5h
Z2VyKCkgY29uc3QKIHsKICAgICBpZiAoIWxheWVyVHJlZUhvc3QoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmgKaW5kZXggNTg1NjkxODE0NDA2OTNmNjBmNmRkNmIyOTljYmI5ZGM4OWQxYTQ1
Yy4uNjkyNmUzZDUzYzA4NzQyMGQ0YWYxOTNlZjY1ZDA3ODE1MzQ0Yzg3NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmgKQEAgLTc0LDggKzc0LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50
IGluZGVudCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9zdChDQ0xh
eWVyVHJlZUhvc3QqKTsKIAogICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uaAppbmRleCA3YjE1NmZiMTQwYWIwMWQzZDVkOWYxN2Y0ZTM0YmU3
M2YyNzNiZTI0Li45Zjc5MDMyNTZmYmU4ODZhYzRlZTZjOWRmNmRhYjM2NjBjZjNlNTFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotICAgIHZpcnR1
YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9M
YXllciI7IH0KIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVGV4dHVyZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDg2MmZhODhmM2ZiMDg4ZTk2ODg5MjQ4ZjgzMjRiYzQ2MjNmMDVi
MTEuLjIxNTUwZGZjMTQxM2YwYjQ3NmQ1MGIwNjMyYWE4ZjUyNzliYzFjMDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC01Nyw5ICs1Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOwogICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gIldlYkdMTGF5ZXIiOyB9Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTExheWVyQ2hyb21pdW1SYXRlTGltaXRUYXNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmgKaW5kZXggZDg1ZWJhOGRlODgzYWJlN2UwZTA5ZTU3ZTQwMDFmZjBmNmM0ZmE1MC4uNmZj
Zjg0MDQwMTkyNTUyMGMxN2U0Nzc2ZDFkZTBhNWE4MjIzZjc1NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Nh
bnZhc0xheWVySW1wbC5oCkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgQ0NDYW52YXNMYXllckltcGwoaW50KTsKIAorICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ2FudmFzTGF5ZXIiOyB9CisK
ICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9v
bCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAzMDBm
NDcxMzNlYzhjMDQyMjZhMzRlZTFkMDUzMzEyNDM2NmViMmM3Li5iMDJmMWVmMzE2NDRhY2U5OTVj
Y2Q2ZWM1OWRiMGJhNGIwMjBlODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0yMjcs
NiArMjI3LDMzIEBAIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+
OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xhCiAgICAgbGF5ZXJTb3J0ZXItPnNv
cnQoZmlyc3QsIGVuZCk7CiB9CiAKK1N0cmluZyBDQ0xheWVySW1wbDo6bGF5ZXJUcmVlQXNUZXh0
KCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIGR1bXBMYXllcih0cywgMCk7Cisg
ICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHVtcExheWVy
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQpOworICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFt
ZSA8PCAiKVxuIjsKKyAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7CisgICAg
aWYgKG1fcmVwbGljYUxheWVyKSB7CisgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7
CisgICAgICAgIHRzIDw8ICJSZXBsaWNhOlxuIjsKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPmR1
bXBMYXllcih0cywgaW5kZW50KzMpOworICAgIH0KKyAgICBpZiAobV9tYXNrTGF5ZXIpIHsKKyAg
ICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsyKTsKKyAgICAgICAgdHMgPDwgIk1hc2s6XG4i
OworICAgICAgICBtX21hc2tMYXllci0+ZHVtcExheWVyKHRzLCBpbmRlbnQrMyk7CisgICAgfQor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV9jaGlsZHJlbltpXS0+ZHVtcExheWVyKHRzLCBpbmRlbnQrMSk7CiB9CiAKK30KKworCiAj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
aW5kZXggYzdkYzQ2OTU0N2Y1YzE1ZTdhMzc3ZWY5NTdmZTRmMzg5NzVmZGMwMS4uYzVjMTg1YTEz
MzNkMmVjZGExN2FjMDFlYWNlM2M1YWZiN2M0MDQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBA
IC0xNjUsMTEgKzE2NSwxMiBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVD
b250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQogICAg
IHZvaWQgc2V0RHJhd2FibGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZHJh
d2FibGVDb250ZW50UmVjdCA9IHJlY3Q7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKyAgICBTdHJpbmcgbGF5
ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVy
SW1wbChpbnQpOwogCisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0
cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIAogcHJpdmF0ZToKQEAgLTE3Nyw2ICsxNzgsMTAgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICB2b2lkIGNs
ZWFyQ2hpbGRMaXN0KCk7IC8vIFdhcm5pbmc6IFRoaXMgZG9lcyBub3QgcHJlc2VydmUgdHJlZSBz
dHJ1Y3R1cmUgaW52YXJpYW50cyBhbmQgc28gaXMgb25seSBleHBvc2VkIHRvIHRoZSB0cmVlIHN5
bmNocm9uaXplci4KIAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmco
KSBjb25zdCB7IHJldHVybiAiTGF5ZXJDaHJvbWl1bSI7IH0KKworICAgIHZvaWQgZHVtcExheWVy
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKwogICAgIC8vIFByb3BlcnRpZXMgaW50
ZXJuYWwgdG8gQ0NMYXllckltcGwKICAgICBDQ0xheWVySW1wbCogbV9wYXJlbnQ7CiAgICAgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2NoaWxkcmVuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKaW5kZXggZWUwZGQ0MzZmNDlhNDQ1YTI0N2Q1Y2I2MTNkNTJiOWViNDlmMmFm
NS4uY2VhNTc5YzkzNjk3M2MxZWJiYTgyZmY4OGRjMDgxNGRkOWRjYWRiMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgQ0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKCkKICAgICAgICAgbV9wcm94eSA9IENDU2luZ2xlVGhyZWFkUHJveHk6
OmNyZWF0ZSh0aGlzKTsKICAgICBtX3Byb3h5LT5zdGFydCgpOwogCi0gICAgaWYgKCFtX3Byb3h5
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcih0aGlzKSkKKyAgICBpZiAoIW1fcHJveHktPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFVw
ZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZy
b20gdGhlIHJlbmRlcmVyLgpAQCAtODYsMTQgKzg2LDI2IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0
Ojppbml0aWFsaXplKCkKICAgICAvLyBXZSBjaGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRo
ZSBwcm94eSBhIGNvbW1pdCBpcyBuZWVkZWQuCiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRB
bmRSZWRyYXcoKTsKIAorICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5h
Z2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHktPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCiB7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c3RvcCgp
OwogICAgIG1fcHJveHkuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsKKyAgICBB
U1NFUlQoIW1fY29udGVudHNUZXh0dXJlTWFuYWdlciB8fCAhbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1Rl
eHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlTWFuYWdlcikKKyAg
ICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVz
KGNvbnRleHQpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChk
b3VibGUgZnJhbWVCZWdpblRpbWUpCkBAIC0xMDksNyArMTIxLDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvIiwgdGhpcywgMCk7CiAgICAgaG9zdElt
cGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwogCi0gICAgY29udGVudHNU
ZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KGhvc3RJbXBsLT5sYXllclJlbmRl
cmVyKCktPnRleHR1cmVNZW1vcnlSZWNsYWltTGltaXQoKSk7CisgICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGlt
aXRCeXRlcygpKTsKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRU
ZXh0dXJlcyhob3N0SW1wbC0+Y29udGV4dCgpKTsKIAogICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMobV91cGRhdGVMaXN0LCBob3N0SW1wbC0+Y29udGV4dCgpKTsKQEAgLTExOSw2ICsxMzEs
OSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCog
aG9zdEltcGwpCiAgICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclNjYWxlKG1fem9vbUFuaW1h
dG9yU2NhbGUpOwogICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUoKSk7CiAK
KyAgICBob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5zZXRDb250ZW50c1RleHR1cmVNZW1vcnlV
c2VCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygp
KTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7
CisKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KICAg
ICBpZiAocm9vdExheWVyKCkpCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigp
LCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKQEAgLTE0NSw2ICsxNjAsOCBAQCBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGwoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRl
eHQoYm9vbCBzdWNjZXNzKQogeworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZXZpY3RB
bmREZWxldGVBbGxUZXh0dXJlcygwKTsKKwogICAgIGlmIChyb290TGF5ZXIoKSkKICAgICAgICAg
cm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+Y2xlYW51cFJlc291cmNlc1JlY3Vyc2l2ZSgp
OwogICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKQEAg
LTI1OSw3ICsyNzYsMTQgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY28KIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBtX3Zpc2libGUgPSB2aXNp
YmxlOwotICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgaWYgKHZp
c2libGUpCisgICAgICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5wcm90ZWN0VmlzaWJs
ZVRpbGVUZXh0dXJlcygpOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVj
ZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKSk7CisgICAgICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKKyAgICAg
ICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXQoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQpAQCAtMjY5LDcgKzI5
Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51
bVRpbWVzKQogCiBUZXh0dXJlTWFuYWdlciogQ0NMYXllclRyZWVIb3N0Ojpjb250ZW50c1RleHR1
cmVNYW5hZ2VyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wcm94eS0+Y29udGVudHNUZXh0dXJl
TWFuYWdlcigpOworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuZ2V0KCk7CiB9
CiAKICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaAppbmRleCBlZDk4YzJlOThmNGFmMDUzOTRlNzdjOTQ4NDk2YWRiOWExODBiYzVkLi5jNzEz
ZjAzZTdhZDIzMTc5YWM4Nzc2MzBhMjNjOWY0NzgxYjcxYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaApAQCAtMTU3LDYgKzE1Nyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRl
TGF5ZXJzKCk7CiAKKyAgICB2b2lkIGRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMoR3JhcGhpY3NDb250
ZXh0M0QqKTsKKwogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhv
c3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAKQEAgLTE4NCw2ICsxODYsNyBAQCBwcml2
YXRlOgogCiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIE93blB0
cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Owor
ICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyOwogCiAg
ICAgTGF5ZXJMaXN0IG1fdXBkYXRlTGlzdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAppbmRleCA3MDgyZDY1YjNiNGI1OWYzNjI4MTJjYjc4NzExODA0OTc1NzczNTAw
Li5iZWM3YzAyZDI1ZWU1MTNhOTI4NTY3NWNjNzRiOTA1NDQxOTM1OTJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKG1fbGF5ZXJS
ZW5kZXJlcik7Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+cm9vdExheWVyKCkp
CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkpCiAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZHJhd0xheWVycygpOwogCiAgICAgKyttX2ZyYW1lTnVtYmVyOwpAQCAtMTE2LDMx
ICsxMTYsMjcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZp
c2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYgIXZpc2li
bGUpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7CisgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogfQogCi1i
b29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJU
cmVlSG9zdCogaW1wbEhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQp
Citib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7Ci0gICAgLy8gSWYgbV9sYXllclJl
bmRlcmVyIGV4aXN0cywgdGhlbiB3ZSBhcmUgcmVjb3ZlcmluZyBmcm9tIGEgbG9zdCBjb250ZXh0
Ci0gICAgYm9vbCByZWNyZWF0aW5nUmVuZGVyZXIgPSBtX2xheWVyUmVuZGVyZXI7Ci0KLSAgICAv
LyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KICAgICBSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyOwotICAgIGlmICghcmVjcmVhdGluZ1JlbmRlcmVy
KQotICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
aW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIo
KSwgdGhpcywgY29udGV4dCk7Ci0KKyAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7CiAKICAgICAvLyBJZiBjcmVhdGlvbiBmYWls
ZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLCBkaXNhYmxlIGFj
Y2VsZXJhdGVkIHBhaW50aW5nCiAgICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIg
YWdhaW4uCiAgICAgaWYgKCFsYXllclJlbmRlcmVyICYmIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBh
aW50aW5nKSB7CiAgICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7
CiAKLSAgICAgICAgaWYgKCFyZWNyZWF0aW5nUmVuZGVyZXIpCi0gICAgICAgICAgICBsYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNv
bnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBj
b250ZXh0KTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y3JlYXRlKHRoaXMsIGNvbnRleHQpOworICAgIH0KKworICAgIC8vIElmIHdlIGhhZCBhIHByZXZp
b3VzIGxheWVyIHJlbmRlcmVyLCB0aGVuIGl0cyBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGxvc3Qg
YWxvbmcgd2l0aCBhbGwgb2YgaXRzIHJlc291cmNlcy4KKyAgICAvLyBMZXQgdGhlIG9sZCBsYXll
ciByZW5kZXJlciBrbm93biBpdHMgcmVzb3VyY2VzIGFyZSBnb25lLgorICAgIGlmIChtX2xheWVy
UmVuZGVyZXIpIHsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb250ZW50c1RleHR1cmVN
ZW1vcnlVc2VCeXRlcygwKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5jbG9zZSgpOwogICAg
IH0KIAogICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggMDUyZjI2MDliYjQ0MzBkMGNlYjEyNGEzOGUwZDY2
N2ZiOWFjYTEwYS4uZGZmOTY4MDZkODVmMjBiMThjMGY0NDgxY2ExNGYwMjk1Y2VjOGM2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICBpbnQgZnJhbWVOdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9CiAKLSAgICBib29sIGluaXRpYWxpemVM
YXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrLCBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPik7CisgICAgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CiAgICAg
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgeyByZXR1cm4gbV9sYXllclJl
bmRlcmVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OwpAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3
cG9ydFNpemU7IH0KICAgICB2b2lkIHNldFpvb21BbmltYXRvclNjYWxlKGRvdWJsZSk7CiAKKyAg
ICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7
IH0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IEND
U2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Bs
dWdpbkxheWVySW1wbC5oCmluZGV4IDliNGM1MzY3MjNkMmFiMTZkZGQ0MjkwNjNkYzdmZjViNGYx
ZDEyNzcuLmU0YzhiMjBhNzg4MzhhZGJiNmU0ZjVmOWUxZmYyZjUxMzZkOGQ0NjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKGludCk7CiAKKyAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlBsdWdpbkxh
eWVyIjsgfQorCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKaW5k
ZXggYWFlNjY5NDRiMDUzN2RiNmIzMDU3ZjViMTFkYzVlYjBlZTYxM2Q5MC4uZjVlNDE4YjBlODNk
YzY3YWMyYzM2ZTZmYTVhYmE5YTY5ZGZhYzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApAQCAtNTgsMTAgKzU4
LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdCA9IDA7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVI
b3N0KiBvd25lckhhY2spID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoKSA9IDA7CiAKICAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdCA9IDA7CiAKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNDb21taXQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpID0g
MDsKIApAQCAtODAsOSArODEsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hp
bGUgcmVuZGVyX3dpZGdldCBzdGlsbCBkb2VzIHNjaGVkdWxpbmcgZm9yIENDTGF5ZXJUcmVlSG9z
dE1haW5UaHJlYWRJCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpID0g
MDsKIAotICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVm
ZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCi0gICAgdmlydHVhbCBUZXh0dXJlTWFu
YWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpID0gMDsKLQogcHJvdGVjdGVkOgogICAgIEND
UHJveHkoKSB7IH0KICAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggMGFmMzMwZGJkOGY0NjdmZGFm
ZDdkYTQwMzZmMDRiYzg0NTE2M2RlMS4uMmQyN2Q3MjliMzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZh
ZjM4NTg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTEy
MSw4ICsxMjEsOSBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7CiB9CiAKLWJvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhh
Y2spCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkK
IHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRl
eHQzRCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMw
LDcgKzEzMSw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spCiAKICAgICB7CiAgICAgICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgICAgIHJl
dHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0
KTsKICAgICB9CiB9CiAKQEAgLTE0Niw2ICsxNDcsMTggQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFBy
b3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQogICAgIG1fdGltZXNSZWNy
ZWF0ZVNob3VsZEZhaWwgPSBudW1UaW1lcyAtIDE7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6c2V0TmVlZHNDb21taXQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgLy8gQ29tbWl0IGltbWVkaWF0ZWx5CisgICAgeworICAgICAgICBTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQo
KSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CisgICAg
fQorfQorCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTcwLDE2ICsxODMsMTIgQEAg
dm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIHsKICAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMobV9sYXllclRyZWVIb3N0SW1w
bC0+Y29udGV4dCgpKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAg
IH0KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwogfQogCi1UZXh0dXJlTWFuYWdlciogQ0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcigpCi17Ci0gICAgcmV0dXJuIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdl
cigpOwotfQotCiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKIC8vIENhbGxlZCBieSB0
aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMg
dGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVk
aWF0ZWx5KCkKQEAgLTE5Nyw2ICsyMDYsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUltbWVkaWF0ZWx5KCkKIAogYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0
ZUNvbnRleHRJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBp
ZiAoIW1fZ3JhcGhpY3NDb250ZXh0TG9zdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0OwpAQCAtMjA3LDcgKzIxNyw3IEBAIGJvb2wg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogCiAgICAgaWYg
KGNvbnRleHQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJlZigpKTsKLSAgICAg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKDAsIGNv
bnRleHQpKSB7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5
ZXJSZW5kZXJlcihjb250ZXh0KSkgewogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKICAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250
ZXh0TG9zdCA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggNzY1Yjg1OWY5NTE1MDI2ZTlkNzg3NTIxZDQ5OWQ1
MWE5ODBmOGY5Ny4uYmJiZTVmNTkwNzYyYmUxOGEyODc0YTU4OGVjNDM3MGE2NTk3ZjkwMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtNDQsMTcgKzQ0LDE1IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAgICAgdmly
dHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0
ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NM
YXllclRyZWVIb3N0KiBvd25lckhhY2spOworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlcigpOwogICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBs
b3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNDb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RhcnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhh
Y2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVyZXJD
aHJvbWl1bXMKLSAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5h
Z2VyKCk7Ci0KICAgICAvLyBTcGVjaWFsIGNhc2UgZnVuY3Rpb25zLgogI2lmICFVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCAxYTg4Mzg0ZmVhMmJhZjViNDYzMjJmMDRiZThhYmJj
OTkxNWE5OTQ5Li4xMmI1YjM2MWE3YjVjMjZlMGQwMDZiNzczZjAwODY3MDk1Yzg3MzY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtOTgsNyArOTgsNyBAQCBib29sIENDVGhyZWFk
UHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7
CiB9CiAKLWJvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXll
clRyZWVIb3N0KiBvd25lckhhY2spCitib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyKCkKIHsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKICAgICBpZiAo
IWNvbnRleHQpCkBAIC0xMTUsOCArMTE1LDcgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKICAgICBib29sIGlu
aXRpYWxpemVTdWNjZWVkZWQ7CiAgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmls
aXRpZXM7CiAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cyhvd25lckhhY2spLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHRQdHIpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVTdWNjZWVk
ZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNv
bnRleHRQdHIpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoJmNhcGFiaWxpdGllcykpKTsKICAgICBjb21wbGV0aW9uLndhaXQoKTsKIAogICAgIGlmIChp
bml0aWFsaXplU3VjY2VlZGVkKQpAQCAtMTM0LDYgKzEzMywxNyBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpz
ZXROZWVkc0NvbW1pdE9uQ0NUaHJlYWQpKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAg
LTE3MiwxMiArMTgyLDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKICAgICBtX2xheWVy
VHJlZUhvc3QgPSAwOwogfQogCi1UZXh0dXJlTWFuYWdlciogQ0NUaHJlYWRQcm94eTo6Y29udGVu
dHNUZXh0dXJlTWFuYWdlcigpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NU
aHJlYWQoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5k
Q29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwpAQCAtMjI5LDYgKzIzMywxNSBAQCB2b2lkIEND
VGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKICAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZHJhd0xheWVycygpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY3NDE3CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKIHsKICAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFk
IiwgdGhpcywgMCk7CkBAIC0yNTEsMTIgKzI2NCwxMiBAQCB2b2lkIENDVGhyZWFkUHJveHk6Omlu
aXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKICAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFs
aXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0UHRyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
biwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyog
Y2FwYWJpbGl0aWVzKQordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJl
ck9uQ0NUaHJlYWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2
ZW50KiBjb21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAg
IEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KGFkb3B0UmVmKGNvbnRleHRQdHIpKTsKLSAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVySGFjaywg
Y29udGV4dCk7CisgICAgKmluaXRpYWxpemVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0KTsKICAgICBpZiAoKmluaXRpYWxpemVT
dWNjZWVkZWQpCiAgICAgICAgICpjYXBhYmlsaXRpZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5s
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7CiAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CkBA
IC0yNjYsNiArMjc5LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2Vk
T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9F
VkVOVCgiQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOwog
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCAyNGUxZmUxM2U3MTk3NDc2NDZjY2Y1
NTJiMzhmYThiM2IzYmMwNTQ2Li4yNDY3NzI0MGNhYWE2OTEyNjc2ZDdlZGZlMGZhYjJjYzIxMjYy
ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC00NSwxNyArNDUsMTUgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVy
VHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJl
bmRlcmVyKCk7CiAgICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBs
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGxvc2VD
b21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0NvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFy
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaGFjayB3
aGlsZSBMYXllckNocm9taXVtcyBob2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9t
aXVtcwotICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KTsKLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9z
dCopOwogCkBAIC02Nyw3ICs2NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21taXRPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgp
OwogICAgIHZvaWQgaW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7
Ci0gICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0KiwgR3JhcGhpY3NDb250ZXh0M0QqLCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRp
YWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqKTsKKyAgICB2b2lkIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChHcmFwaGljc0NvbnRleHQzRCosIENDQ29t
cGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyopOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRPbkNDVGhyZWFkKCk7CiAgICAg
dm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKICAgICB2b2lkIHNldE5l
ZWRzUmVkcmF3T25DQ1RocmVhZCgpOwogICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5j
cHAKaW5kZXggMWE3NTgzNDRlYzU4MzM3OWU2YjY0ZGYwMTE0ZjEwMmIwNDkwMjk2Mi4uMTIzZDg1
MDE1NThjYTQ2MmQ2YjQwYzc0NDYzNDhjMzVkNzVlMWIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5jcHAKQEAgLTc1LDggKzc1LDkgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpi
aW5kQ29udGVudHNUZXh0dXJlKCkKIAogdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogewotICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOwogICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVz
KHRzLCBpbmRlbnQpOworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJz
a2lwc0RyYXc6ICIgPDwgKCFtX3RpbGVyIHx8IG1fc2tpcHNEcmF3KSA8PCAiXG4iOwogfQogCiBE
cmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckltcGw6OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggY2VlYzVmMjUzMzljMmZjZWQzMTUy
OGVkZjg5MWEzNjI5YjYzMjAyNC4uZDBkZTM4NzE2NzY5ZDk2ZWEwY2NkODRiZjQxZmZkMDI1MzQ4
MGFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtNjcsNiArNjcsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGlsZWRMYXllckltcGwoaW50IGlkKTsK
IAorICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAiQ29udGVudExheWVyIjsgfQorCiAgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0LgogICAgIHZvaWQgZHJhdyhMYXllclJlbmRlcmVy
Q2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5o
CmluZGV4IGJkMTYzNzZiYjVmNDcyNjA5ZWM0MTBlMGRlZjMyOTc1NzY3ZGYwOWIuLjZiZjM1Mjkx
ZWMwYmQwZjhkYWQ5MGY1MTg4ZTViNWEzMTVjM2VjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBDQ1ZpZGVvTGF5ZXJJbXBsKGludCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVy
VHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIiOyB9CisKICAgICBzdHJ1
Y3QgVGV4dHVyZSB7CiAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgaWQ7CiAgICAgICAgIEludFNp
emUgc2l6ZTsK
</data>
<flag name="review"
          id="103830"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>