<?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>66710</bug_id>
          
          <creation_ts>2011-08-22 14:06:03 -0700</creation_ts>
          <short_desc>Assertion fires if canvas is resized while save() active</short_desc>
          <delta_ts>2011-08-26 12:12:07 -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>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>mdelaney7</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>454895</commentid>
    <comment_count>0</comment_count>
      <attachid>104734</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-22 14:06:03 -0700</bug_when>
    <thetext>Created attachment 104734
Test case

If a 2D canvas is resized (via canvas.width = foo) while a save() is active, GraphicsContext&apos;s destructor asserts:

ASSERT(m_stack.isEmpty());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455028</commentid>
    <comment_count>1</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-08-22 16:03:24 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=104734) [details]
&gt; Test case
&gt; 
&gt; If a 2D canvas is resized (via canvas.width = foo) while a save() is active, GraphicsContext&apos;s destructor asserts:
&gt; 
&gt; ASSERT(m_stack.isEmpty());

IIRC, this ASSERT was added primarily for helping with an issue Simon discovered in the layout tests. Certain canvas tests would use save() without a corresponding restore() - which in general, is totally fine for a page&apos;s script to do - but it had some side effect in the layout test environment that caused other subsequent tests in the chain of layout tests to act up or fail altogether. So, adding the assert helped to find those canvas tests that didn&apos;t restore, so that we could add restores to them, and avoid the issue.

Surprisingly, I haven&apos;t run into many (if any at all - can&apos;t think of any at the moment) real world examples of saves not matched with restores. I assume this is because almost all use cases for save() and restore() are animations, and it&apos;s crucial for them to match saves and restores in order to work properly. Though, I always thought that I&apos;d find more pages that would have behavior that might bail out in the middle of some animation, recreate the canvas, and hit this assert. I suppose this bug is pretty much that case. OR even more simply: have an extra save or two in the beginning that wouldn&apos;t affect them but would hit the assert when we tear down the page.

Do we have anything instead of ASSERT like TESTING that would only enable certain &quot;testing&quot; asserts when we&apos;re running tests? I always considered ASSERT to be a way to declare an invariant in the code, such that if it fails, it signifies a bug in our code or our understanding of our code. This ASSERT is not an invariant since it&apos;s perfectly acceptable for a context to die with a non-zero size state stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455396</commentid>
    <comment_count>2</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 07:05:10 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; Created an attachment (id=104734) [details] [details]
&gt; &gt; Test case
&gt; &gt; 
&gt; &gt; If a 2D canvas is resized (via canvas.width = foo) while a save() is active, GraphicsContext&apos;s destructor asserts:
&gt; &gt; 
&gt; &gt; ASSERT(m_stack.isEmpty());
&gt; 
&gt; IIRC, this ASSERT was added primarily for helping with an issue Simon discovered in the layout tests. Certain canvas tests would use save() without a corresponding restore() - which in general, is totally fine for a page&apos;s script to do - but it had some side effect in the layout test environment that caused other subsequent tests in the chain of layout tests to act up or fail altogether. So, adding the assert helped to find those canvas tests that didn&apos;t restore, so that we could add restores to them, and avoid the issue.
&gt; 
&gt; Surprisingly, I haven&apos;t run into many (if any at all - can&apos;t think of any at the moment) real world examples of saves not matched with restores.

This assertion fires in Chrome if I visit http://ie.microsoft.com/testdrive/Performance/Fireflies/Default.html.

 I assume this is because almost all use cases for save() and restore() are animations, and it&apos;s crucial for them to match saves and restores in order to work properly. Though, I always thought that I&apos;d find more pages that would have behavior that might bail out in the middle of some animation, recreate the canvas, and hit this assert. I suppose this bug is pretty much that case. OR even more simply: have an extra save or two in the beginning that wouldn&apos;t affect them but would hit the assert when we tear down the page.
&gt; 
&gt; Do we have anything instead of ASSERT like TESTING that would only enable certain &quot;testing&quot; asserts when we&apos;re running tests? I always considered ASSERT to be a way to declare an invariant in the code, such that if it fails, it signifies a bug in our code or our understanding of our code. This ASSERT is not an invariant since it&apos;s perfectly acceptable for a context to die with a non-zero size state stack.

If we did so, it would be impossible to add the attached test case as a layout test, for example.

