<?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>105508</bug_id>
          
          <creation_ts>2012-12-20 01:30:42 -0800</creation_ts>
          <short_desc>Proposal: Add fillRule to canvas</short_desc>
          <delta_ts>2013-01-21 22:37:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>https://github.com/mozilla/pdf.js/issues/2351</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="James Ascroft-Leigh">jwal</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>a.renevier</cc>
    
    <cc>cabanier</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>ian</cc>
    
    <cc>krit</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>795270</commentid>
    <comment_count>0</comment_count>
      <attachid>180297</attachid>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2012-12-20 01:30:42 -0800</bug_when>
    <thetext>Created attachment 180297
First-cut patch to expose the webkitFillRule canvas property

When a canvas path that intersects itself is filled there are multiple strategies for how to select regions that receive the fill.  The SVG standard has adopted two such strategies [11] which are called nonzero (default) and evenodd.

SVG is not the only vector graphics protocol to support these two strategies.  Quoting [1]: &quot;Some other languages/libraries that support even-odd fill (in alphabetical order): cairo, Direct2D, GDI, PDF, PostScript, Quartz, skia, and SVG.&quot;  In fact the WebKit abstract GraphicsContext [2], used for the implementation of CanvasRenderingContext2D, supports this property and uses the same nonzero/evenodd terminology to name the to strategies.

It has been proposed - in [3], [4] and [5] - that this property is incorporated into the HTML5 standard.  It has already been incorporated into the Mozilla Firefox web browser as the mozFillRule canvas attribute [6].  An application that makes use of this attribute is pdf.js [7] which is available as an experimental Google Chrome/Chromium plugin [8] but which fails to correctly render some PDFs due to this missing attribute in other browsers [10].

I propose that this property is added to WebKit&apos;s canvas as webkitFillRule.  Justification:

   - It is already a de-facto standard graphics operation with widespread implementation
   - The patch is likely to be small (example at [9]) since it only has to expose an existing graphics context property as a canvas property
   - The name webkitFillRule correctly implies that this is not yet a web standard property

As linked above, I have a patch which I have tested in a recent build of Chromium.  This will be my first attempt at a WebKit patch and I would really appreciate any assistance in improving the quality of the patch and getting it ready to merge.

References...

[1]  http://lists.w3.org/Archives/Public/public-whatwg-archive/2011Jun/0123.html
[2]  https://github.com/WebKit/webkit/blob/master/Source/WebCore/platform/graphics/GraphicsContext.cpp#L207
[3]  http://lists.w3.org/Archives/Public/public-whatwg-archive/2007May/0338.html
[4]  http://lists.w3.org/Archives/Public/public-whatwg-archive/2011Jun/0123.html
[5]  https://www.w3.org/Bugs/Public/show_bug.cgi?id=19932
[6]  http://hg.mozilla.org/mozilla-central/file/21195f52311c/dom/webidl/CanvasRenderingContext2D.webidl#l140
[7]  https://github.com/mozilla/pdf.js
[8]  https://github.com/mozilla/pdf.js/tree/master/extensions/chrome
[9]  https://github.com/WebKit/webkit/pull/3
[10] https://github.com/mozilla/pdf.js/issues/2351
[11] http://www.w3.org/TR/SVG/painting.html#FillProperties</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795276</commentid>
    <comment_count>1</comment_count>
      <attachid>180299</attachid>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2012-12-20 01:35:51 -0800</bug_when>
    <thetext>Created attachment 180299
First-cut patch to expose the webkitFillRule canvas property

The first patch was reversed.  This one is in the correct direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795346</commentid>
    <comment_count>2</comment_count>
      <attachid>180299</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 04:08:53 -0800</bug_when>
    <thetext>Comment on attachment 180299
First-cut patch to expose the webkitFillRule canvas property

Attachment 180299 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15446050

New failing tests:
inspector/profiler/canvas2d/canvas2d-api-changes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795376</commentid>
    <comment_count>3</comment_count>
      <attachid>180299</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 05:08:47 -0800</bug_when>
    <thetext>Comment on attachment 180299
First-cut patch to expose the webkitFillRule canvas property

Attachment 180299 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15412983

New failing tests:
inspector/profiler/canvas2d/canvas2d-api-changes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795672</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-12-20 12:35:18 -0800</bug_when>
    <thetext>I would like to see more discussion on the W3C and/or WHATWG lists before landing this. We generally only expose Web-facing API when it is in a draft specification, although it is interesting that Mozilla have an equivalent property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795711</commentid>
    <comment_count>5</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-12-20 13:07:36 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I would like to see more discussion on the W3C and/or WHATWG lists before landing this. We generally only expose Web-facing API when it is in a draft specification, although it is interesting that Mozilla have an equivalent property.

Yes, this new property will also intersect with the new Path API&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796143</commentid>
    <comment_count>6</comment_count>
      <attachid>180299</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-20 22:18:57 -0800</bug_when>
    <thetext>Comment on attachment 180299
First-cut patch to expose the webkitFillRule canvas property

Attachment 180299 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15457292

New failing tests:
inspector/profiler/canvas2d/canvas2d-api-changes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796160</commentid>
    <comment_count>7</comment_count>
      <attachid>180299</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-20 23:17:56 -0800</bug_when>
    <thetext>Comment on attachment 180299
First-cut patch to expose the webkitFillRule canvas property

Attachment 180299 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15456303

New failing tests:
inspector/profiler/canvas2d/canvas2d-api-changes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796422</commentid>
    <comment_count>8</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2012-12-21 12:37:08 -0800</bug_when>
    <thetext>The reason it&apos;s not in the spec is that y&apos;all haven&apos;t told the list that you&apos;re interested in implementing it — notice the emptiness under Safari/Chrome here for the &quot;fillRule&quot; row:

   http://wiki.whatwg.org/wiki/New_Features_Awaiting_Implementation_Interest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796423</commentid>
    <comment_count>9</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2012-12-21 12:38:01 -0800</bug_when>
    <thetext>(If you implement this exactly like Gecko has, don&apos;t prefix it, since that&apos;s then what I&apos;ll spec. If you want to do something different than Gecko, then mail the list and we&apos;ll figure out what it should be and then you can implement that, also without prefix. There shouldn&apos;t be a reason to put this in prefixed.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796761</commentid>
    <comment_count>10</comment_count>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2012-12-23 08:59:12 -0800</bug_when>
    <thetext>I&apos;m happy to put my name down as an &quot;interested implementer&quot; but I have not contributed to WebKit before so I am not sure if it is appropriate for me to make any declaration on behalf of Apple or Google.

I can confirm that my intention is for the property to behave the same way as mozFillRule and therefore I will rework the patch to name it fillRule (instead of the prefixed webkitFillRule).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796809</commentid>
    <comment_count>11</comment_count>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2012-12-23 13:16:59 -0800</bug_when>
    <thetext>I have started to document my (evolving) understanding of exactly how this should work.  This includes possible impacts on related areas of functionality that may need retesting after the implementation such as save().

https://github.com/jwal/webkit/wiki/fillRule-specification

I think the acceptance tests we need are fairly obvious from what I have so far.  Can anyone suggest something I have missed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797057</commentid>
    <comment_count>12</comment_count>
      <attachid>180692</attachid>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2012-12-24 15:25:58 -0800</bug_when>
    <thetext>Created attachment 180692
Patch to expose fillRule canvas property

Patch updated to expose the property as fillRule (instead of the prefixed webkitFillRule).  I also tried to fix the failing test, let&apos;s see what the buildbot thinks of the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797422</commentid>
    <comment_count>13</comment_count>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2012-12-26 17:14:16 -0800</bug_when>
    <thetext>I am starting to add some automated tests for this new feature:

https://github.com/jwal/html-testsuite/compare/master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797975</commentid>
    <comment_count>14</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-12-28 13:05:33 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I&apos;m happy to put my name down as an &quot;interested implementer&quot; but I have not contributed to WebKit before so I am not sure if it is appropriate for me to make any declaration on behalf of Apple or Google.
&gt; 
&gt; I can confirm that my intention is for the property to behave the same way as mozFillRule and therefore I will rework the patch to name it fillRule (instead of the prefixed webkitFillRule).

You don&apos;t have to worry to make additions to WebKit. However, you should announce this feature on webkit-dev@lists.webkit.org so the WebKit development community is aware of your work.

I agree with Ian that you shouldn&apos;t prefix your work. EOFill is a well understood, stable feature that won&apos;t change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797979</commentid>
    <comment_count>15</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-12-28 13:14:51 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=180692) [details]
