<?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>50905</bug_id>
          
          <creation_ts>2010-12-13 01:12:17 -0800</creation_ts>
          <short_desc>[chromium] Simplify the PNG encoder.</short_desc>
          <delta_ts>2010-12-20 23:22:24 -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>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="noel gordon">noel.gordon</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>320974</commentid>
    <comment_count>0</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-13 01:12:17 -0800</bug_when>
    <thetext>Simplify the PNG encoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320977</commentid>
    <comment_count>1</comment_count>
      <attachid>76358</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-13 01:16:19 -0800</bug_when>
    <thetext>Created attachment 76358
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320979</commentid>
    <comment_count>2</comment_count>
      <attachid>76358</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-13 01:27:11 -0800</bug_when>
    <thetext>Comment on attachment 76358
patch

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

Otherwise as far as I can tell this looks fine.

&gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:78
&gt; +    png_set_IHDR(png, info, imageSize.width(), imageSize.height(),
&gt; +                 8, PNG_COLOR_TYPE_RGB_ALPHA, 0, 0, 0);

Why is this change OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322531</commentid>
    <comment_count>3</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-15 00:36:28 -0800</bug_when>
    <thetext>(In reply to comment #2)

&gt; &gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:78
&gt; &gt; +    png_set_IHDR(png, info, imageSize.width(), imageSize.height(),
&gt; &gt; +                 8, PNG_COLOR_TYPE_RGB_ALPHA, 0, 0, 0);
&gt; 
&gt; Why is this change OK?

The 0, 0, 0 I assume?  That selects the default (aka basic) encoder.  All libpngs must support
the basic encoder, the (0) values won&apos;t ever change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323526</commentid>
    <comment_count>4</comment_count>
      <attachid>76832</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-16 17:08:22 -0800</bug_when>
    <thetext>Created attachment 76832
patch update changelog description</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323879</commentid>
    <comment_count>5</comment_count>
      <attachid>76832</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-17 10:57:29 -0800</bug_when>
    <thetext>Comment on attachment 76832
patch update changelog description

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

Looks good. It could possibly be checked in as is but I have a concern about passing 0 to png_create_info_struct.

A few things to consider or respond to and then I&apos;d be happy to r+ this.

&gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:69
&gt; +    png_struct* png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);

Why not just do 

if (!png)
  return false;

as before?

This way NULL will never get passed to png_create_info_struct and it simplifies the call to png_destroy_write_struct (by getting rid of the check for png).

&gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:82
&gt; +    row.resize(imageSize.width() * bitmap.bytesPerPixel());

Why use bitmap.bytesPerPixel() when preMultipliedBGRAtoRGBA will always use 4 bytes per pixel (4 unsigned char)?

Also why not move Vector&lt;unsigned char&gt; row; to here? (You could even pass this size to the constructor.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324163</commentid>
    <comment_count>6</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-18 15:41:15 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 76832 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76832&amp;action=review
&gt; 
&gt; Looks good. It could possibly be checked in as is but I have a concern about passing 0 to png_create_info_struct.
&gt; 
&gt; A few things to consider or respond to and then I&apos;d be happy to r+ this.

Thanks for the good questions David.

 
&gt; &gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:69
&gt; &gt; +    png_struct* png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
&gt; 
&gt; Why not just do 
&gt; 
&gt; if (!png)
&gt;   return false;
&gt; 
&gt; as before?
&gt; 
&gt; This way NULL will never get passed to png_create_info_struct and it simplifies the call to png_destroy_write_struct (by getting rid of the check for png).

libpng is a robust library -- all its API entry points vet parameters.  If you pass
NULL to png_create_info_struct, it returns NULL.

 
&gt; &gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:82
&gt; &gt; +    row.resize(imageSize.width() * bitmap.bytesPerPixel());
&gt; 
&gt; Why use bitmap.bytesPerPixel() when preMultipliedBGRAtoRGBA will always use 4 bytes per pixel (4 unsigned char)?

Bad anticipation on my part.  I had used 4 originally, but based on the recent jpeg
encoder reviews, I anticipated a reviewer asking me not to use &quot;magic numbers&quot; :)

I&apos;d be happy to change it back to 4, if you think that&apos;s better, but perhaps in a
follow-up CL?
  
 
&gt; Also why not move Vector&lt;unsigned char&gt; row; to here? (You could even pass this size to the constructor.)

