<?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>43218</bug_id>
          
          <creation_ts>2010-07-29 15:43:16 -0700</creation_ts>
          <short_desc>[chromium] Make the GLES2 texture map generic and teach ImageSkia and ImageBufferSkia about GLES2</short_desc>
          <delta_ts>2010-07-30 14:20:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>fishd</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257936</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-29 15:43:16 -0700</bug_when>
    <thetext>[chromium] Make the GLES2 texture map generic and teach ImageSkia and ImageBufferSkia about GLES2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257940</commentid>
    <comment_count>1</comment_count>
      <attachid>63005</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-29 15:49:19 -0700</bug_when>
    <thetext>Created attachment 63005
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258036</commentid>
    <comment_count>2</comment_count>
      <attachid>63005</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-29 20:26:18 -0700</bug_when>
    <thetext>Comment on attachment 63005
Patch

WebCore/platform/graphics/chromium/GLES2Canvas.cpp:476
 +  GLES2Texture* GLES2Canvas::createTexture(const void* ptr, GLES2Texture::Format format, int width, int height)
ewwww... it is really easy to have casting errors when passing class pointers
to a function expecting a void*.  this can be especially nasty when multiple
inheritance is involved.  we&apos;ve been burned by things like this before.
what do you think about defining a common base class that all types that
can be passed here must implement?  or, how about a struct/union that has
member pointers for each supported pointer type?

WebCore/platform/graphics/chromium/GLES2Canvas.h:52
 +  typedef HashMap&lt;const void *, RefPtr&lt;GLES2Texture&gt; &gt; TextureHashMap;
nit: no space between &quot;void&quot; and &quot;*&quot;.  there are several others like this one.

otherwise, this LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258037</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-29 20:28:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 63005 [details])
&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:476
&gt;  +  GLES2Texture* GLES2Canvas::createTexture(const void* ptr, GLES2Texture::Format format, int width, int height)
&gt; ewwww... it is really easy to have casting errors when passing class pointers
&gt; to a function expecting a void*.  this can be especially nasty when multiple
&gt; inheritance is involved.  we&apos;ve been burned by things like this before.
&gt; what do you think about defining a common base class that all types that
&gt; can be passed here must implement?  or, how about a struct/union that has
&gt; member pointers for each supported pointer type?

or even simpler:  provide overrides of createTexture and getTexture for each supported input pointer type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258096</commentid>
    <comment_count>4</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-07-30 02:34:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 63005 [details])
&gt; WebCore/platform/graphics/chromium/GLES2Canvas.cpp:476
&gt;  +  GLES2Texture* GLES2Canvas::createTexture(const void* ptr, GLES2Texture::Format format, int width, int height)
&gt; ewwww... it is really easy to have casting errors when passing class pointers
&gt; to a function expecting a void*.  this can be especially nasty when multiple
&gt; inheritance is involved.  we&apos;ve been burned by things like this before.
&gt; what do you think about defining a common base class that all types that
&gt; can be passed here must implement?  or, how about a struct/union that has
&gt; member pointers for each supported pointer type?

Since this change is my fault, I&apos;ll try to justify it:

The texture hash map only uses the pointer as an opaque key.  It&apos;s never dereferenced, nor is it cast to anything else.  So there&apos;s no danger of casting errors.  The only danger of a caller passing in a pointer of the wrong type would be that no texture would be found, or a newly-created texture would be associated with the wrong pointer.  But errors like that would be quickly noticed due to bad performance.

The original reason was for constness:  there was a const_cast in ImageSkia.cpp I wanted to get rid of, and the compiler was giving me grief with &quot;const NativeImagePtr&quot; as the hash key.  I think I would have had to define a NativeImagePtrConst for each platform.

Another reason for making it opaque is that it would discourage anyone from making any member/fn calls dependent on the platform-specific NativeImagePtr.  I was also concerned that NativeImagePtr might not work in a hash map on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258237</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-30 09:54:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
...
&gt; Since this change is my fault, I&apos;ll try to justify it:
&gt; 
&gt; The texture hash map only uses the pointer as an opaque key.  It&apos;s never dereferenced, nor is it cast to anything else.  So there&apos;s no danger of casting errors.  The only danger of a caller passing in a pointer of the wrong type would be that no texture would be found, or a newly-created texture would be associated with the wrong pointer.  But errors like that would be quickly noticed due to bad performance.

