<?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>74477</bug_id>
          
          <creation_ts>2011-12-13 19:33:02 -0800</creation_ts>
          <short_desc>[chromium] Set the CCLayerTreeHost pointer on LayerChromium instances eagerly</short_desc>
          <delta_ts>2011-12-28 11:20:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>74376</blocked>
    
    <blocked>75288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>520611</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 19:33:02 -0800</bug_when>
    <thetext>[chromium] Set the CCLayerTreeHost pointer on LayerChromium instances eagerly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520612</commentid>
    <comment_count>1</comment_count>
      <attachid>119139</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 19:35:37 -0800</bug_when>
    <thetext>Created attachment 119139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520640</commentid>
    <comment_count>2</comment_count>
      <attachid>119139</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 20:32:53 -0800</bug_when>
    <thetext>Comment on attachment 119139
Patch

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

Some comments inline about bits that may not be very obvious

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:287
&gt; +    if (!textureUpdater())
&gt; +        createTextureUpdater(layerTreeHost());

this is not obvious. the reason this is here is because createTextureUpdater() is called in setLayerTreeHost, which previously was called in every paint loop immediately before we attempted to create any tiles.

in the lost context case, our behavior looks something like this:

1.) layer added to tree, setLayerTreeHost() called, createTextureUpdater() called to initialize the updater and figure out tiling params
2.) some point later on, context is lost+recreated. CCLayerTreeHost::didRecreateContext() calls cleanupResources() on all layers in tree, which destroys this layer&apos;s TextureUpdater (see ContentLayerChromium::cleanupResources()) and clear the tiler (see TiledLayerChromium::cleanupResources())
3.) we try to paint and since we&apos;ve released the tiler we have to create new tiles and paint them

the old behavior was that between steps (2) and (3) we&apos;d call setLayerTreeHost() and create a new textureUpdater. the new behavior is that we create it here. i believe this is OK but am open to other ways to make this work if someone has a better idea

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:107
&gt; +        RefPtr&lt;MockLayerTreeHost&gt; mock = adoptRef(new MockLayerTreeHost(testHooks, client, settings));
&gt; +        mock-&gt;setRootLayer(rootLayer);

this code is moved since setRootLayer() now takes a reference to the CCLayerTreeHost, via LayerChromium::setRootLayer(), and you can&apos;t take a reference on a RefCounted object in WebKit before the adoptRef() call or you hit a DCHECK. i think this code is better anyway since it&apos;s closer to what we do in the real CCLayerTreeHost initialization path

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:452
&gt; +        m_layerTreeHost-&gt;setRootLayer(0);

the old code here was correct, but i think this is slightly cleaner and will work whether we&apos;ve set a root layer or not. if people are going to cargo-cult shutdown code (which may happen) i&apos;d rather they cargo-cult this version

&gt; LayoutTests/platform/chromium/test_expectations.txt:2767
&gt; +BUGJAMESR : compositing/iframes/iframe-content-flipping.html = IMAGE

the image diff here is that the final frame has 50% alpha with this patch applied due to there being no damage between the .display() and the end of the test.  the change in behavior here is in LayerChromium::setReplicaLayer(). before this patch, this would unconditionally call setNeedsCommit(). on this test, we end up calling setReplicaLayer(0) many times on layers whose replica layers are already NULL. this patch adds an equality check an early-out in this case so we don&apos;t call setNeedsCommit(). i believe the new behavior is correct and this test is wrong, there isn&apos;t any other fallout from the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520687</commentid>
    <comment_count>3</comment_count>
      <attachid>119139</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-13 22:45:33 -0800</bug_when>
    <thetext>Comment on attachment 119139
Patch

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

So happy to have this change happen... all those setLTH calls were me desperately trying to get some old rev out the door and not having a clue what was causing things to go wrong. :)

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:312
&gt;  

How does the ~LayerChromium() flow work? Are we guaranteed to have a null LTH at that point?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:239
&gt; +    if (m_rootLayer &amp;&amp; !rootLayer)

Why are you null checking rootlayer here?

Does anything bad happen if you setRootLayer(rootLayer())?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:244
&gt; +    if (!m_rootLayer)

More easily written if(m_rootLayer) m_rootLayer-&gt;setXXX()?

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:452
&gt;&gt; +        m_layerTreeHost-&gt;setRootLayer(0);
&gt; 
&gt; the old code here was correct, but i think this is slightly cleaner and will work whether we&apos;ve set a root layer or not. if people are going to cargo-cult shutdown code (which may happen) i&apos;d rather they cargo-cult this version

So, incidentally, what happens if someone tries to attach a root layer using the child?

rootLayer-&gt;setLayerTreeHost(m_layerTreeHost)?

For that matter, how would the other path have worked? The Layer::setLTH code doesn&apos;t seem to go up to the LTH for the root case and make sure the LTH is disconnected...

&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:915
&gt; +}

Is there a way to unit test that texture updater case you were trying to explain earlier? I am still trying to wrap my head around that case, tbh...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520699</commentid>
    <comment_count>4</comment_count>
      <attachid>119139</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-12-13 23:04:54 -0800</bug_when>
    <thetext>Comment on attachment 119139
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:114
&gt;      // If we&apos;re changing layer renderers then we need to free up any resources

You should probably update this comment too.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:297
&gt; +    if (m_maskLayer)

Do you want to clear out the current LTH from the old mask layer (if different)?  Same for the replica layer below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520737</commentid>
    <comment_count>5</comment_count>
      <attachid>119139</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 00:03:07 -0800</bug_when>
    <thetext>Comment on attachment 119139
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:114
&gt;&gt;      // If we&apos;re changing layer renderers then we need to free up any resources
&gt; 
&gt; You should probably update this comment too.

good idea

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:297
&gt;&gt; +    if (m_maskLayer)
&gt; 
&gt; Do you want to clear out the current LTH from the old mask layer (if different)?  Same for the replica layer below.

Ah yes, good catch. Definitely want to do that.  I&apos;ll add some logic and a unit test for mask and replicas.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:312
&gt;&gt;  
&gt; 
&gt; How does the ~LayerChromium() flow work? Are we guaranteed to have a null LTH at that point?

due to reference cycles (see below) when we hit ~LayerChromium we will always have a null LTH

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:239
&gt;&gt; +    if (m_rootLayer &amp;&amp; !rootLayer)
&gt; 
&gt; Why are you null checking rootlayer here?
&gt; 
&gt; Does anything bad happen if you setRootLayer(rootLayer())?

setRootLayer(rootLayer()) should be a no-op, since we end up doing m_rootLayer-&gt;setLayerTreeHost(this) and LayerChromium::setLTH() early-outs if the LTH pointer matches the LTH pointer it already had

i think this whole thing could be written more concisely as:

{
    if (m_rootLayer == rootLayer)
        return;

    if (m_rootLayer)
        m_rootLayer-&gt;setLayerTreeHost(0);

    m_rootLayer = rootLayer;

    if (m_rootLayer)
        m_rootLayer-&gt;setLayerTreeHost(this);
}

the interesting transitions are that if we are actually changing the root layer, we need to null out the LTH pointers on the old tree

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:244
&gt;&gt; +    if (!m_rootLayer)
&gt; 
&gt; More easily written if(m_rootLayer) m_rootLayer-&gt;setXXX()?

yes. i think i used to have more code here. will simplify

&gt;&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:452
&gt;&gt;&gt; +        m_layerTreeHost-&gt;setRootLayer(0);
&gt;&gt; 
&gt;&gt; the old code here was correct, but i think this is slightly cleaner and will work whether we&apos;ve set a root layer or not. if people are going to cargo-cult shutdown code (which may happen) i&apos;d rather they cargo-cult this version
&gt; 
&gt; So, incidentally, what happens if someone tries to attach a root layer using the child?
&gt; 
&gt; rootLayer-&gt;setLayerTreeHost(m_layerTreeHost)?
&gt; 
&gt; For that matter, how would the other path have worked? The Layer::setLTH code doesn&apos;t seem to go up to the LTH for the root case and make sure the LTH is disconnected...

the reason that anything at all is needed here is that there&apos;s a reference cycle between LayerChromium and CCLayerTreeHost. each LayerChromium in the tree holds a RefPtr&lt;CCLayerTreeHost&gt; and CCLayerTreeHost holds a RefPtr&lt;LayerChromium&gt; to the root layer. thus, simply dropping a reference to a CCLayerTreeHost is unsufficient to actually have it actually get freed.  there are two ways to break this cycle - drop the LTH&apos;s reference to the root layer, or drop the root layer&apos;s reference to the LTH. the latter only works when you actually have a root layer set - if you don&apos;t have one set this pointer walk just crashes.

calling LTH::setRootLayer(0) always works to break this cycle and lets everything get freed up, assuming you aren&apos;t holding refs to any other layers in the tree. this is how we actually free up the compositing tree:

http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit/chromium/src/WebViewImpl.cpp&amp;exact_package=chromium&amp;q=setRootLayer&amp;type=cs&amp;l=2823

otherwise the whole world would leak.

if you&apos;re asking what happens if you call setRootLayer(a) and then setRootLayer(b) where &apos;b&apos; is a child of &apos;a&apos; then the answer is on the second call we&apos;d clear out the LTH pointer on &apos;a&apos; and then set it for &apos;b&apos; and all of its children. at that point, &apos;a&apos; would be deleted as soon as there are no refs to it from the outside. &apos;b&apos; and the LTH would then hold a cycle on each other until someone else broke it.

we only move layers between LTHs by calling setRootLayer(). in a world where we had a public API and a private one for CC, LayerChromium::setLayerTreeHost() would definitely *not* be public API, but LTH::setRootLayer() would be.

&gt;&gt; Source/WebKit/chromium/tests/LayerChromiumTest.cpp:915
&gt;&gt; +}
&gt; 
&gt; Is there a way to unit test that texture updater case you were trying to explain earlier? I am still trying to wrap my head around that case, tbh...

i&apos;m not sure how possible it is to have unit tests for specific subtypes of LayerChromium (like ContentLayerChromium and TiledLayerChromium). we do have pretty reasonable layout test coverage for the lost context cases that come into play there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520751</commentid>
    <comment_count>6</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-12-14 00:31:36 -0800</bug_when>
    <thetext>This is great, I like this change very much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520938</commentid>
    <comment_count>7</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-14 08:22:07 -0800</bug_when>
    <thetext>&gt; &gt; So, incidentally, what happens if someone tries to attach a root layer using the child?
&gt; &gt; 
&gt; &gt; rootLayer-&gt;setLayerTreeHost(m_layerTreeHost)?
&gt; &gt; 
&gt; &gt; For that matter, how would the other path have worked? The Layer::setLTH code doesn&apos;t seem to go up to the LTH for the root case and make sure the LTH is disconnected...
&gt; 
&gt; the reason that anything at all is needed here is...

Maybe I didn&apos;t articulate myself clearly here, or maybe I got confused by your reply... I was just wondering, what happens to the poor sod who is new to our codebase and tries to attach the root layer to the tree host by using LayerChromium:::setLayerTreeHost ***INSTEAD*** of calling CCLTH::setRootLayer. If I read the code right, that will point the layer at the host, but the HOST wont get a pointer to the layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521027</commentid>
    <comment_count>8</comment_count>
      <attachid>119139</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-14 10:18:31 -0800</bug_when>
    <thetext>Comment on attachment 119139
Patch

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

This patch is excellent.  Setting the layer tree host has always been a bit of a mess.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:287
&gt;&gt; +        createTextureUpdater(layerTreeHost());
&gt; 
&gt; this is not obvious. the reason this is here is because createTextureUpdater() is called in setLayerTreeHost, which previously was called in every paint loop immediately before we attempted to create any tiles.
&gt; 
&gt; in the lost context case, our behavior looks something like this:
&gt; 
&gt; 1.) layer added to tree, setLayerTreeHost() called, createTextureUpdater() called to initialize the updater and figure out tiling params
&gt; 2.) some point later on, context is lost+recreated. CCLayerTreeHost::didRecreateContext() calls cleanupResources() on all layers in tree, which destroys this layer&apos;s TextureUpdater (see ContentLayerChromium::cleanupResources()) and clear the tiler (see TiledLayerChromium::cleanupResources())
&gt; 3.) we try to paint and since we&apos;ve released the tiler we have to create new tiles and paint them
&gt; 
&gt; the old behavior was that between steps (2) and (3) we&apos;d call setLayerTreeHost() and create a new textureUpdater. the new behavior is that we create it here. i believe this is OK but am open to other ways to make this work if someone has a better idea

It seems a little awkward to do this all the way down in createTile.  Would this make more sense at the top of prepareToUpdate, where we also lazily create the tiler?

(Was it not possible to remove cleanupResources or did you just want to leave that for another patch?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521040</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 10:28:24 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; So, incidentally, what happens if someone tries to attach a root layer using the child?
&gt; &gt; &gt; 
&gt; &gt; &gt; rootLayer-&gt;setLayerTreeHost(m_layerTreeHost)?
&gt; &gt; &gt; 
&gt; &gt; &gt; For that matter, how would the other path have worked? The Layer::setLTH code doesn&apos;t seem to go up to the LTH for the root case and make sure the LTH is disconnected...
&gt; &gt; 
&gt; &gt; the reason that anything at all is needed here is...
&gt; 
&gt; Maybe I didn&apos;t articulate myself clearly here, or maybe I got confused by your reply... I was just wondering, what happens to the poor sod who is new to our codebase and tries to attach the root layer to the tree host by using LayerChromium:::setLayerTreeHost ***INSTEAD*** of calling CCLTH::setRootLayer. If I read the code right, that will point the layer at the host, but the HOST wont get a pointer to the layer?

Don&apos;t do that - it doesn&apos;t work. We will have to catch that in review until we get a public/private API split on LayerChromium and can hide setLayerTreeHost().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521056</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-12-14 10:38:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Don&apos;t do that - it doesn&apos;t work. We will have to catch that in review until we get a public/private API split on LayerChromium and can hide setLayerTreeHost().

It could be private and make CCLTH::setRootLayer a friend to prevent this happening?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521130</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 11:31:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; It seems a little awkward to do this all the way down in createTile.  Would this make more sense at the top of prepareToUpdate, where we also lazily create the tiler?
&gt; 

ImageLayerChromium does things a bit differently, it access the updater before calling prepareToUpdate()

Enne and I discussed this a bit offline. I think what I&apos;ll do instead is clear/create the updater whenever the LayerTreeHost changes and on context recreation clear and then reset the LTH pointer for the whole tree. That way the TextureUpdater is always available when a layer is in a tree and we have a good hook point to re-detect any capabilities on the LTH that may have changed due to the context loss and recreation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521154</commentid>
    <comment_count>12</comment_count>
      <attachid>119271</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 11:48:37 -0800</bug_when>
    <thetext>Created attachment 119271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522339</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 16:53:46 -0800</bug_when>
    <thetext>Any further comments on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522348</commentid>
    <comment_count>14</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-15 16:57:29 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Any further comments on this?

LGTM.  Thanks for going back and cleaning up the texture updater initialization too.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522358</commentid>
    <comment_count>15</comment_count>
      <attachid>119271</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-15 17:06:51 -0800</bug_when>
    <thetext>Comment on attachment 119271
Patch

If it&apos;s good enough for enne it&apos;s good enough for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522374</commentid>
    <comment_count>16</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-15 17:18:08 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 119271 [details])
&gt; If it&apos;s good enough for enne it&apos;s good enough for me.