Plausible, but I don&apos;t recommend it, see bug 50439 for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324170</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-18 17:08:33 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 76832 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76832&amp;action=review
&gt; &gt; &gt; WebCore/platform/image-encoders/skia/PNGImageEncoder.cpp:82
&gt; &gt; &gt; +    row.resize(imageSize.width() * bitmap.bytesPerPixel());
&gt; &gt; 
&gt; &gt; Why use bitmap.bytesPerPixel() when preMultipliedBGRAtoRGBA will always use 4 bytes per pixel (4 unsigned char)?
&gt; 
&gt; Bad anticipation on my part.  I had used 4 originally, but based on the recent jpeg
&gt; encoder reviews, I anticipated a reviewer asking me not to use &quot;magic numbers&quot; :)
&gt; 
&gt; I&apos;d be happy to change it back to 4, if you think that&apos;s better, but perhaps in a
&gt; follow-up CL?

I agree about magic numbers not being great. However, in this case, bitmap.bytesPerPixel() seems incorrect because the allocation is for the destination, but and bytesPerPixel() from the source. These two happen to be the same for the code, but that doesn&apos;t seem like it needs to be the case. For example, if the code were changed to support bitmaps that were RGB as input, this would underallocate.

The previous code had this:
 int outputColorComponents = 4;
 int pngOutputColorType = PNG_COLOR_TYPE_RGB_ALPHA;
which make sense to me.

Anyway, this is ok for now, so r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324172</commentid>
    <comment_count>8</comment_count>
      <attachid>76832</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-18 18:55:46 -0800</bug_when>
    <thetext>Comment on attachment 76832
patch update changelog description

Clearing flags on attachment: 76832

Committed r74320: &lt;http://trac.webkit.org/changeset/74320&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324173</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-18 18:55:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324177</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-18 19:24:02 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 76832:

fast/preloader/script.html bug 50879 (author: abarth@webkit.org)
fast/images/load-img-with-empty-src.html bug 50855 (author: mitz@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324860</commentid>
    <comment_count>11</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-20 23:22:24 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt;... 
&gt; The previous code had this:
&gt;  int outputColorComponents = 4;
&gt;  int pngOutputColorType = PNG_COLOR_TYPE_RGB_ALPHA;
&gt;....
Noel and I discussed this outside of the bug and the code seems fine as landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76358</attachid>
            <date>2010-12-13 01:16:19 -0800</date>
            <delta_ts>2010-12-16 17:08:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>7406</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjNhNmYxNy4uMjVkMmM4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMi0xMyAgTm9lbCBHb3Jkb24g
IDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTaW1wbGlmeSB0aGUgUE5HIGVuY29kZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDkwNQorCisg
ICAgICAgIFJlbW92ZSBQTkdFbmNvZGVyU3RhdGUgY2xhc3M7IGl0IHdhcyBhIHByb3h5IGZvciB0
aGUgZW5jb2RlciBvdXRwdXQsIGFuZAorICAgICAgICB0aGF0IGlzIHJlcGxhY2VkIGJ5IGEgVmVj
dG9yPD4gdG8gZWxpbWluYXRlIHRoZSBPd25BcnJheVB0cjw+LiAgU2ltcGxpZnkKKyAgICAgICAg
cHJlTXVsdGlwbGllZEJHUkF0b1JHQkEoKSBhbmQgdGhlIGVuY29kZSgpIHJvdXRpbmVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gY2FudmFzLnRvRGF0YVVSTCgpIGlzIGNvdmVyZWQgYnkgZXhp
c3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BO
R0ltYWdlRW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZU91dHB1dCk6IFVzZSBh
IFZlY3Rvcjw+LCBhcHBlbmQoKSB0aGUgZW5jb2RlZCBkYXRhIHRvIGl0LgorICAgICAgICAoV2Vi
Q29yZTo6cHJlTXVsdGlwbGllZEJHUkF0b1JHQkEpOiBzaW1wbGlmaWVkLgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUpOiBkaXR0by4KKwogMjAxMC0xMi0wOCAgRXJp
ayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJz
L3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcAppbmRleCA2OTVjMWU5Li45ZmM4MmM0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVy
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VF
bmNvZGVyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKICAqIG1ldDoKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlICJQTkdJ
bWFnZUVuY29kZXIuaCIKIAogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJPd25BcnJh
eVB0ci5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5j
bHVkZSAiU2tVblByZU11bHRpcGx5LmgiCiBleHRlcm4gIkMiIHsKQEAgLTQyLDEwOCArNDAsNTUg
QEAgZXh0ZXJuICJDIiB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVydHMgQkdS
QS0+UkdCQSBhbmQgUkdCQS0+QkdSQSBhbmQgdW5kb2VzIGFscGhhIHByZW11bHRpcGxpY2F0aW9u
Lgotc3RhdGljIHZvaWQgcHJlTXVsdGlwbGllZEJHUkF0b1JHQkEoY29uc3QgdW5zaWduZWQgY2hh
ciogaW5wdXQsIGludCBudW1iZXJPZlBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKK3N0YXRpYyB2b2lkIHdyaXRlT3V0cHV0
KHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVwIGRhdGEsIHBuZ19zaXplX3Qgc2l6ZSkKIHsKLSAg
ICBTa0JpdG1hcCBpbnB1dEJpdG1hcDsKLSAgICBpbnB1dEJpdG1hcC5zZXRDb25maWcoU2tCaXRt
YXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBudW1iZXJPZlBpeGVscywgMSk7Ci0gICAgaW5wdXRCaXRt
YXAuc2V0UGl4ZWxzKGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGlucHV0KSk7Ci0gICAgZm9y
IChpbnQgeCA9IDA7IHggPCBudW1iZXJPZlBpeGVsczsgeCsrKSB7Ci0gICAgICAgIHVpbnQzMl90
IHNyY1BpeGVsID0gKmlucHV0Qml0bWFwLmdldEFkZHIzMih4LCAwKTsKLSAgICAgICAgU2tDb2xv
ciB1bm11bHRpcGxpZWQgPSBTa1VuUHJlTXVsdGlwbHk6OlBNQ29sb3JUb0NvbG9yKHNyY1BpeGVs
KTsKLSAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxPdXQgPSAmb3V0cHV0W3ggKiA0XTsKLSAg
ICAgICAgcGl4ZWxPdXRbMF0gPSBTa0NvbG9yR2V0Uih1bm11bHRpcGxpZWQpOwotICAgICAgICBw
aXhlbE91dFsxXSA9IFNrQ29sb3JHZXRHKHVubXVsdGlwbGllZCk7Ci0gICAgICAgIHBpeGVsT3V0
WzJdID0gU2tDb2xvckdldEIodW5tdWx0aXBsaWVkKTsKLSAgICAgICAgcGl4ZWxPdXRbM10gPSBT
a0NvbG9yR2V0QSh1bm11bHRpcGxpZWQpOwotICAgIH0KKyAgICBzdGF0aWNfY2FzdDxWZWN0b3I8
dW5zaWduZWQgY2hhcj4qPihwbmctPmlvX3B0ciktPmFwcGVuZChkYXRhLCBzaXplKTsKIH0KIAot
Ly8gRW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIFRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZSBp
cyBiYXNlZCBvbiBuc1BOR0VuY29kZXIuY3BwIGluIE1vemlsbGEKLS8vIChDb3B5cmlnaHQgMjAw
NSBHb29nbGUgSW5jLikKLQotLy8gUGFzc2VkIGFyb3VuZCBhcyB0aGUgaW9fcHRyIGluIHRoZSBw
bmcgc3RydWN0cyBzbyBvdXIgY2FsbGJhY2tzIGtub3cgd2hlcmUKLS8vIHRvIHdyaXRlIGRhdGEu
Ci1zdHJ1Y3QgUE5HRW5jb2RlclN0YXRlIHsKLSAgICBQTkdFbmNvZGVyU3RhdGUoVmVjdG9yPHVu
c2lnbmVkIGNoYXI+KiBvKSA6IG1fb3V0KG8pIHt9Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
KiBtX291dDsKLX07Ci0KLS8vIENhbGxlZCBieSBsaWJwbmcgdG8gZmx1c2ggaXRzIGludGVybmFs
IGJ1ZmZlciB0byBvdXJzLgotdm9pZCBlbmNvZGVyV3JpdGVDYWxsYmFjayhwbmdfc3RydWN0cCBw
bmcsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90IHNpemUpCitzdGF0aWMgdm9pZCBwcmVNdWx0
aXBsaWVkQkdSQXRvUkdCQShjb25zdCBTa1BNQ29sb3IqIGlucHV0LCBpbnQgcGl4ZWxzLCB1bnNp
Z25lZCBjaGFyKiBvdXRwdXQpCiB7Ci0gICAgUE5HRW5jb2RlclN0YXRlKiBzdGF0ZSA9IHN0YXRp
Y19jYXN0PFBOR0VuY29kZXJTdGF0ZSo+KHBuZ19nZXRfaW9fcHRyKHBuZykpOwotICAgIEFTU0VS
VChzdGF0ZS0+bV9vdXQpOwotCi0gICAgc2l6ZV90IG9sZFNpemUgPSBzdGF0ZS0+bV9vdXQtPnNp
emUoKTsKLSAgICBzdGF0ZS0+bV9vdXQtPnJlc2l6ZShvbGRTaXplICsgc2l6ZSk7Ci0gICAgbWVt
Y3B5KCYoKnN0YXRlLT5tX291dClbb2xkU2l6ZV0sIGRhdGEsIHNpemUpOworICAgIHdoaWxlIChw
aXhlbHMtLSA+IDApIHsKKyAgICAgICAgU2tDb2xvciB1bm11bHRpcGxpZWQgPSBTa1VuUHJlTXVs
dGlwbHk6OlBNQ29sb3JUb0NvbG9yKCppbnB1dCsrKTsKKyAgICAgICAgKm91dHB1dCsrID0gU2tD
b2xvckdldFIodW5tdWx0aXBsaWVkKTsKKyAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldEco
dW5tdWx0aXBsaWVkKTsKKyAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldEIodW5tdWx0aXBs
aWVkKTsKKyAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldEEodW5tdWx0aXBsaWVkKTsKKyAg
ICB9CiB9CiAKLXN0YXRpYyBib29sIGVuY29kZUltcGwoY29uc3QgdW5zaWduZWQgY2hhciogaW5w
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGludCBieXRlc1BlclJvdywKLSAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCitib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5j
b2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0
KQogewotICAgIGludCBpbnB1dENvbG9yQ29tcG9uZW50cyA9IDQ7Ci0gICAgaW50IG91dHB1dENv
bG9yQ29tcG9uZW50cyA9IDQ7Ci0gICAgaW50IHBuZ091dHB1dENvbG9yVHlwZSA9IFBOR19DT0xP
Ul9UWVBFX1JHQl9BTFBIQTsKLSAgICBJbnRTaXplIGltYWdlU2l6ZShzaXplKTsKLSAgICBpbWFn
ZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotCi0gICAgLy8gUm93IHN0cmlkZSBzaG91bGQg
YmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhLgotICAgIGlmIChp
bnB1dENvbG9yQ29tcG9uZW50cyAqIGltYWdlU2l6ZS53aWR0aCgpID4gYnl0ZXNQZXJSb3cpIHsK
LSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHBuZ19zdHJ1Y3QqIHBuZ1B0ciA9IHBuZ19jcmVhdGVfd3JpdGVfc3RydWN0KFBOR19MSUJQ
TkdfVkVSX1NUUklORywgMCwgMCwgMCk7Ci0gICAgaWYgKCFwbmdQdHIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHBuZ19pbmZvKiBpbmZvUHRyID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVj
dChwbmdQdHIpOwotICAgIGlmICghaW5mb1B0cikgewotICAgICAgICBwbmdfZGVzdHJveV93cml0
ZV9zdHJ1Y3QoJnBuZ1B0ciwgTlVMTCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgaWYgKGJpdG1hcC5jb25maWcoKSAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gT25seSBzdXBwb3J0IEFSR0IgMzIgYnBwIHNraWEgYml0
bWFwcy4KIAotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHJvd1BpeGVscyhuZXcgdW5z
aWduZWQgY2hhcltpbWFnZVNpemUud2lkdGgoKSAqIG91dHB1dENvbG9yQ29tcG9uZW50c10pOwot
ICAgIFBOR0VuY29kZXJTdGF0ZSBzdGF0ZShvdXRwdXQpOworICAgIFNrQXV0b0xvY2tQaXhlbHMg
Yml0bWFwTG9jayhiaXRtYXApOworICAgIEludFNpemUgaW1hZ2VTaXplKGJpdG1hcC53aWR0aCgp
LCBiaXRtYXAuaGVpZ2h0KCkpOworICAgIGltYWdlU2l6ZS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7
CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJvdzsKIAotICAgIGlmIChzZXRqbXAocG5nX2pt
cGJ1ZihwbmdQdHIpKSkgewotICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZ1B0
ciwgJmluZm9QdHIpOworICAgIHBuZ19zdHJ1Y3QqIHBuZyA9IHBuZ19jcmVhdGVfd3JpdGVfc3Ry
dWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgMCwgMCk7CisgICAgcG5nX2luZm8qIGluZm8g
PSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHBuZyk7CisgICAgaWYgKCFwbmcgfHwgIWluZm8gfHwg
c2V0am1wKHBuZ19qbXBidWYocG5nKSkpIHsKKyAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3Ry
dWN0KHBuZyA/ICZwbmcgOiAwLCBpbmZvID8gJmluZm8gOiAwKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIC8vIFNldCBvdXIgY2FsbGJhY2sgZm9yIGxpYnBuZyB0byBnaXZl
IHVzIHRoZSBkYXRhLgotICAgIHBuZ19zZXRfd3JpdGVfZm4ocG5nUHRyLCAmc3RhdGUsIGVuY29k
ZXJXcml0ZUNhbGxiYWNrLCBOVUxMKTsKLQotICAgIHBuZ19zZXRfSUhEUihwbmdQdHIsIGluZm9Q
dHIsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIHBuZ091dHB1dENv
bG9yVHlwZSwKLSAgICAgICAgICAgICAgICAgUE5HX0lOVEVSTEFDRV9OT05FLCBQTkdfQ09NUFJF
U1NJT05fVFlQRV9ERUZBVUxULAotICAgICAgICAgICAgICAgICBQTkdfRklMVEVSX1RZUEVfREVG
QVVMVCk7Ci0gICAgcG5nX3dyaXRlX2luZm8ocG5nUHRyLCBpbmZvUHRyKTsKKyAgICBwbmdfc2V0
X3dyaXRlX2ZuKHBuZywgb3V0cHV0LCB3cml0ZU91dHB1dCwgMCk7CisgICAgcG5nX3NldF9JSERS
KHBuZywgaW5mbywgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgOCwgUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBLCAwLCAwLCAwKTsKKyAgICBw
bmdfd3JpdGVfaW5mbyhwbmcsIGluZm8pOwogCisgICAgY29uc3QgU2tQTUNvbG9yKiBwaXhlbHMg
PSBzdGF0aWNfY2FzdDxTa1BNQ29sb3IqPihiaXRtYXAuZ2V0UGl4ZWxzKCkpOworICAgIHJvdy5y
ZXNpemUoaW1hZ2VTaXplLndpZHRoKCkgKiBiaXRtYXAuYnl0ZXNQZXJQaXhlbCgpKTsKICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGltYWdlU2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIHBy
ZU11bHRpcGxpZWRCR1JBdG9SR0JBKCZpbnB1dFt5ICogYnl0ZXNQZXJSb3ddLCBpbWFnZVNpemUu
d2lkdGgoKSwgcm93UGl4ZWxzLmdldCgpKTsKLSAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmdQdHIs
IHJvd1BpeGVscy5nZXQoKSk7CisgICAgICAgIHByZU11bHRpcGxpZWRCR1JBdG9SR0JBKHBpeGVs
cywgaW1hZ2VTaXplLndpZHRoKCksIHJvdy5kYXRhKCkpOworICAgICAgICBwbmdfd3JpdGVfcm93
KHBuZywgcm93LmRhdGEoKSk7CisgICAgICAgIHBpeGVscyArPSBpbWFnZVNpemUud2lkdGgoKTsK
ICAgICB9CiAKLSAgICBwbmdfd3JpdGVfZW5kKHBuZ1B0ciwgaW5mb1B0cik7Ci0gICAgcG5nX2Rl
c3Ryb3lfd3JpdGVfc3RydWN0KCZwbmdQdHIsICZpbmZvUHRyKTsKKyAgICBwbmdfd3JpdGVfZW5k
KHBuZywgaW5mbyk7CisgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmcsICZpbmZvKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gc3RhdGljCi1ib29sIFBOR0ltYWdlRW5jb2Rlcjo6
ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBpbWFnZSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRw
dXQpCi17Ci0gICAgaWYgKGltYWdlLmNvbmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0Nv
bmZpZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAg
c2tpYSBiaXRtYXBzLgotCi0gICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGltYWdlKTsK
LSAgICByZXR1cm4gZW5jb2RlSW1wbChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2Uu
Z2V0UGl4ZWxzKCkpLCBJbnRTaXplKGltYWdlLndpZHRoKCksIGltYWdlLmhlaWdodCgpKSwgaW1h
Z2Uucm93Qnl0ZXMoKSwgb3V0cHV0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76832</attachid>
            <date>2010-12-16 17:08:22 -0800</date>
            <delta_ts>2010-12-18 18:55:46 -0800</delta_ts>
            <desc>patch update changelog description</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>7509</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjNhNmYxNy4uYWRkYmUwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0xMi0xMyAgTm9lbCBHb3Jkb24g
IDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTaW1wbGlmeSB0aGUgUE5HIGVuY29kZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDkwNQorCisg
ICAgICAgIFJlbW92ZSBQTkdFbmNvZGVyU3RhdGUgY2xhc3MgLSBpdCB3YXMgYSBwcm94eSBmb3Ig
dGhlIGVuY29kZXIgb3V0cHV0LCBhbmQKKyAgICAgICAgdGhhdCBpcyBhIFZlY3Rvcjw+LCBzbyBq
dXN0IHdyaXRlIGludG8gaXQgZGlyZWN0bHkgdXNpbmcgYXBwZW5kKCkgdG8gbWFrZQorICAgICAg
ICB1c2Ugb2YgVmVjdG9yPD4ncyByZXNpemUoKSBzbWFydHMuIFNpbXBsaWZ5IHRoZSBwcmVNdWx0
aXBsaWVkQkdSQXRvUkdCQSgpCisgICAgICAgIGFuZCBlbmNvZGUoKSByb3V0aW5lcywgcmVwbGFj
ZSB0aGUgT3duQXJyYXlQdHI8PiB3aXRoIGEgVmVjdG9yPD4uCisgICAgICAgIAorICAgICAgICBj
YW52YXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKSBpcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
LgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVPdXRwdXQpOiBVc2UgYSBWZWN0b3I8Piwg
YXBwZW5kKCkgdGhlIGVuY29kZWQgZGF0YSB0byBpdC4KKyAgICAgICAgKFdlYkNvcmU6OnByZU11
bHRpcGxpZWRCR1JBdG9SR0JBKTogc2ltcGxpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0lt
YWdlRW5jb2Rlcjo6ZW5jb2RlKTogZGl0dG8uCisKIDIwMTAtMTItMDggIEVyaWsgQXJ2aWRzc29u
ICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFn
ZUVuY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0lt
YWdlRW5jb2Rlci5jcHAKaW5kZXggNjk1YzFlOS4uOWZjODJjNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCiAgKiBtZXQ6CkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVy
LmgiCiAKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKLSNp
bmNsdWRlICJWZWN0b3IuaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlNrVW5Q
cmVNdWx0aXBseS5oIgogZXh0ZXJuICJDIiB7CkBAIC00MiwxMDggKzQwLDU1IEBAIGV4dGVybiAi
QyIgewogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnRzIEJHUkEtPlJHQkEgYW5k
IFJHQkEtPkJHUkEgYW5kIHVuZG9lcyBhbHBoYSBwcmVtdWx0aXBsaWNhdGlvbi4KLXN0YXRpYyB2
b2lkIHByZU11bHRpcGxpZWRCR1JBdG9SR0JBKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0LCBp
bnQgbnVtYmVyT2ZQaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyKiBvdXRwdXQpCitzdGF0aWMgdm9pZCB3cml0ZU91dHB1dChwbmdfc3RydWN0
cCBwbmcsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90IHNpemUpCiB7Ci0gICAgU2tCaXRtYXAg
aW5wdXRCaXRtYXA7Ci0gICAgaW5wdXRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgbnVtYmVyT2ZQaXhlbHMsIDEpOwotICAgIGlucHV0Qml0bWFwLnNldFBpeGVs
cyhjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihpbnB1dCkpOwotICAgIGZvciAoaW50IHggPSAw
OyB4IDwgbnVtYmVyT2ZQaXhlbHM7IHgrKykgewotICAgICAgICB1aW50MzJfdCBzcmNQaXhlbCA9
ICppbnB1dEJpdG1hcC5nZXRBZGRyMzIoeCwgMCk7Ci0gICAgICAgIFNrQ29sb3IgdW5tdWx0aXBs
aWVkID0gU2tVblByZU11bHRpcGx5OjpQTUNvbG9yVG9Db2xvcihzcmNQaXhlbCk7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIqIHBpeGVsT3V0ID0gJm91dHB1dFt4ICogNF07Ci0gICAgICAgIHBpeGVs
T3V0WzBdID0gU2tDb2xvckdldFIodW5tdWx0aXBsaWVkKTsKLSAgICAgICAgcGl4ZWxPdXRbMV0g
PSBTa0NvbG9yR2V0Ryh1bm11bHRpcGxpZWQpOwotICAgICAgICBwaXhlbE91dFsyXSA9IFNrQ29s
b3JHZXRCKHVubXVsdGlwbGllZCk7Ci0gICAgICAgIHBpeGVsT3V0WzNdID0gU2tDb2xvckdldEEo
dW5tdWx0aXBsaWVkKTsKLSAgICB9CisgICAgc3RhdGljX2Nhc3Q8VmVjdG9yPHVuc2lnbmVkIGNo
YXI+Kj4ocG5nLT5pb19wdHIpLT5hcHBlbmQoZGF0YSwgc2l6ZSk7CiB9CiAKLS8vIEVuY29kZXIg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vCi0vLyBUaGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgYmFzZWQgb24g
bnNQTkdFbmNvZGVyLmNwcCBpbiBNb3ppbGxhCi0vLyAoQ29weXJpZ2h0IDIwMDUgR29vZ2xlIElu
Yy4pCi0KLS8vIFBhc3NlZCBhcm91bmQgYXMgdGhlIGlvX3B0ciBpbiB0aGUgcG5nIHN0cnVjdHMg
c28gb3VyIGNhbGxiYWNrcyBrbm93IHdoZXJlCi0vLyB0byB3cml0ZSBkYXRhLgotc3RydWN0IFBO
R0VuY29kZXJTdGF0ZSB7Ci0gICAgUE5HRW5jb2RlclN0YXRlKFZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiogbykgOiBtX291dChvKSB7fQotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogbV9vdXQ7Ci19
OwotCi0vLyBDYWxsZWQgYnkgbGlicG5nIHRvIGZsdXNoIGl0cyBpbnRlcm5hbCBidWZmZXIgdG8g
b3Vycy4KLXZvaWQgZW5jb2RlcldyaXRlQ2FsbGJhY2socG5nX3N0cnVjdHAgcG5nLCBwbmdfYnl0
ZXAgZGF0YSwgcG5nX3NpemVfdCBzaXplKQorc3RhdGljIHZvaWQgcHJlTXVsdGlwbGllZEJHUkF0
b1JHQkEoY29uc3QgU2tQTUNvbG9yKiBpbnB1dCwgaW50IHBpeGVscywgdW5zaWduZWQgY2hhciog
b3V0cHV0KQogewotICAgIFBOR0VuY29kZXJTdGF0ZSogc3RhdGUgPSBzdGF0aWNfY2FzdDxQTkdF
bmNvZGVyU3RhdGUqPihwbmdfZ2V0X2lvX3B0cihwbmcpKTsKLSAgICBBU1NFUlQoc3RhdGUtPm1f
b3V0KTsKLQotICAgIHNpemVfdCBvbGRTaXplID0gc3RhdGUtPm1fb3V0LT5zaXplKCk7Ci0gICAg
c3RhdGUtPm1fb3V0LT5yZXNpemUob2xkU2l6ZSArIHNpemUpOwotICAgIG1lbWNweSgmKCpzdGF0
ZS0+bV9vdXQpW29sZFNpemVdLCBkYXRhLCBzaXplKTsKKyAgICB3aGlsZSAocGl4ZWxzLS0gPiAw
KSB7CisgICAgICAgIFNrQ29sb3IgdW5tdWx0aXBsaWVkID0gU2tVblByZU11bHRpcGx5OjpQTUNv
bG9yVG9Db2xvcigqaW5wdXQrKyk7CisgICAgICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRSKHVu
bXVsdGlwbGllZCk7CisgICAgICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRHKHVubXVsdGlwbGll
ZCk7CisgICAgICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRCKHVubXVsdGlwbGllZCk7CisgICAg
ICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRBKHVubXVsdGlwbGllZCk7CisgICAgfQogfQogCi1z
dGF0aWMgYm9vbCBlbmNvZGVJbXBsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlucHV0LAotICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplLAotICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYnl0ZXNQZXJSb3csCi0gICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiogb3V0cHV0KQorYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBT
a0JpdG1hcCYgYml0bWFwLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKIHsKLSAgICBp
bnQgaW5wdXRDb2xvckNvbXBvbmVudHMgPSA0OwotICAgIGludCBvdXRwdXRDb2xvckNvbXBvbmVu
dHMgPSA0OwotICAgIGludCBwbmdPdXRwdXRDb2xvclR5cGUgPSBQTkdfQ09MT1JfVFlQRV9SR0Jf
QUxQSEE7Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUoc2l6ZSk7Ci0gICAgaW1hZ2VTaXplLmNsYW1w
TmVnYXRpdmVUb1plcm8oKTsKLQotICAgIC8vIFJvdyBzdHJpZGUgc2hvdWxkIGJlIGF0IGxlYXN0
IGFzIGxvbmcgYXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YS4KLSAgICBpZiAoaW5wdXRDb2xvckNv
bXBvbmVudHMgKiBpbWFnZVNpemUud2lkdGgoKSA+IGJ5dGVzUGVyUm93KSB7Ci0gICAgICAgIEFT
U0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwbmdfc3Ry
dWN0KiBwbmdQdHIgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJ
TkcsIDAsIDAsIDApOwotICAgIGlmICghcG5nUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBwbmdfaW5mbyogaW5mb1B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocG5nUHRyKTsK
LSAgICBpZiAoIWluZm9QdHIpIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZw
bmdQdHIsIE5VTEwpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChiaXRt
YXAuY29uZmlnKCkgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIE9ubHkgc3VwcG9ydCBBUkdCIDMyIGJwcCBza2lhIGJpdG1hcHMuCiAKLSAg
ICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiByb3dQaXhlbHMobmV3IHVuc2lnbmVkIGNoYXJb
aW1hZ2VTaXplLndpZHRoKCkgKiBvdXRwdXRDb2xvckNvbXBvbmVudHNdKTsKLSAgICBQTkdFbmNv
ZGVyU3RhdGUgc3RhdGUob3V0cHV0KTsKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExvY2so
Yml0bWFwKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhl
aWdodCgpKTsKKyAgICBpbWFnZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiByb3c7CiAKLSAgICBpZiAoc2V0am1wKHBuZ19qbXBidWYocG5nUHRy
KSkpIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmdQdHIsICZpbmZvUHRy
KTsKKyAgICBwbmdfc3RydWN0KiBwbmcgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdChQTkdfTElC
UE5HX1ZFUl9TVFJJTkcsIDAsIDAsIDApOworICAgIHBuZ19pbmZvKiBpbmZvID0gcG5nX2NyZWF0
ZV9pbmZvX3N0cnVjdChwbmcpOworICAgIGlmICghcG5nIHx8ICFpbmZvIHx8IHNldGptcChwbmdf
am1wYnVmKHBuZykpKSB7CisgICAgICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdChwbmcgPyAm
cG5nIDogMCwgaW5mbyA/ICZpbmZvIDogMCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICAvLyBTZXQgb3VyIGNhbGxiYWNrIGZvciBsaWJwbmcgdG8gZ2l2ZSB1cyB0aGUgZGF0
YS4KLSAgICBwbmdfc2V0X3dyaXRlX2ZuKHBuZ1B0ciwgJnN0YXRlLCBlbmNvZGVyV3JpdGVDYWxs
YmFjaywgTlVMTCk7Ci0KLSAgICBwbmdfc2V0X0lIRFIocG5nUHRyLCBpbmZvUHRyLCBpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBwbmdPdXRwdXRDb2xvclR5cGUsCi0g
ICAgICAgICAgICAgICAgIFBOR19JTlRFUkxBQ0VfTk9ORSwgUE5HX0NPTVBSRVNTSU9OX1RZUEVf
REVGQVVMVCwKLSAgICAgICAgICAgICAgICAgUE5HX0ZJTFRFUl9UWVBFX0RFRkFVTFQpOwotICAg
IHBuZ193cml0ZV9pbmZvKHBuZ1B0ciwgaW5mb1B0cik7CisgICAgcG5nX3NldF93cml0ZV9mbihw
bmcsIG91dHB1dCwgd3JpdGVPdXRwdXQsIDApOworICAgIHBuZ19zZXRfSUhEUihwbmcsIGluZm8s
IGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
IDgsIFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSwgMCwgMCwgMCk7CisgICAgcG5nX3dyaXRlX2lu
Zm8ocG5nLCBpbmZvKTsKIAorICAgIGNvbnN0IFNrUE1Db2xvciogcGl4ZWxzID0gc3RhdGljX2Nh
c3Q8U2tQTUNvbG9yKj4oYml0bWFwLmdldFBpeGVscygpKTsKKyAgICByb3cucmVzaXplKGltYWdl
U2l6ZS53aWR0aCgpICogYml0bWFwLmJ5dGVzUGVyUGl4ZWwoKSk7CiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBpbWFnZVNpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBwcmVNdWx0aXBsaWVk
QkdSQXRvUkdCQSgmaW5wdXRbeSAqIGJ5dGVzUGVyUm93XSwgaW1hZ2VTaXplLndpZHRoKCksIHJv
d1BpeGVscy5nZXQoKSk7Ci0gICAgICAgIHBuZ193cml0ZV9yb3cocG5nUHRyLCByb3dQaXhlbHMu
Z2V0KCkpOworICAgICAgICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShwaXhlbHMsIGltYWdlU2l6
ZS53aWR0aCgpLCByb3cuZGF0YSgpKTsKKyAgICAgICAgcG5nX3dyaXRlX3JvdyhwbmcsIHJvdy5k
YXRhKCkpOworICAgICAgICBwaXhlbHMgKz0gaW1hZ2VTaXplLndpZHRoKCk7CiAgICAgfQogCi0g
ICAgcG5nX3dyaXRlX2VuZChwbmdQdHIsIGluZm9QdHIpOwotICAgIHBuZ19kZXN0cm95X3dyaXRl
X3N0cnVjdCgmcG5nUHRyLCAmaW5mb1B0cik7CisgICAgcG5nX3dyaXRlX2VuZChwbmcsIGluZm8p
OworICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmcG5nLCAmaW5mbyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLS8vIHN0YXRpYwotYm9vbCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25z
dCBTa0JpdG1hcCYgaW1hZ2UsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQotewotICAg
IGlmIChpbWFnZS5jb25maWcoKSAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gT25seSBzdXBwb3J0IEFSR0IgMzIgYnBwIHNraWEgYml0bWFw
cy4KLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jayhpbWFnZSk7Ci0gICAgcmV0dXJu
IGVuY29kZUltcGwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlLmdldFBpeGVscygp
KSwgSW50U2l6ZShpbWFnZS53aWR0aCgpLCBpbWFnZS5oZWlnaHQoKSksIGltYWdlLnJvd0J5dGVz
KCksIG91dHB1dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>