<?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>94903</bug_id>
          
          <creation_ts>2012-08-23 23:15:08 -0700</creation_ts>
          <short_desc>[chromium] Fix a bug where CCThreadProxy::canDraw() gets stuck at false on tab switch</short_desc>
          <delta_ts>2012-08-26 19:49:17 -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>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Christopher Cameron">ccameron</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>703794</commentid>
    <comment_count>0</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-23 23:15:08 -0700</bug_when>
    <thetext>[chromium] Fix a bug where CCThreadProxy::canDraw() gets stuck at false on tab switch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703833</commentid>
    <comment_count>1</comment_count>
      <attachid>160346</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-24 00:01:17 -0700</bug_when>
    <thetext>Created attachment 160346
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703837</commentid>
    <comment_count>2</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-24 00:07:02 -0700</bug_when>
    <thetext>Belated description, CCing people related to this area.

Suppose the impl thread deletes all textures via releaseContentsTextures().  The impl thread will not be able to draw again until resetContentsTexturesPurged() is called in scheduledActionCommit().  When deleting the textures, the function releaseContentsTextures() calls setNeedsCommitOnImplThread() to ensure that a commit will come along to allow drawing again.  If this commit is aborted, then the page will not draw until a commit is scheduled, which may be forever.

The fix in the patch makes beginFrameAbortedOnImplThread() trigger a commit if there is an outstanding purge, so that drawing will be re-enabled in scheduledActionCommit().

The patch also re-arranges some things in preparation for a change I&apos;m working on to allow purging only some of the textures at a time -- at first I thought that this issue (which manifests in a newly-switched-to-tab&apos;s contents just not appearing) was a bug in that patch.  LMK if you&apos;d prefer a smaller diff (as, for instance, the ability to ACK a deletion in abort may not make sense in the smaller context).

I tested the patch with CCLayerTreeHostTestEvictTextures.runMultiThread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704104</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-24 08:01:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Suppose the impl thread deletes all textures via releaseContentsTextures().  The impl thread will not be able to draw again until resetContentsTexturesPurged() is called in scheduledActionCommit().  When deleting the textures, the function releaseContentsTextures() calls setNeedsCommitOnImplThread() to ensure that a commit will come along to allow drawing again.  If this commit is aborted, then the page will not draw until a commit is scheduled, which may be forever.

What about setting needs-commit when the compositor becomes visible? beginFrameAbort only happens when not visible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704145</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-24 09:16:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Suppose the impl thread deletes all textures via releaseContentsTextures().  The impl thread will not be able to draw again until resetContentsTexturesPurged() is called in scheduledActionCommit().  When deleting the textures, the function releaseContentsTextures() calls setNeedsCommitOnImplThread() to ensure that a commit will come along to allow drawing again.  If this commit is aborted, then the page will not draw until a commit is scheduled, which may be forever.
&gt; 
&gt; What about setting needs-commit when the compositor becomes visible? beginFrameAbort only happens when not visible.

Right, and that should already happen (or does it not under certain circumstances? That&apos;s probably what we want to fix).
If you force a commit when we&apos;re invisible, then you&apos;ll reallocate all the textures, defeating the purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704150</commentid>
    <comment_count>5</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-24 09:24:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; Suppose the impl thread deletes all textures via releaseContentsTextures().  The impl thread will not be able to draw again until resetContentsTexturesPurged() is called in scheduledActionCommit().  When deleting the textures, the function releaseContentsTextures() calls setNeedsCommitOnImplThread() to ensure that a commit will come along to allow drawing again.  If this commit is aborted, then the page will not draw until a commit is scheduled, which may be forever.
&gt; &gt; 
&gt; &gt; What about setting needs-commit when the compositor becomes visible? beginFrameAbort only happens when not visible.
&gt; 
&gt; Right, and that should already happen (or does it not under certain circumstances? That&apos;s probably what we want to fix).
&gt; If you force a commit when we&apos;re invisible, then you&apos;ll reallocate all the textures, defeating the purpose.

The scheduler doesn&apos;t do commits while non-visible so that shouldn&apos;t be a problem. I think we schedule a commit when we go non-visible, but I&apos;m having trouble finding the place where we do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704182</commentid>
    <comment_count>6</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-24 09:53:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; If you force a commit when we&apos;re invisible, then you&apos;ll reallocate all the textures, defeating the purpose.
