<?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>66981</bug_id>
          
          <creation_ts>2011-08-25 14:29:12 -0700</creation_ts>
          <short_desc>[Chromium] Possible leak of LayerRendererChromium</short_desc>
          <delta_ts>2011-08-26 17:39:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Satish Sampath">satish</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>457138</commentid>
    <comment_count>0</comment_count>
    <who name="Satish Sampath">satish</who>
    <bug_when>2011-08-25 14:29:12 -0700</bug_when>
    <thetext>Opening and closing multiple tabs in the same process with hardware acceleration enabled seems to be causing an unbounded increase in the process&apos;s memory usage. It looks like LayerRendererChromium objects are staying alive forever after the page is closed, possibly due to a circular reference.

Steps to reproduce:
1. Run chrome with --force-compositing-mode argument
2. open chrome:memory
3. open build.webkit.org in 2 tabs, check that they appear under the same process in chrome:memory
4. close one of them, then open the same site again
5. repeat (4) multiple times

Refresh chrome:memory and the GPU process should show a much higher memory usage than in (3)

Also tried by forcing a GC and saw no drop in memory used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457139</commentid>
    <comment_count>1</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 14:29:49 -0700</bug_when>
    <thetext>Yeah we definitely have developed a few refcount cycles :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457162</commentid>
    <comment_count>2</comment_count>
      <attachid>105254</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 15:00:01 -0700</bug_when>
    <thetext>Created attachment 105254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457163</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 15:00:33 -0700</bug_when>
    <thetext>With this patch the LayerRendererChromium gets freed, but I&apos;m pretty sure I&apos;m still leaking every non-root CCLayerImpl.  Will try to figure out how to confirm or deny that.

This impacts m14.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457174</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 15:21:39 -0700</bug_when>
    <thetext>~LayerRendererChromium() has actually been crashy for a while, since it doesn&apos;t explicitly clear out all of its programs before dropping it reference to the GraphicsContext3D, and our ProgramBindings only have weak references to their GraphicsContext3D and not RefPtr&lt;&gt;s.  It&apos;s a good thing that destructor has been dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457181</commentid>
    <comment_count>5</comment_count>
      <attachid>105261</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 15:28:07 -0700</bug_when>
    <thetext>Created attachment 105261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457209</commentid>
    <comment_count>6</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-25 16:03:22 -0700</bug_when>
    <thetext>Looks sane to me. We should definitely eradicate refptrs from the compositor, entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457218</commentid>
    <comment_count>7</comment_count>
      <attachid>105261</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-25 16:10:57 -0700</bug_when>
    <thetext>Comment on attachment 105261
Patch

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

Also, we should probably fix the destruction of ProgramBinding to not depend on a naked pointer, but that can happen in another patch.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:184
&gt;  void CCLayerTreeHost::setRootLayer(GraphicsLayer* layer)
&gt;      if (layer) {
&gt;          m_nonCompositedContentHost-&gt;graphicsLayer()-&gt;addChild(layer);
&gt;          layer-&gt;platformLayer()-&gt;setLayerRenderer(m_layerRenderer.get());
&gt; -    }
&gt; +    } else
&gt; +        layerRenderer()-&gt;clearRootCCLayerImpl();

Are we guaranteed to get a setRootLayer(0) before ~CCLayerTreeHost? It seems like it would be safer to call clearCCRootLayer in the CCLayerTreeHost destructor, because the CCLayerTreeHost (for now) is the LayerRendererChromium owner anyway.  When that changes, we can move that call to the CCLayerTreeHostImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457222</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 16:15:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 105261 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105261&amp;action=review
&gt; 
&gt; Also, we should probably fix the destruction of ProgramBinding to not depend on a naked pointer, but that can happen in another patch.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:184
&gt; &gt;  void CCLayerTreeHost::setRootLayer(GraphicsLayer* layer)
&gt; &gt;      if (layer) {
&gt; &gt;          m_nonCompositedContentHost-&gt;graphicsLayer()-&gt;addChild(layer);
&gt; &gt;          layer-&gt;platformLayer()-&gt;setLayerRenderer(m_layerRenderer.get());
&gt; &gt; -    }
&gt; &gt; +    } else
&gt; &gt; +        layerRenderer()-&gt;clearRootCCLayerImpl();
&gt; 
&gt; Are we guaranteed to get a setRootLayer(0) before ~CCLayerTreeHost?