What they said. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522419</commentid>
    <comment_count>17</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-12-15 18:17:04 -0800</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522431</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 18:32:45 -0800</bug_when>
    <thetext>Committed r103011: &lt;http://trac.webkit.org/changeset/103011&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523326</commentid>
    <comment_count>19</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-17 10:39:01 -0800</bug_when>
    <thetext>Reverted http://trac.webkit.org/changeset/103150 because it causes Aura tests to time out.  See http://build.chromium.org/p/chromium/builders/Linux%20Tests%20%28Aura%20dbg%29/builds/2281.

I bisected WebKit revs to determine this was the offending commit.  Since WebKit can&apos;t be rolled with Aura breaking, I reverted this and its dependent patch in bug 74376.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524320</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 17:17:20 -0800</bug_when>
    <thetext>This broke aura because of a subtle change in LayerChromium:setLayerTreeHost(). When transitioning from a valid LTH to another LTH, or from a valid LTH to nil, this patch caused a call to setNeedsDisplay() in the middle of the setLayerTreeHost() function. This is indirectly called when removing a layer from the tree.  In aura, setNeedsDisplay() maps to their ScheduleDraw() function which when running in the test harness synchronously triggers a redraw. Since the LayerChromium tree is in an inconsistent state at this point calculateDraw..() barfs.

Since LayerChromium::setLayerTreeHost() is a completely internal function in this patch I think the right fix is to simply not call out to the client from that function and move the setNeedsCommit()/setNeedsRedraw() calls to the appropriate public APIs.  I&apos;ve confirmed that doing this fixes the aura tests and will post a new patch ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524333</commentid>
    <comment_count>21</comment_count>
      <attachid>119961</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 17:33:25 -0800</bug_when>
    <thetext>Created attachment 119961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524335</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 17:35:07 -0800</bug_when>
    <thetext>Updated patch posted for posterity, not requesting an additional review.

Changes from the previous version are:
1.) Remove setNeedsDisplay() from LayerChromium::setLayerTreeHost, it&apos;s not needed
2.) Moved setRootLayer() call from inside WebViewLayerTreeHostImpl&apos;s c&apos;tor to its create() function so it runs after the adoptRef() call to avoid triggering m_adoptionIsRequired assertion

Tested with webkit_unit_tests, compositing layout tests, aura_unittests, views_unittests, compositor_unittests, and aura_shell_unittests on linux with use_aura=1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524336</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 17:36:13 -0800</bug_when>
    <thetext>Committed r103290: &lt;http://trac.webkit.org/changeset/103290&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524417</commentid>
    <comment_count>24</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-19 21:03:51 -0800</bug_when>
    <thetext>Did we get a new unit test to cover this corner case? It sounds nasty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524642</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-20 09:07:59 -0800</bug_when>
    <thetext>Unfortunately no, I didn&apos;t do that. Could you file a bug on me to write some tests on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527714</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-28 11:20:27 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; It seems a little awkward to do this all the way down in createTile.  Would this make more sense at the top of prepareToUpdate, where we also lazily create the tiler?
&gt; &gt; 
&gt; 
&gt; ImageLayerChromium does things a bit differently, it access the updater before calling prepareToUpdate()
&gt; 
&gt; Enne and I discussed this a bit offline. I think what I&apos;ll do instead is clear/create the updater whenever the LayerTreeHost changes and on context recreation clear and then reset the LTH pointer for the whole tree. That way the TextureUpdater is always available when a layer is in a tree and we have a good hook point to re-detect any capabilities on the LTH that may have changed due to the context loss and recreation.

There is at least one other case when the cleanupResources get&apos;s called (TiledLayerChromium::prepareToUpdateTiles) and thus resets the TextureUpdater. So I think we should be creating it lazily like was originally discussed (or refactoring cleanupResources and being very careful about when it is called):
https://bugs.webkit.org/show_bug.cgi?id=75288</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119139</attachid>
            <date>2011-12-13 19:35:37 -0800</date>
            <delta_ts>2011-12-14 11:48:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74477-20111213193536.patch</filename>
            <type>text/plain</type>
            <size>22023</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzQyODliZjIwNTU4ZDQy