&gt; Patch to expose fillRule canvas property
&gt; 
&gt; Patch updated to expose the property as fillRule (instead of the prefixed webkitFillRule).  I also tried to fix the failing test, let&apos;s see what the buildbot thinks of the change.

I think this feature needs more discussion.
Specifically I&apos;d like to not have the winding rule as part of the graphics state. There really is no reason since this is not a feature you want to have in the environment (like strokewidth, color, etc)

What I&apos;d like to see:
- make the fill rule flag part of the path syntax
- have separate eofill/eoclip for clipping/drawing with the current path
- extend canvas prose so outlines are defined to be unaffected by winding rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798624</commentid>
    <comment_count>16</comment_count>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2013-01-02 04:36:28 -0800</bug_when>
    <thetext>Thanks for the comments about the way this feature is exposed through the canvas API.  I think that a discussion on this topic would be healthy but perhaps this is not the correct forum.  I have just re-raised this proposal on the whatwg mailing list:

http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2013-January/038488.html

Hopefully we will get some more comments from there this time around.

Rik: As for your specific suggestions, clearly the eofill(), eoclip() and eoIsPointInPath() alternative would work.  I don&apos;t know how to decide between the two proposals except that one of them is more easily compatible with the Mozilla Firefox prefixed implementation.

As for the argument that the winding rule should not be part of the environment, I disagree that this would be a problem in practice.  Although I am not an expert canvas programmer, my initial impressions are that the API itself is inherently a stateful one.  As long as it is properly included in the state with save() and restore() then any client code wishing to make use of this feature wouldn&apos;t be much different for either of these APIs.

On the other hand, the only code I have seen which currently makes use of this in pdf.js might benefit from an eofill() function [1] instead of a fillRule property.  I suspect the reason it was added as a fillRule property in the first place was because this is how Cairo (a rendering backend used by Firefox) exposes the feature.  

How should we choose?

[1] It seems to want an eofill() method: https://github.com/mozilla/pdf.js/blob/1826daa1d522bc17015098e79cee7c6ca8fd3b36/src/canvas.js#L648</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798629</commentid>
    <comment_count>17</comment_count>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2013-01-02 04:45:03 -0800</bug_when>
    <thetext>I have also raised this on the webkit-dev@lists.webkit.org mailing list as suggested.

http://lists.webkit.org/pipermail/webkit-dev/2013-January/023209.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798732</commentid>
    <comment_count>18</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2013-01-02 10:56:03 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; I have also raised this on the webkit-dev@lists.webkit.org mailing list as suggested.
&gt; 
&gt; http://lists.webkit.org/pipermail/webkit-dev/2013-January/023209.html

Great! It&apos;s probably best to continue the conversation there.
I looked at Skia and they make winding part of the fill and clip call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>798739</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-01-02 11:04:12 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; I have also raised this on the webkit-dev@lists.webkit.org mailing list as suggested.
&gt; &gt; 
&gt; &gt; http://lists.webkit.org/pipermail/webkit-dev/2013-January/023209.html
&gt; 
&gt; Great! It&apos;s probably best to continue the conversation there.
&gt; I looked at Skia and they make winding part of the fill and clip call.

(In reply to comment #15)
&gt; (In reply to comment #12)
&gt; &gt; Created an attachment (id=180692) [details] [details]
&gt; &gt; Patch to expose fillRule canvas property
&gt; &gt; 
&gt; &gt; Patch updated to expose the property as fillRule (instead of the prefixed webkitFillRule).  I also tried to fix the failing test, let&apos;s see what the buildbot thinks of the change.
&gt; 
&gt; I think this feature needs more discussion.
&gt; Specifically I&apos;d like to not have the winding rule as part of the graphics state. There really is no reason since this is not a feature you want to have in the environment (like strokewidth, color, etc)
&gt; 
&gt; What I&apos;d like to see:
&gt; - make the fill rule flag part of the path syntax
&gt; - have separate eofill/eoclip for clipping/drawing with the current path
&gt; - extend canvas prose so outlines are defined to be unaffected by winding rules.

fillRule is already part of our graphics state. IIRC it is the default behavior on most 2d graphics libraries. IMO it makes most sense to add an fillRule attribute instead of changing the path syntax. And even if we could have clipRule and fillRule as separate attributes, it should not be a big deal to use the same attribute for both operations. Maybe it means that fillRule should be renamed to windingRule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799774</commentid>
    <comment_count>20</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2013-01-03 15:42:28 -0800</bug_when>
    <thetext>This is now in the spec.
http://whatwg.org/html/#dom-context-2d-fillrule</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799781</commentid>
    <comment_count>21</comment_count>
      <attachid>180692</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-03 15:48:27 -0800</bug_when>
    <thetext>Comment on attachment 180692
Patch to expose fillRule canvas property

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:427
&gt; +    WindRule rule;
&gt; +    if (!parseFillRule(s, rule))
&gt; +        return;
&gt; +    if (state().m_fillRule == rule)
&gt; +        return;
&gt; +    realizeSaves();
&gt; +    modifiableState().m_fillRule = rule;
&gt; +    GraphicsContext* c = drawingContext();
&gt; +    if (!c)
&gt; +        return;
&gt; +    c-&gt;setFillRule(rule);

This is the only interesting bit of this whole change.  I don&apos;t feel up-to-date enough on GraphicsContext to review this part, but otherwise thsi chagne LGTM.

&gt; Source/WebCore/platform/graphics/GraphicsTypes.cpp:111
&gt; +    ASSERT(rule &gt;= 0);
&gt; +    ASSERT(rule &lt; 2);
&gt; +    const char* const names[2] = { &quot;nonzero&quot;, &quot;evenodd&quot; };
&gt; +    return names[rule];

I might have written this as an if (rule == NonZero) return &quot;nonzero&quot;; return &quot;evenodd&quot;, to avoid any possible OOB, but this is also fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800239</commentid>
    <comment_count>22</comment_count>
      <attachid>181308</attachid>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2013-01-04 09:06:33 -0800</bug_when>
    <thetext>Created attachment 181308
Patch to expose fillRule canvas property

Rebase patch against trunk@138802</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800260</commentid>
    <comment_count>23</comment_count>
      <attachid>180692</attachid>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2013-01-04 09:20:58 -0800</bug_when>
    <thetext>Comment on attachment 180692
Patch to expose fillRule canvas property

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

&gt;&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:427
&gt;&gt; +    c-&gt;setFillRule(rule);
&gt; 
&gt; This is the only interesting bit of this whole change.  I don&apos;t feel up-to-date enough on GraphicsContext to review this part, but otherwise thsi chagne LGTM.

Indeed, and even this doesn&apos;t do very much apart from passing the call onto the lower level API.  To be honest I didn&apos;t think too hard about what should be done at this point but I took the other similar functions in the file as a template for this function.  For example https://github.com/jwal/webkit/blob/e8701c215ca234c43b119d3a3a1fe93f28deda34/Source/WebCore/platform/graphics/GraphicsTypes.cpp#L85

I tested this by creating a build of Chromium based on the modified WebKit and ran it on

  a) A modified version of the original webapp which originally led me to this missing feature
  b) Hand-crafted test case HTML files specifically for this new feature, based on canvas calls generated directly from the example SVG files in the SVG spec