We are, by way of http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp&amp;q=detachRootLAyer&amp;exact_package=chromium&amp;l=1794

&gt; It seems like it would be safer to call clearCCRootLayer in the CCLayerTreeHost destructor, because the CCLayerTreeHost (for now) is the LayerRendererChromium owner anyway.  When that changes, we can move that call to the CCLayerTreeHostImpl.

CCLayerTreeHost is RefPtr&lt;&gt; by WebViewImpl, which Nat points out is also wrong (it should be OwnPtr&lt;&gt;).  I&apos;m a little resistent to put it in ~CCLayerTreeHost because I think we&apos;ll still leak when switching from compositing to non-composited mode but not killing the WebViewImpl (I&apos;ll check that now).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457233</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 16:20:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; It seems like it would be safer to call clearCCRootLayer in the CCLayerTreeHost destructor, because the CCLayerTreeHost (for now) is the LayerRendererChromium owner anyway.  When that changes, we can move that call to the CCLayerTreeHostImpl.
&gt; 
&gt; CCLayerTreeHost is RefPtr&lt;&gt; by WebViewImpl, which Nat points out is also wrong (it should be OwnPtr&lt;&gt;).  I&apos;m a little resistent to put it in ~CCLayerTreeHost because I think we&apos;ll still leak when switching from compositing to non-composited mode but not killing the WebViewImpl (I&apos;ll check that now).

Yeah, if I wait for ~CCLayerTreeHost() then the layers and all their textures and everything stick around until the WebViewImpl is destroyed.  Not so hot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457237</commentid>
    <comment_count>10</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-25 16:23:19 -0700</bug_when>
    <thetext>Shoudl we add a LayerTreeHost::Destroy? And call it in the right places on WebView?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457240</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-25 16:24:25 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 105261 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105261&amp;action=review
&gt; &gt; 
&gt; &gt; Also, we should probably fix the destruction of ProgramBinding to not depend on a naked pointer, but that can happen in another patch.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:184
&gt; &gt; &gt;  void CCLayerTreeHost::setRootLayer(GraphicsLayer* layer)
&gt; &gt; &gt;      if (layer) {
&gt; &gt; &gt;          m_nonCompositedContentHost-&gt;graphicsLayer()-&gt;addChild(layer);
&gt; &gt; &gt;          layer-&gt;platformLayer()-&gt;setLayerRenderer(m_layerRenderer.get());
&gt; &gt; &gt; -    }
&gt; &gt; &gt; +    } else
&gt; &gt; &gt; +        layerRenderer()-&gt;clearRootCCLayerImpl();
&gt; &gt; 
&gt; &gt; Are we guaranteed to get a setRootLayer(0) before ~CCLayerTreeHost?
&gt; 
&gt; We are, by way of http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp&amp;q=detachRootLAyer&amp;exact_package=chromium&amp;l=1794

Ok, so we&apos;re not intrinsically safe, just safe by the conventions of the caller.

&gt; &gt; It seems like it would be safer to call clearCCRootLayer in the CCLayerTreeHost destructor, because the CCLayerTreeHost (for now) is the LayerRendererChromium owner anyway.  When that changes, we can move that call to the CCLayerTreeHostImpl.
&gt; 
&gt; CCLayerTreeHost is RefPtr&lt;&gt; by WebViewImpl, which Nat points out is also wrong (it should be OwnPtr&lt;&gt;).  I&apos;m a little resistent to put it in ~CCLayerTreeHost because I think we&apos;ll still leak when switching from compositing to non-composited mode but not killing the WebViewImpl (I&apos;ll check that now).