ZDAyZWI0ZmI4ZGQwZmRjOGU1OGU4NzVkYS4uMjM4ZTNjYjE3N2FiMjM1ZjI0NDhlMGIxZmU1YTUy
YzViZDI2MGVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTEzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
ZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExheWVyQ2hyb21pdW0gaW5zdGFuY2Vz
IGVhZ2VybHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0NDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBlbmZvcmNlcyB0aGF0IHRoZSBtX2xheWVyVHJlZUhvc3QgcG9pbnRlciBvbiBMYXllckNo
cm9taXVtIGluc3RhbmNlcyBpcyBhbHdheXMgdXAgdG8gZGF0ZSwgaW5zdGVhZCBvZgorICAgICAg
ICBsYXppbHkgc2V0dGluZyBpdCBpbiB0aGUgcGFpbnRDb250ZW50cyBsb29wLiBUaGVyZSBhcmUg
dHdvIGludmFyaWFudHM6CisgICAgICAgIDEuKSBJZiBhIExheWVyQ2hyb21pdW0gaXMgdGhlIHJv
b3QgbGF5ZXIgb2YgYSBDQ0xheWVyVHJlZUhvc3QsIG9yIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGNo
aWxkcmVuLCBtYXNrLCBvcgorICAgICAgICByZXBsaWNhIHBvaW50ZXJzIGZyb20gdGhlIHJvb3Qg
bGF5ZXIgb2YgYSBDQ0xheWVyVHJlZUhvc3QsIHRoZW4gdGhhdCBMYXllckNocm9taXVtJ3MgbV9s
YXllclRyZWVIb3N0IHBvaW50ZXIKKyAgICAgICAgcmVmZXJzIHRvIHRoYXQgQ0NMYXllclRyZWVI
b3N0CisgICAgICAgIDIuKSBJZiBhIExheWVyQ2hyb21pdW0gaXMgbm90IGEgcm9vdCBsYXllciBv
ciByZWFjaGFibGUgZnJvbSBhIHJvb3QgbGF5ZXIgb2YgYW55IENDTGF5ZXJUcmVlSG9zdCwgaXRz
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIGlzIG5pbC4KKworICAgICAgICBDb3Zl
cmVkIGJ5IHNldmVyYWwgbmV3IGxheW91dCB0ZXN0cyBpbiBMYXllckNocm9taXVtVGVzdAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDExLTEyLTEz
ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVt
XSBVc2UgSGFzaE1hcDwuLi4sIE93blB0cjxUaWxlPj4gZm9yIGNvbXBvc2l0b3IgdGlsZW1hcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlY2ZiOGIyYmQ1NzlkNTMyODE0Y2M5MzI0YTI4
Nzg3Mzg4Zjk4M2Y2Li5kZTEwNmEwZDA4N2YzOWMxMWY5NGRjOGNiNDU0ZTU1ZDA3YTFlY2E0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDExLTEyLTEzICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBTZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExheWVyQ2hyb21pdW0gaW5zdGFu
Y2VzIGVhZ2VybHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0NDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNvbWUgbmV3IHRlc3RzIGZvciBMYXllckNocm9taXVtOjptX2xheWVyVHJlZUhvc3Qg
YmVoYXZpb3IuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAg
ICAgICAgKDo6TW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgICg6Ok1vY2tMYXll
clRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICg6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RTaG9ydGxpdmVkMTo6YmVnaW5UZXN0KToKKyAgICAgICAgKDo6Q0NMYXllclRyZWVIb3N0
VGVzdFNob3J0bGl2ZWQyOjpiZWdpblRlc3QpOgorICAgICAgICAoOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6CisgICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwOgorCiAyMDExLTEyLTEzICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIGNocm9taXVtIHBvcnQgLSByZW1vdmUgbmFjbCBoYWNrIGluIERFUFMv
Z3lwX3dlYmtpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCBiNDVlMTI1OTU3M2Y5ZWQzNTcx
YjYxYTAxZTgzMGM1ZWRlNDRmMjhiLi5kNWI4YzNiMGZiZWQwNDE3YTgzYjBkOGI5Yjc0NzNlMmQy
Nzk0OTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMTA4LDE0ICsxMDgsMjUgQEAgdm9p
ZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzUmVjdXJzaXZlKCkKIAogdm9pZCBMYXll
ckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0ID09IGhvc3QpCisgICAgICAgIHJldHVybjsKKwogICAgIC8v
IElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRlcmVycyB0aGVuIHdlIG5lZWQgdG8gZnJlZSB1
cCBhbnkgcmVzb3VyY2VzCiAgICAgLy8gYWxsb2NhdGVkIGJ5IHRoZSBvbGQgcmVuZGVyZXIuCi0g
ICAgaWYgKGxheWVyVHJlZUhvc3QoKSAmJiBsYXllclRyZWVIb3N0KCkgIT0gaG9zdCkgeworICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOwogICAg
ICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB9CiAKICAgICBtX2xheWVyVHJlZUhvc3QgPSBo
b3N0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytp
KQorICAgICAgICBtX2NoaWxkcmVuW2ldLT5zZXRMYXllclRyZWVIb3N0KGhvc3QpOworCisgICAg
aWYgKG1fbWFza0xheWVyKQorICAgICAgICBtX21hc2tMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCho
b3N0KTsKKyAgICBpZiAobV9yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fcmVwbGljYUxheWVyLT5z
ZXRMYXllclRyZWVIb3N0KGhvc3QpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRz
Q29tbWl0KCkKQEAgLTEyOCw2ICsxMzksNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFBhcmVu
dChMYXllckNocm9taXVtKiBsYXllcikKIHsKICAgICBBU1NFUlQoIWxheWVyIHx8ICFsYXllci0+
aGFzQW5jZXN0b3IodGhpcykpOwogICAgIG1fcGFyZW50ID0gbGF5ZXI7CisgICAgc2V0TGF5ZXJU
cmVlSG9zdChtX3BhcmVudCA/IG1fcGFyZW50LT5sYXllclRyZWVIb3N0KCkgOiAwKTsKIH0KIAog
Ym9vbCBMYXllckNocm9taXVtOjpoYXNBbmNlc3RvcihMYXllckNocm9taXVtKiBhbmNlc3Rvcikg
Y29uc3QKQEAgLTI4Miw2ICsyOTQsMTkgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRNYXNrTGF5
ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKQogICAgIGlmIChtX21hc2tMYXllciA9PSBtYXNr
TGF5ZXIpCiAgICAgICAgIHJldHVybjsKICAgICBtX21hc2tMYXllciA9IG1hc2tMYXllcjsKKyAg
ICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1fbWFza0xheWVyLT5zZXRMYXllclRyZWVIb3N0
KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9p
ZCBMYXllckNocm9taXVtOjpzZXRSZXBsaWNhTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7
CisgICAgaWYgKG1fcmVwbGljYUxheWVyID09IGxheWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3JlcGxpY2FMYXllciA9IGxheWVyOworICAgIGlmIChtX3JlcGxpY2FMYXllcikKKyAgICAg
ICAgbV9yZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgp
KTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3
YTRmOGY0NzkyODlkYTA1OTEzN2I3OWJiMTVkNmJkMTdkNTFlZS4uYzJiMjc0NzcwYzFkMGRhNjFh
MjAzM2M1ZWU2YTRiZTdhYjhjYmM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTU1LDcgKzE1
NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RGVsZWdhdGUoQ0NMYXllckRlbGVnYXRlKiBk
ZWxlZ2F0ZSkgeyBtX2RlbGVnYXRlID0gZGVsZWdhdGU7IH0KIAotICAgIHZvaWQgc2V0UmVwbGlj
YUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKSB7IG1fcmVwbGljYUxheWVyID0gbGF5ZXI7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2b2lkIHNldFJlcGxpY2FMYXllcihMYXllckNocm9taXVt
Kik7CiAgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBsaWNhTGF5ZXIuZ2V0KCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5l
ZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZDMxYmVjYjQzOTIyYjBkNzk3MTc3YzhkZjA5OWU2YjdmNzk1
MGNlMi4uYjU0MGY1NGFjZjM5YmFlYWQ0M2NlY2I5NTBmYTc5ZmUwYmRlNDQzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yODMsNiArMjgzLDggQEAgVXBkYXRhYmxlVGls
ZSogVGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAogCiBVcGRh
dGFibGVUaWxlKiBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQog
eworICAgIGlmICghdGV4dHVyZVVwZGF0ZXIoKSkKKyAgICAgICAgY3JlYXRlVGV4dHVyZVVwZGF0
ZXIobGF5ZXJUcmVlSG9zdCgpKTsKICAgICBPd25QdHI8VXBkYXRhYmxlVGlsZT4gdGlsZShVcGRh
dGFibGVUaWxlOjpjcmVhdGUodGV4dHVyZVVwZGF0ZXIoKS0+Y3JlYXRlVGV4dHVyZSh0ZXh0dXJl
TWFuYWdlcigpKSkpOwogICAgIFVwZGF0YWJsZVRpbGUqIGFkZGVkVGlsZSA9IHRpbGUuZ2V0KCk7
CiAgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLnJlbGVhc2UoKSwgaSwgaik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1YjkzNGExNjZl
ZmE1NWYzNzRmLi40YmZiODg0MjNjODcyODk0NGJlYmIyZDE2YzA2Y2ZiZWVmNmUxMzEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTIzNCw2ICsyMzQsMTggQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKICAgICAgICAgbV9jbGllbnQtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIpCit7CisgICAgaWYgKG1fcm9vdExh
eWVyICYmICFyb290TGF5ZXIpCisgICAgICAgIG1fcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0
KDApOworCisgICAgbV9yb290TGF5ZXIgPSByb290TGF5ZXI7CisKKyAgICBpZiAoIW1fcm9vdExh
eWVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yb290TGF5ZXItPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUpCiB7CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5zZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9y
dFNpemUpKTsKQEAgLTM2MCw3ICszNzIsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogICAg
IC8vIG1hc2sgYW5kIHJlcGxpY2Egc2hvdWxkIGJlIHBhaW50ZWQuCiAKICAgICBpZiAocmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAgICAgICAgcmVu
ZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKICAg
ICB9CkBAIC0zNjgsMTEgKzM3OSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tB
bmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAgTGF5
ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5
ZXIoKTsKICAgICBpZiAocmVwbGljYUxheWVyKSB7CiAKLSAgICAgICAgcmVwbGljYUxheWVyLT5z
ZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICByZXBsaWNhTGF5ZXItPnBhaW50Q29udGVu
dHNJZkRpcnR5KCk7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsK
LSAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+
Y29udGVudEJvdW5kcygpKSk7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigp
LT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogICAgICAgICB9CkBAIC0zODcsNyArMzk2LDYgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwog
ICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSk7CiAKLSAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogICAgICAgICBwYWlu
dE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIpOwogCiAg
ICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJM
aXN0KCk7CkBAIC0zOTksOCArNDA3LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5
ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAg
ICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRl
c1RvVGFyZ2V0PExheWVyQ2hyb21pdW0+KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBsYXllci0+c2V0TGF5
ZXJUcmVlSG9zdCh0aGlzKTsKLQogICAgICAgICAgICAgQVNTRVJUKGxheWVyLT5vcGFjaXR5KCkp
OwogICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBhYWFkMTQyMjlkMzUxMGVlMTkxMDIxYzc2NGM3
NWI0ZmI0NzNhYjU1Li45MzJlODA5NGJjZTE5ZGU1NDMyZjg5ZmY5Y2E3ZGI1MDBkYTc2NmVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoK
IAogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdl
dCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikgeyBtX3Jvb3RMYXllciA9IHJvb3RMYXllcjsgfQor
ICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4pOwogCiAgICAg
Y29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCmluZGV4IDM2ZmQ3ZGJkMDdiZGM3Y2YxYzg2MWZkODJhZWJjMmIwODRhMDNhMzMu
LmI2MTdhYTI0NDNhZjI5OWExZTIwMGZmZmNjZWUyZmE0ZGI2YTZmNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAt
MTAzLDcgKzEwMywxMSBAQCBjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tMYXllclRyZWVI
b3N0PiBjcmVhdGUoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIENDTGF5ZXJUcmVlSG9zdENsaWVudCog
Y2xpZW50LCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllciwgY29uc3QgQ0NTZXR0
aW5ncyYgc2V0dGluZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tM
YXllclRyZWVIb3N0KHRlc3RIb29rcywgY2xpZW50LCByb290TGF5ZXIsIHNldHRpbmdzKSk7Cisg
ICAgICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbW9jayA9IGFkb3B0UmVmKG5ldyBNb2Nr
TGF5ZXJUcmVlSG9zdCh0ZXN0SG9va3MsIGNsaWVudCwgc2V0dGluZ3MpKTsKKyAgICAgICAgbW9j
ay0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG1vY2st
PmluaXRpYWxpemUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIHJl
dHVybiBtb2NrLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudCogY2xpZW50KQpAQCAtMTEyLDEzICsxMTYsMTAgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBNb2NrTGF5ZXJUcmVlSG9zdChUZXN0SG9va3MqIHRlc3RIb29rcywg
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKKyAgICBNb2NrTGF5ZXJUcmVl
SG9zdChUZXN0SG9va3MqIHRlc3RIb29rcywgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQs
IGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChj
bGllbnQsIHNldHRpbmdzKQogICAgICAgICAsIG1fdGVzdEhvb2tzKHRlc3RIb29rcykKICAgICB7
Ci0gICAgICAgIHNldFJvb3RMYXllcihyb290TGF5ZXIpOwotICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBpbml0aWFsaXplKCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwogICAgIH0KIAog
ICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7CkBAIC00NDgsNyArNDQ5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQogICAgIHsKICAgICAgICAgLy8gS2lsbCB0aGUg
bGF5ZXJUcmVlSG9zdCBpbW1lZGlhdGVseS4KLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290
TGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCgwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwogCiAgICAg
ICAgIGVuZFRlc3QoKTsKQEAgLTQ4MSw3ICs0ODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHBvc3RT
ZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOwogCiAgICAgICAgIC8vIEtpbGwgdGhlIGxheWVy
VHJlZUhvc3QgaW1tZWRpYXRlbHkuCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVy
KCktPnNldExheWVyVHJlZUhvc3QoMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dExheWVyKDApOwogICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKIAogICAgICAgICBl
bmRUZXN0KCk7CkBAIC01MDQsNyArNTA1LDcgQEAgcHVibGljOgogICAgICAgICBwb3N0U2V0TmVl
ZHNSZWRyYXdUb01haW5UaHJlYWQoKTsKIAogICAgICAgICAvLyBLaWxsIHRoZSBsYXllclRyZWVI
b3N0IGltbWVkaWF0ZWx5LgotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5z
ZXRMYXllclRyZWVIb3N0KDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXll
cigwKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CiAKICAgICAgICAgZW5kVGVz
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1U
ZXN0LmNwcAppbmRleCAyODY2NWFhNzc2YmNhZTAxY2YwYjg4NWZlZDVjNWE1YzhlZDMxOGQwLi5k
YTEyNDBiOTM1MTI4NmMyZDkxMjA2MDMwMzcxODc4OGFjYzllN2IxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMjksNiAr
MjksOCBAQAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxh
eWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
LmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdC5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KIApAQCAtNzM0LDQgKzczNiwxODIgQEAgVEVTVF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVj
a0NvbnRlbnRzU2NhbGVDaGFuZ2VUcmlnZ2Vyc05lZWRzRGlzcGxheSkKICAgICBFWFBFQ1RfVFJV
RSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0KIAorY2xhc3MgRmFrZUNDTGF5ZXJUcmVl
SG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkgeyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1
Y2Nlc3MpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQorfTsKKworY2xhc3MgRmFrZUNDTGF5ZXJU
cmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBS
ZWZQdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gaG9zdCA9IGFkb3B0UmVmKG5ldyBGYWtlQ0NMYXll
clRyZWVIb3N0KTsKKyAgICAgICAgLy8gVGhlIGluaXRpYWxpemUgY2FsbCB3aWxsIGZhaWwsIHNp
bmNlIG91ciBjbGllbnQgZG9lc24ndCBwcm92aWRlIGEgdmFsaWQgR3JhcGhpY3NDb250ZXh0M0Qs
IGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBpbiB0aGUgdGVzdHMgdGhhdCB1c2UgdGhpcyBmYWtlIHNv
IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICBob3N0LT5pbml0aWFsaXplKCk7Cisg
ICAgICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmFr
ZUNDTGF5ZXJUcmVlSG9zdCgpCisgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KCZtX2NsaWVudCwg
Q0NTZXR0aW5ncygpKQorICAgIHsKKyAgICB9CisKKyAgICBGYWtlQ0NMYXllclRyZWVIb3N0Q2xp
ZW50IG1fY2xpZW50OworfTsKKwordm9pZCBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1
YnRyZWUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKK3sKKyAg
ICBFWFBFQ1RfRVEoaG9zdCwgbGF5ZXItPmxheWVyVHJlZUhvc3QoKSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBh
c3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUobGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCksIGhvc3QpOworCisgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgYXNz
ZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVlKGxheWVyLT5tYXNrTGF5ZXIoKSwgaG9z
dCk7CisKKyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBhc3NlcnRMYXll
clRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUobGF5ZXItPnJlcGxpY2FMYXllcigpLCBob3N0KTsK
K30KKworCitURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgZW50ZXJpbmdUcmVl
KQoreworICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG1hc2sgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2EgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2FNYXNrID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworCisgICAgLy8gU2V0IHVwIGEgZGV0YWNoZWQgdHJlZSBvZiBsYXllcnMuIFRo
ZSBob3N0IHBvaW50ZXIgc2hvdWxkIGJlIG5pbCBmb3IgdGhlc2UgbGF5ZXJzLgorICAgIHBhcmVu
dC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7
CisgICAgY2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBsaWNhLmdldCgpKTsKKyAgICByZXBsaWNh
LT5zZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7CisKKyAgICBhc3NlcnRMYXllclRyZWVIb3N0TWF0
Y2hlc0ZvclN1YnRyZWUocGFyZW50LmdldCgpLCAwKTsKKworICAgIFJlZlB0cjxGYWtlQ0NMYXll
clRyZWVIb3N0PiBsYXllclRyZWVIb3N0ID0gRmFrZUNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7
CisgICAgLy8gU2V0dGluZyB0aGUgcm9vdCBsYXllciBzaG91bGQgc2V0IHRoZSBob3N0IHBvaW50
ZXIgZm9yIGFsbCBsYXllcnMgaW4gdGhlIHRyZWUuCisgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dExheWVyKHBhcmVudC5nZXQoKSk7CisKKyAgICBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0Zv
clN1YnRyZWUocGFyZW50LmdldCgpLCBsYXllclRyZWVIb3N0LmdldCgpKTsKKworICAgIC8vIENs
ZWFyaW5nIHRoZSByb290IGxheWVyIHNob3VsZCBhbHNvIGNsZWFyIG91dCB0aGUgaG9zdCBwb2lu
dGVycyBmb3IgYWxsIGxheWVycyBpbiB0aGUgdHJlZS4KKyAgICBsYXllclRyZWVIb3N0LT5zZXRS
b290TGF5ZXIoMCk7CisKKyAgICBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUo
cGFyZW50LmdldCgpLCAwKTsKKworICAgIGxheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJD
b21wb3NpdG9yOjpzaHV0ZG93bigpOworfQorCitURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVI
b3N0VGVzdCwgYWRkaW5nTGF5ZXJTdWJ0cmVlKQoreworICAgIFdlYkNvbXBvc2l0b3I6OmluaXRp
YWxpemUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVl
SG9zdCA9IEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworCisgICAgbGF5ZXJUcmVlSG9z
dC0+c2V0Um9vdExheWVyKHBhcmVudC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5s
YXllclRyZWVIb3N0KCksIGxheWVyVHJlZUhvc3QuZ2V0KCkpOworCisgICAgLy8gQWRkaW5nIGEg
c3VidHJlZSB0byBhIGxheWVyIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgaG9zdCBzaG91bGQg
c2V0IHRoZSBob3N0IHBvaW50ZXIgb24gYWxsIGxheWVycyBpbiB0aGF0IHN1YnRyZWUuCisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsKKworICAgIC8vIE1hc2tz
LCByZXBsaWNhcywgYW5kIHJlcGxpY2EgbWFza3Mgc2hvdWxkIHBpY2sgdXAgdGhlIG5ldyBob3N0
IHRvby4KKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRNYXNrID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRNYXNrTGF5ZXIoY2hpbGRNYXNrLmdldCgpKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRSZXBsaWNhID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRSZXBsaWNhTGF5ZXIoY2hpbGRSZXBsaWNhLmdldCgp
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRSZXBsaWNhTWFzayA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKKyAgICBjaGlsZFJlcGxpY2EtPnNldE1hc2tMYXllcihjaGlsZFJl
cGxpY2FNYXNrLmdldCgpKTsKKworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGFz
c2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShwYXJlbnQuZ2V0KCksIGxheWVyVHJl
ZUhvc3QuZ2V0KCkpOworCisgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOworICAg
IGxheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwor
fQorCitURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdCkKK3sK
KyAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiByZXBsaWNhID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhTWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKTsKKworICAgIC8vIFNhbWUgc2V0dXAgYXMgdGhlIHByZXZpb3VzIHRlc3QuCisgICAgcGFy
ZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPnNldE1hc2tMYXllcihtYXNrLmdldCgp
KTsKKyAgICBjaGlsZC0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2EuZ2V0KCkpOworICAgIHJlcGxp
Y2EtPnNldE1hc2tMYXllcihtYXNrLmdldCgpKTsKKworICAgIFJlZlB0cjxGYWtlQ0NMYXllclRy
ZWVIb3N0PiBmaXJzdExheWVyVHJlZUhvc3QgPSBGYWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUo
KTsKKyAgICBmaXJzdExheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihwYXJlbnQuZ2V0KCkpOwor
CisgICAgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVlKHBhcmVudC5nZXQoKSwg
Zmlyc3RMYXllclRyZWVIb3N0LmdldCgpKTsKKworICAgIC8vIE5vdyByZS1yb290IHRoZSB0cmVl
IHRvIGEgbmV3IGhvc3QgKHNpbXVsYXRpbmcgd2hhdCB3ZSBkbyBvbiBhIGNvbnRleHQgbG9zdCBl
dmVudCkuCisgICAgLy8gVGhpcyBzaG91bGQgdXBkYXRlIHRoZSBob3N0IHBvaW50ZXJzIGZvciBh
bGwgbGF5ZXJzIGluIHRoZSB0cmVlLgorICAgIFJlZlB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBz
ZWNvbmRMYXllclRyZWVIb3N0ID0gRmFrZUNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisgICAg
c2Vjb25kTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHBhcmVudC5nZXQoKSk7CisKKyAgICBh
c3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUocGFyZW50LmdldCgpLCBzZWNvbmRM
YXllclRyZWVIb3N0LmdldCgpKTsKKworICAgIHNlY29uZExheWVyVHJlZUhvc3QtPnNldFJvb3RM
YXllcigwKTsKKyAgICBmaXJzdExheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBzZWNvbmRMYXll
clRyZWVIb3N0LmNsZWFyKCk7CisgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKwor
VEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRlc3QsIGNoYW5nZUhvc3RJblN1YnRyZWUp
Cit7CisgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gZmlyc3RQYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGZpcnN0Q2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHNlY29uZFBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc2Vjb25kQ2hpbGQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHNlY29uZEdy
YW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisKKyAgICAvLyBGaXJzdCBwdXQg
YWxsIGNoaWxkcmVuIHVuZGVyIHRoZSBmaXJzdCBwYXJlbnQgYW5kIHNldCB0aGUgZmlyc3QgaG9z
dC4KKyAgICBmaXJzdFBhcmVudC0+YWRkQ2hpbGQoZmlyc3RDaGlsZCk7CisgICAgc2Vjb25kQ2hp
bGQtPmFkZENoaWxkKHNlY29uZEdyYW5kQ2hpbGQpOworICAgIGZpcnN0UGFyZW50LT5hZGRDaGls
ZChzZWNvbmRDaGlsZCk7CisKKyAgICBSZWZQdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gZmlyc3RM
YXllclRyZWVIb3N0ID0gRmFrZUNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgZmlyc3RM
YXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoZmlyc3RQYXJlbnQuZ2V0KCkpOworCisgICAgYXNz
ZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVlKGZpcnN0UGFyZW50LmdldCgpLCBmaXJz
dExheWVyVHJlZUhvc3QuZ2V0KCkpOworCisgICAgLy8gTm93IHJlcGFyZW50IHRoZSBzdWJ0cmVl
IHN0YXJ0aW5nIGF0IHNlY29uZENoaWxkIHRvIGEgbGF5ZXIgaW4gYSBkaWZmZXJlbnQgdHJlZS4K
KyAgICBSZWZQdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gc2Vjb25kTGF5ZXJUcmVlSG9zdCA9IEZh
a2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworICAgIHNlY29uZExheWVyVHJlZUhvc3QtPnNl
dFJvb3RMYXllcihzZWNvbmRQYXJlbnQuZ2V0KCkpOworCisgICAgc2Vjb25kUGFyZW50LT5hZGRD
aGlsZChzZWNvbmRDaGlsZCk7CisKKyAgICAvLyBUaGUgbW92ZWQgbGF5ZXIgYW5kIGl0cyBjaGls
ZHJlbiBzaG91bGQgcG9pbnQgdG8gdGhlIG5ldyBob3N0LgorICAgIEVYUEVDVF9FUShzZWNvbmRM
YXllclRyZWVIb3N0LmdldCgpLCBzZWNvbmRDaGlsZC0+bGF5ZXJUcmVlSG9zdCgpKTsKKyAgICBF
WFBFQ1RfRVEoc2Vjb25kTGF5ZXJUcmVlSG9zdC5nZXQoKSwgc2Vjb25kR3JhbmRDaGlsZC0+bGF5
ZXJUcmVlSG9zdCgpKTsKKworICAgIC8vIFRlc3Qgb3ZlciwgY2xlYW51cCB0aW1lLgorICAgIGZp
cnN0TGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOworICAgIHNlY29uZExheWVyVHJlZUhv
c3QtPnNldFJvb3RMYXllcigwKTsKKyAgICBmaXJzdExheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAg
ICBzZWNvbmRMYXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzMzcyMjRlZDZkMzFlMjEzMWMzMWJk
MTMwNzJiZjdmYzRhM2I5OTRjLi4wY2Q4YzYzN2Y2MWIxY2RlZjgxMjMwZmM3YWI1NjM5NDZkNDQ0
MWQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTItMTMgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUgQ0NMYXll
clRyZWVIb3N0IHBvaW50ZXIgb24gTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJseQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMS0xMi0xMyAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBPU1IgZXhpdCBmb3IgVUludDMyVG9O
dW1iZXIgc2hvdWxkIHJvbGwgZm9yd2FyZCwgbm90IHJvbGwgYmFja3dhcmQKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCBh
ZTk2NzU0ZmIxZjIxODlhZjlkMjY3ZGIwOWYyZTNiNzUyYWNjNTQxLi41NmNjYzk2OWQ5MDU2MWQ3
MWQ3OTcyOTFlMjFlYjQ5NjU4ZWJhNTMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0yNzYyLDYgKzI3NjIsMTAgQEAg
QlVHV0s0OTYyOSBTS0lQIDogcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvbG90cy1vZi1p
bWctbGF5ZXJzLmh0bWwgPSBQQVNTCiBCVUdXSzQ5NjI5IFNLSVAgOiBwbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9sb3RzLW9mLWltZy1sYXllcnMtd2l0aC1vcGFjaXR5Lmh0bWwgPSBQQVNT
CiBCVUdXSzQ5NjI5IFNLSVAgOiBjb21wb3NpdGluZy9pZnJhbWVzL3BhZ2UtY2FjaGUtbGF5ZXIt
dHJlZS5odG1sID0gUEFTUwogCisvLyBOZWVkcyBhbiBpbWFnZS1vbmx5IHJlYmFzZWxpbmUgc2lu
Y2Ugd2Ugbm8gbG9uZ2VyIGludmFsaWRhdGUgd2hlbiBzZXR0aW5nIHRoZSByZXBsaWNhIGxheWVy
CisvLyB0byBOVUxMIHdoZW4gaXQgYWxyZWFkeSB3YXMgTlVMTCBzbyB3ZSBoYXZlIG5vIGRhbWFn
ZSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LgorQlVHSkFNRVNSIDogY29tcG9zaXRpbmcvaWZyYW1l
cy9pZnJhbWUtY29udGVudC1mbGlwcGluZy5odG1sID0gSU1BR0UKKwogQlVHTk9ORSBTTE9XIFdJ
TiBERUJVRyBHUFUgOiBmYXN0L2NhbnZhcy9jYW52YXMtZ2V0SW1hZ2VEYXRhLmh0bWwgPSBQQVNT
CiAKIC8vIEFjY2VsZXJhdGVkIDJkIGZvciBtYWMgaXNuJ3Qgc3VwcG9ydGVkIHlldCwgc28gU0tJ
UCB0aGlzIHRlc3QgZm9yIG5vdy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119271</attachid>
            <date>2011-12-14 11:48:37 -0800</date>
            <delta_ts>2011-12-19 17:33:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74477-20111214114836.patch</filename>
            <type>text/plain</type>
            <size>25866</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgwZjIyYzBiNjU0ODU4
MzA4YjRkOTIxZTM0ZDc1MmUxOWFkMTIzYS4uMTBiNmNlM2EyNzZiY2U5NzM4MzRmOTc5YjIyNTFh
OGI5ZjUzMmRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTE0ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
ZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExheWVyQ2hyb21pdW0gaW5zdGFuY2Vz
IGVhZ2VybHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0NDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBlbmZvcmNlcyB0aGF0IHRoZSBtX2xheWVyVHJlZUhvc3QgcG9pbnRlciBvbiBMYXllckNo
cm9taXVtIGluc3RhbmNlcyBpcyBhbHdheXMgdXAgdG8gZGF0ZSwgaW5zdGVhZCBvZgorICAgICAg
ICBsYXppbHkgc2V0dGluZyBpdCBpbiB0aGUgcGFpbnRDb250ZW50cyBsb29wLiBUaGVyZSBhcmUg
dHdvIGludmFyaWFudHM6CisgICAgICAgIDEuKSBJZiBhIExheWVyQ2hyb21pdW0gaXMgdGhlIHJv
b3QgbGF5ZXIgb2YgYSBDQ0xheWVyVHJlZUhvc3QsIG9yIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGNo
aWxkcmVuLCBtYXNrLCBvcgorICAgICAgICByZXBsaWNhIHBvaW50ZXJzIGZyb20gdGhlIHJvb3Qg
bGF5ZXIgb2YgYSBDQ0xheWVyVHJlZUhvc3QsIHRoZW4gdGhhdCBMYXllckNocm9taXVtJ3MgbV9s
YXllclRyZWVIb3N0IHBvaW50ZXIKKyAgICAgICAgcmVmZXJzIHRvIHRoYXQgQ0NMYXllclRyZWVI
b3N0CisgICAgICAgIDIuKSBJZiBhIExheWVyQ2hyb21pdW0gaXMgbm90IGEgcm9vdCBsYXllciBv
ciByZWFjaGFibGUgZnJvbSBhIHJvb3QgbGF5ZXIgb2YgYW55IENDTGF5ZXJUcmVlSG9zdCwgaXRz
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIGlzIG5pbC4KKworICAgICAgICBDb3Zl
cmVkIGJ5IHNldmVyYWwgbmV3IGxheW91dCB0ZXN0cyBpbiBMYXllckNocm9taXVtVGVzdAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDExLTEyLTE0
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBGaXggUGxhdGZvcm1TY3JlZW46OnNjcmVlbkF2YWlsYWJsZVJlY3Qgd2hlbiB0aGVyZSdz
IG5vIHZpZXcgd2lkZ2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZhN2UxNzY0MzZi
ZmY2MzYxYzc3N2NjMTUwYjhjMTUzMTE5ZTllMjUuLmU5ODYxZWJhZWFjY2FkZmJjOGQwN2FkNjhk
MGQ2ZTQzZjUyYzBjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMTItMTQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUgQ0NMYXllclRyZWVIb3N0IHBvaW50ZXIgb24gTGF5
ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc29tZSBuZXcgdGVzdHMgZm9yIExheWVyQ2hyb21pdW06
Om1fbGF5ZXJUcmVlSG9zdCBiZWhhdmlvci4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwOgorICAgICAgICAoOjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAg
ICAgICAgKDo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRyZWVIb3N0KToKKyAgICAgICAg
KDo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxOjpiZWdpblRlc3QpOgorICAgICAgICAo
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDI6OmJlZ2luVGVzdCk6CisgICAgICAgICg6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMzo6YmVnaW5UZXN0KToKKyAgICAgICAgKiB0
ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTEtMTItMTQgIFBldGVyIEJldmVybG9v
ICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUm9sbCBjaHJvbWl1
bSBERVBTIChyMTEzODA3IC0+IHIxMTQzNTYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMmEyNDY2ZDkxMjlhZWMzNjQwOTMyMjljYjkzNWFmODJkNTA3MjRiNi4uNzhl
YjdjODA3YWQ3NTQ4ZGZhYjI1OGEyNWE3OWMxZDRjNmJmZjkyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcApAQCAtODUsNyArODUsNiBAQCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Q29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKIAogQ29u
dGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAgY2xlYW51
cFJlc291cmNlcygpOwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyY2VzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDNjYjIzNzdhODg2
MjQ1ZjkzMzc0NGYyYmVmZjAzMzA4ZmM2OTRjYjkuLjZlZWRjY2U3MTQzODZmMGM1OWZiYWU4MjA1
ZjljZmYzMThkZmY1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTY5
LDExICsxNjksOCBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGly
dHkoKQogICAgIGlmIChtX25lZWRzRGlzcGxheSkgewogICAgICAgICBtX3RleHR1cmVVcGRhdGVy
LT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7Ci0gICAgICAgIElu
dFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAgICAgIGlm
IChtX25lZWRzRGlzcGxheSkgewotICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0
KTsKLSAgICAgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAg
ICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsK
KyAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICB9CiAKICAgICBwcmVwYXJlVG9V
cGRhdGUodmlzaWJsZUxheWVyUmVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjQ1
ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVkZTQ0ZjI4Yi4uZTM4NTZhZTcwMzg3OWE1N2I5
ZTQ4N2Q3MThlYmM5ZjBlMDgwNjEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwOCwx
NCArMTA4LDI1IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlc1JlY3Vyc2l2
ZSgpCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhv
c3QqIGhvc3QpCiB7Ci0gICAgLy8gSWYgd2UncmUgY2hhbmdpbmcgbGF5ZXIgcmVuZGVyZXJzIHRo
ZW4gd2UgbmVlZCB0byBmcmVlIHVwIGFueSByZXNvdXJjZXMKLSAgICAvLyBhbGxvY2F0ZWQgYnkg
dGhlIG9sZCByZW5kZXJlci4KLSAgICBpZiAobGF5ZXJUcmVlSG9zdCgpICYmIGxheWVyVHJlZUhv
c3QoKSAhPSBob3N0KSB7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCA9PSBob3N0KQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBob3N0cyB0aGVuIHdlIG5lZWQg
dG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCisgICAgLy8gYWxsb2NhdGVkIGJ5IHRoZSBvbGQgaG9z
dC4KKyAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMo
KTsKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQogCiAgICAgbV9sYXllclRyZWVI
b3N0ID0gaG9zdDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsK
KworICAgIGlmIChtX21hc2tMYXllcikKKyAgICAgICAgbV9tYXNrTGF5ZXItPnNldExheWVyVHJl
ZUhvc3QoaG9zdCk7CisgICAgaWYgKG1fcmVwbGljYUxheWVyKQorICAgICAgICBtX3JlcGxpY2FM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpz
ZXROZWVkc0NvbW1pdCgpCkBAIC0xMjgsNiArMTM5LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpz
ZXRQYXJlbnQoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiB7CiAgICAgQVNTRVJUKCFsYXllciB8fCAh
bGF5ZXItPmhhc0FuY2VzdG9yKHRoaXMpKTsKICAgICBtX3BhcmVudCA9IGxheWVyOworICAgIHNl
dExheWVyVHJlZUhvc3QobV9wYXJlbnQgPyBtX3BhcmVudC0+bGF5ZXJUcmVlSG9zdCgpIDogMCk7
CiB9CiAKIGJvb2wgTGF5ZXJDaHJvbWl1bTo6aGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1bSogYW5j
ZXN0b3IpIGNvbnN0CkBAIC0yODEsNyArMjkzLDIzIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1hc2tMYXllcikKIHsKICAgICBpZiAobV9tYXNrTGF5
ZXIgPT0gbWFza0xheWVyKQogICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbWFza0xheWVyKQor
ICAgICAgICBtX21hc2tMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCgwKTsKICAgICBtX21hc2tMYXll
ciA9IG1hc2tMYXllcjsKKyAgICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1fbWFza0xheWVy
LT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgc2V0TmVlZHND
b21taXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXRSZXBsaWNhTGF5ZXIoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpCit7CisgICAgaWYgKG1fcmVwbGljYUxheWVyID09IGxheWVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1fcmVwbGljYUxheWVyKQorICAgICAgICBtX3JlcGxpY2FM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdCgwKTsKKyAgICBtX3JlcGxpY2FMYXllciA9IGxheWVyOwor
ICAgIGlmIChtX3JlcGxpY2FMYXllcikKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPnNldExheWVy
VHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggOWM3YTRmOGY0NzkyODlkYTA1OTEzN2I3OWJiMTVk
NmJkMTdkNTFlZS4uYzJiMjc0NzcwYzFkMGRhNjFhMjAzM2M1ZWU2YTRiZTdhYjhjYmM0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0RGVsZWdhdGUoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkgeyBtX2RlbGVnYXRlID0gZGVs
ZWdhdGU7IH0KIAotICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVy
KSB7IG1fcmVwbGljYUxheWVyID0gbGF5ZXI7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2b2lk
IHNldFJlcGxpY2FMYXllcihMYXllckNocm9taXVtKik7CiAgICAgTGF5ZXJDaHJvbWl1bSogcmVw
bGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0KCk7IH0KIAogICAg
IC8vIFRoZXNlIG1ldGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVy
aXZlZCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWM3Yjhm
NjFhM2ZmY2U4YmNmMzZjN2Q4ZmU1MDk0MDA5Yzg0NWNhOS4uOTAwZTM5MWI4ZjZhY2U4OTg0NGVk
YWZkMWFmNzlhOWNjM2Y0YzBlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBA
IC0xNTQsMTMgKzE1NCwxOCBAQCBJbnRTaXplIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJv
dW5kcygpIGNvbnN0CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0
KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKKyAgICBpZiAoaG9zdCA9PSBsYXllclRyZWVIb3N0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXllclRyZWVIb3N0KCkpCisgICAgICAg
IGNsZWFudXBSZXNvdXJjZXMoKTsKKwogICAgIExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhv
c3QoaG9zdCk7CiAKLSAgICBpZiAobV90aWxlciB8fCAhaG9zdCkKKyAgICBpZiAoIWhvc3QpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGhvc3QpOwotCiAgICAg
c2V0VGV4dHVyZUZvcm1hdChob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkuYmVzdFRl
eHR1cmVGb3JtYXQpOwogICAgIG1fc2FtcGxlZFRleGVsRm9ybWF0ID0gdGV4dHVyZVVwZGF0ZXIo
KS0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1hdCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAppbmRleCAyN2Q5NTZhN2M3YWZiZDA5NWRiOTQ1YjkzNGExNjZlZmE1
NWYzNzRmLi4xZmNmMWVmMWQ5NjZlYWNkNGU0YzcxNDY1NTJhYmU5NjdjYTI3Yjg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTE3NCw4ICsxNzQsMTAgQEAgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhv
c3RJbXBsKENDTGF5ZXIKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhp
Y3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKLSAgICBpZiAocm9vdExheWVyKCkpCi0gICAgICAg
IHJvb3RMYXllcigpLT5jbGVhbnVwUmVzb3VyY2VzUmVjdXJzaXZlKCk7CisgICAgaWYgKG1fcm9v
dExheWVyKSB7CisgICAgICAgIG1fcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0KDApOworICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKyAgICB9CiAgICAgbV9j
bGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCkBAIC0yMzQs
NiArMjM2LDE4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdygpCiAgICAg
ICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQor
eworICAgIGlmIChtX3Jvb3RMYXllciA9PSByb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyVHJlZUhv
c3QoMCk7CisgICAgbV9yb290TGF5ZXIgPSByb290TGF5ZXI7CisgICAgaWYgKG1fcm9vdExheWVy
KQorICAgICAgICBtX3Jvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKK30KKwogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6
ZSkKIHsKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNldE1heE1lbW9yeUxpbWl0Qnl0
ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSkpOwpAQCAtMzYw
LDcgKzM3NCw2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9y
UmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTCiAgICAgLy8gbWFzayBhbmQgcmVw
bGljYSBzaG91bGQgYmUgcGFpbnRlZC4KIAogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1h
c2tMYXllcigpKSB7Ci0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNl
dExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1hc2tMYXllcigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwogICAgIH0KQEAgLTM2OCwxMSAr
MzgxLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICBMYXllckNocm9taXVtKiByZXBs
aWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwogICAgIGlmIChy
ZXBsaWNhTGF5ZXIpIHsKIAotICAgICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CiAgICAgICAgIHJlcGxpY2FMYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKIAog
ICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVw
bGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAg
ICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkp
KTsKICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJ
ZkRpcnR5KCk7CiAgICAgICAgIH0KQEAgLTM4Nyw3ICszOTgsNiBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdAogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAotICAgICAgICByZW5kZXJTdXJmYWNlTGF5
ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FG
b3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CiAKICAgICAgICAgY29uc3QgTGF5
ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKQEAgLTM5OSw4
ICs0MDksNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICAgICAgaWYgKENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJD
aHJvbWl1bT4obGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllci0+aWQoKSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMp
OwotCiAgICAgICAgICAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CiAgICAgICAgICAgICBB
U1NFUlQoIWxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IGFhYWQxNDIyOWQzNTEwZWUxOTEwMjFjNzY0Yzc1YjRmYjQ3M2FiNTUuLjkz
MmU4MDk0YmNlMTlkZTU0MzJmODlmZjljYTdkYjUwMGRhNzY2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVibGljOgogCiAgICAgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICBjb25z
dCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllci5n
ZXQoKTsgfQotICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cm9vdExheWVyKSB7IG1fcm9vdExheWVyID0gcm9vdExheWVyOyB9CisgICAgdm9pZCBzZXRSb290
TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7CiAKICAgICBjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXgg
MzZmZDdkYmQwN2JkYzdjZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2EzMy4uYjYxN2FhMjQ0M2FmMjk5
YTFlMjAwZmZmY2NlZTJmYTRkYjZhNmY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0xMDMsNyArMTAzLDExIEBA
IGNsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShUZXN0
SG9va3MqIHRlc3RIb29rcywgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0xheWVyVHJlZUhvc3QodGVz
dEhvb2tzLCBjbGllbnQsIHJvb3RMYXllciwgc2V0dGluZ3MpKTsKKyAgICAgICAgUmVmUHRyPE1v
Y2tMYXllclRyZWVIb3N0PiBtb2NrID0gYWRvcHRSZWYobmV3IE1vY2tMYXllclRyZWVIb3N0KHRl
c3RIb29rcywgY2xpZW50LCBzZXR0aW5ncykpOworICAgICAgICBtb2NrLT5zZXRSb290TGF5ZXIo
cm9vdExheWVyKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbW9jay0+aW5pdGlhbGl6ZSgpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgcmV0dXJuIG1vY2sucmVsZWFz
ZSgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQpCkBAIC0xMTIsMTMgKzExNiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IE1vY2tMYXllclRyZWVIb3N0KFRlc3RIb29rcyogdGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhvc3RD
bGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIsIGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgIE1vY2tMYXllclRyZWVIb3N0KFRlc3RIb29rcyog
dGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5n
cyYgc2V0dGluZ3MpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCwgc2V0dGluZ3Mp
CiAgICAgICAgICwgbV90ZXN0SG9va3ModGVzdEhvb2tzKQogICAgIHsKLSAgICAgICAgc2V0Um9v
dExheWVyKHJvb3RMYXllcik7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGluaXRpYWxpemUoKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CiAgICAgfQogCiAgICAgVGVzdEhvb2tzKiBt
X3Rlc3RIb29rczsKQEAgLTQ0OCw3ICs0NDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luVGVzdCgpCiAgICAgewogICAgICAgICAvLyBLaWxsIHRoZSBsYXllclRyZWVIb3N0IGlt
bWVkaWF0ZWx5LgotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRMYXll
clRyZWVIb3N0KDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsK
ICAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CiAKICAgICAgICAgZW5kVGVzdCgpOwpA
QCAtNDgxLDcgKzQ4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9N
YWluVGhyZWFkKCk7CiAKICAgICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1lZGlh
dGVseS4KLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2V0TGF5ZXJUcmVl
SG9zdCgwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwogCiAgICAgICAgIGVuZFRlc3QoKTsKQEAgLTUw
NCw3ICs1MDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHBvc3RTZXROZWVkc1JlZHJhd1RvTWFpblRo
cmVhZCgpOwogCiAgICAgICAgIC8vIEtpbGwgdGhlIGxheWVyVHJlZUhvc3QgaW1tZWRpYXRlbHku
Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
MCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwogICAgICAgICBt
X2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKIAogICAgICAgICBlbmRUZXN0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDI4
NjY1YWE3NzZiY2FlMDFjZjBiODg1ZmVkNWM1YTVjOGVkMzE4ZDAuLjQ5OTQzMzU3MjRmNmIxNGYy
N2Q5NzBmZTY4OTJhYjVlOWUxNWQ0OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVk
ZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKKyNpbmNsdWRlICJX
ZWJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCkBAIC03MzQsNCAr
NzM2LDIxOSBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrQ29udGVudHNTY2FsZUNo
YW5nZVRyaWdnZXJzTmVlZHNEaXNwbGF5KQogICAgIEVYUEVDVF9UUlVFKHRlc3RMYXllci0+bmVl
ZHNEaXNwbGF5KCkpOwogfQogCitjbGFzcyBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQg
cGFnZVNjYWxlKSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCkgeyB9Cit9OworCitjbGFzcyBGYWtlQ0NMYXllclRyZWVIb3N0IDogcHVibGlj
IENDTGF5ZXJUcmVlSG9zdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmFrZUND
TGF5ZXJUcmVlSG9zdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxGYWtlQ0NMYXll
clRyZWVIb3N0PiBob3N0ID0gYWRvcHRSZWYobmV3IEZha2VDQ0xheWVyVHJlZUhvc3QpOworICAg
ICAgICAvLyBUaGUgaW5pdGlhbGl6ZSBjYWxsIHdpbGwgZmFpbCwgc2luY2Ugb3VyIGNsaWVudCBk
b2Vzbid0IHByb3ZpZGUgYSB2YWxpZCBHcmFwaGljc0NvbnRleHQzRCwgYnV0IGl0IGRvZXNuJ3Qg
bWF0dGVyIGluIHRoZSB0ZXN0cyB0aGF0IHVzZSB0aGlzIGZha2Ugc28gaWdub3JlIHRoZSByZXR1
cm4gdmFsdWUuCisgICAgICAgIGhvc3QtPmluaXRpYWxpemUoKTsKKyAgICAgICAgcmV0dXJuIGhv
c3QucmVsZWFzZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGYWtlQ0NMYXllclRyZWVIb3N0
KCkKKyAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoJm1fY2xpZW50LCBDQ1NldHRpbmdzKCkpCisg
ICAgeworICAgIH0KKworICAgIEZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQgbV9jbGllbnQ7Cit9
OworCit2b2lkIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShMYXllckNocm9t
aXVtKiBsYXllciwgQ0NMYXllclRyZWVIb3N0KiBob3N0KQoreworICAgIEVYUEVDVF9FUShob3N0
LCBsYXllci0+bGF5ZXJUcmVlSG9zdCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGFzc2VydExheWVyVHJlZUhv
c3RNYXRjaGVzRm9yU3VidHJlZShsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgaG9zdCk7CisK
KyAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBhc3NlcnRMYXllclRyZWVIb3N0
TWF0Y2hlc0ZvclN1YnRyZWUobGF5ZXItPm1hc2tMYXllcigpLCBob3N0KTsKKworICAgIGlmIChs
YXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVz
Rm9yU3VidHJlZShsYXllci0+cmVwbGljYUxheWVyKCksIGhvc3QpOworfQorCisKK1RFU1QoTGF5
ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBlbnRlcmluZ1RyZWUpCit7CisgICAgV2ViQ29t
cG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBj
aGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcmVwbGljYSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcmVwbGljYU1hc2sgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisKKyAg
ICAvLyBTZXQgdXAgYSBkZXRhY2hlZCB0cmVlIG9mIGxheWVycy4gVGhlIGhvc3QgcG9pbnRlciBz
aG91bGQgYmUgbmlsIGZvciB0aGVzZSBsYXllcnMuCisgICAgcGFyZW50LT5hZGRDaGlsZChjaGls
ZCk7CisgICAgY2hpbGQtPnNldE1hc2tMYXllcihtYXNrLmdldCgpKTsKKyAgICBjaGlsZC0+c2V0
UmVwbGljYUxheWVyKHJlcGxpY2EuZ2V0KCkpOworICAgIHJlcGxpY2EtPnNldE1hc2tMYXllciht
YXNrLmdldCgpKTsKKworICAgIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShw
YXJlbnQuZ2V0KCksIDApOworCisgICAgUmVmUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGxheWVy
VHJlZUhvc3QgPSBGYWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICAvLyBTZXR0aW5n
IHRoZSByb290IGxheWVyIHNob3VsZCBzZXQgdGhlIGhvc3QgcG9pbnRlciBmb3IgYWxsIGxheWVy
cyBpbiB0aGUgdHJlZS4KKyAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIocGFyZW50Lmdl
dCgpKTsKKworICAgIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShwYXJlbnQu
Z2V0KCksIGxheWVyVHJlZUhvc3QuZ2V0KCkpOworCisgICAgLy8gQ2xlYXJpbmcgdGhlIHJvb3Qg
bGF5ZXIgc2hvdWxkIGFsc28gY2xlYXIgb3V0IHRoZSBob3N0IHBvaW50ZXJzIGZvciBhbGwgbGF5
ZXJzIGluIHRoZSB0cmVlLgorICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKwor
ICAgIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJlZShwYXJlbnQuZ2V0KCksIDAp
OworCisgICAgbGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7Cit9CisKK1RFU1QoTGF5ZXJDaHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBhZGRpbmdM
YXllclN1YnRyZWUpCit7CisgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIFJlZlB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0ID0gRmFrZUNDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisKKyAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIo
cGFyZW50LmdldCgpKTsKKworICAgIEVYUEVDVF9FUShwYXJlbnQtPmxheWVyVHJlZUhvc3QoKSwg
bGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisKKyAgICAvLyBBZGRpbmcgYSBzdWJ0cmVlIHRvIGEgbGF5
ZXIgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBob3N0IHNob3VsZCBzZXQgdGhlIGhvc3QgcG9p
bnRlciBvbiBhbGwgbGF5ZXJzIGluIHRoYXQgc3VidHJlZS4KKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgY2hp
bGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgLy8gTWFza3MsIHJlcGxpY2FzLCBhbmQg
cmVwbGljYSBtYXNrcyBzaG91bGQgcGljayB1cCB0aGUgbmV3IGhvc3QgdG9vLgorICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBjaGlsZE1hc2sgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Cisg
ICAgY2hpbGQtPnNldE1hc2tMYXllcihjaGlsZE1hc2suZ2V0KCkpOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBjaGlsZFJlcGxpY2EgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
Y2hpbGQtPnNldFJlcGxpY2FMYXllcihjaGlsZFJlcGxpY2EuZ2V0KCkpOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZFJlcGxpY2FNYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworICAgIGNoaWxkUmVwbGljYS0+c2V0TWFza0xheWVyKGNoaWxkUmVwbGljYU1hc2suZ2V0KCkp
OworCisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgYXNzZXJ0TGF5ZXJUcmVlSG9z
dE1hdGNoZXNGb3JTdWJ0cmVlKHBhcmVudC5nZXQoKSwgbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisK
KyAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAgbGF5ZXJUcmVlSG9zdC5j
bGVhcigpOworICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisKK1RFU1QoTGF5ZXJD
aHJvbWl1bUxheWVyVHJlZUhvc3RUZXN0LCBjaGFuZ2VIb3N0KQoreworICAgIFdlYkNvbXBvc2l0
b3I6OmluaXRpYWxpemUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1h
c2sgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHJlcGxpY2EgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IHJlcGxpY2FNYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworCisgICAgLy8g
U2FtZSBzZXR1cCBhcyB0aGUgcHJldmlvdXMgdGVzdC4KKyAgICBwYXJlbnQtPmFkZENoaWxkKGNo
aWxkKTsKKyAgICBjaGlsZC0+c2V0TWFza0xheWVyKG1hc2suZ2V0KCkpOworICAgIGNoaWxkLT5z
ZXRSZXBsaWNhTGF5ZXIocmVwbGljYS5nZXQoKSk7CisgICAgcmVwbGljYS0+c2V0TWFza0xheWVy
KG1hc2suZ2V0KCkpOworCisgICAgUmVmUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGZpcnN0TGF5
ZXJUcmVlSG9zdCA9IEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworICAgIGZpcnN0TGF5
ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHBhcmVudC5nZXQoKSk7CisKKyAgICBhc3NlcnRMYXll
clRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUocGFyZW50LmdldCgpLCBmaXJzdExheWVyVHJlZUhv
c3QuZ2V0KCkpOworCisgICAgLy8gTm93IHJlLXJvb3QgdGhlIHRyZWUgdG8gYSBuZXcgaG9zdCAo
c2ltdWxhdGluZyB3aGF0IHdlIGRvIG9uIGEgY29udGV4dCBsb3N0IGV2ZW50KS4KKyAgICAvLyBU
aGlzIHNob3VsZCB1cGRhdGUgdGhlIGhvc3QgcG9pbnRlcnMgZm9yIGFsbCBsYXllcnMgaW4gdGhl
IHRyZWUuCisgICAgUmVmUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IHNlY29uZExheWVyVHJlZUhv
c3QgPSBGYWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICBzZWNvbmRMYXllclRyZWVI
b3N0LT5zZXRSb290TGF5ZXIocGFyZW50LmdldCgpKTsKKworICAgIGFzc2VydExheWVyVHJlZUhv
c3RNYXRjaGVzRm9yU3VidHJlZShwYXJlbnQuZ2V0KCksIHNlY29uZExheWVyVHJlZUhvc3QuZ2V0
KCkpOworCisgICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOworICAgIGZp
cnN0TGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgIHNlY29uZExheWVyVHJlZUhvc3QuY2xlYXIo
KTsKKyAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworfQorCitURVNUKExheWVyQ2hyb21p
dW1MYXllclRyZWVIb3N0VGVzdCwgY2hhbmdlSG9zdEluU3VidHJlZSkKK3sKKyAgICBXZWJDb21w
b3NpdG9yOjppbml0aWFsaXplKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBmaXJzdFBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gZmlyc3RDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gc2Vjb25kUGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBzZWNvbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc2Vjb25kR3JhbmRDaGlsZCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKworICAgIC8vIEZpcnN0IHB1dCBhbGwgY2hpbGRyZW4gdW5k
ZXIgdGhlIGZpcnN0IHBhcmVudCBhbmQgc2V0IHRoZSBmaXJzdCBob3N0LgorICAgIGZpcnN0UGFy
ZW50LT5hZGRDaGlsZChmaXJzdENoaWxkKTsKKyAgICBzZWNvbmRDaGlsZC0+YWRkQ2hpbGQoc2Vj
b25kR3JhbmRDaGlsZCk7CisgICAgZmlyc3RQYXJlbnQtPmFkZENoaWxkKHNlY29uZENoaWxkKTsK
KworICAgIFJlZlB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBmaXJzdExheWVyVHJlZUhvc3QgPSBG
YWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICBmaXJzdExheWVyVHJlZUhvc3QtPnNl
dFJvb3RMYXllcihmaXJzdFBhcmVudC5nZXQoKSk7CisKKyAgICBhc3NlcnRMYXllclRyZWVIb3N0
TWF0Y2hlc0ZvclN1YnRyZWUoZmlyc3RQYXJlbnQuZ2V0KCksIGZpcnN0TGF5ZXJUcmVlSG9zdC5n
ZXQoKSk7CisKKyAgICAvLyBOb3cgcmVwYXJlbnQgdGhlIHN1YnRyZWUgc3RhcnRpbmcgYXQgc2Vj
b25kQ2hpbGQgdG8gYSBsYXllciBpbiBhIGRpZmZlcmVudCB0cmVlLgorICAgIFJlZlB0cjxGYWtl
Q0NMYXllclRyZWVIb3N0PiBzZWNvbmRMYXllclRyZWVIb3N0ID0gRmFrZUNDTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKCk7CisgICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHNlY29u
ZFBhcmVudC5nZXQoKSk7CisKKyAgICBzZWNvbmRQYXJlbnQtPmFkZENoaWxkKHNlY29uZENoaWxk
KTsKKworICAgIC8vIFRoZSBtb3ZlZCBsYXllciBhbmQgaXRzIGNoaWxkcmVuIHNob3VsZCBwb2lu
dCB0byB0aGUgbmV3IGhvc3QuCisgICAgRVhQRUNUX0VRKHNlY29uZExheWVyVHJlZUhvc3QuZ2V0
KCksIHNlY29uZENoaWxkLT5sYXllclRyZWVIb3N0KCkpOworICAgIEVYUEVDVF9FUShzZWNvbmRM
YXllclRyZWVIb3N0LmdldCgpLCBzZWNvbmRHcmFuZENoaWxkLT5sYXllclRyZWVIb3N0KCkpOwor
CisgICAgLy8gVGVzdCBvdmVyLCBjbGVhbnVwIHRpbWUuCisgICAgZmlyc3RMYXllclRyZWVIb3N0
LT5zZXRSb290TGF5ZXIoMCk7CisgICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVy
KDApOworICAgIGZpcnN0TGF5ZXJUcmVlSG9zdC5jbGVhcigpOworICAgIHNlY29uZExheWVyVHJl
ZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworfQorCitURVNU
KExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgcmVwbGFjZU1hc2tBbmRSZXBsaWNhTGF5
ZXIpCit7CisgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBtYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNrQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2FDaGlsZCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbWFza1JlcGxhY2Vt
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiByZXBsaWNhUmVwbGFjZW1lbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisKKyAgICBw
YXJlbnQtPnNldE1hc2tMYXllcihtYXNrLmdldCgpKTsKKyAgICBwYXJlbnQtPnNldFJlcGxpY2FM
YXllcihyZXBsaWNhLmdldCgpKTsKKyAgICBtYXNrLT5hZGRDaGlsZChtYXNrQ2hpbGQpOworICAg
IHJlcGxpY2EtPmFkZENoaWxkKHJlcGxpY2FDaGlsZCk7CisKKyAgICBSZWZQdHI8RmFrZUNDTGF5
ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9IEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgp
OworICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihwYXJlbnQuZ2V0KCkpOworCisgICAg
YXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVlKHBhcmVudC5nZXQoKSwgbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7CisKKyAgICAvLyBSZXBsYWNpbmcgdGhlIG1hc2sgc2hvdWxkIGNsZWFy
IG91dCB0aGUgb2xkIG1hc2sncyBzdWJ0cmVlJ3MgaG9zdCBwb2ludGVycy4KKyAgICBwYXJlbnQt
PnNldE1hc2tMYXllcihtYXNrUmVwbGFjZW1lbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgwLCBt
YXNrLT5sYXllclRyZWVIb3N0KCkpOworICAgIEVYUEVDVF9FUSgwLCBtYXNrQ2hpbGQtPmxheWVy
VHJlZUhvc3QoKSk7CisKKyAgICAvLyBTYW1lIGZvciByZXBsYWNpbmcgYSByZXBsaWNhIGxheWVy
LgorICAgIHBhcmVudC0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FSZXBsYWNlbWVudC5nZXQoKSk7
CisgICAgRVhQRUNUX0VRKDAsIHJlcGxpY2EtPmxheWVyVHJlZUhvc3QoKSk7CisgICAgRVhQRUNU
X0VRKDAsIHJlcGxpY2FDaGlsZC0+bGF5ZXJUcmVlSG9zdCgpKTsKKworICAgIC8vIFRlc3Qgb3Zl
ciwgY2xlYW51cCB0aW1lLgorICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKyAg
ICBsYXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NzY0YzZiMDcwNzU4NTlkNGZlMzkzNDM5YWNm
ZTc3MmFhMTBmNDg3Li5iYjFiMmYyZDY5ZjYwNjQyY2JiNzY0MTA4ZmY0YmIzNDQ4ZmVmOTE5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTItMTQgIEphbWVzIFJvYmluc29uICA8amFtZXNy
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUgQ0NMYXllclRyZWVI
b3N0IHBvaW50ZXIgb24gTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NzcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMS0xMi0xNCAgRXJpYyBDYXJsc29uICA8ZXJp
Yy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYSB1cmwgd2l0aCBmcmFnbWVudCBt
YXkgbm90IGxvYWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dAppbmRleCBmODA0NWM4OTg1NWZiOGNjMDU2YzMyMGY0MDhjMTQyMjdm
MTM2NjE3Li4yM2NmYzA0NjhlMmNhNmI3ODJjODIyYWJkYzMzMGQ1OTZhNjE2ZjIxIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0
CkBAIC0yODAxLDYgKzI4MDEsMTAgQEAgQlVHV0s0OTYyOSBTS0lQIDogcGxhdGZvcm0vY2hyb21p
dW0vY29tcG9zaXRpbmcvbG90cy1vZi1pbWctbGF5ZXJzLmh0bWwgPSBQQVNTCiBCVUdXSzQ5NjI5
IFNLSVAgOiBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3RzLW9mLWltZy1sYXllcnMt
d2l0aC1vcGFjaXR5Lmh0bWwgPSBQQVNTCiBCVUdXSzQ5NjI5IFNLSVAgOiBjb21wb3NpdGluZy9p
ZnJhbWVzL3BhZ2UtY2FjaGUtbGF5ZXItdHJlZS5odG1sID0gUEFTUwogCisvLyBOZWVkcyBhbiBp
bWFnZS1vbmx5IHJlYmFzZWxpbmUgc2luY2Ugd2Ugbm8gbG9uZ2VyIGludmFsaWRhdGUgd2hlbiBz
ZXR0aW5nIHRoZSByZXBsaWNhIGxheWVyCisvLyB0byBOVUxMIHdoZW4gaXQgYWxyZWFkeSB3YXMg
TlVMTCBzbyB3ZSBoYXZlIG5vIGRhbWFnZSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LgorQlVHSkFN
RVNSIDogY29tcG9zaXRpbmcvaWZyYW1lcy9pZnJhbWUtY29udGVudC1mbGlwcGluZy5odG1sID0g
SU1BR0UKKwogQlVHTk9ORSBTTE9XIFdJTiBERUJVRyBHUFUgOiBmYXN0L2NhbnZhcy9jYW52YXMt
Z2V0SW1hZ2VEYXRhLmh0bWwgPSBQQVNTCiAKIC8vIEFjY2VsZXJhdGVkIDJkIGZvciBtYWMgaXNu
J3Qgc3VwcG9ydGVkIHlldCwgc28gU0tJUCB0aGlzIHRlc3QgZm9yIG5vdy4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119961</attachid>
            <date>2011-12-19 17:33:25 -0800</date>
            <delta_ts>2011-12-19 17:33:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74477-20111219173324.patch</filename>
            <type>text/plain</type>
            <size>28214</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzMwZGQ4YjJkZjgyMjZi