Hmm... that&apos;s exactly the kind of thing I was hoping we could avoid.  The result is not a crash implicating a certain piece of code, instead it is just degraded performance.  In the past, code like this led to memory leaks that were hard to track down.  I&apos;m just saying that the pattern is to be avoided.


&gt; The original reason was for constness:  there was a const_cast in ImageSkia.cpp I wanted to get rid of, and the compiler was giving me grief with &quot;const NativeImagePtr&quot; as the hash key.  I think I would have had to define a NativeImagePtrConst for each platform.
&gt; 
&gt; Another reason for making it opaque is that it would discourage anyone from making any member/fn calls dependent on the platform-specific NativeImagePtr.  I was also concerned that NativeImagePtr might not work in a hash map on all platforms.

I see.  I did not realize that there were other reasons to hide the fact that it was a NativeImagePtr from this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258246</commentid>
    <comment_count>6</comment_count>
      <attachid>63005</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-30 10:02:27 -0700</bug_when>
    <thetext>Comment on attachment 63005
Patch

R=me but please consider alternatives that avoid risky void*.

CQ- for the style issues mentioned earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258360</commentid>
    <comment_count>7</comment_count>
      <attachid>63100</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-30 13:47:22 -0700</bug_when>
    <thetext>Created attachment 63100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258361</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-30 13:48:14 -0700</bug_when>
    <thetext>As it turns out NativeImagePtr works fine as a hash key, so switched back to using that.  The only possible issue is that on WinCE NativeImagePtr is typedef&apos;d to RefPtr instead of a raw pointer.  However, I can&apos;t imagine this code ever running on WinCE anyway so I think it&apos;s fine to ignore that for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258365</commentid>
    <comment_count>9</comment_count>
      <attachid>63100</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-30 13:57:10 -0700</bug_when>
    <thetext>Comment on attachment 63100
Patch

OK, cool.  R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258368</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-07-30 14:02:36 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; As it turns out NativeImagePtr works fine as a hash key, so switched back to using that.  The only possible issue is that on WinCE NativeImagePtr is typedef&apos;d to RefPtr instead of a raw pointer.  However, I can&apos;t imagine this code ever running on WinCE anyway so I think it&apos;s fine to ignore that for now.

Great.  My bad -- I was led astray by the const NativeImageSkia* in ImageSkia (which as James pointed out to me, is unnecessary -- non-const works fine here).

Just FYI, the problem I had with HashMap turned out to be that &quot;const NativeImagePtr&quot; actually maps to &quot;NativeImageSkia* const&quot;, not &quot;const NativeImageSkia*&quot;, and the DefaultHash function used by HashMap has no specialization for T * const.  This could be fixed many ways, but keeping it non-const is probably the easiest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258380</commentid>
    <comment_count>11</comment_count>
      <attachid>63100</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-30 14:20:22 -0700</bug_when>
    <thetext>Comment on attachment 63100
Patch

Clearing flags on attachment: 63100

Committed r64374: &lt;http://trac.webkit.org/changeset/64374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258381</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-30 14:20:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63005</attachid>
            <date>2010-07-29 15:49:19 -0700</date>
            <delta_ts>2010-07-30 13:47:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43218-20100729154917.patch</filename>
            <type>text/plain</type>
            <size>8857</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWMxMGQyYWVlMTg0YmU2NmExODFhNDc5ZmQ2YjZmYTFiNzIzMWFjMS4uY2UyNTRkYjI1MWY0MzEz