That&apos;s totally valid.  We&apos;d keep around the LRC once switching back to non-composited mode but before the WebViewImpl was destroyed.

This call will move to the CCLayerTreeHostImpl destructor soon enough when the ownership of LayerRendererChromium changes, so this is fine as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457312</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 18:06:02 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (From update of attachment 105261 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105261&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Also, we should probably fix the destruction of ProgramBinding to not depend on a naked pointer, but that can happen in another patch.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:184
&gt; &gt; &gt; &gt;  void CCLayerTreeHost::setRootLayer(GraphicsLayer* layer)
&gt; &gt; &gt; &gt;      if (layer) {
&gt; &gt; &gt; &gt;          m_nonCompositedContentHost-&gt;graphicsLayer()-&gt;addChild(layer);
&gt; &gt; &gt; &gt;          layer-&gt;platformLayer()-&gt;setLayerRenderer(m_layerRenderer.get());
&gt; &gt; &gt; &gt; -    }
&gt; &gt; &gt; &gt; +    } else
&gt; &gt; &gt; &gt; +        layerRenderer()-&gt;clearRootCCLayerImpl();
&gt; &gt; &gt; 
&gt; &gt; &gt; Are we guaranteed to get a setRootLayer(0) before ~CCLayerTreeHost?
&gt; &gt; 
&gt; &gt; We are, by way of http://google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp&amp;q=detachRootLAyer&amp;exact_package=chromium&amp;l=1794
&gt; 
&gt; Ok, so we&apos;re not intrinsically safe, just safe by the conventions of the caller.

Yes.  The detach behavior is also required by the CoreAnimation backend so I don&apos;t feel too bad depending on it.

&gt; 
&gt; &gt; &gt; It seems like it would be safer to call clearCCRootLayer in the CCLayerTreeHost destructor, because the CCLayerTreeHost (for now) is the LayerRendererChromium owner anyway.  When that changes, we can move that call to the CCLayerTreeHostImpl.
&gt; &gt; 
&gt; &gt; CCLayerTreeHost is RefPtr&lt;&gt; by WebViewImpl, which Nat points out is also wrong (it should be OwnPtr&lt;&gt;).  I&apos;m a little resistent to put it in ~CCLayerTreeHost because I think we&apos;ll still leak when switching from compositing to non-composited mode but not killing the WebViewImpl (I&apos;ll check that now).
&gt; 
&gt; That&apos;s totally valid.  We&apos;d keep around the LRC once switching back to non-composited mode but before the WebViewImpl was destroyed.
&gt; 
&gt; This call will move to the CCLayerTreeHostImpl destructor soon enough when the ownership of LayerRendererChromium changes, so this is fine as-is.

Right - I hope :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457319</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 18:15:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Shoudl we add a LayerTreeHost::Destroy? And call it in the right places on WebView?

I don&apos;t want to destroy the LTH or the LayerRendererChromium any sooner than they are now, I think it&apos;s perfectly fine to hold the programs, etc, alive when compositing is disabled until the WebViewImpl goes away since it&apos;s pretty common for a page to flip in and out of compositing mode.  What I want is to make sure that all of the layers (and their associated textures, buffers, etc) go away as soon as compositing is disabled, because even if compositing is later re-enabled we have to reupload everything anyway because we have no way of knowing what is still valid.  So I think the destruction path for LayerTreeHost is fine right now as far as WebViewImpl goes, it&apos;s just the teardown for the layers inside of it (which happens to hold LayerRendererChromium alive as well in the current design, but leaking just the layers is still really bad).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457654</commentid>
    <comment_count>14</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-26 11:05:47 -0700</bug_when>
    <thetext>This patch unofficially looks good to me.  I&apos;ve verified that if I open poster circle, duplicate tabs, then close those tabs, the GPU process memory usage shrinks back close to where it started.  Without this patch, the memory doesn&apos;t shrink at all.

(It looks like the GPU process memory still grows by about ~1MB per poster circle tab duplicate/close, which probably deserves more investigation.  However, this patch is still a huge win.)