I thought it was sufficient, for now, to perform just these directed tests on Chromium on GNU/Linux on x86_64.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsTypes.cpp:111
&gt;&gt; +    return names[rule];
&gt; 
&gt; I might have written this as an if (rule == NonZero) return &quot;nonzero&quot;; return &quot;evenodd&quot;, to avoid any possible OOB, but this is also fine.

I wrote it like this to be consistent with the other similar functions in this file.

Sorry the patch does not apply cleanly any more, the base version was: https://github.com/jwal/webkit/blob/e8701c215ca234c43b119d3a3a1fe93f28deda34/Source/WebCore/platform/graphics/GraphicsTypes.cpp#L85</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803775</commentid>
    <comment_count>24</comment_count>
    <who name="James Ascroft-Leigh">jwal</who>
    <bug_when>2013-01-09 15:20:25 -0800</bug_when>
    <thetext>Update:

After some discussion on the mailing list making this a fill-call-time option instead of a state property is being given the consideration it deserves.  There is a counter proposal to this one:

https://bugs.webkit.org/show_bug.cgi?id=106188

And there is also a proposal to change Mozilla Firefox to match that too:

https://bugzilla.mozilla.org/show_bug.cgi?id=827053

I personally believe that setting the winding rule as an option on the fill() call is a better API and am glad to see we aren&apos;t rushing into implementing an API we are going to regret later.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180297</attachid>
            <date>2012-12-20 01:30:42 -0800</date>
            <delta_ts>2012-12-20 01:35:51 -0800</delta_ts>
            <desc>First-cut patch to expose the webkitFillRule canvas property</desc>
            <filename>webkitFillRule.diff</filename>
            <type>text/plain</type>
            <size>5245</size>
            <attacher name="James Ascroft-Leigh">jwal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCmluZGV4IDAwZjM0MDAuLjNlYjM4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MTc2LDcgKzE3Niw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkK
ICAgICAsIG1fZmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tUkdCQShDb2xvcjo6Ymxh
Y2spKQogICAgICwgbV9saW5lV2lkdGgoMSkKICAgICAsIG1fbGluZUNhcChCdXR0Q2FwKQotICAg
ICwgbV9maWxsUnVsZShSVUxFX05PTlpFUk8pCiAgICAgLCBtX2xpbmVKb2luKE1pdGVySm9pbikK
ICAgICAsIG1fbWl0ZXJMaW1pdCgxMCkKICAgICAsIG1fc2hhZG93Qmx1cigwKQpAQCAtMjAxLDcg
KzIwMCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0
YXRlJiBvdGhlcikKICAgICAsIG1fZmlsbFN0eWxlKG90aGVyLm1fZmlsbFN0eWxlKQogICAgICwg
bV9saW5lV2lkdGgob3RoZXIubV9saW5lV2lkdGgpCiAgICAgLCBtX2xpbmVDYXAob3RoZXIubV9s
aW5lQ2FwKQotICAgICwgbV9maWxsUnVsZShvdGhlci5tX2ZpbGxSdWxlKQogICAgICwgbV9saW5l
Sm9pbihvdGhlci5tX2xpbmVKb2luKQogICAgICwgbV9taXRlckxpbWl0KG90aGVyLm1fbWl0ZXJM
aW1pdCkKICAgICAsIG1fc2hhZG93T2Zmc2V0KG90aGVyLm1fc2hhZG93T2Zmc2V0KQpAQCAtMjM3
LDcgKzIzNSw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGUmIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPShjb25zCiAgICAgbV9maWxsU3R5bGUgPSBv
dGhlci5tX2ZpbGxTdHlsZTsKICAgICBtX2xpbmVXaWR0aCA9IG90aGVyLm1fbGluZVdpZHRoOwog
ICAgIG1fbGluZUNhcCA9IG90aGVyLm1fbGluZUNhcDsKLSAgICBtX2ZpbGxSdWxlID0gb3RoZXIu
bV9maWxsUnVsZTsKICAgICBtX2xpbmVKb2luID0gb3RoZXIubV9saW5lSm9pbjsKICAgICBtX21p
dGVyTGltaXQgPSBvdGhlci5tX21pdGVyTGltaXQ7CiAgICAgbV9zaGFkb3dPZmZzZXQgPSBvdGhl
ci5tX3NoYWRvd09mZnNldDsKQEAgLTM5MiwxMSArMzg5LDYgQEAgU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6bGluZUNhcCgpIGNvbnN0CiAgICAgcmV0dXJuIGxpbmVDYXBOYW1lKHN0
YXRlKCkubV9saW5lQ2FwKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
d2Via2l0RmlsbFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiBmaWxsUnVsZU5hbWUoc3RhdGUo
KS5tX2ZpbGxSdWxlKTsKLX0KLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldExp
bmVDYXAoY29uc3QgU3RyaW5nJiBzKQogewogICAgIExpbmVDYXAgY2FwOwpAQCAtNDEyLDIxICs0
MDQsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUNhcChjb25zdCBT
dHJpbmcmIHMpCiAgICAgYy0+c2V0TGluZUNhcChjYXApOwogfQogCi12b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0V2Via2l0RmlsbFJ1bGUoY29uc3QgU3RyaW5nJiBzKQotewotICAg
IFdpbmRSdWxlIHJ1bGU7Ci0gICAgaWYgKCFwYXJzZUZpbGxSdWxlKHMsIHJ1bGUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsUnVsZSA9PSBydWxlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV9maWxs
UnVsZSA9IHJ1bGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsK
LSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRGaWxsUnVsZShydWxlKTsK
LX0KLQogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6bGluZUpvaW4oKSBjb25zdAog
ewogICAgIHJldHVybiBsaW5lSm9pbk5hbWUoc3RhdGUoKS5tX2xpbmVKb2luKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgK
aW5kZXggZTI3MjYwMC4uNDYzNzEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTc4LDkgKzc4LDYgQEAgcHVi
bGljOgogICAgIFN0cmluZyBsaW5lQ2FwKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMaW5lQ2FwKGNv
bnN0IFN0cmluZyYpOwogCi0gICAgU3RyaW5nIHdlYmtpdEZpbGxSdWxlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRXZWJraXRGaWxsUnVsZShjb25zdCBTdHJpbmcmKTsKLQogICAgIFN0cmluZyBsaW5l
Sm9pbigpIGNvbnN0OwogICAgIHZvaWQgc2V0TGluZUpvaW4oY29uc3QgU3RyaW5nJik7CiAKQEAg
LTI0Nyw3ICsyNDQsNiBAQCBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Q2FudmFzU3R5bGU+IG1f
ZmlsbFN0eWxlOwogICAgICAgICBmbG9hdCBtX2xpbmVXaWR0aDsKICAgICAgICAgTGluZUNhcCBt
X2xpbmVDYXA7Ci0gICAgICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CiAgICAgICAgIExpbmVKb2lu
IG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKICAgICAgICAgRmxvYXRT
aXplIG1fc2hhZG93T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKaW5kZXggYTA1YmQ1Mi4uNmJmYzU5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaWRsCkBAIC02Myw3ICs2Myw2IEBAIGludGVyZmFjZSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICAgICAgcmFpc2VzIChE
T01FeGNlcHRpb24pOwogCiAgICAgYXR0cmlidXRlIGZsb2F0IGxpbmVXaWR0aDsKLSAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHdlYmtpdEZpbGxSdWxlOwogICAgIFtUcmVhdE51bGxBcz1OdWxsU3Ry
aW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxpbmVDYXA7CiAgICAgW1RyZWF0TnVsbEFzPU51bGxT
dHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgbGluZUpvaW47CiAgICAgYXR0cmlidXRlIGZsb2F0
IG1pdGVyTGltaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuY3BwCmluZGV4IDFiNTA2N2MuLmY2MTdjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC04MiwxOSAr
ODIsNiBAQCBib29sIHBhcnNlTGluZUNhcChjb25zdCBTdHJpbmcmIHMsIExpbmVDYXAmIGNhcCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgcGFyc2VGaWxsUnVsZShjb25zdCBTdHJpbmcm
IHMsIFdpbmRSdWxlJiBydWxlKQotewotICAgIGlmIChzID09ICJub256ZXJvIikgewotICAgICAg
ICBydWxlID0gUlVMRV9OT05aRVJPOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKHMgPT0gImV2ZW5vZGQiKSB7Ci0gICAgICAgIHJ1bGUgPSBSVUxFX0VWRU5PREQ7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFN0cmluZyBs
aW5lQ2FwTmFtZShMaW5lQ2FwIGNhcCkKIHsKICAgICBBU1NFUlQoY2FwID49IDApOwpAQCAtMTAz
LDE0ICs5MCw2IEBAIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwIGNhcCkKICAgICByZXR1cm4g
bmFtZXNbY2FwXTsKIH0KIAotU3RyaW5nIGZpbGxSdWxlTmFtZShXaW5kUnVsZSBydWxlKQotewot
ICAgIEFTU0VSVChydWxlID49IDApOwotICAgIEFTU0VSVChydWxlIDwgMik7Ci0gICAgY29uc3Qg
Y2hhciogY29uc3QgbmFtZXNbMl0gPSB7ICJub256ZXJvIiwgImV2ZW5vZGQiIH07Ci0gICAgcmV0
dXJuIG5hbWVzW3J1bGVdOwotfQotCiBib29sIHBhcnNlTGluZUpvaW4oY29uc3QgU3RyaW5nJiBz
LCBMaW5lSm9pbiYgam9pbikKIHsKICAgICBpZiAocyA9PSAibWl0ZXIiKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggMTE3MTVm
OC4uMWQxYjdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBHcmFwaGljc1R5cGVzX2gK
ICNkZWZpbmUgR3JhcGhpY3NUeXBlc19oCiAKLSNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg5LDkgKzg4LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwKTsK
ICAgICBib29sIHBhcnNlTGluZUNhcChjb25zdCBTdHJpbmcmLCBMaW5lQ2FwJik7CiAKLSAgICBT
dHJpbmcgZmlsbFJ1bGVOYW1lKFdpbmRSdWxlKTsKLSAgICBib29sIHBhcnNlRmlsbFJ1bGUoY29u
c3QgU3RyaW5nJiwgV2luZFJ1bGUmKTsKLQogICAgIFN0cmluZyBsaW5lSm9pbk5hbWUoTGluZUpv
aW4pOwogICAgIGJvb2wgcGFyc2VMaW5lSm9pbihjb25zdCBTdHJpbmcmLCBMaW5lSm9pbiYpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180299</attachid>
            <date>2012-12-20 01:35:51 -0800</date>
            <delta_ts>2013-01-21 22:37:17 -0800</delta_ts>
            <desc>First-cut patch to expose the webkitFillRule canvas property</desc>
            <filename>webkitFillRule.diff</filename>
            <type>text/plain</type>
            <size>5245</size>
            <attacher name="James Ascroft-Leigh">jwal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCmluZGV4IDNlYjM4YTEuLjAwZjM0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MTc2LDYgKzE3Niw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkK
ICAgICAsIG1fZmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tUkdCQShDb2xvcjo6Ymxh
Y2spKQogICAgICwgbV9saW5lV2lkdGgoMSkKICAgICAsIG1fbGluZUNhcChCdXR0Q2FwKQorICAg
ICwgbV9maWxsUnVsZShSVUxFX05PTlpFUk8pCiAgICAgLCBtX2xpbmVKb2luKE1pdGVySm9pbikK
ICAgICAsIG1fbWl0ZXJMaW1pdCgxMCkKICAgICAsIG1fc2hhZG93Qmx1cigwKQpAQCAtMjAwLDYg
KzIwMSw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0
YXRlJiBvdGhlcikKICAgICAsIG1fZmlsbFN0eWxlKG90aGVyLm1fZmlsbFN0eWxlKQogICAgICwg
bV9saW5lV2lkdGgob3RoZXIubV9saW5lV2lkdGgpCiAgICAgLCBtX2xpbmVDYXAob3RoZXIubV9s
aW5lQ2FwKQorICAgICwgbV9maWxsUnVsZShvdGhlci5tX2ZpbGxSdWxlKQogICAgICwgbV9saW5l
Sm9pbihvdGhlci5tX2xpbmVKb2luKQogICAgICwgbV9taXRlckxpbWl0KG90aGVyLm1fbWl0ZXJM
aW1pdCkKICAgICAsIG1fc2hhZG93T2Zmc2V0KG90aGVyLm1fc2hhZG93T2Zmc2V0KQpAQCAtMjM1
LDYgKzIzNyw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGUmIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPShjb25zCiAgICAgbV9maWxsU3R5bGUgPSBv
dGhlci5tX2ZpbGxTdHlsZTsKICAgICBtX2xpbmVXaWR0aCA9IG90aGVyLm1fbGluZVdpZHRoOwog
ICAgIG1fbGluZUNhcCA9IG90aGVyLm1fbGluZUNhcDsKKyAgICBtX2ZpbGxSdWxlID0gb3RoZXIu
bV9maWxsUnVsZTsKICAgICBtX2xpbmVKb2luID0gb3RoZXIubV9saW5lSm9pbjsKICAgICBtX21p
dGVyTGltaXQgPSBvdGhlci5tX21pdGVyTGltaXQ7CiAgICAgbV9zaGFkb3dPZmZzZXQgPSBvdGhl
ci5tX3NoYWRvd09mZnNldDsKQEAgLTM4OSw2ICszOTIsMTEgQEAgU3RyaW5nIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6bGluZUNhcCgpIGNvbnN0CiAgICAgcmV0dXJuIGxpbmVDYXBOYW1lKHN0
YXRlKCkubV9saW5lQ2FwKTsKIH0KIAorU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
d2Via2l0RmlsbFJ1bGUoKSBjb25zdAoreworICAgIHJldHVybiBmaWxsUnVsZU5hbWUoc3RhdGUo
KS5tX2ZpbGxSdWxlKTsKK30KKwogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldExp
bmVDYXAoY29uc3QgU3RyaW5nJiBzKQogewogICAgIExpbmVDYXAgY2FwOwpAQCAtNDA0LDYgKzQx
MiwyMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUNhcChjb25zdCBT
dHJpbmcmIHMpCiAgICAgYy0+c2V0TGluZUNhcChjYXApOwogfQogCit2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0V2Via2l0RmlsbFJ1bGUoY29uc3QgU3RyaW5nJiBzKQoreworICAg
IFdpbmRSdWxlIHJ1bGU7CisgICAgaWYgKCFwYXJzZUZpbGxSdWxlKHMsIHJ1bGUpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkubV9maWxsUnVsZSA9PSBydWxlKQorICAgICAgICBy
ZXR1cm47CisgICAgcmVhbGl6ZVNhdmVzKCk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9maWxs
UnVsZSA9IHJ1bGU7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsK
KyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBjLT5zZXRGaWxsUnVsZShydWxlKTsK
K30KKwogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6bGluZUpvaW4oKSBjb25zdAog
ewogICAgIHJldHVybiBsaW5lSm9pbk5hbWUoc3RhdGUoKS5tX2xpbmVKb2luKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgK
aW5kZXggNDYzNzEyZS4uZTI3MjYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTc4LDYgKzc4LDkgQEAgcHVi
bGljOgogICAgIFN0cmluZyBsaW5lQ2FwKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMaW5lQ2FwKGNv
bnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIHdlYmtpdEZpbGxSdWxlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRXZWJraXRGaWxsUnVsZShjb25zdCBTdHJpbmcmKTsKKwogICAgIFN0cmluZyBsaW5l
Sm9pbigpIGNvbnN0OwogICAgIHZvaWQgc2V0TGluZUpvaW4oY29uc3QgU3RyaW5nJik7CiAKQEAg
LTI0NCw2ICsyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Q2FudmFzU3R5bGU+IG1f
ZmlsbFN0eWxlOwogICAgICAgICBmbG9hdCBtX2xpbmVXaWR0aDsKICAgICAgICAgTGluZUNhcCBt
X2xpbmVDYXA7CisgICAgICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CiAgICAgICAgIExpbmVKb2lu
IG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKICAgICAgICAgRmxvYXRT
aXplIG1fc2hhZG93T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKaW5kZXggNmJmYzU5NC4uYTA1YmQ1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaWRsCkBAIC02Myw2ICs2Myw3IEBAIGludGVyZmFjZSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICAgICAgcmFpc2VzIChE
T01FeGNlcHRpb24pOwogCiAgICAgYXR0cmlidXRlIGZsb2F0IGxpbmVXaWR0aDsKKyAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHdlYmtpdEZpbGxSdWxlOwogICAgIFtUcmVhdE51bGxBcz1OdWxsU3Ry
aW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxpbmVDYXA7CiAgICAgW1RyZWF0TnVsbEFzPU51bGxT
dHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgbGluZUpvaW47CiAgICAgYXR0cmlidXRlIGZsb2F0
IG1pdGVyTGltaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuY3BwCmluZGV4IGY2MTdjYzUuLjFiNTA2N2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC04Miw2ICs4
MiwxOSBAQCBib29sIHBhcnNlTGluZUNhcChjb25zdCBTdHJpbmcmIHMsIExpbmVDYXAmIGNhcCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgcGFyc2VGaWxsUnVsZShjb25zdCBTdHJpbmcm
IHMsIFdpbmRSdWxlJiBydWxlKQoreworICAgIGlmIChzID09ICJub256ZXJvIikgeworICAgICAg
ICBydWxlID0gUlVMRV9OT05aRVJPOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKHMgPT0gImV2ZW5vZGQiKSB7CisgICAgICAgIHJ1bGUgPSBSVUxFX0VWRU5PREQ7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFN0cmluZyBs
aW5lQ2FwTmFtZShMaW5lQ2FwIGNhcCkKIHsKICAgICBBU1NFUlQoY2FwID49IDApOwpAQCAtOTAs
NiArMTAzLDE0IEBAIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwIGNhcCkKICAgICByZXR1cm4g
bmFtZXNbY2FwXTsKIH0KIAorU3RyaW5nIGZpbGxSdWxlTmFtZShXaW5kUnVsZSBydWxlKQorewor
ICAgIEFTU0VSVChydWxlID49IDApOworICAgIEFTU0VSVChydWxlIDwgMik7CisgICAgY29uc3Qg
Y2hhciogY29uc3QgbmFtZXNbMl0gPSB7ICJub256ZXJvIiwgImV2ZW5vZGQiIH07CisgICAgcmV0
dXJuIG5hbWVzW3J1bGVdOworfQorCiBib29sIHBhcnNlTGluZUpvaW4oY29uc3QgU3RyaW5nJiBz
LCBMaW5lSm9pbiYgam9pbikKIHsKICAgICBpZiAocyA9PSAibWl0ZXIiKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggMWQxYjdl
MC4uMTE3MTVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBHcmFwaGljc1R5cGVzX2gK
ICNkZWZpbmUgR3JhcGhpY3NUeXBlc19oCiAKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg4LDYgKzg5LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwKTsK
ICAgICBib29sIHBhcnNlTGluZUNhcChjb25zdCBTdHJpbmcmLCBMaW5lQ2FwJik7CiAKKyAgICBT
dHJpbmcgZmlsbFJ1bGVOYW1lKFdpbmRSdWxlKTsKKyAgICBib29sIHBhcnNlRmlsbFJ1bGUoY29u
c3QgU3RyaW5nJiwgV2luZFJ1bGUmKTsKKwogICAgIFN0cmluZyBsaW5lSm9pbk5hbWUoTGluZUpv
aW4pOwogICAgIGJvb2wgcGFyc2VMaW5lSm9pbihjb25zdCBTdHJpbmcmLCBMaW5lSm9pbiYpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180692</attachid>
            <date>2012-12-24 15:25:58 -0800</date>
            <delta_ts>2013-01-04 09:20:58 -0800</delta_ts>
            <desc>Patch to expose fillRule canvas property</desc>
            <filename>master.diff.txt</filename>
            <type>text/plain</type>
            <size>5750</size>
            <attacher name="James Ascroft-Leigh">jwal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9jYW52YXMyZC9jYW52