NTIxMzAxMjgwZGFmMDM0NWU3YzM3Mzk0YS4uZmExZTE3MWZhOWY4YTE1ZmEzMjMyNGM2ODBmYTQ2
ZTM4MmQ1ZjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTE5ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
ZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExheWVyQ2hyb21pdW0gaW5zdGFuY2Vz
IGVhZ2VybHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0NDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgorCisgICAgICAg
IFRoaXMgZW5mb3JjZXMgdGhhdCB0aGUgbV9sYXllclRyZWVIb3N0IHBvaW50ZXIgb24gTGF5ZXJD
aHJvbWl1bSBpbnN0YW5jZXMgaXMgYWx3YXlzIHVwIHRvIGRhdGUsIGluc3RlYWQgb2YKKyAgICAg
ICAgbGF6aWx5IHNldHRpbmcgaXQgaW4gdGhlIHBhaW50Q29udGVudHMgbG9vcC4gVGhlcmUgYXJl
IHR3byBpbnZhcmlhbnRzOgorICAgICAgICAxLikgSWYgYSBMYXllckNocm9taXVtIGlzIHRoZSBy
b290IGxheWVyIG9mIGEgQ0NMYXllclRyZWVIb3N0LCBvciBpcyByZWFjaGFibGUgdmlhIHRoZSBj
aGlsZHJlbiwgbWFzaywgb3IKKyAgICAgICAgcmVwbGljYSBwb2ludGVycyBmcm9tIHRoZSByb290
IGxheWVyIG9mIGEgQ0NMYXllclRyZWVIb3N0LCB0aGVuIHRoYXQgTGF5ZXJDaHJvbWl1bSdzIG1f
bGF5ZXJUcmVlSG9zdCBwb2ludGVyCisgICAgICAgIHJlZmVycyB0byB0aGF0IENDTGF5ZXJUcmVl
SG9zdAorICAgICAgICAyLikgSWYgYSBMYXllckNocm9taXVtIGlzIG5vdCBhIHJvb3QgbGF5ZXIg
b3IgcmVhY2hhYmxlIGZyb20gYSByb290IGxheWVyIG9mIGFueSBDQ0xheWVyVHJlZUhvc3QsIGl0
cworICAgICAgICBDQ0xheWVyVHJlZUhvc3QgcG9pbnRlciBpcyBuaWwuCisKKyAgICAgICAgQ292
ZXJlZCBieSBzZXZlcmFsIG5ldyBsYXlvdXQgdGVzdHMgaW4gTGF5ZXJDaHJvbWl1bVRlc3QKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNldFJlcGxpY2FMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExh
eWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKwogMjAxMS0xMi0x
OSAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWRE
QiBtdWx0aXBsZSBjYWxscyB0byB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShuYW1lKSBzaG91bGQg
cmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDJm
MDhjY2Q3Y2NhMTU0NzBkNDYzZGVkOTQ2MDUzY2VlZDBiYmU2NTEuLmM2ZmE3MDNlMWJmYjg3MGEw
MDBiMTlkMTM4YzI0OWJkZDk5ZDYwOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMTItMTkgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0aGUgQ0NMYXllclRyZWVIb3N0IHBvaW50
ZXIgb24gTGF5ZXJDaHJvbWl1bSBpbnN0YW5jZXMgZWFnZXJseQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NzcKKworICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgQWRkIHNvbWUgbmV3IHRlc3RzIGZvciBMYXll
ckNocm9taXVtOjptX2xheWVyVHJlZUhvc3QgYmVoYXZpb3IuCisKKyAgICAgICAgKiB0ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKDo6TW9ja0xheWVyVHJlZUhvc3Q6OmNy
ZWF0ZSk6CisgICAgICAgICg6Ok1vY2tMYXllclRyZWVIb3N0OjpNb2NrTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICg6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTaG9ydGxpdmVkMTo6YmVnaW5UZXN0KToK
KyAgICAgICAgKDo6Q0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQyOjpiZWdpblRlc3QpOgor
ICAgICAgICAoOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDM6OmJlZ2luVGVzdCk6Cisg
ICAgICAgICogdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDExLTEyLTE5ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQg
bW9yZSB1c2luZyBzdGF0ZW1lbnRzIHRvIChyZSlmaXggQ2hyb21pdW0gYnVpbGRlcnMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzI4NGVlYTMxYTQwMGUzZTkyNTMy
OTViNWYyNjAzNDQ5ZjlkODBkYS4uYzYzOTU2MzZkNGMzNzMyMTg2YjBjZWVlMTZhMzEyMTk3ZDBj
OTZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtODUsNyArODUs
NiBAQCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Q29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRl
bGVnYXRlKiBkZWxlZ2F0ZSkKIAogQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJD
aHJvbWl1bSgpCiB7Ci0gICAgY2xlYW51cFJlc291cmNlcygpOwogfQogCiB2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDNjYjIzNzdhODg2MjQ1ZjkzMzc0NGYyYmVmZjAzMzA4ZmM2OTRjYjkuLjZl
ZWRjY2U3MTQzODZmMGM1OWZiYWU4MjA1ZjljZmYzMThkZmY1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcApAQCAtMTY5LDExICsxNjksOCBAQCB2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIGlmIChtX25lZWRzRGlzcGxheSkgewog
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7Ci0gICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRl
bnRCb3VuZHMoKSk7Ci0gICAgICAgIGlmIChtX25lZWRzRGlzcGxheSkgewotICAgICAgICAgICAg
aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKLSAgICAgICAgICAgIG1fbmVlZHNEaXNwbGF5ID0g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBjb250ZW50Qm91bmRzKCkpKTsKKyAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsK
ICAgICB9CiAKICAgICBwcmVwYXJlVG9VcGRhdGUodmlzaWJsZUxheWVyUmVjdCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjQ1ZTEyNTk1NzNmOWVkMzU3MWI2MWEwMWU4MzBjNWVkZTQ0
ZjI4Yi4uNDI0NTQ5YzgxY2UyODk5ZDM4ZmEwN2VkNzc2NmE4NDFhZjkwN2I4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTEwOCwxNCArMTA4LDIzIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
Y2xlYW51cFJlc291cmNlc1JlY3Vyc2l2ZSgpCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgLy8gSWYgd2UncmUgY2hh
bmdpbmcgbGF5ZXIgcmVuZGVyZXJzIHRoZW4gd2UgbmVlZCB0byBmcmVlIHVwIGFueSByZXNvdXJj
ZXMKLSAgICAvLyBhbGxvY2F0ZWQgYnkgdGhlIG9sZCByZW5kZXJlci4KLSAgICBpZiAobGF5ZXJU
cmVlSG9zdCgpICYmIGxheWVyVHJlZUhvc3QoKSAhPSBob3N0KSB7CisgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdCA9PSBob3N0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSdyZSBjaGFu
Z2luZyBob3N0cyB0aGVuIHdlIG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCisgICAgLy8g
YWxsb2NhdGVkIGJ5IHRoZSBvbGQgaG9zdC4KKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQogICAg
ICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Ci0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAg
IH0KIAogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IGhvc3Q7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnNl
dExheWVyVHJlZUhvc3QoaG9zdCk7CisKKyAgICBpZiAobV9tYXNrTGF5ZXIpCisgICAgICAgIG1f
bWFza0xheWVyLT5zZXRMYXllclRyZWVIb3N0KGhvc3QpOworICAgIGlmIChtX3JlcGxpY2FMYXll
cikKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QoaG9zdCk7CiB9CiAK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNDb21taXQoKQpAQCAtMTI4LDYgKzEzNyw3IEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0UGFyZW50KExheWVyQ2hyb21pdW0qIGxheWVyKQogewog
ICAgIEFTU0VSVCghbGF5ZXIgfHwgIWxheWVyLT5oYXNBbmNlc3Rvcih0aGlzKSk7CiAgICAgbV9w
YXJlbnQgPSBsYXllcjsKKyAgICBzZXRMYXllclRyZWVIb3N0KG1fcGFyZW50ID8gbV9wYXJlbnQt
PmxheWVyVHJlZUhvc3QoKSA6IDApOwogfQogCiBib29sIExheWVyQ2hyb21pdW06Omhhc0FuY2Vz
dG9yKExheWVyQ2hyb21pdW0qIGFuY2VzdG9yKSBjb25zdApAQCAtMjgxLDcgKzI5MSwyMyBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnNldE1hc2tMYXllcihMYXllckNocm9taXVtKiBtYXNrTGF5ZXIp
CiB7CiAgICAgaWYgKG1fbWFza0xheWVyID09IG1hc2tMYXllcikKICAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX21hc2tMYXllcikKKyAgICAgICAgbV9tYXNrTGF5ZXItPnNldExheWVyVHJlZUhv
c3QoMCk7CiAgICAgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7CisgICAgaWYgKG1fbWFza0xheWVy
KQorICAgICAgICBtX21hc2tMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3Qu
Z2V0KCkpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0UmVwbGljYUxheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGlmIChtX3JlcGxp
Y2FMYXllciA9PSBsYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3JlcGxpY2FMYXll
cikKKyAgICAgICAgbV9yZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QoMCk7CisgICAgbV9y
ZXBsaWNhTGF5ZXIgPSBsYXllcjsKKyAgICBpZiAobV9yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1f
cmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDE3MzQzNGU5
OGViOTIzMDU1YWI3ODY2MDM0M2Q3NDYwOTA3OTllMWIuLjc2MmE3ODdkODYwNWUwZmIwNDI5MjI5
NDEyMjUwZWZjOGFiYjdkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE1NSw3ICsxNTUsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERlbGVnYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdh
dGUpIHsgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOyB9CiAKLSAgICB2b2lkIHNldFJlcGxpY2FMYXll
cihMYXllckNocm9taXVtKiBsYXllcikgeyBtX3JlcGxpY2FMYXllciA9IGxheWVyOyBzZXROZWVk
c0NvbW1pdCgpOyB9CisgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwog
ICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGlj
YUxheWVyLmdldCgpOyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRv
IGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDk3Yzk1MjUzZDA2OWNlMWEwNGYzMGI4YmQ5ZTFmMjE5OTY3NjE4NWMu
LmEwZTkxMDJiOGUxYWM5ZTBmYjkyOThiNTVjNzhiNTMzY2IxMjFhMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcApAQCAtMTU1LDEzICsxNTUsMTggQEAgSW50U2l6ZSBUaWxlZExh
eWVyQ2hyb21pdW06OmNvbnRlbnRCb3VuZHMoKSBjb25zdAogCiB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CisgICAgaWYg
KGhvc3QgPT0gbGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5
ZXJUcmVlSG9zdCgpKQorICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CisKICAgICBMYXllckNo
cm9taXVtOjpzZXRMYXllclRyZWVIb3N0KGhvc3QpOwogCi0gICAgaWYgKG1fdGlsZXIgfHwgIWhv
c3QpCisgICAgaWYgKCFob3N0KQogICAgICAgICByZXR1cm47CiAKICAgICBjcmVhdGVUZXh0dXJl
VXBkYXRlcihob3N0KTsKLQogICAgIHNldFRleHR1cmVGb3JtYXQoaG9zdC0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0KTsKICAgICBtX3NhbXBsZWRUZXhlbEZv
cm1hdCA9IHRleHR1cmVVcGRhdGVyKCktPnNhbXBsZWRUZXhlbEZvcm1hdChtX3RleHR1cmVGb3Jt
YXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNjYwN2JhZjkyOTJm
NTNlMTgwOTdjNTY5OTFmMzhlYmY5NmFkNDFmYS4uNDkwMDNlMzcxYzRhNDVjYTkwMzdiNjg1MzZh
MzNmNmUwNWY3YTRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xNzUs
OCArMTc1LDEwIEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVI
b3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyCiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7Ci0gICAgaWYg
KHJvb3RMYXllcigpKQotICAgICAgICByb290TGF5ZXIoKS0+Y2xlYW51cFJlc291cmNlc1JlY3Vy
c2l2ZSgpOworICAgIGlmIChtX3Jvb3RMYXllcikgeworICAgICAgICBtX3Jvb3RMYXllci0+c2V0
TGF5ZXJUcmVlSG9zdCgwKTsKKyAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CisgICAgfQogICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChz
dWNjZXNzKTsKIH0KIApAQCAtMjM2LDYgKzIzOCwxOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c2V0TmVlZHNSZWRyYXcoKQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsK
IH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVy
Q2hyb21pdW0+IHJvb3RMYXllcikKK3sKKyAgICBpZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIG1fcm9v
dExheWVyLT5zZXRMYXllclRyZWVIb3N0KDApOworICAgIG1fcm9vdExheWVyID0gcm9vdExheWVy
OworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyVHJl
ZUhvc3QodGhpcyk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25z
dCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2
aWV3cG9ydFNpemUpKTsKQEAgLTQwMCwxOCArNDE0LDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5k
ZXJTCiAgICAgLy8gbWFzayBhbmQgcmVwbGljYSBzaG91bGQgYmUgcGFpbnRlZC4KIAogICAgIGlm
IChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgIHJlbmRlclN1cmZh
Y2VMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
LCBwYWludFR5cGUpOwogICAgIH0KIAogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9
IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXll
cikgewotICAgICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAg
ICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgcGFpbnRUeXBlKTsKIAogICAg
ICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVwbGlj
YUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgICAg
IHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91bmRzKCkpKTsK
ICAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFza0xheWVy
KCksIHBhaW50VHlwZSk7CiAgICAgICAgIH0KQEAgLTQyNiw3ICs0MzcsNiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdAogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIEFT
U0VSVChyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAotICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgIHBhaW50TWFza0FuZFJl
cGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKIAog
ICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpOwpAQCAtNDM4LDcgKzQ0OCw2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExh
eWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAg
ICAgICAgICBpZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0
ZXNUb1RhcmdldDxMYXllckNocm9taXVtPihsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgp
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgbGF5ZXItPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoIWxheWVyLT5ib3VuZHMoKS5p
c0VtcHR5KCkpOwogCiAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgcGFp
bnRUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggMmRkYjlhZGUyZjRjNzFj
ZWI1YTc1NTAyMzgyZjQ3OTRjOTIxMDkwNC4uNjVjZjUzODU2NTAwMzFkMzlmODNhNTNmYTUxNjNl
MTZjMTA3ZGY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE2OCw3ICsxNjgs
NyBAQCBwdWJsaWM6CiAKICAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBt
X3Jvb3RMYXllci5nZXQoKTsgfQogICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBy
b290TGF5ZXI7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+KTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4g
bV9zZXR0aW5nczsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllclRyZWVWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllclRyZWVWaWV3SW1wbC5jcHAKaW5kZXggNTk5YWFiOWRkZTdlYzJlZDkwZGNkNzNjNjJkYjI3
YmU4NTcyNjMwOS4uZWRjMTZlYzdiMjcyM2ZiMDhlZjNjMmRiNjFhOWY5MzE4MzUwYzQyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBs
LmNwcApAQCAtNDMsMTcgKzQzLDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYXNzUmVmUHRy
PFdlYkxheWVyVHJlZVZpZXdJbXBsPiBXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKFdlYkxh
eWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdl
YkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykKIHsKLSAgICBSZWZQdHI8V2ViTGF5
ZXJUcmVlVmlld0ltcGw+IGhvc3QgPSBhZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVlVmlld0ltcGwo
Y2xpZW50LCByb290LCBzZXR0aW5ncykpOworICAgIFJlZlB0cjxXZWJMYXllclRyZWVWaWV3SW1w
bD4gaG9zdCA9IGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVWaWV3SW1wbChjbGllbnQsIHNldHRp
bmdzKSk7CiAgICAgaWYgKCFob3N0LT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwor
ICAgIGhvc3QtPnNldFJvb3RMYXllcihyb290KTsKICAgICByZXR1cm4gaG9zdDsKIH0KIAotV2Vi
TGF5ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdD
bGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZp
ZXc6OlNldHRpbmdzJiBzZXR0aW5ncykgCitXZWJMYXllclRyZWVWaWV3SW1wbDo6V2ViTGF5ZXJU
cmVlVmlld0ltcGwoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXll
clRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpIAogICAgIDogQ0NMYXllclRyZWVIb3N0KHRo
aXMsIHNldHRpbmdzKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogewotICAgIHNldFJvb3RMYXll
cihyb290KTsKIH0KIAogV2ViTGF5ZXJUcmVlVmlld0ltcGw6On5XZWJMYXllclRyZWVWaWV3SW1w
bCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0lt
cGwuaAppbmRleCAyZTE0NWZhNzFlZjljOTgwOGE3MGU5OTIxOTI1ZTYxOWRiNGRhYzAyLi4zODEx
ZTA5M2U1ZjNhMWE1YzdjYzEzMzM3OGZmMDA4NjhjNmRjNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBj
cmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25z
dCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYpOwogCiBwcml2YXRlOgotICAgIFdlYkxheWVy
VHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9v
dCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmKTsKKyAgICBXZWJMYXllclRyZWVW
aWV3SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6
U2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVWaWV3SW1wbCgpOwogICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAg
dmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAxODc2MjM4YjU4NTYy
YjRhYTg3YjkyMTUwODU4YzA4NmRhMTk3Mjc4Li42ZmFlOGI1ZDNhZTQ1NTlmYTcyZDNmN2I0ODY1
NjM2YjdjOTJiMGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTEwMywxMiArMTAzLDE1IEBAIGNsYXNzIE1vY2tM
YXllclRyZWVIb3N0IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShUZXN0SG9va3MqIHRlc3RI
b29rcywgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UmVmKG5l
dyBNb2NrTGF5ZXJUcmVlSG9zdCh0ZXN0SG9va3MsIGNsaWVudCwgcm9vdExheWVyLCBzZXR0aW5n
cykpOworICAgICAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QgPSBh
ZG9wdFJlZihuZXcgTW9ja0xheWVyVHJlZUhvc3QodGVzdEhvb2tzLCBjbGllbnQsIHNldHRpbmdz
KSk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBsYXllclRyZWVIb3N0LT5pbml0aWFsaXplKCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwogCiAgICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsIHdv
bid0IGRyYXcgaWYgaXQgaGFzIDF4MSB2aWV3cG9ydC4KICAgICAgICAgbGF5ZXJUcmVlSG9zdC0+
c2V0Vmlld3BvcnQoSW50U2l6ZSgxLCAxKSk7CiAKLSAgICAgICAgcmV0dXJuIGxheWVyVHJlZUhv
c3Q7CisgICAgICAgIHJldHVybiBsYXllclRyZWVIb3N0LnJlbGVhc2UoKTsKICAgICB9CiAKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQpAQCAtMTE3LDEzICsx
MjAsMTAgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBNb2NrTGF5ZXJUcmVlSG9z
dChUZXN0SG9va3MqIHRlc3RIb29rcywgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBh
c3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0
aW5ncykKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChUZXN0SG9va3MqIHRlc3RIb29rcywgQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAg
ICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdzKQogICAgICAgICAsIG1fdGVz
dEhvb2tzKHRlc3RIb29rcykKICAgICB7Ci0gICAgICAgIHNldFJvb3RMYXllcihyb290TGF5ZXIp
OwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBpbml0aWFsaXplKCk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHN1Y2Nlc3MpOwogICAgIH0KIAogICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7CkBAIC00
NTMsNyArNDUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQogICAg
IHsKICAgICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1lZGlhdGVseS4KLSAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCgwKTsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC5jbGVhcigpOwogCiAgICAgICAgIGVuZFRlc3QoKTsKQEAgLTQ4Niw3ICs0ODYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpOwogCiAg
ICAgICAgIC8vIEtpbGwgdGhlIGxheWVyVHJlZUhvc3QgaW1tZWRpYXRlbHkuCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPnNldExheWVyVHJlZUhvc3QoMCk7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwogICAgICAgICBtX2xheWVyVHJlZUhv
c3QuY2xlYXIoKTsKIAogICAgICAgICBlbmRUZXN0KCk7CkBAIC01MDksNyArNTA5LDcgQEAgcHVi
bGljOgogICAgICAgICBwb3N0U2V0TmVlZHNSZWRyYXdUb01haW5UaHJlYWQoKTsKIAogICAgICAg
ICAvLyBLaWxsIHRoZSBsYXllclRyZWVIb3N0IGltbWVkaWF0ZWx5LgotICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KDApOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LmNs
ZWFyKCk7CiAKICAgICAgICAgZW5kVGVzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAyODY2NWFhNzc2YmNhZTAxY2Yw
Yjg4NWZlZDVjNWE1YzhlZDMxOGQwLi40OTk0MzM1NzI0ZjZiMTRmMjdkOTcwZmU2ODkyYWI1ZTll
MTVkNDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hy
b21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyQ2hy
b21pdW1UZXN0LmNwcApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVz
dENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+
CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIApAQCAtNzM0LDQgKzczNiwyMTkgQEAgVEVTVF9G
KExheWVyQ2hyb21pdW1UZXN0LCBjaGVja0NvbnRlbnRzU2NhbGVDaGFuZ2VUcmlnZ2Vyc05lZWRz
RGlzcGxheSkKICAgICBFWFBFQ1RfVFJVRSh0ZXN0TGF5ZXItPm5lZWRzRGlzcGxheSgpKTsKIH0K
IAorY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3RDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5k
U2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZSkgeyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21taXRBbmREcmF3RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2Fw
QnVmZmVycygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQor
fTsKKworY2xhc3MgRmFrZUNDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3Qg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICBSZWZQdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4gaG9zdCA9
IGFkb3B0UmVmKG5ldyBGYWtlQ0NMYXllclRyZWVIb3N0KTsKKyAgICAgICAgLy8gVGhlIGluaXRp
YWxpemUgY2FsbCB3aWxsIGZhaWwsIHNpbmNlIG91ciBjbGllbnQgZG9lc24ndCBwcm92aWRlIGEg
dmFsaWQgR3JhcGhpY3NDb250ZXh0M0QsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBpbiB0aGUgdGVz
dHMgdGhhdCB1c2UgdGhpcyBmYWtlIHNvIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAg
ICBob3N0LT5pbml0aWFsaXplKCk7CisgICAgICAgIHJldHVybiBob3N0LnJlbGVhc2UoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdCgpCisgICAgICAgIDogQ0NM
YXllclRyZWVIb3N0KCZtX2NsaWVudCwgQ0NTZXR0aW5ncygpKQorICAgIHsKKyAgICB9CisKKyAg
ICBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IG1fY2xpZW50OworfTsKKwordm9pZCBhc3NlcnRM
YXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5
ZXJUcmVlSG9zdCogaG9zdCkKK3sKKyAgICBFWFBFQ1RfRVEoaG9zdCwgbGF5ZXItPmxheWVyVHJl
ZUhvc3QoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigp
LnNpemUoKTsgKytpKQorICAgICAgICBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRy
ZWUobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCksIGhvc3QpOworCisgICAgaWYgKGxheWVyLT5t
YXNrTGF5ZXIoKSkKKyAgICAgICAgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVl
KGxheWVyLT5tYXNrTGF5ZXIoKSwgaG9zdCk7CisKKyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXll
cigpKQorICAgICAgICBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUobGF5ZXIt
PnJlcGxpY2FMYXllcigpLCBob3N0KTsKK30KKworCitURVNUKExheWVyQ2hyb21pdW1MYXllclRy
ZWVIb3N0VGVzdCwgZW50ZXJpbmdUcmVlKQoreworICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxp
emUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2sgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2EgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxp
Y2FNYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworCisgICAgLy8gU2V0IHVwIGEgZGV0
YWNoZWQgdHJlZSBvZiBsYXllcnMuIFRoZSBob3N0IHBvaW50ZXIgc2hvdWxkIGJlIG5pbCBmb3Ig
dGhlc2UgbGF5ZXJzLgorICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5z
ZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7CisgICAgY2hpbGQtPnNldFJlcGxpY2FMYXllcihyZXBs
aWNhLmdldCgpKTsKKyAgICByZXBsaWNhLT5zZXRNYXNrTGF5ZXIobWFzay5nZXQoKSk7CisKKyAg
ICBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUocGFyZW50LmdldCgpLCAwKTsK
KworICAgIFJlZlB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0ID0gRmFrZUND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgLy8gU2V0dGluZyB0aGUgcm9vdCBsYXllciBz
aG91bGQgc2V0IHRoZSBob3N0IHBvaW50ZXIgZm9yIGFsbCBsYXllcnMgaW4gdGhlIHRyZWUuCisg
ICAgbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHBhcmVudC5nZXQoKSk7CisKKyAgICBhc3Nl
cnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUocGFyZW50LmdldCgpLCBsYXllclRyZWVI
b3N0LmdldCgpKTsKKworICAgIC8vIENsZWFyaW5nIHRoZSByb290IGxheWVyIHNob3VsZCBhbHNv
IGNsZWFyIG91dCB0aGUgaG9zdCBwb2ludGVycyBmb3IgYWxsIGxheWVycyBpbiB0aGUgdHJlZS4K
KyAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisKKyAgICBhc3NlcnRMYXllclRy
ZWVIb3N0TWF0Y2hlc0ZvclN1YnRyZWUocGFyZW50LmdldCgpLCAwKTsKKworICAgIGxheWVyVHJl
ZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOworfQorCitURVNU
KExheWVyQ2hyb21pdW1MYXllclRyZWVIb3N0VGVzdCwgYWRkaW5nTGF5ZXJTdWJ0cmVlKQorewor
ICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8RmFrZUND
TGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9IEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0
ZSgpOworCisgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHBhcmVudC5nZXQoKSk7CisK
KyAgICBFWFBFQ1RfRVEocGFyZW50LT5sYXllclRyZWVIb3N0KCksIGxheWVyVHJlZUhvc3QuZ2V0
KCkpOworCisgICAgLy8gQWRkaW5nIGEgc3VidHJlZSB0byBhIGxheWVyIGFscmVhZHkgYXNzb2Np
YXRlZCB3aXRoIGEgaG9zdCBzaG91bGQgc2V0IHRoZSBob3N0IHBvaW50ZXIgb24gYWxsIGxheWVy
cyBpbiB0aGF0IHN1YnRyZWUuCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENo
aWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkKTsKKworICAgIC8vIE1hc2tzLCByZXBsaWNhcywgYW5kIHJlcGxpY2EgbWFza3Mgc2hv
dWxkIHBpY2sgdXAgdGhlIG5ldyBob3N0IHRvby4KKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y2hpbGRNYXNrID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRNYXNr
TGF5ZXIoY2hpbGRNYXNrLmdldCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRS
ZXBsaWNhID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIGNoaWxkLT5zZXRSZXBsaWNh
TGF5ZXIoY2hpbGRSZXBsaWNhLmdldCgpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hp
bGRSZXBsaWNhTWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBjaGlsZFJlcGxp
Y2EtPnNldE1hc2tMYXllcihjaGlsZFJlcGxpY2FNYXNrLmdldCgpKTsKKworICAgIHBhcmVudC0+
YWRkQ2hpbGQoY2hpbGQpOworICAgIGFzc2VydExheWVyVHJlZUhvc3RNYXRjaGVzRm9yU3VidHJl
ZShwYXJlbnQuZ2V0KCksIGxheWVyVHJlZUhvc3QuZ2V0KCkpOworCisgICAgbGF5ZXJUcmVlSG9z
dC0+c2V0Um9vdExheWVyKDApOworICAgIGxheWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBXZWJD
b21wb3NpdG9yOjpzaHV0ZG93bigpOworfQorCitURVNUKExheWVyQ2hyb21pdW1MYXllclRyZWVI
b3N0VGVzdCwgY2hhbmdlSG9zdCkKK3sKKyAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDAp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtYXNrID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhTWFz
ayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKworICAgIC8vIFNhbWUgc2V0dXAgYXMgdGhl
IHByZXZpb3VzIHRlc3QuCisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQt
PnNldE1hc2tMYXllcihtYXNrLmdldCgpKTsKKyAgICBjaGlsZC0+c2V0UmVwbGljYUxheWVyKHJl
cGxpY2EuZ2V0KCkpOworICAgIHJlcGxpY2EtPnNldE1hc2tMYXllcihtYXNrLmdldCgpKTsKKwor
ICAgIFJlZlB0cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBmaXJzdExheWVyVHJlZUhvc3QgPSBGYWtl
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICBmaXJzdExheWVyVHJlZUhvc3QtPnNldFJv
b3RMYXllcihwYXJlbnQuZ2V0KCkpOworCisgICAgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNG
b3JTdWJ0cmVlKHBhcmVudC5nZXQoKSwgZmlyc3RMYXllclRyZWVIb3N0LmdldCgpKTsKKworICAg
IC8vIE5vdyByZS1yb290IHRoZSB0cmVlIHRvIGEgbmV3IGhvc3QgKHNpbXVsYXRpbmcgd2hhdCB3
ZSBkbyBvbiBhIGNvbnRleHQgbG9zdCBldmVudCkuCisgICAgLy8gVGhpcyBzaG91bGQgdXBkYXRl
IHRoZSBob3N0IHBvaW50ZXJzIGZvciBhbGwgbGF5ZXJzIGluIHRoZSB0cmVlLgorICAgIFJlZlB0
cjxGYWtlQ0NMYXllclRyZWVIb3N0PiBzZWNvbmRMYXllclRyZWVIb3N0ID0gRmFrZUNDTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgc2Vjb25kTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVy
KHBhcmVudC5nZXQoKSk7CisKKyAgICBhc3NlcnRMYXllclRyZWVIb3N0TWF0Y2hlc0ZvclN1YnRy
ZWUocGFyZW50LmdldCgpLCBzZWNvbmRMYXllclRyZWVIb3N0LmdldCgpKTsKKworICAgIHNlY29u
ZExheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKyAgICBmaXJzdExheWVyVHJlZUhvc3Qu
Y2xlYXIoKTsKKyAgICBzZWNvbmRMYXllclRyZWVIb3N0LmNsZWFyKCk7CisgICAgV2ViQ29tcG9z
aXRvcjo6c2h1dGRvd24oKTsKK30KKworVEVTVChMYXllckNocm9taXVtTGF5ZXJUcmVlSG9zdFRl
c3QsIGNoYW5nZUhvc3RJblN1YnRyZWUpCit7CisgICAgV2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6
ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZmlyc3RQYXJlbnQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGZpcnN0Q2hpbGQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHNlY29u
ZFBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gc2Vjb25kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHNlY29uZEdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisKKyAgICAvLyBGaXJzdCBwdXQgYWxsIGNoaWxkcmVuIHVuZGVyIHRoZSBmaXJzdCBwYXJl
bnQgYW5kIHNldCB0aGUgZmlyc3QgaG9zdC4KKyAgICBmaXJzdFBhcmVudC0+YWRkQ2hpbGQoZmly
c3RDaGlsZCk7CisgICAgc2Vjb25kQ2hpbGQtPmFkZENoaWxkKHNlY29uZEdyYW5kQ2hpbGQpOwor
ICAgIGZpcnN0UGFyZW50LT5hZGRDaGlsZChzZWNvbmRDaGlsZCk7CisKKyAgICBSZWZQdHI8RmFr
ZUNDTGF5ZXJUcmVlSG9zdD4gZmlyc3RMYXllclRyZWVIb3N0ID0gRmFrZUNDTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKCk7CisgICAgZmlyc3RMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoZmlyc3RQ
YXJlbnQuZ2V0KCkpOworCisgICAgYXNzZXJ0TGF5ZXJUcmVlSG9zdE1hdGNoZXNGb3JTdWJ0cmVl
KGZpcnN0UGFyZW50LmdldCgpLCBmaXJzdExheWVyVHJlZUhvc3QuZ2V0KCkpOworCisgICAgLy8g
Tm93IHJlcGFyZW50IHRoZSBzdWJ0cmVlIHN0YXJ0aW5nIGF0IHNlY29uZENoaWxkIHRvIGEgbGF5
ZXIgaW4gYSBkaWZmZXJlbnQgdHJlZS4KKyAgICBSZWZQdHI8RmFrZUNDTGF5ZXJUcmVlSG9zdD4g
c2Vjb25kTGF5ZXJUcmVlSG9zdCA9IEZha2VDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworICAg
IHNlY29uZExheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihzZWNvbmRQYXJlbnQuZ2V0KCkpOwor
CisgICAgc2Vjb25kUGFyZW50LT5hZGRDaGlsZChzZWNvbmRDaGlsZCk7CisKKyAgICAvLyBUaGUg
bW92ZWQgbGF5ZXIgYW5kIGl0cyBjaGlsZHJlbiBzaG91bGQgcG9pbnQgdG8gdGhlIG5ldyBob3N0
LgorICAgIEVYUEVDVF9FUShzZWNvbmRMYXllclRyZWVIb3N0LmdldCgpLCBzZWNvbmRDaGlsZC0+
bGF5ZXJUcmVlSG9zdCgpKTsKKyAgICBFWFBFQ1RfRVEoc2Vjb25kTGF5ZXJUcmVlSG9zdC5nZXQo
KSwgc2Vjb25kR3JhbmRDaGlsZC0+bGF5ZXJUcmVlSG9zdCgpKTsKKworICAgIC8vIFRlc3Qgb3Zl
ciwgY2xlYW51cCB0aW1lLgorICAgIGZpcnN0TGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDAp
OworICAgIHNlY29uZExheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKKyAgICBmaXJzdExh
eWVyVHJlZUhvc3QuY2xlYXIoKTsKKyAgICBzZWNvbmRMYXllclRyZWVIb3N0LmNsZWFyKCk7Cisg
ICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKworVEVTVChMYXllckNocm9taXVtTGF5
ZXJUcmVlSG9zdFRlc3QsIHJlcGxhY2VNYXNrQW5kUmVwbGljYUxheWVyKQoreworICAgIFdlYkNv
bXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bWFzayA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcmVwbGljYSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbWFza0NoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiByZXBsaWNhQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1hc2tSZXBsYWNlbWVudCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVwbGljYVJlcGxhY2Vt
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworCisgICAgcGFyZW50LT5zZXRNYXNrTGF5
ZXIobWFzay5nZXQoKSk7CisgICAgcGFyZW50LT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYS5nZXQo
KSk7CisgICAgbWFzay0+YWRkQ2hpbGQobWFza0NoaWxkKTsKKyAgICByZXBsaWNhLT5hZGRDaGls
ZChyZXBsaWNhQ2hpbGQpOworCisgICAgUmVmUHRyPEZha2VDQ0xheWVyVHJlZUhvc3Q+IGxheWVy
VHJlZUhvc3QgPSBGYWtlQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoKTsKKyAgICBsYXllclRyZWVI
b3N0LT5zZXRSb290TGF5ZXIocGFyZW50LmdldCgpKTsKKworICAgIGFzc2VydExheWVyVHJlZUhv
c3RNYXRjaGVzRm9yU3VidHJlZShwYXJlbnQuZ2V0KCksIGxheWVyVHJlZUhvc3QuZ2V0KCkpOwor
CisgICAgLy8gUmVwbGFjaW5nIHRoZSBtYXNrIHNob3VsZCBjbGVhciBvdXQgdGhlIG9sZCBtYXNr
J3Mgc3VidHJlZSdzIGhvc3QgcG9pbnRlcnMuCisgICAgcGFyZW50LT5zZXRNYXNrTGF5ZXIobWFz
a1JlcGxhY2VtZW50LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWFzay0+bGF5ZXJUcmVlSG9z
dCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbWFza0NoaWxkLT5sYXllclRyZWVIb3N0KCkpOworCisg
ICAgLy8gU2FtZSBmb3IgcmVwbGFjaW5nIGEgcmVwbGljYSBsYXllci4KKyAgICBwYXJlbnQtPnNl
dFJlcGxpY2FMYXllcihyZXBsaWNhUmVwbGFjZW1lbnQuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgw
LCByZXBsaWNhLT5sYXllclRyZWVIb3N0KCkpOworICAgIEVYUEVDVF9FUSgwLCByZXBsaWNhQ2hp
bGQtPmxheWVyVHJlZUhvc3QoKSk7CisKKyAgICAvLyBUZXN0IG92ZXIsIGNsZWFudXAgdGltZS4K
KyAgICBsYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CisgICAgbGF5ZXJUcmVlSG9zdC5j
bGVhcigpOworICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZDc4NjU3MDQ2ZWU0ZmE3ZjEyZWFlMDNiMTRiNGE5NWUxYzZmZGNlZC4uZmU5
Mjc4Yzg3MzRiZTA5NTc5NzRiNGMwY2RhMWRjZWY2MDNkNDFlMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDExLTEyLTE5ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBTZXQgdGhlIENDTGF5ZXJUcmVlSG9zdCBwb2ludGVyIG9uIExh
eWVyQ2hyb21pdW0gaW5zdGFuY2VzIGVhZ2VybHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0
aCBSdXNzZWxsLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlv
bnMudHh0OgorCiAyMDExLTEyLTE5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlYmFzZWxpbmUgcmVzdWx0cyBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NDg3MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IDc3OTBjYjkxMDYwMGIyZTgwZDEzZmQ5
ZDljNGNiNjNjMDFmYzQ2ZmQuLjVjYWE2N2MwMGRhZWU2MDkwMzI5ZjVjNzRlMzA4NjA2NzU5MDFj
ODkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKQEAgLTI4NDMsNiArMjg0MywxMCBAQCBCVUdXSzQ5NjI5IFNLSVAgOiBwbGF0
Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9sb3RzLW9mLWltZy1sYXllcnMuaHRtbCA9IFBBU1MK
IEJVR1dLNDk2MjkgU0tJUCA6IHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2xvdHMtb2Yt
aW1nLWxheWVycy13aXRoLW9wYWNpdHkuaHRtbCA9IFBBU1MKIEJVR1dLNDk2MjkgU0tJUCA6IGNv
bXBvc2l0aW5nL2lmcmFtZXMvcGFnZS1jYWNoZS1sYXllci10cmVlLmh0bWwgPSBQQVNTCiAKKy8v
IE5lZWRzIGFuIGltYWdlLW9ubHkgcmViYXNlbGluZSBzaW5jZSB3ZSBubyBsb25nZXIgaW52YWxp
ZGF0ZSB3aGVuIHNldHRpbmcgdGhlIHJlcGxpY2EgbGF5ZXIKKy8vIHRvIE5VTEwgd2hlbiBpdCBh
bHJlYWR5IHdhcyBOVUxMIHNvIHdlIGhhdmUgbm8gZGFtYWdlIGF0IHRoZSBlbmQgb2YgdGhlIHRl
c3QuCitCVUdKQU1FU1IgOiBjb21wb3NpdGluZy9pZnJhbWVzL2lmcmFtZS1jb250ZW50LWZsaXBw
aW5nLmh0bWwgPSBJTUFHRQorCiBCVUdOT05FIFNMT1cgV0lOIERFQlVHIEdQVSA6IGZhc3QvY2Fu
dmFzL2NhbnZhcy1nZXRJbWFnZURhdGEuaHRtbCA9IFBBU1MKIAogLy8gQWNjZWxlcmF0ZWQgMmQg
Zm9yIG1hYyBpc24ndCBzdXBwb3J0ZWQgeWV0LCBzbyBTS0lQIHRoaXMgdGVzdCBmb3Igbm93Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>