<?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>20838</bug_id>
          
          <creation_ts>2008-09-14 03:24:24 -0700</creation_ts>
          <short_desc>[CAIRO] needs getImageData and putImageData support</short_desc>
          <delta_ts>2008-09-23 14:33:52 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>Cairo</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alp</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91112</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-14 03:24:24 -0700</bug_when>
    <thetext>Cairo needs getImageData() support for HTML 5 and Canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91113</commentid>
    <comment_count>1</comment_count>
      <attachid>23408</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-14 03:30:09 -0700</bug_when>
    <thetext>Created attachment 23408
Cairo getImageData()

Added getImageData support to Cairo. Has the same logic as the Cg port but uses the stored m_surface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91123</commentid>
    <comment_count>2</comment_count>
      <attachid>23412</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-14 10:01:22 -0700</bug_when>
    <thetext>Created attachment 23412
Cairo getImageData()

added copyright.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91128</commentid>
    <comment_count>3</comment_count>
      <attachid>23413</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-14 11:19:10 -0700</bug_when>
    <thetext>Created attachment 23413
Cairo get/putImageData()

added putImageData() too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91338</commentid>
    <comment_count>4</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-09-16 01:31:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=23413) [edit]
&gt; Cairo get/putImageData()
&gt; 
&gt; added putImageData() too.
&gt; 

Can we use cairo_image_surface_get_stride() instead of cairo_format_stride_for_width() in some places here?

An assertion to ensure the surface passed in are image surfaces using cairo_surface_get_type() would be helpful too (to catch issues when we start to make use of more platform surfaces in future).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91345</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-16 03:57:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Can we use cairo_image_surface_get_stride() instead of
&gt; cairo_format_stride_for_width() in some places here?

You mean reaplce:

+int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, m_size.width());

by

+int stride;
+if (cairo_surface_get_type(m_surface) == CAIRO_SURFACE_TYPE_IMAGE)
+    stride = cairo_image_surface_get_stride(m_surface);
+else
+    stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, m_size.width());

and expanse it if necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91361</commentid>
    <comment_count>6</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-09-16 08:45:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Can we use cairo_image_surface_get_stride() instead of
&gt; &gt; cairo_format_stride_for_width() in some places here?
&gt; 
&gt; You mean reaplce:
&gt; 
&gt; +int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32,
&gt; m_size.width());
&gt; 
&gt; by
&gt; 
&gt; +int stride;
&gt; +if (cairo_surface_get_type(m_surface) == CAIRO_SURFACE_TYPE_IMAGE)
&gt; +    stride = cairo_image_surface_get_stride(m_surface);
&gt; +else
&gt; +    stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32,
&gt; m_size.width());
&gt; 
&gt; and expanse it if necessary?
&gt; 

Nope. I meant putting a cairo_surface_get_type() check is at the top as a debug ASSERT() since no cairo_image_surface_ functions all require an image surface.

I don&apos;t think you need to use cairo_format_stride_for_width() at all here. cairo_image_surface_get_stride() can be used both to get the source stride in one function and the destination stride in the other, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91367</commentid>
    <comment_count>7</comment_count>
      <attachid>23475</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-09-16 09:32:27 -0700</bug_when>
    <thetext>Created attachment 23475
Cairo get/putImageData() with ASSERT for image_surface

Added the asserts to get/putImageData and took cairo_image_surface_get_stride().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91373</commentid>
    <comment_count>8</comment_count>
      <attachid>23475</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-16 09:48:26 -0700</bug_when>
    <thetext>Comment on attachment 23475
Cairo get/putImageData() with ASSERT for image_surface

+    unsigned char* dataDst = result-&gt;data()-&gt;data().data();

LOL!

Looks fine, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92393</commentid>
    <comment_count>9</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-09-23 14:33:40 -0700</bug_when>
    <thetext>landed in r36813</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23408</attachid>
            <date>2008-09-14 03:30:09 -0700</date>
            <delta_ts>2008-09-14 10:01:22 -0700</delta_ts>
            <desc>Cairo getImageData()</desc>
            <filename>Cairo-getImageData.patch</filename>
            <type>text/plain</type>
            <size>3256</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjQwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDgtMDktMTQgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBn
ZXRJbWFnZURhdGEgc3VwcG9ydCB0byBDYWlyby4KKworICAgICAgICBbQ0FJUk9dIG5lZWRzIGdl
dEltYWdlRGF0YSBzdXBwb3J0CisgICAgICAgIFtodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4MzhdCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJ
bWFnZURhdGEpOgorCiAyMDA4LTA5LTEzICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3
ZWJraXQub3JnPgogCiAgICAgICAgIEd0ayBidWlsZCBmaXgsIG5vdCByZXZpZXdlZC4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAkocmV2aXNpb24gMzYzNjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMCArODMsNjQg
QEAgSW1hZ2UqIEltYWdlQnVmZmVyOjppbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1hZ2Uu
Z2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmKSBjb25zdAorUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiByZXN1bHQgPSBJbWFnZURh
dGE6OmNyZWF0ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZSk7Cisg
ICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHJlc3VsdC0+ZGF0YSgpLT5kYXRhKCkuZGF0YSgp
OworCisgICAgaW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJm
YWNlKTsKKyAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1f
c3VyZmFjZSk7CisKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCAocmVj
dC54KCkgKyByZWN0LndpZHRoKCkpID4gd2lkdGggfHwgKHJlY3QueSgpICsgcmVjdC5oZWlnaHQo
KSkgPiBoZWlnaHQpCisgICAgICAgIG1lbXNldChkYXRhU3JjLCAwLCByZXN1bHQtPmRhdGEoKS0+
bGVuZ3RoKCkpOworCisgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKKyAgICBpbnQgZGVzdHgg
PSAwOworICAgIGlmIChvcmlnaW54IDwgMCkgeworICAgICAgICBkZXN0eCA9IC1vcmlnaW54Owor
ICAgICAgICBvcmlnaW54ID0gMDsKKyAgICB9CisgICAgaW50IGVuZHggPSByZWN0LngoKSArIHJl
Y3Qud2lkdGgoKTsKKyAgICBpZiAoZW5keCA+IHdpZHRoKQorICAgICAgICBlbmR4ID0gd2lkdGg7
CisgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKKworICAgIGludCBvcmlnaW55
ID0gcmVjdC55KCk7CisgICAgaW50IGRlc3R5ID0gMDsKKyAgICBpZiAob3JpZ2lueSA8IDApIHsK
KyAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKKyAgICAgICAgb3JpZ2lueSA9IDA7CisgICAgfQor
ICAgIGludCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGlmIChlbmR5ID4g
aGVpZ2h0KQorICAgICAgICBlbmR5ID0gaGVpZ2h0OworICAgIGludCBudW1Sb3dzID0gZW5keSAt
IG9yaWdpbnk7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lk
dGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgpOworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdyA9IDQgKiByZWN0LndpZHRoKCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9
IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpy
b3cgPSBkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KTsKKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgIHVpbnQzMl90ICpwaXhl
bCA9ICh1aW50MzJfdCAqKSByb3cgKyB4ICsgb3JpZ2lueDsKKyAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OworICAgICAgICAgICAgaWYgKHVuc2lnbmVkIGludCBhbHBoYSA9ICgqcGl4ZWwg
JiAweGZmMDAwMDAwKSA+PiAyNCkgeworICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
ICgqcGl4ZWwgJiAweDAwZmYwMDAwKSA+PiAxNjsKKyAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gKCpwaXhlbCAmIDB4MDAwMGZmMDApID4+IDg7CisgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9ICgqcGl4ZWwgJiAweDAwMDAwMGZmKTsKKyAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNl
eClbMF0gPSBwaXhlbFswXTsKKyAgICAgICAgfQorICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0
ZXNQZXJSb3c7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQ
b2ludCYpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23412</attachid>
            <date>2008-09-14 10:01:22 -0700</date>
            <delta_ts>2008-09-14 11:19:10 -0700</delta_ts>
            <desc>Cairo getImageData()</desc>
            <filename>Cairo-getImageData.patch</filename>
            <type>text/plain</type>
            <size>3606</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjQwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDgtMDktMTQgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBn
ZXRJbWFnZURhdGEgc3VwcG9ydCB0byBDYWlyby4KKworICAgICAgICBbQ0FJUk9dIG5lZWRzIGdl
dEltYWdlRGF0YSBzdXBwb3J0CisgICAgICAgIFtodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4MzhdCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJ
bWFnZURhdGEpOgorCiAyMDA4LTA5LTEzICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3
ZWJraXQub3JnPgogCiAgICAgICAgIEd0ayBidWlsZCBmaXgsIG5vdCByZXZpZXdlZC4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAkocmV2aXNpb24gMzYzNjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1bHpl
IDx2YnM4NUBnbXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDEw
ICs4NCw2NCBAQCBJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKICAgICByZXR1cm4g
bV9pbWFnZS5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpn
ZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlRGF0YT4g
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3N1cmZhY2Up
CisgICAgICAgIHJldHVybiAwOworCisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9
IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgdW5z
aWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJm
YWNlKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCktPmRhdGEo
KS5kYXRhKCk7CisKKyAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChtX3N1cmZhY2UpOworICAgIGludCBoZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQobV9zdXJmYWNlKTsKKworICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAw
IHx8IChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSkgPiB3aWR0aCB8fCAocmVjdC55KCkgKyByZWN0
LmhlaWdodCgpKSA+IGhlaWdodCkKKyAgICAgICAgbWVtc2V0KGRhdGFTcmMsIDAsIHJlc3VsdC0+
ZGF0YSgpLT5sZW5ndGgoKSk7CisKKyAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOworICAgIGlu
dCBkZXN0eCA9IDA7CisgICAgaWYgKG9yaWdpbnggPCAwKSB7CisgICAgICAgIGRlc3R4ID0gLW9y
aWdpbng7CisgICAgICAgIG9yaWdpbnggPSAwOworICAgIH0KKyAgICBpbnQgZW5keCA9IHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpOworICAgIGlmIChlbmR4ID4gd2lkdGgpCisgICAgICAgIGVuZHgg
PSB3aWR0aDsKKyAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OworCisgICAgaW50
IG9yaWdpbnkgPSByZWN0LnkoKTsKKyAgICBpbnQgZGVzdHkgPSAwOworICAgIGlmIChvcmlnaW55
IDwgMCkgeworICAgICAgICBkZXN0eSA9IC1vcmlnaW55OworICAgICAgICBvcmlnaW55ID0gMDsK
KyAgICB9CisgICAgaW50IGVuZHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7CisgICAgaWYg
KGVuZHkgPiBoZWlnaHQpCisgICAgICAgIGVuZHkgPSBoZWlnaHQ7CisgICAgaW50IG51bVJvd3Mg
PSBlbmR5IC0gb3JpZ2lueTsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRl
X2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCk7CisgICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIGRl
c3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0Owor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgIHVuc2lnbmVk
IGNoYXIgKnJvdyA9IGRhdGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpOworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgdWludDMy
X3QgKnBpeGVsID0gKHVpbnQzMl90ICopIHJvdyArIHggKyBvcmlnaW54OworICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7CisgICAgICAgICAgICBpZiAodW5zaWduZWQgaW50IGFscGhhID0g
KCpwaXhlbCAmIDB4ZmYwMDAwMDApID4+IDI0KSB7CisgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gKCpwaXhlbCAmIDB4MDBmZjAwMDApID4+IDE2OworICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoKnBpeGVsICYgMHgwMDAwZmYwMCkgPj4gODsKKyAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKCpwaXhlbCAmIDB4MDAwMDAwZmYpOworICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93
cyArIGJhc2V4KVswXSA9IHBpeGVsWzBdOworICAgICAgICB9CisgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lk
IEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFBvaW50JikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23413</attachid>
            <date>2008-09-14 11:19:10 -0700</date>
            <delta_ts>2008-09-16 09:32:27 -0700</delta_ts>
            <desc>Cairo get/putImageData()</desc>
            <filename>Cairo-getImageData.patch</filename>
            <type>text/plain</type>
            <size>5957</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjQwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDktMTQgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
dXBwb3J0IGZvciBnZXRJbWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkKKyAgICAgICAgdG8g
Q2Fpcm8uCisKKyAgICAgICAgW0NBSVJPXSBuZWVkcyBnZXRJbWFnZURhdGEgYW5kIHB1dEltYWdl
RGF0YSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDgzOAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKwogMjAwOC0wOS0xMyAgSmFu
IE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBHdGsgYnVp
bGQgZml4LCBub3QgcmV2aWV3ZWQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDM2MzY4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVAZ214LmRlPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw2ICs1Myw5IEBAIGF1dG9fcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXQKIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihfY2Fpcm9fc3Vy
ZmFjZSogc3VyZmFjZSkKICAgICA6IG1fc3VyZmFjZShzdXJmYWNlKQogeworICAgIGludCB3aWR0
aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZSk7CisgICAgaW50IGhl
aWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UpOworICAgIG1f
c2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19j
cmVhdGUobV9zdXJmYWNlKTsKICAgICBtX2NvbnRleHQuc2V0KG5ldyBHcmFwaGljc0NvbnRleHQo
Y3IpKTsKIApAQCAtODMsMTUgKzg3LDExMiBAQCBJbWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0CitQYXNz
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgaWYgKCFtX3N1cmZhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9zdXJmYWNlKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVz
dWx0LT5kYXRhKCktPmRhdGEoKS5kYXRhKCk7CisKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJl
Y3QueSgpIDwgMCB8fCAocmVjdC54KCkgKyByZWN0LndpZHRoKCkpID4gbV9zaXplLndpZHRoKCkg
fHwgKHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAg
IG1lbXNldChkYXRhU3JjLCAwLCByZXN1bHQtPmRhdGEoKS0+bGVuZ3RoKCkpOworCisgICAgaW50
IG9yaWdpbnggPSByZWN0LngoKTsKKyAgICBpbnQgZGVzdHggPSAwOworICAgIGlmIChvcmlnaW54
IDwgMCkgeworICAgICAgICBkZXN0eCA9IC1vcmlnaW54OworICAgICAgICBvcmlnaW54ID0gMDsK
KyAgICB9CisgICAgaW50IGVuZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBpZiAo
ZW5keCA+IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICBlbmR4ID0gbV9zaXplLndpZHRoKCk7Cisg
ICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKKworICAgIGludCBvcmlnaW55ID0g
cmVjdC55KCk7CisgICAgaW50IGRlc3R5ID0gMDsKKyAgICBpZiAob3JpZ2lueSA8IDApIHsKKyAg
ICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKKyAgICAgICAgb3JpZ2lueSA9IDA7CisgICAgfQorICAg
IGludCBlbmR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIGlmIChlbmR5ID4gbV9z
aXplLmhlaWdodCgpKQorICAgICAgICBlbmR5ID0gbV9zaXplLmhlaWdodCgpOworICAgIGludCBu
dW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0
X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwor
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7CisKKyAgICB1
bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJv
dyArIGRlc3R4ICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyICpyb3cgPSBkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmln
aW55KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAg
ICAgICAgICAgIHVpbnQzMl90ICpwaXhlbCA9ICh1aW50MzJfdCAqKSByb3cgKyB4ICsgb3JpZ2lu
eDsKKyAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OworICAgICAgICAgICAgaWYgKHVuc2ln
bmVkIGludCBhbHBoYSA9ICgqcGl4ZWwgJiAweGZmMDAwMDAwKSA+PiAyNCkgeworICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9ICgqcGl4ZWwgJiAweDAwZmYwMDAwKSA+PiAxNjsKKyAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKCpwaXhlbCAmIDB4MDAwMGZmMDAp
ID4+IDg7CisgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9ICgqcGl4ZWwgJiAw
eDAwMDAwMGZmKTsKKyAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSBwaXhlbFswXTsKKyAgICAgICAgfQorICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgfQorCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAo
IW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY2hhciogZGF0YURz
dCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlKTsKKworICAgIEFTU0VS
VChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKKyAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQo
KSA+IDApOworCisgICAgaW50IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgZGVz
dHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCk7CisgICAgQVNTRVJUKGRlc3R4ID49
IDApOworICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQob3Jp
Z2lueCA+PSAwKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJpZ2h0KCkpOwor
CisgICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgpOworICAg
IEFTU0VSVChlbmR4IDw9IG1fc2l6ZS53aWR0aCgpKTsKKworICAgIGludCBudW1Db2x1bW5zID0g
ZW5keCAtIGRlc3R4OworCisgICAgaW50IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKKyAgICBp
bnQgZGVzdHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC55KCk7CisgICAgQVNTRVJUKGRl
c3R5ID49IDApOworICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgQVNT
RVJUKG9yaWdpbnkgPj0gMCk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5ib3R0
b20oKSk7CisKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LmJvdHRv
bSgpOworICAgIEFTU0VSVChlbmR5IDw9IG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgaW50IG51bVJv
d3MgPSBlbmR5IC0gZGVzdHk7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBz
b3VyY2UtPndpZHRoKCk7CisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9y
X3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpKTsKKworICAgIHVuc2ln
bmVkIGNoYXIqIHNyY1Jvd3MgPSBzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLmRhdGEoKSArIG9yaWdp
bnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbnVtUm93czsgKyt5KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnJvdyA9IGRhdGFEc3Qg
KyBzdHJpZGUgKiAoeSArIGRlc3R5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1D
b2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAgIHVpbnQzMl90ICpwaXhlbCA9ICh1aW50MzJfdCAq
KSByb3cgKyB4ICsgZGVzdHg7CisgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKKyAgICAg
ICAgICAgIGlmICh1bnNpZ25lZCBpbnQgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM10pIHsKKyAg
ICAgICAgICAgICAgICAqcGl4ZWwgPSBhbHBoYSA8PCAyNCB8IHNyY1Jvd3NbYmFzZXhdIDw8IDE2
IHwgc3JjUm93c1tiYXNleCArIDFdIDw8IDggfCBzcmNSb3dzW2Jhc2V4ICsgMl07CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwaXhlbFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOworICAgICAgICB9CisgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgfQogfQogCiBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23475</attachid>
            <date>2008-09-16 09:32:27 -0700</date>
            <delta_ts>2008-09-16 09:48:26 -0700</delta_ts>
            <desc>Cairo get/putImageData() with ASSERT for image_surface</desc>
            <filename>Cairo-getImageData.patch</filename>
            <type>text/plain</type>
            <size>6129</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjQ5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDktMTYgIERpcmsgU2NodWx6ZSAgPHZiczg1QGdteC5kZT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBz
dXBwb3J0IGZvciBnZXRJbWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkKKyAgICAgICAgdG8g
Q2Fpcm8uCisKKyAgICAgICAgW0NBSVJPXSBuZWVkcyBnZXRJbWFnZURhdGEgYW5kIHB1dEltYWdl
RGF0YSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDgzOAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKwogMjAwOC0wOS0xNSAgRGF2
ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IFF0IG92ZXIgdG8g
aXRzIFNjcm9sbGJhclRoZW1lLiAgQWRkIGNyb3NzLXBsYXRmb3JtIHN1cHBvcnQgZm9yIGp1bXBp
bmcgdGhlIHRodW1iIGxvY2F0aW9uIGRpcmVjdGx5CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDM2
NDk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8dmJzODVAZ214LmRlPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw2ICs1Myw5IEBAIGF1dG9fcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXQKIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihf
Y2Fpcm9fc3VyZmFjZSogc3VyZmFjZSkKICAgICA6IG1fc3VyZmFjZShzdXJmYWNlKQogeworICAg
IGludCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZSk7Cisg
ICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2Up
OworICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgY2Fpcm9fdCogY3Ig
PSBjYWlyb19jcmVhdGUobV9zdXJmYWNlKTsKICAgICBtX2NvbnRleHQuc2V0KG5ldyBHcmFwaGlj
c0NvbnRleHQoY3IpKTsKIApAQCAtODMsMTUgKzg3LDExNiBAQCBJbWFnZSogSW1hZ2VCdWZmZXI6
OmltYWdlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKIH0KIAotUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNv
bnN0CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7CisgICAgaWYgKCFtX3N1cmZhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNT
RVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZ
UEVfSU1BR0UpOworCisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHJlc3VsdCA9IEltYWdlRGF0
YTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgdW5zaWduZWQgY2hh
ciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlKTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCktPmRhdGEoKS5kYXRhKCk7
CisKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCAocmVjdC54KCkgKyBy
ZWN0LndpZHRoKCkpID4gbV9zaXplLndpZHRoKCkgfHwgKHJlY3QueSgpICsgcmVjdC5oZWlnaHQo
KSkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkYXRhU3JjLCAwLCByZXN1bHQt
PmRhdGEoKS0+bGVuZ3RoKCkpOworCisgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKKyAgICBp
bnQgZGVzdHggPSAwOworICAgIGlmIChvcmlnaW54IDwgMCkgeworICAgICAgICBkZXN0eCA9IC1v
cmlnaW54OworICAgICAgICBvcmlnaW54ID0gMDsKKyAgICB9CisgICAgaW50IGVuZHggPSByZWN0
LngoKSArIHJlY3Qud2lkdGgoKTsKKyAgICBpZiAoZW5keCA+IG1fc2l6ZS53aWR0aCgpKQorICAg
ICAgICBlbmR4ID0gbV9zaXplLndpZHRoKCk7CisgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKKworICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7CisgICAgaW50IGRlc3R5ID0g
MDsKKyAgICBpZiAob3JpZ2lueSA8IDApIHsKKyAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKKyAg
ICAgICAgb3JpZ2lueSA9IDA7CisgICAgfQorICAgIGludCBlbmR5ID0gcmVjdC55KCkgKyByZWN0
LmhlaWdodCgpOworICAgIGlmIChlbmR5ID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICBlbmR5
ID0gbV9zaXplLmhlaWdodCgpOworICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CisK
KyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFj
ZSk7CisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKKwor
ICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdHggKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5
KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnJvdyA9IGRhdGFTcmMgKyBzdHJpZGUgKiAoeSAr
IG9yaWdpbnkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykg
eworICAgICAgICAgICAgdWludDMyX3QgKnBpeGVsID0gKHVpbnQzMl90ICopIHJvdyArIHggKyBv
cmlnaW54OworICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7CisgICAgICAgICAgICBpZiAo
dW5zaWduZWQgaW50IGFscGhhID0gKCpwaXhlbCAmIDB4ZmYwMDAwMDApID4+IDI0KSB7CisgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKCpwaXhlbCAmIDB4MDBmZjAwMDApID4+IDE2
OworICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoKnBpeGVsICYgMHgwMDAw
ZmYwMCkgPj4gODsKKyAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKCpwaXhl
bCAmIDB4MDAwMDAwZmYpOworICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHBpeGVsWzBdOworICAgICAgICB9
CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JikKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1
dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSk7CisK
KyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShtX3N1cmZhY2UpOworCisgICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOworICAg
IEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7CisKKyAgICBpbnQgb3JpZ2lueCA9IHNv
dXJjZVJlY3QueCgpOworICAgIGludCBkZXN0eCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0
LngoKTsKKyAgICBBU1NFUlQoZGVzdHggPj0gMCk7CisgICAgQVNTRVJUKGRlc3R4IDwgbV9zaXpl
LndpZHRoKCkpOworICAgIEFTU0VSVChvcmlnaW54ID49IDApOworICAgIEFTU0VSVChvcmlnaW54
IDw9IHNvdXJjZVJlY3QucmlnaHQoKSk7CisKKyAgICBpbnQgZW5keCA9IGRlc3RQb2ludC54KCkg
KyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkp
OworCisgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7CisKKyAgICBpbnQgb3JpZ2lu
eSA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCBkZXN0eSA9IGRlc3RQb2ludC55KCkgKyBzb3Vy
Y2VSZWN0LnkoKTsKKyAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CisgICAgQVNTRVJUKGRlc3R5IDwg
bV9zaXplLmhlaWdodCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKKyAgICBBU1NFUlQo
b3JpZ2lueSA8PSBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKworICAgIGludCBlbmR5ID0gZGVzdFBv
aW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgQVNTRVJUKGVuZHkgPD0gbV9zaXpl
LmhlaWdodCgpKTsKKyAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKKworICAgIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZS0+d2lkdGgoKTsKKyAgICBpbnQgc3RyaWRl
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZSk7CisKKyAgICB1bnNp
Z25lZCBjaGFyKiBzcmNSb3dzID0gc291cmNlLT5kYXRhKCktPmRhdGEoKS5kYXRhKCkgKyBvcmln
aW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpyb3cgPSBkYXRhRHN0
ICsgc3RyaWRlICogKHkgKyBkZXN0eSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVt
Q29sdW1uczsgeCsrKSB7CisgICAgICAgICAgICB1aW50MzJfdCAqcGl4ZWwgPSAodWludDMyX3Qg
Kikgcm93ICsgeCArIGRlc3R4OworICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7CisgICAg
ICAgICAgICBpZiAodW5zaWduZWQgaW50IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdKSB7Cisg
ICAgICAgICAgICAgICAgKnBpeGVsID0gYWxwaGEgPDwgMjQgfCBzcmNSb3dzW2Jhc2V4XSA8PCAx
NiB8IHNyY1Jvd3NbYmFzZXggKyAxXSA8PCA4IHwgc3JjUm93c1tiYXNleCArIDJdOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcGl4ZWxbMF0gPSByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKKyAgICAgICAgfQorICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgIH0KIH0KIAogU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QK
</data>
<flag name="review"
          id="10491"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>