NGQ4ZDVhZDIyZGRlODVlYTlhNjIxYTMyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzMSBAQAogMjAxMC0wNy0yOSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSB0aGUgR0xFUzIgdGV4
dHVyZSBtYXAgZ2VuZXJpYyBhbmQgdGVhY2ggSW1hZ2VTa2lhIGFuZCBJbWFnZUJ1ZmZlclNraWEg
YWJvdXQgR0xFUzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQzMjE4CisKKyAgICAgICAgVGhpcyBtYWtlcyB0aGUgR0xFUzJDYW52YXMnIFRleHR1cmVI
YXNoTWFwIGtleSBvbiB2b2lkKiBpbnN0ZWFkIG9mIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB3aXRoIG90aGVyIGJhY2tlbmRzLiAgSXQgYWxzbyB0ZWFj
aGVzIEltYWdlU2tpYSBob3cKKyAgICAgICAgdG8gZHJhdyB0byBhIEdMRVMyQ2FudmFzIGluc3Rl
YWQgb2YgYSBza2lhIGJ1ZmZlci4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0
eSAoeWV0KSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OkdM
RVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRUZXh0dXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdCaXRtYXBHTEVTMik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyk6CisK
KzIwMTAtMDctMjkgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCiAKICAgICAgICAgQXNrIGEgY2FudmFzJyBy
ZW5kZXJpbmcgY29udGV4dCBpZiBpdCBpcyBhY2NlbGVyYXRlZCBpbnN0ZWFkIHR5aW5nIGl0IGRp
cmVjdGx5IHRvIHdlYmdsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuY3BwCmluZGV4IGVjMTg4YzgyNzVlMDdiMjkyNWI0NTYxNDJhMGY1MTk5
ZDBiZGE5NTMuLjgzZGUyNWRiMGI2MGZkN2Q1NTY0NzI1MzAzNmNjOGI5NWQ5YWJjNzEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CkBAIC05OSw2ICs5OSwxMCBAQCBHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoR0xFUzJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CisKKyAgICAv
LyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29tcG9zaXRlIG1vZGUgdG8gYmUgYXBwbGllZC4KKyAg
ICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBvc2l0ZUNsZWFyOworICAgIGFwcGx5Q29tcG9zaXRl
T3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9CiAKIEdMRVMyQ2FudmFzOjp+R0xFUzJD
YW52YXMoKQpAQCAtNDY5LDcgKzQ3Myw3IEBAIHVuc2lnbmVkIEdMRVMyQ2FudmFzOjpnZXRUZXhQ
cm9ncmFtKCkKICAgICByZXR1cm4gbV90ZXhQcm9ncmFtOwogfQogCi1HTEVTMlRleHR1cmUqIEdM
RVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgR0xFUzJUZXh0dXJl
OjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitHTEVTMlRleHR1cmUqIEdM
RVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJlKGNvbnN0IHZvaWQqIHB0ciwgR0xFUzJUZXh0dXJlOjpG
b3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgUGFzc1JlZlB0cjxH
TEVTMlRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChwdHIpOwogICAgIGlmICh0ZXh0
dXJlKQpAQCAtNDgxLDcgKzQ4NSw3IEBAIEdMRVMyVGV4dHVyZSogR0xFUzJDYW52YXM6OmNyZWF0
ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyLCBHTEVTMlRleHR1cmU6OkZvcm1hCiAgICAgcmV0
dXJuIHQ7CiB9CiAKLUdMRVMyVGV4dHVyZSogR0xFUzJDYW52YXM6OmdldFRleHR1cmUoTmF0aXZl
SW1hZ2VQdHIgcHRyKQorR0xFUzJUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZShjb25z
dCB2b2lkKiBwdHIpCiB7CiAgICAgUGFzc1JlZlB0cjxHTEVTMlRleHR1cmU+IHRleHR1cmUgPSBt
X3RleHR1cmVzLmdldChwdHIpOwogICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS5nZXQoKSA6
IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFz
LmgKaW5kZXggZTNhN2EzYmQ2M2MzMjAyYzMzYzg4MzZmMDcwYmVlZmU0ZTRkNTc1OS4uMjc5NDZl
Yjk4ZjgwNjg3MmFkMWMyNDVmY2YxNDVhMDg3NjdkMWU2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaApAQCAtMzgsMTAgKzM4LDEwIEBA
CiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkdMRVMyVGV4dHVyZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDksNyArNDks
NyBAQCBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIEdMRVMyQ29udGV4dDsK
IAotdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBSZWZQdHI8R0xFUzJUZXh0dXJlPiA+
IFRleHR1cmVIYXNoTWFwOwordHlwZWRlZiBIYXNoTWFwPGNvbnN0IHZvaWQgKiwgUmVmUHRyPEdM
RVMyVGV4dHVyZT4gPiBUZXh0dXJlSGFzaE1hcDsKIAogY2xhc3MgR0xFUzJDYW52YXMgOiBwdWJs
aWMgTm9uY29weWFibGUgewogcHVibGljOgpAQCAtNzYsOCArNzYsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkcmF3VGV4dHVyZWRSZWN0KEdMRVMyVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgZHJh
d1RleHR1cmVkUmVjdChHTEVTMlRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwog
ICAgIEdMRVMyQ29udGV4dCogZ2xlczJDb250ZXh0KCkgeyByZXR1cm4gbV9nbGVzMkNvbnRleHQ7
IH0KLSAgICBHTEVTMlRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIEdMRVMy
VGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIEdMRVMyVGV4dHVy
ZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CisgICAgR0xFUzJUZXh0dXJlKiBjcmVhdGVU
ZXh0dXJlKGNvbnN0IHZvaWQgKiwgR0xFUzJUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCk7CisgICAgR0xFUzJUZXh0dXJlKiBnZXRUZXh0dXJlKGNvbnN0IHZvaWQgKik7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJh
dG9yKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAKaW5kZXggMjZjNDRmMjM5ZTFjZGU4MGU4ZDlmMzk0YTJmNjg2ZjQ4YmU4MjBjMC4u
M2ViMDMzZDRkNjcxNTMzNGMzZTk1NDc0Y2FlNjJiMmU0NDVhYzBiZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTE5OCwx
MSArMTk4LDEzIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwKIAogUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKIHsKKyAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29m
dHdhcmVDYW52YXMoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVj
dCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOwogfQog
CiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKKyAgICBjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPFByZW11bHRpcGxpZWQ+KHJlY3QsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5i
aXRtYXAoKSwgbV9zaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcAppbmRleCBkMWQxNjkyOTNmNWYxZjQ4NDI0NmM1ZTVlNjQ5ZWFhMWZlMDlm
ZDQzLi5mZGI0OTc4MjM3ZmMxMmYzODZmZGFhNTcyYThhZmIxZGE4ZWYzODk4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDcsNiArNDcsMTEg
QEAKIAogI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJz
a2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKKyNpZiBVU0UoR0xFUzJfUkVOREVSSU5HKQorI2lu
Y2x1ZGUgIkdMRVMyQ2FudmFzLmgiCisjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCisjaW5jbHVk
ZSAiU2tQaXhlbFJlZi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDA0
LDYgKzQwOSwyNCBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsCiAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50U2tQYWludChkZXN0
UmVjdCwgcGFpbnQpOwogfQogCisjaWYgVVNFKEdMRVMyX1JFTkRFUklORykKK3N0YXRpYyB2b2lk
IGRyYXdCaXRtYXBHTEVTMihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IE5hdGl2ZUltYWdl
U2tpYSogYml0bWFwLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKQoreworICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFy
ZHdhcmVEcmF3KCk7CisgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcyA9IGN0eHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5ncHVDYW52YXMoKTsKKyAgICBncHVDYW52YXMtPmdsZXMyQ29udGV4dCgpLT5t
YWtlQ3VycmVudCgpOworICAgIEdMRVMyVGV4dHVyZSogdGV4dHVyZSA9IGdwdUNhbnZhcy0+Z2V0
VGV4dHVyZShiaXRtYXApOworICAgIGlmICghdGV4dHVyZSkgeworICAgICAgICBBU1NFUlQoYml0
bWFwLT5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgICAgICBB
U1NFUlQoYml0bWFwLT5yb3dCeXRlcygpID09IGJpdG1hcC0+d2lkdGgoKSAqIDQpOworICAgICAg
ICB0ZXh0dXJlID0gZ3B1Q2FudmFzLT5jcmVhdGVUZXh0dXJlKGJpdG1hcCwgR0xFUzJUZXh0dXJl
OjpCR1JBOCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpKTsKKyAgICAgICAgQVNT
RVJUKGJpdG1hcC0+cGl4ZWxSZWYoKSk7CisgICAgICAgIHRleHR1cmUtPmxvYWQoYml0bWFwLT5w
aXhlbFJlZigpLT5waXhlbHMoKSk7CisgICAgfQorICAgIGdwdUNhbnZhcy0+ZHJhd1RleHR1cmVk
UmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0
ZU9wKTsKK30KKyNlbmRpZgorCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KIC8vIEJpdG1hcEltYWdlIENsYXNzCiAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQyOSw3ICs0NTIsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogfQogCiB2b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAot
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXpl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC00NDMsMTIgKzQ2NiwyMCBAQCB2b2lkIEJpdG1hcElt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LAogICAgIGlmICghYm0pCiAgICAgICAgIHJldHVybjsgIC8vIEl0J3MgdG9vIGVhcmx5IGFuZCB3
ZSBkb24ndCBoYXZlIGFuIGltYWdlIHlldC4KIAorI2lmICBVU0UoR0xFUzJfUkVOREVSSU5HKQor
ICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAgICAgZHJh
d0JpdG1hcEdMRVMyKGN0eHQsIGJtLCBzcmNSZWN0LCBkc3RSZWN0LCBjb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICBGbG9hdFJlY3Qg
bm9ybURzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwogICAgIEZsb2F0UmVjdCBub3Jt
U3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCk7CiAKICAgICBpZiAobm9ybVNyY1JlY3Qu
aXNFbXB0eSgpIHx8IG5vcm1Ec3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8g
Tm90aGluZyB0byBkcmF3LgogCisgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKTsKKwogICAgIHBhaW50U2tCaXRtYXAoY3R4dC0+cGxhdGZvcm1Db250
ZXh0KCksCiAgICAgICAgICAgICAgICAgICAqYm0sCiAgICAgICAgICAgICAgICAgICBlbmNsb3Np
bmdJbnRSZWN0KG5vcm1TcmNSZWN0KSwKQEAgLTQ3MCw2ICs1MDEsMTUgQEAgdm9pZCBCaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsCiAgICAgaWYg
KG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KIAorI2lmICBVU0UoR0xFUzJfUkVOREVSSU5H
KQorICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAgICAg
ZHJhd0JpdG1hcEdMRVMyKGN0eHQsICZtX25hdGl2ZUltYWdlLCBzcmNSZWN0LCBkc3RSZWN0LCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURy
YXcoKTsKKwogICAgIHBhaW50U2tCaXRtYXAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCksCiAgICAg
ICAgICAgICAgICAgICBtX25hdGl2ZUltYWdlLAogICAgICAgICAgICAgICAgICAgZW5jbG9zaW5n
SW50UmVjdChub3JtU3JjUmVjdCksCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63100</attachid>
            <date>2010-07-30 13:47:22 -0700</date>
            <delta_ts>2010-07-30 14:20:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43218-20100730134721.patch</filename>
            <type>text/plain</type>
            <size>7204</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWMxMGQyYWVlMTg0YmU2NmExODFhNDc5ZmQ2YjZmYTFiNzIzMWFjMS4uY2UyNTRkYjI1MWY0MzEz