&gt; 
&gt; The scheduler doesn&apos;t do commits while non-visible so that shouldn&apos;t be a problem. I think we schedule a commit when we go non-visible, but I&apos;m having trouble finding the place where we do.

From my manual testing it does appear that a commit requested by the impl thread while not visible did not actually occur until the tab became visible.

Would it be preferable for setNeedsCommit to mean &quot;a commit needs to complete&quot;, rather than &quot;a commit needs to start&quot;, so that commits that are aborted because the tab went invisible are automatically rescheduled when next the tab becomes visible (if it ever does)?  Are there circumstances where that is undesirable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704188</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-24 10:01:47 -0700</bug_when>
    <thetext>I do agree conceptually that sounds like a reasonable behaviour. I am wondering if you have a test case that demonstrates the bug this is trying to fix though? For single thread or threaded mode?

But, if so, an easy way to make sure a commit happens when aborted might be to just have CCSchedulerStateMachine::beginFrameAborted set m_needsCommit = true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704198</commentid>
    <comment_count>8</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-24 10:09:21 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I do agree conceptually that sounds like a reasonable behaviour. I am wondering if you have a test case that demonstrates the bug this is trying to fix though? For single thread or threaded mode?

I have a manual test case -- open 2 expensive tabs (lots of 3D CSS, etc) and hold ctrl+pagedown.  If an abort happens on just one tab, and when you release ctrl+pagedown you are at that tab, then you will see the other tab&apos;s contents (and canDraw() will be spinning at false).

I didn&apos;t try this without threaded compositing.

&gt; But, if so, an easy way to make sure a commit happens when aborted might be to just have CCSchedulerStateMachine::beginFrameAborted set m_needsCommit = true?

I&apos;ll go with that instead, unless we can think of any reasons that it is undesirable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704214</commentid>
    <comment_count>9</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-24 10:23:10 -0700</bug_when>
    <thetext>As long as we don&apos;t keep posting tasks to beginFrame that get Aborted, it sounds like a reasonable suggestion.