YXMyZC1hcGktY2hhbmdlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2Nh
bnZhczJkL2NhbnZhczJkLWFwaS1jaGFuZ2VzLmh0bWwKaW5kZXggNzllN2EzMy4uMDAyMDBiOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZh
czJkLWFwaS1jaGFuZ2VzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVy
L2NhbnZhczJkL2NhbnZhczJkLWFwaS1jaGFuZ2VzLmh0bWwKQEAgLTEyLDYgKzEyLDcgQEAKIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFJlc291cmNlLkF0dHJpYnV0ZVByb3BlcnRpZXMgPSBbCiAg
ICAgInN0cm9rZVN0eWxlIiwKICAgICAiZmlsbFN0eWxlIiwKKyAgICAiZmlsbFJ1bGUiLAogICAg
ICJnbG9iYWxBbHBoYSIsCiAgICAgImxpbmVXaWR0aCIsCiAgICAgImxpbmVDYXAiLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKaW5kZXggM2ViMzhhMS4uMzBkOWMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNzYsNiAr
MTc2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKICAgICAsIG1f
ZmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tUkdCQShDb2xvcjo6YmxhY2spKQogICAg
ICwgbV9saW5lV2lkdGgoMSkKICAgICAsIG1fbGluZUNhcChCdXR0Q2FwKQorICAgICwgbV9maWxs
UnVsZShSVUxFX05PTlpFUk8pCiAgICAgLCBtX2xpbmVKb2luKE1pdGVySm9pbikKICAgICAsIG1f
bWl0ZXJMaW1pdCgxMCkKICAgICAsIG1fc2hhZG93Qmx1cigwKQpAQCAtMjAwLDYgKzIwMSw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgLCBtX2ZpbGxTdHls
ZShvdGhlci5tX2ZpbGxTdHlsZSkKICAgICAsIG1fbGluZVdpZHRoKG90aGVyLm1fbGluZVdpZHRo
KQogICAgICwgbV9saW5lQ2FwKG90aGVyLm1fbGluZUNhcCkKKyAgICAsIG1fZmlsbFJ1bGUob3Ro
ZXIubV9maWxsUnVsZSkKICAgICAsIG1fbGluZUpvaW4ob3RoZXIubV9saW5lSm9pbikKICAgICAs
IG1fbWl0ZXJMaW1pdChvdGhlci5tX21pdGVyTGltaXQpCiAgICAgLCBtX3NoYWRvd09mZnNldChv
dGhlci5tX3NoYWRvd09mZnNldCkKQEAgLTIzNSw2ICsyMzcsNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6cmVzZXQoKQogICAgIG1fZmlsbFN0eWxlID0gb3RoZXIubV9maWxsU3R5
bGU7CiAgICAgbV9saW5lV2lkdGggPSBvdGhlci5tX2xpbmVXaWR0aDsKICAgICBtX2xpbmVDYXAg
PSBvdGhlci5tX2xpbmVDYXA7CisgICAgbV9maWxsUnVsZSA9IG90aGVyLm1fZmlsbFJ1bGU7CiAg
ICAgbV9saW5lSm9pbiA9IG90aGVyLm1fbGluZUpvaW47CiAgICAgbV9taXRlckxpbWl0ID0gb3Ro
ZXIubV9taXRlckxpbWl0OwogICAgIG1fc2hhZG93T2Zmc2V0ID0gb3RoZXIubV9zaGFkb3dPZmZz
ZXQ7CkBAIC0zODksNiArMzkyLDExIEBAIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmxpbmVDYXAoKSBjb25zdAogICAgIHJldHVybiBsaW5lQ2FwTmFtZShzdGF0ZSgpLm1fbGluZUNh
cCk7CiB9CiAKK1N0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxSdWxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmlsbFJ1bGVOYW1lKHN0YXRlKCkubV9maWxsUnVsZSk7Cit9CisK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lQ2FwKGNvbnN0IFN0cmluZyYg
cykKIHsKICAgICBMaW5lQ2FwIGNhcDsKQEAgLTQwNCw2ICs0MTIsMjEgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVDYXAoY29uc3QgU3RyaW5nJiBzKQogICAgIGMtPnNl
dExpbmVDYXAoY2FwKTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZp
bGxSdWxlKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBXaW5kUnVsZSBydWxlOworICAgIGlmICgh
cGFyc2VGaWxsUnVsZShzLCBydWxlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGF0ZSgp
Lm1fZmlsbFJ1bGUgPT0gcnVsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygp
OworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZmlsbFJ1bGUgPSBydWxlOworICAgIEdyYXBoaWNz
Q29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1
cm47CisgICAgYy0+c2V0RmlsbFJ1bGUocnVsZSk7Cit9CisKIFN0cmluZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmxpbmVKb2luKCkgY29uc3QKIHsKICAgICByZXR1cm4gbGluZUpvaW5OYW1l
KHN0YXRlKCkubV9saW5lSm9pbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDQ2MzcxMmUuLmMwMzExMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCkBAIC03OCw2ICs3OCw5IEBAIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBTdHJpbmcgbGluZUNhcCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0TGluZUNhcChjb25zdCBTdHJpbmcmKTsKIAorICAgIFN0cmlu
ZyBmaWxsUnVsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RmlsbFJ1bGUoY29uc3QgU3RyaW5nJik7
CisKICAgICBTdHJpbmcgbGluZUpvaW4oKSBjb25zdDsKICAgICB2b2lkIHNldExpbmVKb2luKGNv
bnN0IFN0cmluZyYpOwogCkBAIC0yNDQsNiArMjQ3LDcgQEAgY2xhc3MgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgICAgICBSZWZQ
dHI8Q2FudmFzU3R5bGU+IG1fZmlsbFN0eWxlOwogICAgICAgICBmbG9hdCBtX2xpbmVXaWR0aDsK
ICAgICAgICAgTGluZUNhcCBtX2xpbmVDYXA7CisgICAgICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7
CiAgICAgICAgIExpbmVKb2luIG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1p
dDsKICAgICAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKaW5kZXgg
NmJmYzU5NC4uNzM1NjQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCkBAIC02Myw2ICs2Myw3IEBAIGludGVy
ZmFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsK
ICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCiAgICAgYXR0cmlidXRlIGZsb2F0IGxp
bmVXaWR0aDsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZpbGxSdWxlOwogICAgIFtUcmVhdE51
bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxpbmVDYXA7CiAgICAgW1RyZWF0
TnVsbEFzPU51bGxTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgbGluZUpvaW47CiAgICAgYXR0
cmlidXRlIGZsb2F0IG1pdGVyTGltaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IGY2MTdjYzUuLjFiNTA2N2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3Bw
CkBAIC04Miw2ICs4MiwxOSBAQCBib29sIHBhcnNlTGluZUNhcChjb25zdCBTdHJpbmcmIHMsIExp
bmVDYXAmIGNhcCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgcGFyc2VGaWxsUnVsZShj
b25zdCBTdHJpbmcmIHMsIFdpbmRSdWxlJiBydWxlKQoreworICAgIGlmIChzID09ICJub256ZXJv
IikgeworICAgICAgICBydWxlID0gUlVMRV9OT05aRVJPOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKHMgPT0gImV2ZW5vZGQiKSB7CisgICAgICAgIHJ1bGUgPSBSVUxFX0VW
RU5PREQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwIGNhcCkKIHsKICAgICBBU1NFUlQoY2FwID49
IDApOwpAQCAtOTAsNiArMTAzLDE0IEBAIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwIGNhcCkK
ICAgICByZXR1cm4gbmFtZXNbY2FwXTsKIH0KIAorU3RyaW5nIGZpbGxSdWxlTmFtZShXaW5kUnVs
ZSBydWxlKQoreworICAgIEFTU0VSVChydWxlID49IDApOworICAgIEFTU0VSVChydWxlIDwgMik7
CisgICAgY29uc3QgY2hhciogY29uc3QgbmFtZXNbMl0gPSB7ICJub256ZXJvIiwgImV2ZW5vZGQi
IH07CisgICAgcmV0dXJuIG5hbWVzW3J1bGVdOworfQorCiBib29sIHBhcnNlTGluZUpvaW4oY29u
c3QgU3RyaW5nJiBzLCBMaW5lSm9pbiYgam9pbikKIHsKICAgICBpZiAocyA9PSAibWl0ZXIiKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgK
aW5kZXggMWQxYjdlMC4uMTE3MTVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBHcmFw
aGljc1R5cGVzX2gKICNkZWZpbmUgR3JhcGhpY3NUeXBlc19oCiAKKyNpbmNsdWRlICJXaW5kUnVs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTg4LDYgKzg5LDkgQEAKICAgICBTdHJpbmcgbGluZUNhcE5hbWUoTGluZUNhcCk7CiAgICAgYm9v
bCBwYXJzZUxpbmVDYXAoY29uc3QgU3RyaW5nJiwgTGluZUNhcCYpOwogCisgICAgU3RyaW5nIGZp
bGxSdWxlTmFtZShXaW5kUnVsZSk7CisgICAgYm9vbCBwYXJzZUZpbGxSdWxlKGNvbnN0IFN0cmlu
ZyYsIFdpbmRSdWxlJik7CisKICAgICBTdHJpbmcgbGluZUpvaW5OYW1lKExpbmVKb2luKTsKICAg
ICBib29sIHBhcnNlTGluZUpvaW4oY29uc3QgU3RyaW5nJiwgTGluZUpvaW4mKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181308</attachid>
            <date>2013-01-04 09:06:33 -0800</date>
            <delta_ts>2013-01-04 09:06:33 -0800</delta_ts>
            <desc>Patch to expose fillRule canvas property</desc>
            <filename>master.diff</filename>
            <type>text/plain</type>
            <size>5753</size>
            <attacher name="James Ascroft-Leigh">jwal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9jYW52YXMyZC9jYW52