It should be fairly straightforward to fix this bug by copying the #if !ASSERT_DISABLED code that&apos;s currently in the CanvasRenderingContext2D destructor to HTMLCanvasElement::setSurfaceSize(), just before m_imageBuffer is cleared.   Or alternatively, to the ImageBuffer destructor, although that would have to be done in every port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455431</commentid>
    <comment_count>3</comment_count>
      <attachid>104853</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 08:49:37 -0700</bug_when>
    <thetext>Created attachment 104853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455440</commentid>
    <comment_count>4</comment_count>
      <attachid>104853</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-23 09:12:48 -0700</bug_when>
    <thetext>Comment on attachment 104853
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:328
&gt; +#if !ASSERT_DISABLED
&gt; +    if (m_context)
&gt; +        m_context-&gt;clearStateStack();
&gt; +#endif

I don&apos;t think state stack behavior should change between debug and non-debug builds. This could lead to hard-to-find bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455441</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 09:16:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 104853 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104853&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLCanvasElement.cpp:328
&gt; &gt; +#if !ASSERT_DISABLED
&gt; &gt; +    if (m_context)
&gt; &gt; +        m_context-&gt;clearStateStack();
&gt; &gt; +#endif
&gt; 
&gt; I don&apos;t think state stack behavior should change between debug and non-debug builds. This could lead to hard-to-find bugs.

I was just following the pattern of the CanvasRenderingContext2D destructor, which has the same #if !ASSERT_DISABLED.

Would you prefer we clear the state stack unconditionally?  I&apos;m fine with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455448</commentid>
    <comment_count>6</comment_count>
      <attachid>104859</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 09:31:24 -0700</bug_when>
    <thetext>Created attachment 104859
Same as above with #if !ASSERT_DISABLED removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455455</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-23 09:46:36 -0700</bug_when>
    <thetext>Another way to fix this would be to move the  context2D-&gt;reset(); before the setSurfaceSize() in HTMLCanvasElement::reset().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455463</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 10:13:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Another way to fix this would be to move the  context2D-&gt;reset(); before the setSurfaceSize() in HTMLCanvasElement::reset().

Doesn&apos;t work.  The state stack has one element after CanvasRenderingContext2D::reset(), which still causes the assert to fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455481</commentid>
    <comment_count>9</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 10:29:54 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Another way to fix this would be to move the  context2D-&gt;reset(); before the setSurfaceSize() in HTMLCanvasElement::reset().
&gt; 
&gt; Doesn&apos;t work.  The state stack has one element after CanvasRenderingContext2D::reset(), which still causes the assert to fire.

Can be made to work by clearing the (GraphicsContext) state stack in CanvasRenderingContext2D::reset(), and putting the reset() call ahead of the setSurfaceSize() call in HTMLCanvasElement as you suggest.

But this starts to feel a bit fragile -- the real problem occurs when the ImageBuffer is destroyed, so it makes more sense to me to put the call near the point where it is freed. Still, I&apos;ll upload this version for your consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455489</commentid>
    <comment_count>10</comment_count>
      <attachid>104865</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 10:35:28 -0700</bug_when>
    <thetext>Created attachment 104865
Make CanvasRenderingContext2D::reset() clear the state stack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455504</commentid>
    <comment_count>11</comment_count>
      <attachid>104865</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-23 10:59:04 -0700</bug_when>
    <thetext>Comment on attachment 104865
Make CanvasRenderingContext2D::reset() clear the state stack

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:178
&gt; +    if (size_t stackSize = m_stateStack.size()) {
&gt; +        if (GraphicsContext* context = canvas()-&gt;existingDrawingContext()) {
&gt; +            while (--stackSize)
&gt; +                context-&gt;restore();
&gt; +        }
&gt; +    }

WOuld be nice to share this code with the dtor. Maybe a new &quot;unwindStateStack()&quot; method or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455546</commentid>
    <comment_count>12</comment_count>
      <attachid>104873</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 11:30:30 -0700</bug_when>
    <thetext>Created attachment 104873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455672</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-23 13:45:31 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 104865 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104865&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:178