Can we add a test to check that behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704314</commentid>
    <comment_count>10</comment_count>
      <attachid>160469</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-24 12:01:11 -0700</bug_when>
    <thetext>Created attachment 160469
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704317</commentid>
    <comment_count>11</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-24 12:03:29 -0700</bug_when>
    <thetext>Chagned th(In reply to comment #9)
&gt; As long as we don&apos;t keep posting tasks to beginFrame that get Aborted, it sounds like a reasonable suggestion.
&gt; 
&gt; Can we add a test to check that behavior?

We actually already have a test for this behavior -- TestGoesInvisibleBeforeBeginFrameCompletes.  I&apos;ve updated this to set visible again and verify that when we do this we are asked to start a frame and then begin a commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704332</commentid>
    <comment_count>12</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-24 12:25:55 -0700</bug_when>
    <thetext>Cool, I like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704336</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-24 12:30:08 -0700</bug_when>
    <thetext>Ditto!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704341</commentid>
    <comment_count>14</comment_count>
      <attachid>160469</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-24 12:32:06 -0700</bug_when>
    <thetext>Comment on attachment 160469
Patch

R=me, great catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704904</commentid>
    <comment_count>15</comment_count>
      <attachid>160469</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-26 16:09:37 -0700</bug_when>
    <thetext>Comment on attachment 160469
Patch

Rejecting attachment 160469 from commit-queue.

ccameron@chromium.org does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704922</commentid>
    <comment_count>16</comment_count>
      <attachid>160469</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-26 19:49:14 -0700</bug_when>
    <thetext>Comment on attachment 160469
Patch

Clearing flags on attachment: 160469

Committed r126719: &lt;http://trac.webkit.org/changeset/126719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704923</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-26 19:49:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160346</attachid>
            <date>2012-08-24 00:01:17 -0700</date>
            <delta_ts>2012-08-24 12:01:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94903-20120824000113.patch</filename>
            <type>text/plain</type>
            <size>8205</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFmOGEyOGVkYTM3ZGNj
ODc5NjQ1MDg2ZWUzM2Y5YTVmYzI1MGMxYS4uNjA3OWJiODY2Zjk4MzU0YjU3Zjc2MjQ4MjcxZDlj
YmZkZmM3MzBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA4LTIzICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gRml4IGEgYnVnIHdoZXJlIENDVGhyZWFkUHJveHk6OmNhbkRyYXcoKSBnZXRzIHN0dWNr
IGF0IGZhbHNlIG9uIHRhYiBzd2l0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk0OTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3VwcG9zZSB0aGUgaW1wbCB0aHJlYWQgZGVsZXRlcyBhbGwgdGV4dHVy
ZXMgdmlhCisgICAgICAgIHJlbGVhc2VDb250ZW50c1RleHR1cmVzKCkuICBUaGUgaW1wbCB0aHJl
YWQgd2lsbCBub3QgYmUgYWJsZSB0byBkcmF3CisgICAgICAgIGFnYWluIHVudGlsIHJlc2V0Q29u
dGVudHNUZXh0dXJlc1B1cmdlZCgpIGlzIGNhbGxlZCBpbgorICAgICAgICBzY2hlZHVsZWRBY3Rp
b25Db21taXQoKS4gIFdoZW4gZGVsZXRpbmcgdGhlIHRleHR1cmVzLCB0aGUgZnVuY3Rpb24KKyAg
ICAgICAgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKSBjYWxscyBzZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpIHRvIGVuc3VyZQorICAgICAgICB0aGF0IGEgY29tbWl0IHdpbGwgY29tZSBhbG9u
ZyB0byBhbGxvdyBkcmF3aW5nIGFnYWluLiAgSWYgdGhpcyBjb21taXQKKyAgICAgICAgaXMgYWJv
cnRlZCwgdGhlbiB0aGUgcGFnZSB3aWxsIG5vdCBkcmF3IHVudGlsIGEgY29tbWl0IGlzIHNjaGVk
dWxlZCwKKyAgICAgICAgd2hpY2ggbWF5IGJlIGZvcmV2ZXIuCisKKyAgICAgICAgTWFrZSBiZWdp
bkZyYW1lQWJvcnRlZE9uSW1wbFRocmVhZCgpIHRyaWdnZXIgYSBjb21taXQgaWYgdGhlcmUgaXMg
YW4KKyAgICAgICAgb3V0c3RhbmRpbmcgcHVyZ2UsIHNvIHRoYXQgZHJhd2luZyB3aWxsIGJlIHJl
LWVuYWJsZWQgaW4KKyAgICAgICAgc2NoZWR1bGVkQWN0aW9uQ29tbWl0KCkuCisKKyAgICAgICAg
SGFuZGxlIHRleHR1cmUgZGVsZXRpb24gYW5kIHNlbmQgdGhlIGFja25vd2xlZGdlbWVudCB0byB0
aGUgaW1wbCB0aHJlYWQKKyAgICAgICAgZXZlbiBpZiB0aGUgZnJhbWUgaXMgYWJvcnRlZC4gIFRo
aXMgd2lsbCBiZSBoZWxwZnVsIGFzIHdlIG1vdmUgdG93YXJkcworICAgICAgICBkZWxldGluZyBv
bmx5IHNvbWUgdGV4dHVyZXMgYXQgYSB0aW1lIChpbnN0ZWFkIG9mIGFsbCB0ZXh0dXJlcykuICBX
aGVuCisgICAgICAgIHRoYXQgaXMgaW1wbGVtZW50ZWQsIGJvdGggYmVnaW5GcmFtZUNvbXBsZXRl
T25JbXBsVGhyZWFkIGFuZAorICAgICAgICBiZWdpbkZyYW1lQWJvcnRlZE9uSW1wbFRocmVhZCB3
aWxsIGNhbGwgaW50byBhIGNvbW1vbiBhY2sgZnVuY3Rpb24sCisgICAgICAgIGFuZCBpbnN0ZWFk
IG9mIGNsZWFyaW5nIHRoZSB1cGxvYWQgcXVldWUsIHdlIHdpbGwgZGVsZXRlIHRoZSB1cGxvYWRz
CisgICAgICAgIHRvIHN0YWxlIHRleHR1cmVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09Q
UyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1w
bFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQWJv
cnRlZE9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oOgorICAgICAgICAoQ0NUaHJlYWRQcm94eSk6CisKIDIwMTItMDgt
MjIgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjYzODMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmlu
ZGV4IDI5N2IxMzU2MzIwM2EzMGY5MDVkNGU1NjE0NjhkYjUwZGUwZTNiYmUuLjk1OTBmNzE0NmIz
NWM5ODkxNmNjMDZmMjIwNjExN2U5NWExZjk2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
Y3BwCkBAIC00OTcsMTIgKzQ5NywxNSBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUo
KQogICAgIC8vIFJlLWRvIHRoZSBjb21taXQgZmxvdyBzbyB0aGF0IHdlIGRvbid0IHNlbmQgdGhl
IHNjcm9sbEluZm8gb24gdGhlIEJGQUMgbWVzc2FnZS4KICAgICBtX2xheWVyVHJlZUhvc3QtPmFw
cGx5U2Nyb2xsQW5kU2NhbGUoKnJlcXVlc3QtPnNjcm9sbEluZm8pOwogCisgICAgaWYgKHJlcXVl
c3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5ldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOworCiAgICAgaWYgKCFtX2luQ29tcG9zaXRlQW5k
UmVhZGJhY2sgJiYgIW1fbGF5ZXJUcmVlSG9zdC0+dmlzaWJsZSgpKSB7CiAgICAgICAgIG1fY29t
bWl0UmVxdWVzdGVkID0gZmFsc2U7CiAgICAgICAgIG1fZm9yY2VkQ29tbWl0UmVxdWVzdGVkID0g
ZmFsc2U7CiAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJFYXJseU91dF9Ob3RWaXNpYmxl
Iik7Ci0gICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQWJvcnRlZE9uSW1wbFRocmVh
ZCkpOworICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFib3J0ZWRPbkltcGxUaHJl
YWQsIHJlcXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC01MjAsOSArNTIzLDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lKCkKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWVzdC0+Y29udGVu
dHNUZXh0dXJlc1dlcmVEZWxldGVkKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmV2aWN0QWxs
Q29udGVudFRleHR1cmVzKCk7Ci0KICAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+IHF1
ZXVlID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZVVwZGF0ZVF1ZXVlKTsKICAgICBtX2xheWVyVHJl
ZUhvc3QtPnVwZGF0ZUxheWVycygqKHF1ZXVlLmdldCgpKSwgcmVxdWVzdC0+bWVtb3J5QWxsb2Nh
dGlvbkxpbWl0Qnl0ZXMpOwogCkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjpiZWdpbkZyYW1lKCkKICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZEJlZ2luRnJhbWUoKTsKIH0K
IAotdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVl
dWU+IHF1ZXVlLCBib29sIGNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCkKK3ZvaWQgQ0NUaHJl
YWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
KiBjb21wbGV0aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSwgYm9v
bCBjb250ZW50c1RleHR1cmVzRGVsZXRlZEFja2VkQnlNYWluVGhyZWFkKQogewogICAgIFRSQUNF
X0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhy
ZWFkIik7CiAgICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCk7
CkBAIC01NjcsMTUgKzU2NywxOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21w
bGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQgJiYg
bV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKSB7Ci0gICAgICAg
IC8vIFdlIHB1cmdlZCB0aGUgY29udGVudCB0ZXh0dXJlcyBvbiB0aGUgaW1wbCB0aHJlYWQgYmV0
d2VlbiB0aGUgdGltZSB3ZQotICAgICAgICAvLyBwb3N0ZWQgdGhlIGJlZ2luRnJhbWUgdGFzayBh
bmQgbm93LCBtZWFuaW5nIHdlIGhhdmUgYSBidW5jaCBvZgotICAgICAgICAvLyB1cGxvYWRzIHRo
YXQgYXJlIG5vdyBpbnZhbGlkLiBDbGVhciB0aGUgdXBsb2FkcyAodGhleSBhbGwgZ28gdG8KLSAg
ICAgICAgLy8gY29udGVudCB0ZXh0dXJlcyksIGFuZCBraWNrIGFub3RoZXIgY29tbWl0IHRvIGZp
bGwgdGhlbSBhZ2Fpbi4KLSAgICAgICAgcXVldWUtPmNsZWFyVXBsb2FkcygpOwotICAgICAgICBz
ZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2V0
Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gdHJ1ZTsKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKSB7Cisg
ICAgICAgIGlmIChjb250ZW50c1RleHR1cmVzRGVsZXRlZEFja2VkQnlNYWluVGhyZWFkKQorICAg
ICAgICAgICAgbV9yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRo
cmVhZCA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2UgcHVyZ2VkIHRo
ZSBjb250ZW50IHRleHR1cmVzIG9uIHRoZSBpbXBsIHRocmVhZCBiZXR3ZWVuIHRoZSB0aW1lIHdl
CisgICAgICAgICAgICAvLyBwb3N0ZWQgdGhlIGJlZ2luRnJhbWUgdGFzayBhbmQgbm93LCBtZWFu
aW5nIHdlIGhhdmUgYSBidW5jaCBvZgorICAgICAgICAgICAgLy8gdXBsb2FkcyB0aGF0IGFyZSBu
b3cgaW52YWxpZC4gQ2xlYXIgdGhlIHVwbG9hZHMgKHRoZXkgYWxsIGdvIHRvCisgICAgICAgICAg
ICAvLyBjb250ZW50IHRleHR1cmVzKSwgYW5kIGtpY2sgYW5vdGhlciBjb21taXQgdG8gZmlsbCB0
aGVtIGFnYWluLgorICAgICAgICAgICAgcXVldWUtPmNsZWFyVXBsb2FkcygpOworICAgICAgICAg
ICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgfQorICAgIH0KIAogICAg
IG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkID0gQ0NUZXh0dXJl
VXBkYXRlQ29udHJvbGxlcjo6Y3JlYXRlKENDUHJveHk6OmltcGxUaHJlYWQoKSwgcXVldWUsIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSwgbV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCksIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZVVwbG9hZGVyKCkpOwogICAgIG1fY29tbWl0Q29tcGxl
dGlvbkV2ZW50T25JbXBsVGhyZWFkID0gY29tcGxldGlvbjsKQEAgLTU4Myw3ICs1ODYsNyBAQCB2
b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbgogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5iZWdp
bkZyYW1lQ29tcGxldGUoKTsKIH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQWJv
cnRlZE9uSW1wbFRocmVhZCgpCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBYm9ydGVk
T25JbXBsVGhyZWFkKGJvb2wgY29udGVudHNUZXh0dXJlc0RlbGV0ZWRBY2tlZEJ5TWFpblRocmVh
ZCkKIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVB
Ym9ydGVkT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKQEAgLTU5
MSw2ICs1OTQsMTUgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQWJvcnRlZE9uSW1w
bFRocmVhZCgpCiAgICAgQVNTRVJUKG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5jb21taXRQZW5k
aW5nKCkpOwogCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmJlZ2luRnJhbWVBYm9ydGVk
KCk7CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdl
ZCgpKSB7CisgICAgICAgIGlmIChjb250ZW50c1RleHR1cmVzRGVsZXRlZEFja2VkQnlNYWluVGhy
ZWFkKQorICAgICAgICAgICAgbV9yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1p
dE9uSW1wbFRocmVhZCA9IHRydWU7CisgICAgICAgIC8vIFdlIHdvbid0IGJlIGFibGUgdG8gZHJh
dyBhZ2FpbiB1bnRpbCBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNldENvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQKKyAgICAgICAgLy8gaXMgY2FsbGVkLCB3aGljaCBoYXBwZW5zIGluIHNjaGVkdWxlZEFj
dGlvbkNvbW1pdC4gU2NoZWR1bGUgYSBjb21taXQgc28gdGhhdCB3ZSB3aWxsCisgICAgICAgIC8v
IGdldCB0aGVyZS4KKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB9
CiB9CiAKIGJvb2wgQ0NUaHJlYWRQcm94eTo6aGFzTW9yZVJlc291cmNlVXBkYXRlcygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggOTFhOWU0ZDQ0NjllZWVhNjZlOGQ5ZmY2MzY1
NTVjYmM4YzAwZDhjNS4uYzg5MDQ0NTYzY2FlNjhhZmUxZWI0NjE2ZTc3OTBmOGNiOTJlMTllOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMTI3LDggKzEyNyw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIEludFJlY3QgcmVjdDsKICAgICB9OwogICAgIHZvaWQgZm9yY2VCZWdpbkZyYW1lT25J
bXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxl
dGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVw
ZGF0ZVF1ZXVlPiwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpOwotICAgIHZvaWQg
YmVnaW5GcmFtZUFib3J0ZWRPbkltcGxUaHJlYWQoKTsKKyAgICB2b2lkIGJlZ2luRnJhbWVDb21w
bGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIFBhc3NPd25QdHI8Q0NUZXh0dXJl
VXBkYXRlUXVldWU+LCBib29sIGNvbnRlbnRzVGV4dHVyZXNEZWxldGVkQWNrZWRCeU1haW5UaHJl
YWQpOworICAgIHZvaWQgYmVnaW5GcmFtZUFib3J0ZWRPbkltcGxUaHJlYWQoYm9vbCBjb250ZW50
c1RleHR1cmVzRGVsZXRlZEFja2VkQnlNYWluVGhyZWFkKTsKICAgICB2b2lkIHJlcXVlc3RSZWFk
YmFja09uSW1wbFRocmVhZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIHJlcXVlc3RTdGFy
dFBhZ2VTY2FsZUFuaW1hdGlvbk9uSW1wbFRocmVhZChJbnRTaXplIHRhcmdldFBvc2l0aW9uLCBi
b29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CiAgICAgdm9p
ZCBmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160469</attachid>
            <date>2012-08-24 12:01:11 -0700</date>
            <delta_ts>2012-08-26 19:49:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94903-20120824120106.patch</filename>
            <type>text/plain</type>
            <size>3565</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFmOGEyOGVkYTM3ZGNj
ODc5NjQ1MDg2ZWUzM2Y5YTVmYzI1MGMxYS4uNDI2NTRmNzE0ZjVmZTkwNmU2Y2Y4YTU5YzE5MzRj
OTE3ZWUxMmU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA4LTIzICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gRml4IGEgYnVnIHdoZXJlIENDVGhyZWFkUHJveHk6OmNhbkRyYXcoKSBnZXRzIHN0dWNr
IGF0IGZhbHNlIG9uIHRhYiBzd2l0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk0OTAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3VwcG9zZSB0aGUgaW1wbCB0aHJlYWQgZGVsZXRlcyBhbGwgdGV4dHVy
ZXMgdmlhCisgICAgICAgIHJlbGVhc2VDb250ZW50c1RleHR1cmVzKCkuICBUaGUgaW1wbCB0aHJl
YWQgd2lsbCBub3QgYmUgYWJsZSB0byBkcmF3CisgICAgICAgIGFnYWluIHVudGlsIHJlc2V0Q29u
dGVudHNUZXh0dXJlc1B1cmdlZCgpIGlzIGNhbGxlZCBpbgorICAgICAgICBzY2hlZHVsZWRBY3Rp
b25Db21taXQoKS4gIFdoZW4gZGVsZXRpbmcgdGhlIHRleHR1cmVzLCB0aGUgZnVuY3Rpb24KKyAg
ICAgICAgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKSBjYWxscyBzZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpIHRvIGVuc3VyZQorICAgICAgICB0aGF0IGEgY29tbWl0IHdpbGwgY29tZSBhbG9u
ZyB0byBhbGxvdyBkcmF3aW5nIGFnYWluLiAgSWYgdGhpcyBjb21taXQKKyAgICAgICAgaXMgYWJv
cnRlZCwgdGhlbiB0aGUgcGFnZSB3aWxsIG5vdCBkcmF3IHVudGlsIGEgY29tbWl0IGlzIHNjaGVk
dWxlZCwKKyAgICAgICAgd2hpY2ggbWF5IGJlIG5ldmVyLgorCisgICAgICAgIE1ha2UgYmVnaW5G
cmFtZUFib3J0ZWQoKSBjYWxsIHNldE5lZWRzQ29tbWl0KCksIHNvIHRoYXQgdGhlIHJlcXVlc3Rl
ZAorICAgICAgICBjb21taXQgd2lsbCBldmVudHVhbGx5IG9jY3VyLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgdXBkYXRlIHRvIENDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdCdzIAorICAgICAg
ICBUZXN0R29lc0ludmlzaWJsZUJlZm9yZUJlZ2luRnJhbWVDb21wbGV0ZXMgdG8gcmVxdWlyZSBu
ZXcKKyAgICAgICAgZnVuY3Rpb25hbGl0eSAobmV3IHRlc3QgZmFpbHMgd2l0aCBvbGQgYmVoYXZp
b3IpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVs
ZXJTdGF0ZU1hY2hpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY2hlZHVsZXJTdGF0ZU1h
Y2hpbmU6OmJlZ2luRnJhbWVBYm9ydGVkKToKKwogMjAxMi0wOC0yMiAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEyNjM4My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcApp
bmRleCBmZmNkNWU5MGMwNWE5NzhmNzdkNjBkMjNlZjNjMzJjM2YwMWI1M2Q3Li40MTUxNTZhY2I1
ZTk1NDdlZDBhMDgzZWY1NWUzNTUxZTE4YTRlODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y2hlZHVsZXJTdGF0ZU1hY2hpbmUuY3BwCkBAIC0zMDMsNiArMzAzLDcgQEAgdm9pZCBDQ1NjaGVk
dWxlclN0YXRlTWFjaGluZTo6YmVnaW5GcmFtZUFib3J0ZWQoKQogewogICAgIEFTU0VSVChtX2Nv
bW1pdFN0YXRlID09IENPTU1JVF9TVEFURV9GUkFNRV9JTl9QUk9HUkVTUyk7CiAgICAgbV9jb21t
aXRTdGF0ZSA9IENPTU1JVF9TVEFURV9JRExFOworICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
IHZvaWQgQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmU6OmJlZ2luVXBkYXRlTW9yZVJlc291cmNlc0Nv
bXBsZXRlKGJvb2wgbW9yZVBlbmRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAKaW5kZXggNTYz
YzJjMDRjMGNlZDY5N2IwMjc0NGIwMzM1NmU3YzVkZDc3ODlkMC4uN2RmYmJjMDBiOTU0ZGY1MjQx
OTNlNjk1MWY1ZGU1NDIwYzhjYjdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcApAQCAtODMw
LDYgKzgzMCwxOSBAQCBURVNUKENDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdCwgVGVzdEdvZXNJ
bnZpc2libGVCZWZvcmVCZWdpbkZyYW1lQ29tcGxldGVzKQogICAgIC8vIFdlIHNob3VsZCBub3cg
YmUgYmFjayBpbiB0aGUgaWRsZSBzdGF0ZSBhcyBpZiB3ZSBkaWRuJ3Qgc3RhcnQgYSBmcmFtZSBh
dCBhbGwuCiAgICAgRVhQRUNUX0VRKENDU2NoZWR1bGVyU3RhdGVNYWNoaW5lOjpDT01NSVRfU1RB
VEVfSURMRSwgc3RhdGUuY29tbWl0U3RhdGUoKSk7CiAgICAgRVhQRUNUX0VRKENDU2NoZWR1bGVy
U3RhdGVNYWNoaW5lOjpBQ1RJT05fTk9ORSwgc3RhdGUubmV4dEFjdGlvbigpKTsKKworICAgIC8v
IEJlY29tZSB2aXNpYmxlIGFnYWluCisgICAgc3RhdGUuc2V0VmlzaWJsZSh0cnVlKTsKKworICAg
IC8vIFdlIHNob3VsZCBiZSBiZWdpbm5pbmcgYSBmcmFtZSBub3cKKyAgICBFWFBFQ1RfRVEoQ0NT
Y2hlZHVsZXJTdGF0ZU1hY2hpbmU6OkNPTU1JVF9TVEFURV9JRExFLCBzdGF0ZS5jb21taXRTdGF0
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmU6OkFDVElPTl9CRUdJ
Tl9GUkFNRSwgc3RhdGUubmV4dEFjdGlvbigpKTsKKworICAgIC8vIEJlZ2luIHRoZSBmcmFtZQor
ICAgIHN0YXRlLnVwZGF0ZVN0YXRlKHN0YXRlLm5leHRBY3Rpb24oKSk7CisKKyAgICAvLyBXZSBz
aG91bGQgYmUgc3RhcnRpbmcgdGhlIGNvbW1pdCBub3cKKyAgICBFWFBFQ1RfRVEoQ0NTY2hlZHVs
ZXJTdGF0ZU1hY2hpbmU6OkNPTU1JVF9TVEFURV9GUkFNRV9JTl9QUk9HUkVTUywgc3RhdGUuY29t
bWl0U3RhdGUoKSk7CiB9CiAKIFRFU1QoQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LCBUZXN0
Q29udGV4dExvc3RXaGVuQ29tcGxldGVseUlkbGUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>