Can I get an official review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457836</commentid>
    <comment_count>15</comment_count>
      <attachid>105261</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-26 16:20:54 -0700</bug_when>
    <thetext>Comment on attachment 105261
Patch

Looks good to me. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457869</commentid>
    <comment_count>16</comment_count>
      <attachid>105261</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 17:39:03 -0700</bug_when>
    <thetext>Comment on attachment 105261
Patch

Clearing flags on attachment: 105261

Committed r93927: &lt;http://trac.webkit.org/changeset/93927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457870</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 17:39:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105254</attachid>
            <date>2011-08-25 15:00:01 -0700</date>
            <delta_ts>2011-08-25 15:28:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66981-20110825150000.patch</filename>
            <type>text/plain</type>
            <size>4284</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjFlYTgzNzNlM2Y2Y2I2
MjYzN2NlYTA3ZjQxYmE5NzEyOGFkMjQ5Li45MzM1MzhlNjM2ZDVhYjg3OTRmMzViMmQwYWUzYThh
ZGUxZjM1ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMjUgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFBv
c3NpYmxlIGxlYWsgb2YgTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njk4MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cGxpY2l0bHkgY2xlYXIgb3V0IHRoZSByb290
IENDTGF5ZXJJbXBsIGFuZCBSZW5kZXJTdXJmYWNlcyB0byBhdm9pZCByZWZlcmVuY2UgY291bnQg
Y3ljbGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6fkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisKIDIwMTEt
MDgtMjQgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggODJhM2JmMzcyYTQwNDE1ZmVjNDQ5MzUwMDczZTczNzFmMzA1MDQ2MC4uMTQ2M2RmOTFl
YjJhN2ZiZmE3MmM3YjI4NTQxNmUwMjk1NDYxNTY1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xMDIsMTIgKzEwMiwxOCBAQCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAK
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6fkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgpCiB7Ci0gICAg
aWYgKG1fbGF5ZXIpCisgICAgaWYgKG1fbGF5ZXIpIHsKICAgICAgICAgbV9sYXllci0+c2V0T3du
ZXIoMCk7Ci0gICAgaWYgKG1fY29udGVudHNMYXllcikKKyAgICAgICAgbV9sYXllci0+Y2xlYXJS
ZW5kZXJTdXJmYWNlKCk7CisgICAgfQorICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKICAgICAg
ICAgbV9jb250ZW50c0xheWVyLT5zZXRPd25lcigwKTsKLSAgICBpZiAobV90cmFuc2Zvcm1MYXll
cikKKyAgICAgICAgbV9jb250ZW50c0xheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICB9
CisgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsKICAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+
c2V0T3duZXIoMCk7CisgICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFj
ZSgpOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5hbWUoY29u
c3QgU3RyaW5nJiBpbk5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBjMjE0NmZjZTIyYjMzYjdjMzA4NmVjODgwMjBhNWFmODhlMmFjM2VhLi5lMTdjZTM0MzA0
ZGExMzRmMDEzZDdjMTBkN2E2YjEzNWY3ZWI2YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTUwNyw2ICs1MDcsMTMgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp+TGF5ZXJSZW5kZXJlckNocm9taXVtKCkKICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwog
fQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwoKQor
eworICAgIGlmIChtX3Jvb3RDQ0xheWVySW1wbCkKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwt
PmNsZWFyUmVuZGVyU3VyZmFjZSgpOworICAgIG1fcm9vdENDTGF5ZXJJbXBsLmNsZWFyKCk7Cit9
CisKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQog
ewogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCmluZGV4IDk1NThmYTFlNjBhMDQwN2FmMTlhN2M4ZmI1MzYxODJkMjg4YTEzYzQuLjMx
Y2Q2OThhMjY2MzEzZjBiNmJhMDMwOWM1N2YxZTAwODJkOTI4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKKyAgICB2b2lkIGNs
ZWFyUm9vdENDTGF5ZXJJbXBsKCk7CiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRz
IHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBl
eGlzdHMuCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDk3ZTc0MmNjMTgyODI3OGM2YjUyZTI5NmI4
MGRlOTdiNGFhMTgwNWEuLjM0Yzc4Zjg1Mzg3OGE1ZWUyNzk0NTRlNWJlNDkzZjE1MmVlYTU5MGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTgwLDcgKzE4MCw4IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAg
ICAgaWYgKGxheWVyKSB7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFw
aGljc0xheWVyKCktPmFkZENoaWxkKGxheWVyKTsKICAgICAgICAgbGF5ZXItPnBsYXRmb3JtTGF5
ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwotICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5jbGVhclJvb3RDQ0xheWVySW1wbCgp
OwogCiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105261</attachid>
            <date>2011-08-25 15:28:07 -0700</date>
            <delta_ts>2011-08-26 17:39:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66981-20110825152806.patch</filename>
            <type>text/plain</type>
            <size>5982</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3NTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjFlYTgzNzNlM2Y2Y2I2