NGQ4ZDVhZDIyZGRlODVlYTlhNjIxYTMyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzMSBAQAogMjAxMC0wNy0yOSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSB0aGUgR0xFUzIgdGV4
dHVyZSBtYXAgZ2VuZXJpYyBhbmQgdGVhY2ggSW1hZ2VTa2lhIGFuZCBJbWFnZUJ1ZmZlclNraWEg
YWJvdXQgR0xFUzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQzMjE4CisKKyAgICAgICAgVGhpcyBtYWtlcyB0aGUgR0xFUzJDYW52YXMnIFRleHR1cmVI
YXNoTWFwIGtleSBvbiB2b2lkKiBpbnN0ZWFkIG9mIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB3aXRoIG90aGVyIGJhY2tlbmRzLiAgSXQgYWxzbyB0ZWFj
aGVzIEltYWdlU2tpYSBob3cKKyAgICAgICAgdG8gZHJhdyB0byBhIEdMRVMyQ2FudmFzIGluc3Rl
YWQgb2YgYSBza2lhIGJ1ZmZlci4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0
eSAoeWV0KSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OkdM
RVMyQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjcmVhdGVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpnZXRUZXh0dXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdCaXRtYXBHTEVTMik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyk6CisK
KzIwMTAtMDctMjkgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCiAKICAgICAgICAgQXNrIGEgY2FudmFzJyBy
ZW5kZXJpbmcgY29udGV4dCBpZiBpdCBpcyBhY2NlbGVyYXRlZCBpbnN0ZWFkIHR5aW5nIGl0IGRp
cmVjdGx5IHRvIHdlYmdsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuY3BwCmluZGV4IGVjMTg4YzgyNzVlMDdiMjkyNWI0NTYxNDJhMGY1MTk5
ZDBiZGE5NTMuLjlmYzg5MTdjNDY3NTAzOWQ5MTM5YTBlZmRjNDdkOGVhMTdlNzNkODcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3Bw
CkBAIC05OSw2ICs5OSwxMCBAQCBHTEVTMkNhbnZhczo6R0xFUzJDYW52YXMoR0xFUzJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CisKKyAgICAv
LyBGb3JjZSB0aGUgc291cmNlIG92ZXIgY29tcG9zaXRlIG1vZGUgdG8gYmUgYXBwbGllZC4KKyAg
ICBtX2xhc3RDb21wb3NpdGVPcCA9IENvbXBvc2l0ZUNsZWFyOworICAgIGFwcGx5Q29tcG9zaXRl
T3BlcmF0b3IoQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9CiAKIEdMRVMyQ2FudmFzOjp+R0xFUzJD
YW52YXMoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
TEVTMkNhbnZhcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5oCmluZGV4IGUzYTdhM2JkNjNjMzIwMmMzM2M4ODM2ZjA3MGJlZWZlNGU0ZDU3NTkuLjRl
NTAwYmVmODU5ZGRjZmIwNWJlZGZiOGU5ZjI0MjEwZTFiZDMyYWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKQEAgLTQyLDYgKzQyLDcg
QEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAK
aW5kZXggMjZjNDRmMjM5ZTFjZGU4MGU4ZDlmMzk0YTJmNjg2ZjQ4YmU4MjBjMC4uM2ViMDMzZDRk
NjcxNTMzNGMzZTk1NDc0Y2FlNjJiMmU0NDVhYzBiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTE5OCwxMSArMTk4LDEz
IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwKIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdl
QnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKIHsKKyAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52
YXMoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgKmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCBtX3NpemUpOwogfQogCiBQYXNzUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKKyAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFByZW11
bHRpcGxpZWQ+KHJlY3QsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKSwg
bV9zaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcAppbmRleCBkMWQxNjkyOTNmNWYxZjQ4NDI0NmM1ZTVlNjQ5ZWFhMWZlMDlmZDQzLi5hMjQ4
NWU2YWI2MjY1MDlkZjA3NTM2MjY5ZTljZGJmODNkNGU1ZTZmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtNDcsNiArNDcsMTEgQEAKIAogI2lu
Y2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJza2lhL2V4dC9w
bGF0Zm9ybV9jYW52YXMuaCIKKyNpZiBVU0UoR0xFUzJfUkVOREVSSU5HKQorI2luY2x1ZGUgIkdM
RVMyQ2FudmFzLmgiCisjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tQaXhl
bFJlZi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDA0LDYgKzQwOSwy
NCBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAg
ICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBhaW50U2tQYWludChkZXN0UmVjdCwgcGFp
bnQpOwogfQogCisjaWYgVVNFKEdMRVMyX1JFTkRFUklORykKK3N0YXRpYyB2b2lkIGRyYXdCaXRt
YXBHTEVTMihHcmFwaGljc0NvbnRleHQqIGN0eHQsIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwLCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQorewor
ICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7Cisg
ICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcyA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5ncHVD
YW52YXMoKTsKKyAgICBncHVDYW52YXMtPmdsZXMyQ29udGV4dCgpLT5tYWtlQ3VycmVudCgpOwor
ICAgIEdMRVMyVGV4dHVyZSogdGV4dHVyZSA9IGdwdUNhbnZhcy0+Z2V0VGV4dHVyZShiaXRtYXAp
OworICAgIGlmICghdGV4dHVyZSkgeworICAgICAgICBBU1NFUlQoYml0bWFwLT5jb25maWcoKSA9
PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOworICAgICAgICBBU1NFUlQoYml0bWFwLT5y
b3dCeXRlcygpID09IGJpdG1hcC0+d2lkdGgoKSAqIDQpOworICAgICAgICB0ZXh0dXJlID0gZ3B1
Q2FudmFzLT5jcmVhdGVUZXh0dXJlKGJpdG1hcCwgR0xFUzJUZXh0dXJlOjpCR1JBOCwgYml0bWFw
LT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKGJpdG1hcC0+cGl4
ZWxSZWYoKSk7CisgICAgICAgIHRleHR1cmUtPmxvYWQoYml0bWFwLT5waXhlbFJlZigpLT5waXhl
bHMoKSk7CisgICAgfQorICAgIGdwdUNhbnZhcy0+ZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBz
cmNSZWN0LCBkc3RSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKK30KKyNlbmRp
ZgorCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
IC8vIEJpdG1hcEltYWdlIENsYXNzCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQEAgLTQyOSw3ICs0NTIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpj
aGVja0ZvclNvbGlkQ29sb3IoKQogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCiB7CiAgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MzksMTYgKzQ2MiwyNCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogICAgIC8vIGNhdXNp
bmcgZmxpY2tlciBhbmQgd2FzdGluZyBDUFUuCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIAotICAg
IGNvbnN0IE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgIE5hdGl2ZUltYWdlU2tpYSogYm0gPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwogICAgIGlmICghYm0pCiAgICAgICAgIHJldHVybjsgIC8vIEl0J3MgdG9vIGVhcmx5IGFuZCB3
ZSBkb24ndCBoYXZlIGFuIGltYWdlIHlldC4KIAorI2lmICBVU0UoR0xFUzJfUkVOREVSSU5HKQor
ICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAgICAgZHJh
d0JpdG1hcEdMRVMyKGN0eHQsIGJtLCBzcmNSZWN0LCBkc3RSZWN0LCBjb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICBGbG9hdFJlY3Qg
bm9ybURzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwogICAgIEZsb2F0UmVjdCBub3Jt
U3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCk7CiAKICAgICBpZiAobm9ybVNyY1JlY3Qu
aXNFbXB0eSgpIHx8IG5vcm1Ec3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8g
Tm90aGluZyB0byBkcmF3LgogCisgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKTsKKwogICAgIHBhaW50U2tCaXRtYXAoY3R4dC0+cGxhdGZvcm1Db250
ZXh0KCksCiAgICAgICAgICAgICAgICAgICAqYm0sCiAgICAgICAgICAgICAgICAgICBlbmNsb3Np
bmdJbnRSZWN0KG5vcm1TcmNSZWN0KSwKQEAgLTQ3MCw2ICs1MDEsMTUgQEAgdm9pZCBCaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsCiAgICAgaWYg
KG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KIAorI2lmICBVU0UoR0xFUzJfUkVOREVSSU5H
KQorICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAgICAg
ZHJhd0JpdG1hcEdMRVMyKGN0eHQsICZtX25hdGl2ZUltYWdlLCBzcmNSZWN0LCBkc3RSZWN0LCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURy
YXcoKTsKKwogICAgIHBhaW50U2tCaXRtYXAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCksCiAgICAg
ICAgICAgICAgICAgICBtX25hdGl2ZUltYWdlLAogICAgICAgICAgICAgICAgICAgZW5jbG9zaW5n
SW50UmVjdChub3JtU3JjUmVjdCksCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>