&gt; &gt; +    if (size_t stackSize = m_stateStack.size()) {
&gt; &gt; +        if (GraphicsContext* context = canvas()-&gt;existingDrawingContext()) {
&gt; &gt; +            while (--stackSize)
&gt; &gt; +                context-&gt;restore();
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; WOuld be nice to share this code with the dtor. Maybe a new &quot;unwindStateStack()&quot; method or something.

OK, done.  Let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457695</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-26 12:12:07 -0700</bug_when>
    <thetext>Committed r93901: &lt;http://trac.webkit.org/changeset/93901&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>104734</attachid>
            <date>2011-08-22 14:06:03 -0700</date>
            <delta_ts>2011-08-22 14:06:03 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>canvas-resize-while-save-active.html</filename>
            <type>text/html</type>
            <size>409</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw+DQo8aHRtbD4NCjxoZWFkPg0KPC9oZWFkPg0KPGJvZHk+DQo8Y2FudmFz
IGlkPSJteWNhbnZhcyIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1MTIiPjwvY2FudmFzPg0KPHNjcmlw
dD4NCnZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXljYW52YXMnKTsNCnZh
ciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsNCnZhciB2YzsNCmN0eC5maWxsU3R5bGUg
PSAicmdiKDI1NSwxNjUsMCkiOw0KY3R4LmZpbGxSZWN0KDAsIDAsIDUxMiwgNTEyKTsNCmN0eC5z
YXZlKCk7DQpjYW52YXMud2lkdGggPSAyNTY7DQpjdHguZmlsbFN0eWxlID0gInJnYigyNTUsMTY1
LDApIjsNCmN0eC5maWxsUmVjdCgwLCAwLCAyNTYsIDUxMik7DQo8L3NjcmlwdD4NCjwvYm9keT4N
CjwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104853</attachid>
            <date>2011-08-23 08:49:37 -0700</date>
            <delta_ts>2011-08-23 09:31:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66710-20110823114936.patch</filename>
            <type>text/plain</type>
            <size>6081</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNjA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDgtMjMgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRG9uJ3QgYXNzZXJ0
IGlmIGNhbnZhcyBpcyByZXNpemVkIHdoaWxlIHNhdmUoKSBpcyBhY3RpdmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvcmVz
aXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZh
Y2VTaXplKToKKyAgICAgICAgQmVmb3JlIGZyZWVpbmcgdGhlIEltYWdlQnVmZmVyIChhbmQgaXRz
IEdyYXBoaWNzQ29udGV4dCksIGNsZWFyCisgICAgICAgIHRoZSBzdGF0ZSBzdGFjayBpZiBhc3Nl
cnRpb25zIGFyZSBlbmFibGVkIHRvIGF2b2lkIGFuIGFzc2VydGlvbgorICAgICAgICBpbiB0aGUg
R3JhcGhpY3NDb250ZXh0IGRlc3RydWN0b3IuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJTdGF0ZVN0YWNrKToKKyAgICAgICAgQWRkIGEgdmlydHVhbCBmdW5jdGlvbiB0
byBjbGVhciB0aGUgc3RhdGUgc3RhY2suCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Y2xlYXJTdGF0ZVN0YWNrKToKKyAgICAgICAgSW1wbGVtZW50IGNsZWFyaW5nIG9m
IHRoZSBzdGF0ZSBzdGFjay4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIFJlZmFjdG9yIHRoZSBl
eGlzdGluZyBjb2RlIGludG8gY2xlYXJTdGF0ZVN0YWNrKCkuCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisKIDIwMTEtMDgtMjMgIEFuZHJleSBLb3N5
YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0
ZW5zaW9ucyBBUEldIHByb3ZpZGUgYWNjZXNzIHRvIHBhZ2UgcmVzb3VyY2VzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gOTM2MDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIyLDYgKzMyMiwxMCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhclByZXNl
bnRhdGlvCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZhY2VTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpCiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGlmIChtX2NvbnRleHQp
CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGF0ZVN0YWNrKCk7CisjZW5kaWYKICAgICBtX3Np
emUgPSBzaXplOwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CiAgICAgbV9p
bWFnZUJ1ZmZlci5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA5MzYwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw5ICsxMjcsOCBAQCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OkNhbnZhc1JlbmRlcmluCiAgICAgc2V0TGluZVdpZHRoKGxpbmVXaWR0aCgpKTsKIH0K
IAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCkK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhclN0YXRlU3RhY2soKQogewotI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc3RhdGUgc3RhY2sgaW4g
dGhlIEltYWdlQnVmZmVyJ3MgY29udGV4dAogICAgIC8vIGlzIGNsZWFyZWQgYmVmb3JlIGRlc3Ry
dWN0aW9uLCB0byBhdm9pZCBhc3NlcnRpb25zIGluIHRoZQogICAgIC8vIEdyYXBoaWNzQ29udGV4
dCBkdG9yLgpAQCAtMTM5LDYgKzEzOCwxMiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6On5D
YW52YXNSZW5kZXJpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAg
ICB9CiAgICAgfQorfQorCitDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQoKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBjbGVhclN0YXRlU3Rh
Y2soKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gOTM2MDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
MmQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0
ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlU3RhY2soKTsKIAogICAgIENhbnZhc1N0
eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoUGFzc1Jl
ZlB0cjxDYW52YXNTdHlsZT4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTM2MDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIHt9CiAgICAgdmlydHVhbCBib29sIHBhaW50c0ludG9D
YW52YXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJTdGF0ZVN0YWNrKCkgeyB9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1
cm4gMDsgfQogI2VuZGlmCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzYwNSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTA4LTIzICBT
dGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvbid0
IGFzc2VydCBpZiBjYW52YXMgaXMgcmVzaXplZCB3aGlsZSBzYXZlKCkgaXMgYWN0aXZlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcxMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jYW52YXMv
cmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWw6IEFkZGVkLgorICAgICAg
ICBBZGQgbmV3IHRlc3QgZm9yIGNhbnZhcyByZXNpemUgd2hpbGUgc2F2ZSgpIGFjdGl2ZSwgYW5k
IGV4cGVjdGVkCisgICAgICAgIHJlc3VsdHMuCisKIDIwMTEtMDgtMjMgIEFuZHJleSBLb3N5YWtv
diAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5z
aW9ucyBBUEldIHByb3ZpZGUgYWNjZXNzIHRvIHBhZ2UgcmVzb3VyY2VzCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUtc2F2ZS1hY3RpdmUtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFj
dGl2ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy9yZXNpemUtd2hpbGUtc2F2ZS1hY3RpdmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxIEBACitJZiB3ZSBnb3QgdGhpcyBmYXIgd2l0aG91dCBhbiBhc3NlcnRpb24sIHRoaXMg
dGVzdCBwYXNzZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUt
c2F2ZS1hY3RpdmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9y
ZXNpemUtd2hpbGUtc2F2ZS1hY3RpdmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCis8L2hl
YWQ+DQorPGJvZHk+DQorPGNhbnZhcyBpZD0ibXljYW52YXMiIHdpZHRoPSI1MTIiIGhlaWdodD0i
NTEyIj48L2NhbnZhcz4NCis8c2NyaXB0Pg0KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpDQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKQ0KK3ZhciBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXljYW52YXMnKTsNCit2YXIgY3R4ID0gY2FudmFz
LmdldENvbnRleHQoJzJkJyk7DQorY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDE2NSwwKSI7DQor
Y3R4LmZpbGxSZWN0KDAsIDAsIDUxMiwgNTEyKTsNCitjdHguc2F2ZSgpOw0KK2NhbnZhcy53aWR0
aCA9IDI1NjsNCitjdHguZmlsbFN0eWxlID0gInJnYigyNTUsMTY1LDApIjsNCitjdHguZmlsbFJl
Y3QoMCwgMCwgMjU2LCA1MTIpOw0KK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgicCIpKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
SWYgd2UgZ290IHRoaXMgZmFyIHdpdGhvdXQgYW4gYXNzZXJ0aW9uLCB0aGlzIHRlc3QgcGFzc2Vk
LiIpKTsNCis8L3NjcmlwdD4NCis8L2JvZHk+DQorPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104859</attachid>
            <date>2011-08-23 09:31:24 -0700</date>
            <delta_ts>2011-08-23 10:35:23 -0700</delta_ts>
            <desc>Same as above with #if !ASSERT_DISABLED removed</desc>
            <filename>bug-66710-20110823123123.patch</filename>
            <type>text/plain</type>
            <size>6056</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNjA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDgtMjMgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRG9uJ3QgYXNzZXJ0
IGlmIGNhbnZhcyBpcyByZXNpemVkIHdoaWxlIHNhdmUoKSBpcyBhY3RpdmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvcmVz
aXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZh
Y2VTaXplKToKKyAgICAgICAgQmVmb3JlIGZyZWVpbmcgdGhlIEltYWdlQnVmZmVyIChhbmQgaXRz
IEdyYXBoaWNzQ29udGV4dCksIGNsZWFyCisgICAgICAgIHRoZSBzdGF0ZSBzdGFjayB0byBhdm9p
ZCBhbiBhc3NlcnRpb24gaW4gdGhlIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBkZXN0cnVjdG9y
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RhdGVTdGFjayk6Cisg
ICAgICAgIEFkZCBhIHZpcnR1YWwgZnVuY3Rpb24gdG8gY2xlYXIgdGhlIHN0YXRlIHN0YWNrLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyU3RhdGVTdGFjayk6
CisgICAgICAgIEltcGxlbWVudCBjbGVhcmluZyBvZiB0aGUgc3RhdGUgc3RhY2suCisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQpOgorICAgICAgICBSZWZhY3RvciB0aGUgZXhpc3RpbmcgY29kZSBpbnRvIGNsZWFyU3Rh
dGVTdGFjaygpLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oOgorCiAyMDExLTA4LTIzICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbnMgQVBJXSBwcm92aWRlIGFjY2Vz
cyB0byBwYWdlIHJlc291cmNlcwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkzNjA1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsOCBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpjbGVhclByZXNlbnRhdGlvCiAKIHZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFN1cmZhY2VTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CisgICAgaWYgKG1f
Y29udGV4dCkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0YXRlU3RhY2soKTsKICAgICBtX3Np
emUgPSBzaXplOwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CiAgICAgbV9p
bWFnZUJ1ZmZlci5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA5MzYwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw5ICsxMjcsOCBAQCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OkNhbnZhc1JlbmRlcmluCiAgICAgc2V0TGluZVdpZHRoKGxpbmVXaWR0aCgpKTsKIH0K
IAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCkK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhclN0YXRlU3RhY2soKQogewotI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc3RhdGUgc3RhY2sgaW4g
dGhlIEltYWdlQnVmZmVyJ3MgY29udGV4dAogICAgIC8vIGlzIGNsZWFyZWQgYmVmb3JlIGRlc3Ry
dWN0aW9uLCB0byBhdm9pZCBhc3NlcnRpb25zIGluIHRoZQogICAgIC8vIEdyYXBoaWNzQ29udGV4
dCBkdG9yLgpAQCAtMTM5LDcgKzEzOCwxMSBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6On5D
YW52YXNSZW5kZXJpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAg
ICB9CiAgICAgfQotI2VuZGlmCit9CisKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6fkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCgpCit7CisgICAgY2xlYXJTdGF0ZVN0YWNrKCk7CiB9CiAKIGJv
b2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc0FjY2VsZXJhdGVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCShyZXZpc2lvbiA5MzYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyU3RhdGVTdGFjaygpOwogCiAgICAgQ2FudmFzU3R5bGUqIHN0cm9rZVN0eWxlKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oCShyZXZpc2lvbiA5MzYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkg
e30KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlU3RhY2soKSB7IH0KKwog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAjZW5kaWYKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDkzNjA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5j
b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRG9uJ3QgYXNzZXJ0IGlmIGNhbnZhcyBpcyByZXNp
emVkIHdoaWxlIHNhdmUoKSBpcyBhY3RpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2NzEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUtc2F2ZS1hY3RpdmUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUt
c2F2ZS1hY3RpdmUuaHRtbDogQWRkZWQuCisgICAgICAgIEFkZCBuZXcgdGVzdCBmb3IgY2FudmFz
IHJlc2l6ZSB3aGlsZSBzYXZlKCkgYWN0aXZlLCBhbmQgZXhwZWN0ZWQKKyAgICAgICAgcmVzdWx0
cy4KKwogMjAxMS0wOC0yMyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtFeHRlbnNpb25zIEFQSV0gcHJvdmlkZSBhY2Nlc3Mg
dG8gcGFnZSByZXNvdXJjZXMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13
aGlsZS1zYXZlLWFjdGl2ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK0lmIHdlIGdvdCB0aGlz
IGZhciB3aXRob3V0IGFuIGFzc2VydGlvbiwgdGhpcyB0ZXN0IHBhc3NlZC4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcmVzaXplLXdoaWxl
LXNhdmUtYWN0aXZlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQ
RSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKzwvaGVhZD4NCis8Ym9keT4NCis8Y2FudmFzIGlk
PSJteWNhbnZhcyIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1MTIiPjwvY2FudmFzPg0KKzxzY3JpcHQ+
DQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikNCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpDQordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdteWNhbnZhcycpOw0KK3ZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsNCitjdHgu
ZmlsbFN0eWxlID0gInJnYigyNTUsMTY1LDApIjsNCitjdHguZmlsbFJlY3QoMCwgMCwgNTEyLCA1
MTIpOw0KK2N0eC5zYXZlKCk7DQorY2FudmFzLndpZHRoID0gMjU2Ow0KK2N0eC5maWxsU3R5bGUg
PSAicmdiKDI1NSwxNjUsMCkiOw0KK2N0eC5maWxsUmVjdCgwLCAwLCAyNTYsIDUxMik7DQorZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikpLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJJZiB3ZSBnb3QgdGhpcyBmYXIgd2l0aG91
dCBhbiBhc3NlcnRpb24sIHRoaXMgdGVzdCBwYXNzZWQuIikpOw0KKzwvc2NyaXB0Pg0KKzwvYm9k
eT4NCis8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104865</attachid>
            <date>2011-08-23 10:35:28 -0700</date>
            <delta_ts>2011-08-23 11:30:25 -0700</delta_ts>
            <desc>Make CanvasRenderingContext2D::reset() clear the state stack</desc>
            <filename>bug-66710-20110823133529.patch</filename>
            <type>text/plain</type>
            <size>4769</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNjExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMjMgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQXNzZXJ0aW9uIGZp
cmVzIGlmIGNhbnZhcyBpcyByZXNpemVkIHdoaWxlIHNhdmUoKSBhY3RpdmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvcmVz
aXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToK
KyAgICAgICAgUmVzZXQgdGhlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBiZWZvcmUgcmVzaXpp
bmcgdGhlIGNhbnZhcywgc28gdGhhdAorICAgICAgICB0aGUgR3JhcGhpY3NDb250ZXh0IHN0YXRl
IHN0YWNrIGNhbiBiZSBjbGVhcmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnJlc2V0KToKKyAgICAgICAgQ2xlYXIgdGhlIEdyYXBoaWNzQ29udGV4dCBzdGF0ZSBz
dGFjayBvbiByZXNldC4KKwogMjAxMS0wOC0yMyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MzYwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3
LDExIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICBpZiAoIW9rIHx8IGgg
PCAwKQogICAgICAgICBoID0gRGVmYXVsdEhlaWdodDsKIAorICAgIGlmIChtX2NvbnRleHQgJiYg
bV9jb250ZXh0LT5pczJkKCkpIHsKKyAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBj
b250ZXh0MkQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihtX2NvbnRl
eHQuZ2V0KCkpOworICAgICAgICBjb250ZXh0MkQtPnJlc2V0KCk7CisgICAgfQorCiAgICAgSW50
U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIHNldFN1cmZhY2VTaXplKEludFNpemUodywgaCkp
OyAvLyBUaGUgaW1hZ2UgYnVmZmVyIGdldHMgY2xlYXJlZCBoZXJlLgogCkBAIC0yNDUsMTEgKzI1
MCw2IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0
aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAotICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0
LT5pczJkKCkpIHsKLSAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0MkQg
PSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihtX2NvbnRleHQuZ2V0KCkp
OwotICAgICAgICBjb250ZXh0MkQtPnJlc2V0KCk7Ci0gICAgfQotCiAgICAgaWYgKFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChtX3JlbmRl
cmVySXNDYW52YXMpIHsKICAgICAgICAgICAgIGlmIChvbGRTaXplICE9IHNpemUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkocmV2aXNpb24gOTM2MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAs
NiArMTcwLDEyIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwYWludHNJbnQKIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKIHsKKyAgICBpZiAoc2l6ZV90
IHN0YWNrU2l6ZSA9IG1fc3RhdGVTdGFjay5zaXplKCkpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCA9IGNhbnZhcygpLT5leGlzdGluZ0RyYXdpbmdDb250ZXh0KCkpIHsK
KyAgICAgICAgICAgIHdoaWxlICgtLXN0YWNrU2l6ZSkKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgbV9zdGF0ZVN0YWNrLnJlc2l6ZSgx
KTsKICAgICBtX3N0YXRlU3RhY2suZmlyc3QoKSA9IFN0YXRlKCk7CiAgICAgbV9wYXRoLmNsZWFy
KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzYxMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4LTIzICBTdGVwaGVuIFdoaXRl
ICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFzc2VydGlvbiBmaXJlcyBp
ZiBjYW52YXMgaXMgcmVzaXplZCB3aGlsZSBzYXZlKCkgYWN0aXZlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9jYW52YXMvcmVzaXplLXdoaWxl
LXNhdmUtYWN0aXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
cmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWw6IEFkZGVkLgorICAgICAgICBBZGQgYSB0ZXN0
IHdoaWNoIHRlc3RzIGNhbnZhcyByZXNpemluZyBhZnRlciBjYW52YXMgY3R4LnNhdmUoKS4KKwog
MjAxMS0wOC0yMyAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgdGVzdCBmaXggZm9sbG93aW5nIHI5MzYwNS4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0
aXZlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3Jlc2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEgQEAKK0lmIHdlIGdvdCB0aGlzIGZhciB3aXRob3V0IGFuIGFzc2VydGlvbiwgdGhpcyB0
ZXN0IHBhc3NlZC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc2l6ZS13aGlsZS1z
YXZlLWFjdGl2ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jl
c2l6ZS13aGlsZS1zYXZlLWFjdGl2ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKzwvaGVh
ZD4NCis8Ym9keT4NCis8Y2FudmFzIGlkPSJteWNhbnZhcyIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1
MTIiPjwvY2FudmFzPg0KKzxzY3JpcHQ+DQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikNCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpDQordmFyIGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWNhbnZhcycpOw0KK3ZhciBjdHggPSBjYW52YXMu
Z2V0Q29udGV4dCgnMmQnKTsNCitjdHguZmlsbFN0eWxlID0gInJnYigyNTUsMTY1LDApIjsNCitj
dHguZmlsbFJlY3QoMCwgMCwgNTEyLCA1MTIpOw0KK2N0eC5zYXZlKCk7DQorY2FudmFzLndpZHRo
ID0gMjU2Ow0KK2N0eC5maWxsU3R5bGUgPSAicmdiKDI1NSwxNjUsMCkiOw0KK2N0eC5maWxsUmVj
dCgwLCAwLCAyNTYsIDUxMik7DQorZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJwIikpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJJ
ZiB3ZSBnb3QgdGhpcyBmYXIgd2l0aG91dCBhbiBhc3NlcnRpb24sIHRoaXMgdGVzdCBwYXNzZWQu
IikpOw0KKzwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104873</attachid>
            <date>2011-08-23 11:30:30 -0700</date>
            <delta_ts>2011-08-26 11:55:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66710-20110823143031.patch</filename>
            <type>text/plain</type>
            <size>5923</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNjE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDgtMjMgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQXNzZXJ0aW9uIGZp
cmVzIGlmIGNhbnZhcyBpcyByZXNpemVkIHdoaWxlIHNhdmUoKSBhY3RpdmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvcmVz
aXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToK
KyAgICAgICAgQ2FsbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkgYmVmb3JlIHJl
c2l6aW5nIHRoZSBjYW52YXMsCisgICAgICAgIHNvIHRoYXQgdGhlIEdyYXBoaWNzQ29udGV4dCBz
dGF0ZSBzdGFjayBjYW4gYmUgdW53b3VuZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjp1bndpbmRTdGF0ZVN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIFJl
ZmFjdG9yIHRoZSBzdGF0ZSBzdGFjayB1bndpbmRpbmcgY29kZSBmcm9tIHRoZSBkZXN0cnVjdG9y
IHRvIAorICAgICAgICB1bndpbmRTdGF0ZVN0YWNrKCkgKG5ldykuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KToKKyAgICAgICAgVW53aW5kIHRoZSBH
cmFwaGljc0NvbnRleHQgc3RhdGUgc3RhY2sgd2hlbiB0aGUgY29udGV4dCBpcyByZXNldC4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKwogMjAxMS0w
Ny0yNSAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgZGl2IGFs
aWduPSJjZW50ZXIiIHJlbmRlcmluZyBwcm9ibGVtCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gOTM2MDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYgKzIz
NywxMSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgaWYgKCFvayB8fCBo
IDwgMCkKICAgICAgICAgaCA9IERlZmF1bHRIZWlnaHQ7CiAKKyAgICBpZiAobV9jb250ZXh0ICYm
IG1fY29udGV4dC0+aXMyZCgpKSB7CisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCog
Y29udGV4dDJEID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250
ZXh0LmdldCgpKTsKKyAgICAgICAgY29udGV4dDJELT5yZXNldCgpOworICAgIH0KKwogICAgIElu
dFNpemUgb2xkU2l6ZSA9IHNpemUoKTsKICAgICBzZXRTdXJmYWNlU2l6ZShJbnRTaXplKHcsIGgp
KTsgLy8gVGhlIGltYWdlIGJ1ZmZlciBnZXRzIGNsZWFyZWQgaGVyZS4KIApAQCAtMjQ1LDExICsy
NTAsNiBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgICAgIHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lk
dGgoKSwgaGVpZ2h0KCkpOwogI2VuZGlmCiAKLSAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4
dC0+aXMyZCgpKSB7Ci0gICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dDJE
ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0LmdldCgp
KTsKLSAgICAgICAgY29udGV4dDJELT5yZXNldCgpOwotICAgIH0KLQogICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAobV9yZW5k
ZXJlcklzQ2FudmFzKSB7CiAgICAgICAgICAgICBpZiAob2xkU2l6ZSAhPSBzaXplKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDkzNjA1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDkgKzEyNyw4IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW4KICAg
ICBzZXRMaW5lV2lkdGgobGluZVdpZHRoKCkpOwogfQogCi1DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnVud2luZFN0YXRlU3RhY2soKQogewotI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgc3RhdGUgc3RhY2sgaW4gdGhlIEltYWdlQnVmZmVyJ3MgY29udGV4
dAogICAgIC8vIGlzIGNsZWFyZWQgYmVmb3JlIGRlc3RydWN0aW9uLCB0byBhdm9pZCBhc3NlcnRp
b25zIGluIHRoZQogICAgIC8vIEdyYXBoaWNzQ29udGV4dCBkdG9yLgpAQCAtMTM5LDYgKzEzOCwx
MiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJpCiAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICB9CiAgICAgfQorfQorCitDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKQoreworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICB1bndpbmRTdGF0ZVN0YWNrKCk7CiAjZW5kaWYKIH0KIApAQCAt
MTcwLDYgKzE3NSw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwYWludHNJbnQK
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKIHsKKyAgICB1bndpbmRT
dGF0ZVN0YWNrKCk7CiAgICAgbV9zdGF0ZVN0YWNrLnJlc2l6ZSgxKTsKICAgICBtX3N0YXRlU3Rh
Y2suZmlyc3QoKSA9IFN0YXRlKCk7CiAgICAgbV9wYXRoLmNsZWFyKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aAkocmV2aXNpb24gOTM2MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3Myw4IEBAIHBy
aXZhdGU6CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAK
KyAgICB2b2lkIHVud2luZFN0YXRlU3RhY2soKTsKKwogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0
ZXJuKCk7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDkzNjE3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTEtMDgtMjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgQXNzZXJ0aW9uIGZpcmVzIGlmIGNhbnZhcyBpcyByZXNpemVkIHdo
aWxlIHNhdmUoKSBhY3RpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY2NzEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUtc2F2ZS1hY3RpdmUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUtc2F2ZS1hY3Rp
dmUuaHRtbDogQWRkZWQuCisKIDIwMTEtMDctMjUgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIGRpdiBhbGlnbj0iY2VudGVyIiByZW5kZXJpbmcgcHJvYmxlbQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNpemUt
d2hpbGUtc2F2ZS1hY3RpdmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSBAQAorSWYgd2UgZ290IHRoaXMgZmFyIHdpdGhvdXQgYW4gYXNz
ZXJ0aW9uLCB0aGlzIHRlc3QgcGFzc2VkLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
cmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvcmVzaXplLXdoaWxlLXNhdmUtYWN0aXZlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNpemUtd2hpbGUtc2F2ZS1hY3RpdmUuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQor
PGhlYWQ+DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxjYW52YXMgaWQ9Im15Y2FudmFzIiB3aWR0aD0i
NTEyIiBoZWlnaHQ9IjUxMiI+PC9jYW52YXM+DQorPHNjcmlwdD4NCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQ0KKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCkN
Cit2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215Y2FudmFzJyk7DQordmFy
IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOw0KK2N0eC5maWxsU3R5bGUgPSAicmdiKDI1
NSwxNjUsMCkiOw0KK2N0eC5maWxsUmVjdCgwLCAwLCA1MTIsIDUxMik7DQorY3R4LnNhdmUoKTsN
CitjYW52YXMud2lkdGggPSAyNTY7DQorY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDE2NSwwKSI7
DQorY3R4LmZpbGxSZWN0KDAsIDAsIDI1NiwgNTEyKTsNCitkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIklmIHdlIGdvdCB0aGlzIGZhciB3aXRob3V0IGFuIGFzc2VydGlvbiwgdGhp
cyB0ZXN0IHBhc3NlZC4iKSk7DQorPC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCg==
</data>
<flag name="review"
          id="100865"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>