MjYzN2NlYTA3ZjQxYmE5NzEyOGFkMjQ5Li40YmM5Nzc2NDZiNzg5MmVhZmVkNjA1ZDY0NzBlY2I2
NWU2ODc2OGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDgtMjUgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFBv
c3NpYmxlIGxlYWsgb2YgTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njk4MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIG51bWJlciBvZiByZWZlcmVuY2UgY3lj
bGUgbGVha3MgdGhhdCBwcmV2ZW50IExheWVyUmVuZGVyZXJDaHJvbWl1bXMgZnJvbSBiZWluZyBk
ZXN0cm95ZWQgd2hlbiBhIHRhYiBpcworICAgICAgICBjbG9zZWQuCisKKyAgICAgICAgTm90IHBv
c3NpYmxlIHRvIHdyaXRlIGEgbGF5b3V0IHRlc3Qgd2hlcmUgYW4gZW50aXJlIFdlYlZpZXcgZ29l
cyBhd2F5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6fkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1
cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJv
b3RDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNsZWFudXBTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorCiAyMDExLTA4LTI0ICBFcmljIFVocmhhbmUg
IDxlcmljdUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDgyYTNiZjM3MmE0MDQx
NWZlYzQ0OTM1MDA3M2U3MzcxZjMwNTA0NjAuLjE0NjNkZjkxZWIyYTdmYmZhNzJjN2IyODU0MTZl
MDI5NTQ2MTU2NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAt
MTAyLDEyICsxMDIsMTggQEAgR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hy
b21pdW0oR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogCiBHcmFwaGljc0xheWVyQ2hyb21p
dW06On5HcmFwaGljc0xheWVyQ2hyb21pdW0oKQogewotICAgIGlmIChtX2xheWVyKQorICAgIGlm
IChtX2xheWVyKSB7CiAgICAgICAgIG1fbGF5ZXItPnNldE93bmVyKDApOwotICAgIGlmIChtX2Nv
bnRlbnRzTGF5ZXIpCisgICAgICAgIG1fbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOworICAg
IH0KKyAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CiAgICAgICAgIG1fY29udGVudHNMYXllci0+
c2V0T3duZXIoMCk7Ci0gICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpCisgICAgICAgIG1fY29udGVu
dHNMYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgfQorICAgIGlmIChtX3RyYW5zZm9y
bUxheWVyKSB7CiAgICAgICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldE93bmVyKDApOworICAgICAg
ICBtX3RyYW5zZm9ybUxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICB9CiB9CiAKIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgaW5OYW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYzIxNDZmY2UyMmIzM2I3
YzMwODZlYzg4MDIwYTVhZjg4ZTJhYzNlYS4uOGYxMTdjOTEwNThhZGZhYzgzMGU1NzE0MmJkMDE3
ZWZkNzZiOWY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01
MDcsNiArNTA3LDIwIEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJv
bWl1bSgpCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIH0KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKEND
TGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xh
eWVySW1wbFJlY3Vyc2l2ZShsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAgbGF5ZXIt
PmNsZWFyUmVuZGVyU3VyZmFjZSgpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y2xlYXJSb290Q0NMYXllckltcGwoKQoreworICAgIGlmIChtX3Jvb3RDQ0xheWVySW1wbCkKKyAg
ICAgICAgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUobV9yb290Q0NM
YXllckltcGwuZ2V0KCkpOworICAgIG1fcm9vdENDTGF5ZXJJbXBsLmNsZWFyKCk7Cit9CisKIEdy
YXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQogewogICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CkBAIC0xMjQ4LDE1ICsxMjYyLDE3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAKICAgICBtX3NoYXJl
ZEdlb21ldHJ5LmNsZWFyKCk7CiAgICAgbV9ib3JkZXJQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9j
YW52YXNMYXllclByb2dyYW0uY2xlYXIoKTsKICAgICBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS5j
bGVhcigpOwotICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV92aWRl
b0xheWVyWVVWUHJvZ3JhbS5jbGVhcigpOwotICAgIG1fcGx1Z2luTGF5ZXJQcm9ncmFtLmNsZWFy
KCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbS5jbGVhcigpOwotICAgIG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtLmNsZWFyKCk7CiAgICAgbV90aWxlclByb2dyYW0uY2xlYXIoKTsKICAg
ICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUuY2xlYXIoKTsKKyAgICBtX3RpbGVyUHJvZ3JhbUFBLmNs
ZWFyKCk7CisgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEuY2xlYXIoKTsKKyAgICBtX2NhbnZh
c0xheWVyUHJvZ3JhbS5jbGVhcigpOworICAgIG1fcGx1Z2luTGF5ZXJQcm9ncmFtLmNsZWFyKCk7
CisgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0uY2xlYXIoKTsKKyAgICBtX3JlbmRlclN1
cmZhY2VQcm9ncmFtLmNsZWFyKCk7CisgICAgbV92aWRlb0xheWVyUkdCQVByb2dyYW0uY2xlYXIo
KTsKKyAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLmNsZWFyKCk7CiAgICAgaWYgKG1fb2Zmc2Ny
ZWVuRnJhbWVidWZmZXJJZCkKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5kZWxldGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA5NTU4ZmExZTYwYTA0MDdhZjE5YTdjOGZi
NTM2MTgyZDI4OGExM2M0Li5lMmQ5ZWViNTdhOWRhYzdiNTI3Y2NhMDkwN2VmZjEwNzVkMzIyNzU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTU1LDYgKzE1NSw3IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXll
ckxpc3Q7CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJM
aXN0OwogCisgICAgdm9pZCBjbGVhclJvb3RDQ0xheWVySW1wbCgpOwogcHJpdmF0ZToKICAgICAv
LyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGUgQ0NMYXllclRyZWVIb3N0SW1w
bCB3aGVuIHRoYXQgY2xhc3MgZXhpc3RzLgogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290
Q0NMYXllckltcGw7CkBAIC0xOTAsNiArMTkxLDggQEAgcHJpdmF0ZToKICAgICBib29sIGluaXRp
YWxpemVTaGFyZWRPYmplY3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwog
CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xh
eWVySW1wbCopOworCiAgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIENDTGF5ZXJUcmVlSG9z
dEltcGwKICAgICBDQ0xheWVyVHJlZUhvc3QqIG1fb3duZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IDk3ZTc0MmNjMTgyODI3OGM2YjUyZTI5NmI4MGRlOTdiNGFhMTgw
NWEuLjM0Yzc4Zjg1Mzg3OGE1ZWUyNzk0NTRlNWJlNDkzZjE1MmVlYTU5MGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTgwLDcgKzE4MCw4IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpzZXRSb290TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgaWYgKGxheWVy
KSB7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCkt
PmFkZENoaWxkKGxheWVyKTsKICAgICAgICAgbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0TGF5
ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwotICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgbGF5ZXJSZW5kZXJlcigpLT5jbGVhclJvb3RDQ0xheWVySW1wbCgpOwogCiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>