YXMyZC1hcGktY2hhbmdlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2Nh
bnZhczJkL2NhbnZhczJkLWFwaS1jaGFuZ2VzLmh0bWwKaW5kZXggNzllN2EzMy4uMDAyMDBiOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZh
czJkLWFwaS1jaGFuZ2VzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVy
L2NhbnZhczJkL2NhbnZhczJkLWFwaS1jaGFuZ2VzLmh0bWwKQEAgLTEyLDYgKzEyLDcgQEAKIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFJlc291cmNlLkF0dHJpYnV0ZVByb3BlcnRpZXMgPSBbCiAg
ICAgInN0cm9rZVN0eWxlIiwKICAgICAiZmlsbFN0eWxlIiwKKyAgICAiZmlsbFJ1bGUiLAogICAg
ICJnbG9iYWxBbHBoYSIsCiAgICAgImxpbmVXaWR0aCIsCiAgICAgImxpbmVDYXAiLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKaW5kZXggMTI5ZDJhNS4uMDViZjU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNzYsNiAr
MTc2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKICAgICAsIG1f
ZmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tUkdCQShDb2xvcjo6YmxhY2spKQogICAg
ICwgbV9saW5lV2lkdGgoMSkKICAgICAsIG1fbGluZUNhcChCdXR0Q2FwKQorICAgICwgbV9maWxs
UnVsZShSVUxFX05PTlpFUk8pCiAgICAgLCBtX2xpbmVKb2luKE1pdGVySm9pbikKICAgICAsIG1f
bWl0ZXJMaW1pdCgxMCkKICAgICAsIG1fc2hhZG93Qmx1cigwKQpAQCAtMjAxLDYgKzIwMiw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAgLCBtX2ZpbGxTdHls
ZShvdGhlci5tX2ZpbGxTdHlsZSkKICAgICAsIG1fbGluZVdpZHRoKG90aGVyLm1fbGluZVdpZHRo
KQogICAgICwgbV9saW5lQ2FwKG90aGVyLm1fbGluZUNhcCkKKyAgICAsIG1fZmlsbFJ1bGUob3Ro
ZXIubV9maWxsUnVsZSkKICAgICAsIG1fbGluZUpvaW4ob3RoZXIubV9saW5lSm9pbikKICAgICAs
IG1fbWl0ZXJMaW1pdChvdGhlci5tX21pdGVyTGltaXQpCiAgICAgLCBtX3NoYWRvd09mZnNldChv
dGhlci5tX3NoYWRvd09mZnNldCkKQEAgLTIzNyw2ICsyMzksNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6cmVzZXQoKQogICAgIG1fZmlsbFN0eWxlID0gb3RoZXIubV9maWxsU3R5
bGU7CiAgICAgbV9saW5lV2lkdGggPSBvdGhlci5tX2xpbmVXaWR0aDsKICAgICBtX2xpbmVDYXAg
PSBvdGhlci5tX2xpbmVDYXA7CisgICAgbV9maWxsUnVsZSA9IG90aGVyLm1fZmlsbFJ1bGU7CiAg
ICAgbV9saW5lSm9pbiA9IG90aGVyLm1fbGluZUpvaW47CiAgICAgbV9taXRlckxpbWl0ID0gb3Ro
ZXIubV9taXRlckxpbWl0OwogICAgIG1fc2hhZG93T2Zmc2V0ID0gb3RoZXIubV9zaGFkb3dPZmZz
ZXQ7CkBAIC0zOTIsNiArMzk1LDExIEBAIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmxpbmVDYXAoKSBjb25zdAogICAgIHJldHVybiBsaW5lQ2FwTmFtZShzdGF0ZSgpLm1fbGluZUNh
cCk7CiB9CiAKK1N0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxSdWxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmlsbFJ1bGVOYW1lKHN0YXRlKCkubV9maWxsUnVsZSk7Cit9CisK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lQ2FwKGNvbnN0IFN0cmluZyYg
cykKIHsKICAgICBMaW5lQ2FwIGNhcDsKQEAgLTQwNyw2ICs0MTUsMjEgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVDYXAoY29uc3QgU3RyaW5nJiBzKQogICAgIGMtPnNl
dExpbmVDYXAoY2FwKTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZp
bGxSdWxlKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBXaW5kUnVsZSBydWxlOworICAgIGlmICgh
cGFyc2VGaWxsUnVsZShzLCBydWxlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGF0ZSgp
Lm1fZmlsbFJ1bGUgPT0gcnVsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygp
OworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZmlsbFJ1bGUgPSBydWxlOworICAgIEdyYXBoaWNz
Q29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1
cm47CisgICAgYy0+c2V0RmlsbFJ1bGUocnVsZSk7Cit9CisKIFN0cmluZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmxpbmVKb2luKCkgY29uc3QKIHsKICAgICByZXR1cm4gbGluZUpvaW5OYW1l
KHN0YXRlKCkubV9saW5lSm9pbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IGZhZTg2YjIuLmFhOWJjZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCkBAIC03OCw2ICs3OCw5IEBAIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBTdHJpbmcgbGluZUNhcCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0TGluZUNhcChjb25zdCBTdHJpbmcmKTsKIAorICAgIFN0cmlu
ZyBmaWxsUnVsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RmlsbFJ1bGUoY29uc3QgU3RyaW5nJik7
CisKICAgICBTdHJpbmcgbGluZUpvaW4oKSBjb25zdDsKICAgICB2b2lkIHNldExpbmVKb2luKGNv
bnN0IFN0cmluZyYpOwogCkBAIC0yNDQsNiArMjQ3LDcgQEAgY2xhc3MgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgICAgICBSZWZQ
dHI8Q2FudmFzU3R5bGU+IG1fZmlsbFN0eWxlOwogICAgICAgICBmbG9hdCBtX2xpbmVXaWR0aDsK
ICAgICAgICAgTGluZUNhcCBtX2xpbmVDYXA7CisgICAgICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7
CiAgICAgICAgIExpbmVKb2luIG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1p
dDsKICAgICAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKaW5kZXgg
NmJmYzU5NC4uNzM1NjQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCkBAIC02Myw2ICs2Myw3IEBAIGludGVy
ZmFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsK
ICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCiAgICAgYXR0cmlidXRlIGZsb2F0IGxp
bmVXaWR0aDsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZpbGxSdWxlOwogICAgIFtUcmVhdE51
bGxBcz1OdWxsU3RyaW5nXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxpbmVDYXA7CiAgICAgW1RyZWF0
TnVsbEFzPU51bGxTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgbGluZUpvaW47CiAgICAgYXR0
cmlidXRlIGZsb2F0IG1pdGVyTGltaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDhkMTE1MDEuLmMyNTNiMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3Bw
CkBAIC0xMjAsNiArMTIwLDE5IEBAIGJvb2wgcGFyc2VMaW5lQ2FwKGNvbnN0IFN0cmluZyYgcywg
TGluZUNhcCYgY2FwKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBwYXJzZUZpbGxSdWxl
KGNvbnN0IFN0cmluZyYgcywgV2luZFJ1bGUmIHJ1bGUpCit7CisgICAgaWYgKHMgPT0gIm5vbnpl
cm8iKSB7CisgICAgICAgIHJ1bGUgPSBSVUxFX05PTlpFUk87CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBpZiAocyA9PSAiZXZlbm9kZCIpIHsKKyAgICAgICAgcnVsZSA9IFJVTEVf
RVZFTk9ERDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwogU3RyaW5nIGxpbmVDYXBOYW1lKExpbmVDYXAgY2FwKQogewogICAgIEFTU0VSVChjYXAg
Pj0gMCk7CkBAIC0xMjgsNiArMTQxLDE0IEBAIFN0cmluZyBsaW5lQ2FwTmFtZShMaW5lQ2FwIGNh
cCkKICAgICByZXR1cm4gbmFtZXNbY2FwXTsKIH0KIAorU3RyaW5nIGZpbGxSdWxlTmFtZShXaW5k
UnVsZSBydWxlKQoreworICAgIEFTU0VSVChydWxlID49IDApOworICAgIEFTU0VSVChydWxlIDwg
Mik7CisgICAgY29uc3QgY2hhciogY29uc3QgbmFtZXNbMl0gPSB7ICJub256ZXJvIiwgImV2ZW5v
ZGQiIH07CisgICAgcmV0dXJuIG5hbWVzW3J1bGVdOworfQorCiBib29sIHBhcnNlTGluZUpvaW4o
Y29uc3QgU3RyaW5nJiBzLCBMaW5lSm9pbiYgam9pbikKIHsKICAgICBpZiAocyA9PSAibWl0ZXIi
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmgKaW5kZXggNTg2ZjdlYy4uYzE3MWYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBH
cmFwaGljc1R5cGVzX2gKICNkZWZpbmUgR3JhcGhpY3NUeXBlc19oCiAKKyNpbmNsdWRlICJXaW5k
UnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTg4LDYgKzg5LDkgQEAKICAgICBTdHJpbmcgbGluZUNhcE5hbWUoTGluZUNhcCk7CiAgICAg
Ym9vbCBwYXJzZUxpbmVDYXAoY29uc3QgU3RyaW5nJiwgTGluZUNhcCYpOwogCisgICAgU3RyaW5n
IGZpbGxSdWxlTmFtZShXaW5kUnVsZSk7CisgICAgYm9vbCBwYXJzZUZpbGxSdWxlKGNvbnN0IFN0
cmluZyYsIFdpbmRSdWxlJik7CisKICAgICBTdHJpbmcgbGluZUpvaW5OYW1lKExpbmVKb2luKTsK
ICAgICBib29sIHBhcnNlTGluZUpvaW4oY29uc3QgU3RyaW5nJiwgTGluZUpvaW4mKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>