<?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>57464</bug_id>
          
          <creation_ts>2011-03-30 09:20:33 -0700</creation_ts>
          <short_desc>Clipping in accelerated Canvas2D should be faster</short_desc>
          <delta_ts>2011-03-30 14:50:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>mdelaney7</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>376383</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-30 09:20:33 -0700</bug_when>
    <thetext>The clipping in accelerated Canvas2D is not as fast as it could be.  It clears the stencil buffer when removing clipping paths, when it would probably be faster to re-draw the path with a decrement stencil op.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376399</commentid>
    <comment_count>1</comment_count>
      <attachid>87552</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-30 09:38:56 -0700</bug_when>
    <thetext>Created attachment 87552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376668</commentid>
    <comment_count>2</comment_count>
      <attachid>87552</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-30 14:20:28 -0700</bug_when>
    <thetext>Comment on attachment 87552
Patch

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

The idea is good but the implementation needs cleanup.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:72
&gt; +    Path m_path;
&gt; +    AffineTransform m_transform;

In WebKit style the m_ prefix isn&apos;t needed for members of structs.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:81
&gt; +        , m_numClippingPaths(0)

Please add a method to this struct like &quot;bool clippingEnabled()&quot; which does the test of m_numClippingPaths &gt; 0. The tests strewn throughout this patch are gross and will be fragile in the long run. Even better, make the method call m_clippingPaths.size() and remove the duplicated m_numClippingPaths member entirely.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:221
&gt; +    if (m_state-&gt;m_ctm.isIdentity() &amp;&amp; !m_state-&gt;m_numClippingPaths) {

Replace the test of m_numClippingPaths with a method call.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:254
&gt; +    applyClipping(m_state-&gt;m_numClippingPaths &gt; 0);

Here and below, please replace the test of &quot;m_state-&gt;m_numClippingPaths &gt; 0&quot; with a method call.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:355
&gt; +    m_state-&gt;m_clippingPaths.append(PathAndTransform(path, m_state-&gt;m_ctm));
&gt; +    m_state-&gt;m_numClippingPaths++;

This looks like replicated data. m_numClippingPaths == m_clippingPaths.size().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376678</commentid>
    <comment_count>3</comment_count>
      <attachid>87552</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-30 14:34:46 -0700</bug_when>
    <thetext>Comment on attachment 87552
Patch

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

Thanks for the review.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:72
&gt;&gt; +    AffineTransform m_transform;
&gt; 
&gt; In WebKit style the m_ prefix isn&apos;t needed for members of structs.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:81
&gt;&gt; +        , m_numClippingPaths(0)
&gt; 
&gt; Please add a method to this struct like &quot;bool clippingEnabled()&quot; which does the test of m_numClippingPaths &gt; 0. The tests strewn throughout this patch are gross and will be fragile in the long run. Even better, make the method call m_clippingPaths.size() and remove the duplicated m_numClippingPaths member entirely.

No, that won&apos;t work.  m_numClippingPaths is the total number of paths, in all States.  m_clippingPaths contains only the paths in the current State (see the comment in the GLES2Canvas copy constructor).

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:221
&gt;&gt; +    if (m_state-&gt;m_ctm.isIdentity() &amp;&amp; !m_state-&gt;m_numClippingPaths) {
&gt; 
&gt; Replace the test of m_numClippingPaths with a method call.

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:254
&gt;&gt; +    applyClipping(m_state-&gt;m_numClippingPaths &gt; 0);
&gt; 
&gt; Here and below, please replace the test of &quot;m_state-&gt;m_numClippingPaths &gt; 0&quot; with a method call.

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:355
&gt;&gt; +    m_state-&gt;m_numClippingPaths++;
&gt; 
&gt; This looks like replicated data. m_numClippingPaths == m_clippingPaths.size().

Nope (see above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376686</commentid>
    <comment_count>4</comment_count>
      <attachid>87620</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-30 14:41:03 -0700</bug_when>
    <thetext>Created attachment 87620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376695</commentid>
    <comment_count>5</comment_count>
      <attachid>87620</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-30 14:45:06 -0700</bug_when>
    <thetext>Comment on attachment 87620
Patch

Thanks for doing the cleanups. I understand now the difference between m_clippingPaths&apos; length and m_numClippingPaths. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376698</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-30 14:50:04 -0700</bug_when>
    <thetext>Committed r82502: &lt;http://trac.webkit.org/changeset/82502&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87552</attachid>
            <date>2011-03-30 09:38:56 -0700</date>
            <delta_ts>2011-03-30 14:41:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57464-20110330123854.patch</filename>
            <type>text/plain</type>
            <size>12112</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDU3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDMtMzAgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWQgdXAgY2xpcHBpbmcgaW4gYWNjZWxlcmF0
ZWQgMkQgY2FudmFzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTc0NjQKKworICAgICAgICBJbnN0ZWFkIG9mIGNsZWFyaW5nIHRoZSBlbnRpcmUgc3Rl
bmNpbCBidWZmZXIgd2hlbiByZW1vdmluZyBjbGlwcGluZyBwYXRocywgd2UgZXJhc2UgdGhlIHBh
dGggd2l0aCBhIERFQ1Igc3RlbmNpbCBvcGVyYXRpb24uCisgICAgICAgIENvdmVyZWQgYnkgY2Fu
dmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmNsaXAuaW50ZXJzZWN0Lmh0bWwsIGFuZCBvdGhlcnMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoQW5kVHJhbnNmb3JtOjpQYXRoQW5kVHJhbnNmb3JtKToK
KyAgICAgICAgTmV3IHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBDVE0gYXQgdGhlIHRp
bWUgdGhlIGNsaXBwaW5nIHBhdGggd2FzIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJD
YW52YXM6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIFJlcGxhY2UgbV9jbGlwcGluZ0VuYWJsZWQg
d2l0aCBhIGNvdW50IG9mIHRvdGFsIGNsaXBwaW5nIHBhdGhzLgorICAgICAgICAoV2ViQ29yZTo6
R0xFUzJDYW52YXM6OmNsZWFyUmVjdCk6CisgICAgICAgIENoZWNrIHRoZSB0b3RhbCBjbGlwcGlu
ZyBwYXRoIGNvdW50LCBpbnN0ZWFkIG9mIG1fY2xpcHBpbmdFbmFibGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2Fu
dmFzOjpmaWxsUmVjdCk6CisgICAgICAgIFBlcmZvcm0gc3RhdGUgYXBwbGljYXRpb24gYWZ0ZXIg
ZG9pbmcgc2hhZG93cy4gIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgICAgIHNpbmNlIHJlc3RvcmUo
KSBtYXkgbm93IGxlYXZlIGNsaXBwaW5nIGVuYWJsZWQuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y2xpcFBhdGgpOgorICAgICAgICBFeHBsaWNpdGx5IHNwZWNpZnkgdGhlIHN0ZW5j
aWwgb3BlcmF0aW9uIGFzIElOQ1IuICBTdG9yZSB0aGUgY3VycmVudAorICAgICAgICB0cmFuc2Zv
cm1hdGlvbiB3aGVuIHNhdmluZyBjbGlwcGluZyBwYXRocy4KKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpyZXN0b3JlKToKKyAgICAgICAgRG9uJ3QgY2xlYXIgdGhlIHN0ZW5jaWwgYnVm
ZmVyIGFuZCByZS1kcmF3IGFjdGl2ZSBwYXRocyBvbiBlYWNoIHJlc3RvcmUuCisgICAgICAgIEVy
YXNlIHRoZSBvbGQgcGF0aHMgd2l0aCBERUNSLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52
YXM6OmRyYXdUZXh0dXJlZFJlY3QpOgorICAgICAgICBDaGVjayBtX251bUNsaXBwaW5nUGF0aHMg
aW5zdGVhZCBvZiBtX2NsaXBwaW5nRW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2Fu
dmFzOjpiZWdpblNoYWRvd0RyYXcpOgorICAgICAgICBQZXJmb3JtIHN0YXRlIGFwcGxpY2F0aW9u
IHdoZW4gZHJhd2luZyBoYXJkIHNoYWRvd3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZh
czo6ZW5kU2hhZG93RHJhdyk6CisgICAgICAgIENoZWNrIG1fbnVtQ2xpcHBpbmdQYXRocyBpbnN0
ZWFkIG9mIG1fY2xpcHBpbmdFbmFibGVkLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6
OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBNYWtlIHRoZSBzdGVuY2lsIG9wIGEgcGFyYW1l
dGVyIHRvIGJlZ2luU2hhZG93RHJhdygpLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6
OmFwcGx5Q2xpcHBpbmcpOgorICAgICAgICBDb21wYXJlIGFnYWluc3QgdGhlIHRvdGFsIG51bWJl
ciBvZiBzdGVuY2lsIHBhdGhzLCBub3QganVzdCB0aGUgb25lcyBpbgorICAgICAgICB0aGUgY3Vy
cmVudCBzdGF0ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5oOgorICAgICAgICBNYWtlIHRoZSBzdGVuY2lsIG9wIGEgcGFyYW1ldGVyIHRvIGJlZ2lu
U2hhZG93RHJhdygpLgorCiAyMDExLTAzLTMwICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEJ1aWxkIGZpeCBmb3IgRWZsIGFuZCBR
dCBXaW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
TEVTMkNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCShyZXZpc2lvbiA4MjQ1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsMTMgKzYyLDIzIEBAIHR5cGVkZWYgdm9pZCAoR0xBUElFTlRSWSAq
VEVTU0NCKSgpOwogdHlwZWRlZiBXVEY6OlZlY3RvcjxmbG9hdD4gRmxvYXRWZWN0b3I7CiB0eXBl
ZGVmIFdURjo6VmVjdG9yPGRvdWJsZT4gRG91YmxlVmVjdG9yOwogCitzdHJ1Y3QgUGF0aEFuZFRy
YW5zZm9ybSB7CisgICAgUGF0aEFuZFRyYW5zZm9ybShjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICAg
ICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCisgICAgeworICAgIH0KKyAgICBQYXRoIG1fcGF0
aDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9OworCiBzdHJ1Y3QgR0xFUzJD
YW52YXM6OlN0YXRlIHsKICAgICBTdGF0ZSgpCiAgICAgICAgIDogbV9maWxsQ29sb3IoMCwgMCwg
MCwgMjU1KQogICAgICAgICAsIG1fc2hhZG93Q29sb3IoMCwgMCwgMCwgMCkKICAgICAgICAgLCBt
X2FscGhhKDEuMGYpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3NpdGVTb3VyY2VPdmVy
KQotICAgICAgICAsIG1fY2xpcHBpbmdFbmFibGVkKGZhbHNlKQorICAgICAgICAsIG1fbnVtQ2xp
cHBpbmdQYXRocygwKQogICAgICAgICAsIG1fc2hhZG93T2Zmc2V0KDAsIDApCiAgICAgICAgICwg
bV9zaGFkb3dCbHVyKDApCiAgICAgICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxz
ZSkKQEAgLTgxLDcgKzkxLDcgQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgICAg
ICwgbV9jb21wb3NpdGVPcChvdGhlci5tX2NvbXBvc2l0ZU9wKQogICAgICAgICAsIG1fY3RtKG90
aGVyLm1fY3RtKQogICAgICAgICAsIG1fY2xpcHBpbmdQYXRocygpIC8vIERvbid0IGNvcHk7IGNs
aXBwaW5nIHBhdGhzIGFyZSB0cmFja2VkIHBlci1zdGF0ZS4KLSAgICAgICAgLCBtX2NsaXBwaW5n
RW5hYmxlZChvdGhlci5tX2NsaXBwaW5nRW5hYmxlZCkKKyAgICAgICAgLCBtX251bUNsaXBwaW5n
UGF0aHMob3RoZXIubV9udW1DbGlwcGluZ1BhdGhzKQogICAgICAgICAsIG1fc2hhZG93T2Zmc2V0
KG90aGVyLm1fc2hhZG93T2Zmc2V0KQogICAgICAgICAsIG1fc2hhZG93Qmx1cihvdGhlci5tX3No
YWRvd0JsdXIpCiAgICAgICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhvdGhlci5tX3No
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQpAQCAtOTIsOCArMTAyLDggQEAgc3RydWN0IEdMRVMyQ2Fu
dmFzOjpTdGF0ZSB7CiAgICAgZmxvYXQgbV9hbHBoYTsKICAgICBDb21wb3NpdGVPcGVyYXRvciBt
X2NvbXBvc2l0ZU9wOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKLSAgICBXVEY6OlZlY3Rv
cjxQYXRoPiBtX2NsaXBwaW5nUGF0aHM7Ci0gICAgYm9vbCBtX2NsaXBwaW5nRW5hYmxlZDsKKyAg
ICBXVEY6OlZlY3RvcjxQYXRoQW5kVHJhbnNmb3JtPiBtX2NsaXBwaW5nUGF0aHM7CisgICAgaW50
IG1fbnVtQ2xpcHBpbmdQYXRoczsKICAgICBGbG9hdFNpemUgbV9zaGFkb3dPZmZzZXQ7CiAgICAg
ZmxvYXQgbV9zaGFkb3dCbHVyOwogICAgIGJvb2wgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsK
QEAgLTIwOCw3ICsyMTgsNyBAQCB2b2lkIEdMRVMyQ2FudmFzOjpiaW5kRnJhbWVidWZmZXIoKQog
dm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBiaW5kRnJhbWVidWZmZXIoKTsKLSAgICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgp
ICYmICFtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCkgeworICAgIGlmIChtX3N0YXRlLT5tX2N0
bS5pc0lkZW50aXR5KCkgJiYgIW1fc3RhdGUtPm1fbnVtQ2xpcHBpbmdQYXRocykgewogICAgICAg
ICBzY2lzc29yQ2xlYXIocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNhdmUoKTsKQEAgLTIzMywyOSArMjQzLDMx
IEBAIHZvaWQgR0xFUzJDYW52YXM6OnNjaXNzb3JDbGVhcihmbG9hdCB4LCAKIAogdm9pZCBHTEVT
MkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBiaW5kRnJhbWVidWZm
ZXIoKTsKLSAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9j
b21wb3NpdGVPcCk7Ci0gICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxl
ZCk7Ci0KICAgICBpZiAobV9zdGF0ZS0+c2hhZG93QWN0aXZlKCkpIHsKICAgICAgICAgYmVnaW5T
aGFkb3dEcmF3KCk7CiAgICAgICAgIGZpbGxQYXRoSW50ZXJuYWwocGF0aCwgbV9zdGF0ZS0+bV9z
aGFkb3dDb2xvcik7CiAgICAgICAgIGVuZFNoYWRvd0RyYXcocGF0aC5ib3VuZGluZ1JlY3QoKSk7
CiAgICAgfQorCisgICAgYmluZEZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5hcHBseUNv
bXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUtPm1fY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBp
bmcobV9zdGF0ZS0+bV9udW1DbGlwcGluZ1BhdGhzID4gMCk7CisKICAgICBmaWxsUGF0aEludGVy
bmFsKHBhdGgsIG1fc3RhdGUtPmFwcGx5QWxwaGEobV9zdGF0ZS0+bV9maWxsQ29sb3IpKTsKIH0K
IAogdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBiaW5kRnJhbWVi
dWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+
bV9jb21wb3NpdGVPcCk7Ci0gICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5h
YmxlZCk7Ci0KICAgICBpZiAobV9zdGF0ZS0+c2hhZG93QWN0aXZlKCkpIHsKICAgICAgICAgYmVn
aW5TaGFkb3dEcmF3KCk7CiAgICAgICAgIGZpbGxSZWN0SW50ZXJuYWwocmVjdCwgbV9zdGF0ZS0+
bV9zaGFkb3dDb2xvcik7CiAgICAgICAgIGVuZFNoYWRvd0RyYXcocmVjdCk7CiAgICAgfQorCisg
ICAgYmluZEZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJh
dG9yKG1fc3RhdGUtPm1fY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+
bV9udW1DbGlwcGluZ1BhdGhzID4gMCk7CisKICAgICBmaWxsUmVjdEludGVybmFsKHJlY3QsIGNv
bG9yKTsKIH0KIApAQCAtMzM1LDEyICszNDcsMTIgQEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcAogewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIGNoZWNrR0xF
cnJvcigiYmluZEZyYW1lYnVmZmVyIik7Ci0gICAgYmVnaW5TdGVuY2lsRHJhdygpOworICAgIGJl
Z2luU3RlbmNpbERyYXcoR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IpOwogICAgIC8vIFJlZCBpcyB1
c2VkIHNvIHdlIGNhbiBzZWUgaXQgaWYgaXQgZW5kcyB1cCBpbiB0aGUgY29sb3IgYnVmZmVyLgog
ICAgIENvbG9yIHJlZCgyNTUsIDAsIDAsIDI1NSk7CiAgICAgZmlsbFBhdGhJbnRlcm5hbChwYXRo
LCByZWQpOwotICAgIG1fc3RhdGUtPm1fY2xpcHBpbmdQYXRocy5hcHBlbmQocGF0aCk7Ci0gICAg
bV9zdGF0ZS0+bV9jbGlwcGluZ0VuYWJsZWQgPSB0cnVlOworICAgIG1fc3RhdGUtPm1fY2xpcHBp
bmdQYXRocy5hcHBlbmQoUGF0aEFuZFRyYW5zZm9ybShwYXRoLCBtX3N0YXRlLT5tX2N0bSkpOwor
ICAgIG1fc3RhdGUtPm1fbnVtQ2xpcHBpbmdQYXRocysrOwogfQogCiB2b2lkIEdMRVMyQ2FudmFz
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTcsMjQgKzM2OSwxOSBAQCB2b2lkIEdM
RVMyQ2FudmFzOjpzYXZlKCkKIHZvaWQgR0xFUzJDYW52YXM6OnJlc3RvcmUoKQogewogICAgIEFT
U0VSVCghbV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgYm9vbCBoYWRDbGlwcGluZ1BhdGhz
ID0gIW1fc3RhdGUtPm1fY2xpcHBpbmdQYXRocy5pc0VtcHR5KCk7Ci0gICAgbV9zdGF0ZVN0YWNr
LnJlbW92ZUxhc3QoKTsKLSAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAg
aWYgKGhhZENsaXBwaW5nUGF0aHMpIHsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKLSAgICAgICAgYmVnaW5TdGVuY2lsRHJh
dygpOwotICAgICAgICBTdGF0ZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlcjsKLSAgICAgICAg
Zm9yIChpdGVyID0gbV9zdGF0ZVN0YWNrLmJlZ2luKCk7IGl0ZXIgPCBtX3N0YXRlU3RhY2suZW5k
KCk7ICsraXRlcikgewotICAgICAgICAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gKml0ZXI7Ci0g
ICAgICAgICAgICBjb25zdCBWZWN0b3I8UGF0aD4mIGNsaXBwaW5nUGF0aHMgPSBzdGF0ZS5tX2Ns
aXBwaW5nUGF0aHM7Ci0gICAgICAgICAgICBWZWN0b3I8UGF0aD46OmNvbnN0X2l0ZXJhdG9yIHBh
dGhJdGVyOwotICAgICAgICAgICAgZm9yIChwYXRoSXRlciA9IGNsaXBwaW5nUGF0aHMuYmVnaW4o
KTsgcGF0aEl0ZXIgPCBjbGlwcGluZ1BhdGhzLmVuZCgpOyArK3BhdGhJdGVyKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gUmVkIGlzIHVzZWQgc28gd2UgY2FuIHNlZSBpdCBpZiBpdCBlbmRzIHVwIGlu
IHRoZSBjb2xvciBidWZmZXIuCi0gICAgICAgICAgICAgICAgQ29sb3IgcmVkKDI1NSwgMCwgMCwg
MjU1KTsKLSAgICAgICAgICAgICAgICBmaWxsUGF0aEludGVybmFsKCpwYXRoSXRlciwgcmVkKTsK
LSAgICAgICAgICAgIH0KKyAgICBjb25zdCBWZWN0b3I8UGF0aEFuZFRyYW5zZm9ybT4mIGNsaXBw
aW5nUGF0aHMgPSBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHM7CisgICAgaWYgKCFjbGlwcGluZ1Bh
dGhzLmlzRW1wdHkoKSkgeworICAgICAgICBiZWdpblN0ZW5jaWxEcmF3KEdyYXBoaWNzQ29udGV4
dDNEOjpERUNSKTsKKyAgICAgICAgV1RGOjpWZWN0b3I8UGF0aEFuZFRyYW5zZm9ybT46OmNvbnN0
X2l0ZXJhdG9yIHBhdGhJdGVyOworICAgICAgICBmb3IgKHBhdGhJdGVyID0gY2xpcHBpbmdQYXRo
cy5iZWdpbigpOyBwYXRoSXRlciA8IGNsaXBwaW5nUGF0aHMuZW5kKCk7ICsrcGF0aEl0ZXIpIHsK
KyAgICAgICAgICAgIG1fc3RhdGUtPm1fY3RtID0gcGF0aEl0ZXItPm1fdHJhbnNmb3JtOworICAg
ICAgICAgICAgLy8gUmVkIGlzIHVzZWQgc28gd2UgY2FuIHNlZSBpdCBpZiBpdCBlbmRzIHVwIGlu
IHRoZSBjb2xvciBidWZmZXIuCisgICAgICAgICAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUp
OworICAgICAgICAgICAgZmlsbFBhdGhJbnRlcm5hbChwYXRoSXRlci0+bV9wYXRoLCByZWQpOwog
ICAgICAgICB9CiAgICAgfQorICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9z
dGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3
VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKQEAgLTM5
Miw3ICszOTksNyBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnCiAK
IHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJh
d1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwg
bV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPm1fY2xp
cHBpbmdFbmFibGVkKTsKKyAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRz
dFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21w
b3NpdGVPcCwgbV9zdGF0ZS0+bV9udW1DbGlwcGluZ1BhdGhzID4gMCk7CiB9CiAKIApAQCAtNzc4
LDYgKzc4NSwxMCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpiZWdpblNoYWRvd0RyYXcoKQogICAgICAg
ICBhcHBseUNsaXBwaW5nKGZhbHNlKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKENv
bG9yKFJHQkEzMigwKSkpOwogICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiaW5kRnJhbWVi
dWZmZXIoKTsKKyAgICAgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3Rh
dGUtPm1fY29tcG9zaXRlT3ApOworICAgICAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fbnVt
Q2xpcHBpbmdQYXRocyA+IDApOwogICAgIH0KIH0KIApAQCAtODU0LDcgKzg2NSw3IEBAIHZvaWQg
R0xFUzJDYW52YXM6OmVuZFNoYWRvd0RyYXcoY29uc3QgRmwKICAgICAgICAgICAgIC8vIFVwc2Ft
cGxlIHNyY0J1ZmZlciAtPiBtYWluIGZyYW1lYnVmZmVyIHVzaW5nIGJpY3ViaWMgZmlsdGVyaW5n
LgogICAgICAgICAgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgICAgICAgICBtX2NvbnRleHQt
PmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7Ci0gICAgICAg
ICAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKKyAgICAgICAg
ICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+bV9udW1DbGlwcGluZ1BhdGhzID4gMCk7CiAgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCkpOwogICAgICAgICAgICAgRmxvYXRSZWN0IGRz
dFJlY3QgPSBzcmNSZWN0OwogICAgICAgICAgICAgZHN0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7
CkBAIC04NjMsNyArODc0LDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZW5kU2hhZG93RHJhdyhjb25z
dCBGbAogICAgICAgICAgICAgLy8gQmx1ciBpbiBZIGRpcmVjdGx5IHRvIGZyYW1lYnVmZmVyLgog
ICAgICAgICAgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmFw
cGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7Ci0gICAgICAgICAg
ICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKKyAgICAgICAgICAg
IGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+bV9udW1DbGlwcGluZ1BhdGhzID4gMCk7CiAKICAgICAg
ICAgICAgIGNvbnZvbHZlUmVjdChzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCksIHNyY0J1ZmZlci0+
c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0KSwgc3JjUmVjdCwgaW1hZ2VJbmNyZW1lbnRZLCBrZXJu
ZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsKICAgICAgICAgfQpAQCAtODcxLDcgKzg4Miw3IEBAIHZv
aWQgR0xFUzJDYW52YXM6OmVuZFNoYWRvd0RyYXcoY29uc3QgRmwKICAgICByZXN0b3JlKCk7CiB9
CiAKLXZvaWQgR0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcoKQordm9pZCBHTEVTMkNhbnZh
czo6YmVnaW5TdGVuY2lsRHJhdyh1bnNpZ25lZCBvcCkKIHsKICAgICAvLyBUdXJuIG9uIHN0ZW5j
aWwgdGVzdC4KICAgICBtX2NvbnRleHQtPmVuYWJsZVN0ZW5jaWwodHJ1ZSk7CkBAIC04ODIsOSAr
ODkzLDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6YmVnaW5TdGVuY2lsRHJhdygpCiAgICAgY2hlY2tH
TEVycm9yKCJzdGVuY2lsRnVuYyIpOwogCiAgICAgLy8gQWxsIHdyaXRlcyBpbmNyZW1lbWVudCB0
aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5z
dGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OklOQ1IpOworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+c3RlbmNpbE9wKG9w
LCBvcCwgb3ApOwogICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7CiB9CiAKQEAgLTg5Myw3
ICs5MDIsNyBAQCB2b2lkIEdMRVMyQ2FudmFzOjphcHBseUNsaXBwaW5nKGJvb2wgZW5hCiAgICAg
bV9jb250ZXh0LT5lbmFibGVTdGVuY2lsKGVuYWJsZSk7CiAgICAgaWYgKGVuYWJsZSkgewogICAg
ICAgICAvLyBFbmFibGUgZHJhd2luZyBvbmx5IHdoZXJlIHN0ZW5jaWwgaXMgbm9uLXplcm8uCi0g
ICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+c3RlbmNpbEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6OkVRVUFMLCBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuc2l6ZSgpICUgMjU2
LCAxKTsKKyAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsRnVu
YyhHcmFwaGljc0NvbnRleHQzRDo6RVFVQUwsIG1fc3RhdGUtPm1fbnVtQ2xpcHBpbmdQYXRocywg
LTEpOwogICAgICAgICBjaGVja0dMRXJyb3IoInN0ZW5jaWxGdW5jIik7CiAgICAgICAgIC8vIEtl
ZXAgYWxsIHN0ZW5jaWwgdmFsdWVzIHRoZSBzYW1lLgogICAgICAgICBtX2NvbnRleHQtPmdyYXBo
aWNzQ29udGV4dDNEKCktPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R0xFUzJDYW52YXMuaAkocmV2aXNpb24gODI0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQs
NyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyQm9yZGVycyhjb25zdCBGbG9hdFJl
Y3QmLCBpbnQgd2lkdGgpOwogICAgIHZvaWQgYmVnaW5TaGFkb3dEcmF3KCk7CiAgICAgdm9pZCBl
bmRTaGFkb3dEcmF3KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpOwotICAgIHZvaWQgYmVn
aW5TdGVuY2lsRHJhdygpOworICAgIHZvaWQgYmVnaW5TdGVuY2lsRHJhdyh1bnNpZ25lZCBvcCk7
CiAgICAgdm9pZCBhcHBseUNsaXBwaW5nKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGNoZWNrR0xF
cnJvcihjb25zdCBjaGFyKiBoZWFkZXIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87620</attachid>
            <date>2011-03-30 14:41:03 -0700</date>
            <delta_ts>2011-03-30 14:45:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57464-20110330174102.patch</filename>
            <type>text/plain</type>
            <size>12362</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDU3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDMtMzAgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWQgdXAgY2xpcHBpbmcgaW4gYWNjZWxlcmF0
ZWQgMkQgY2FudmFzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTc0NjQKKworICAgICAgICBJbnN0ZWFkIG9mIGNsZWFyaW5nIHRoZSBlbnRpcmUgc3Rl
bmNpbCBidWZmZXIgd2hlbiByZW1vdmluZyBjbGlwcGluZyBwYXRocywgd2UgZXJhc2UgdGhlIHBh
dGggd2l0aCBhIERFQ1Igc3RlbmNpbCBvcGVyYXRpb24uCisgICAgICAgIENvdmVyZWQgYnkgY2Fu
dmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmNsaXAuaW50ZXJzZWN0Lmh0bWwsIGFuZCBvdGhlcnMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoQW5kVHJhbnNmb3JtOjpQYXRoQW5kVHJhbnNmb3JtKToK
KyAgICAgICAgTmV3IHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBDVE0gYXQgdGhlIHRp
bWUgdGhlIGNsaXBwaW5nIHBhdGggd2FzIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJD
YW52YXM6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIFJlcGxhY2UgbV9jbGlwcGluZ0VuYWJsZWQg
d2l0aCBhIGNvdW50IG9mIHRvdGFsIGNsaXBwaW5nIHBhdGhzLgorICAgICAgICAoV2ViQ29yZTo6
R0xFUzJDYW52YXM6OmNsZWFyUmVjdCk6CisgICAgICAgIENoZWNrIHRoZSB0b3RhbCBjbGlwcGlu
ZyBwYXRoIGNvdW50LCBpbnN0ZWFkIG9mIG1fY2xpcHBpbmdFbmFibGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2Fu
dmFzOjpmaWxsUmVjdCk6CisgICAgICAgIFBlcmZvcm0gc3RhdGUgYXBwbGljYXRpb24gYWZ0ZXIg
ZG9pbmcgc2hhZG93cy4gIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgICAgIHNpbmNlIHJlc3RvcmUo
KSBtYXkgbm93IGxlYXZlIGNsaXBwaW5nIGVuYWJsZWQuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y2xpcFBhdGgpOgorICAgICAgICBFeHBsaWNpdGx5IHNwZWNpZnkgdGhlIHN0ZW5j
aWwgb3BlcmF0aW9uIGFzIElOQ1IuICBTdG9yZSB0aGUgY3VycmVudAorICAgICAgICB0cmFuc2Zv
cm1hdGlvbiB3aGVuIHNhdmluZyBjbGlwcGluZyBwYXRocy4KKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpyZXN0b3JlKToKKyAgICAgICAgRG9uJ3QgY2xlYXIgdGhlIHN0ZW5jaWwgYnVm
ZmVyIGFuZCByZS1kcmF3IGFjdGl2ZSBwYXRocyBvbiBlYWNoIHJlc3RvcmUuCisgICAgICAgIEVy
YXNlIHRoZSBvbGQgcGF0aHMgd2l0aCBERUNSLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52
YXM6OmRyYXdUZXh0dXJlZFJlY3QpOgorICAgICAgICBDaGVjayBtX251bUNsaXBwaW5nUGF0aHMg
aW5zdGVhZCBvZiBtX2NsaXBwaW5nRW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2Fu
dmFzOjpiZWdpblNoYWRvd0RyYXcpOgorICAgICAgICBQZXJmb3JtIHN0YXRlIGFwcGxpY2F0aW9u
IHdoZW4gZHJhd2luZyBoYXJkIHNoYWRvd3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZh
czo6ZW5kU2hhZG93RHJhdyk6CisgICAgICAgIENoZWNrIG1fbnVtQ2xpcHBpbmdQYXRocyBpbnN0
ZWFkIG9mIG1fY2xpcHBpbmdFbmFibGVkLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6
OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBNYWtlIHRoZSBzdGVuY2lsIG9wIGEgcGFyYW1l
dGVyIHRvIGJlZ2luU2hhZG93RHJhdygpLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6
OmFwcGx5Q2xpcHBpbmcpOgorICAgICAgICBDb21wYXJlIGFnYWluc3QgdGhlIHRvdGFsIG51bWJl
ciBvZiBzdGVuY2lsIHBhdGhzLCBub3QganVzdCB0aGUgb25lcyBpbgorICAgICAgICB0aGUgY3Vy
cmVudCBzdGF0ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5oOgorICAgICAgICBNYWtlIHRoZSBzdGVuY2lsIG9wIGEgcGFyYW1ldGVyIHRvIGJlZ2lu
U2hhZG93RHJhdygpLgorCiAyMDExLTAzLTMwICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEJ1aWxkIGZpeCBmb3IgRWZsIGFuZCBR
dCBXaW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
TEVTMkNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCShyZXZpc2lvbiA4MjQ1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsMTMgKzYyLDIzIEBAIHR5cGVkZWYgdm9pZCAoR0xBUElFTlRSWSAq
VEVTU0NCKSgpOwogdHlwZWRlZiBXVEY6OlZlY3RvcjxmbG9hdD4gRmxvYXRWZWN0b3I7CiB0eXBl
ZGVmIFdURjo6VmVjdG9yPGRvdWJsZT4gRG91YmxlVmVjdG9yOwogCitzdHJ1Y3QgUGF0aEFuZFRy
YW5zZm9ybSB7CisgICAgUGF0aEFuZFRyYW5zZm9ybShjb25zdCBQYXRoJiBwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHQpCisgICAgICAgIDogcGF0aChwKQorICAgICAgICAsIHRyYW5zZm9ybSh0
KQorICAgIHsKKyAgICB9CisgICAgUGF0aCBwYXRoOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07Cit9OworCiBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsKICAgICBTdGF0ZSgpCiAg
ICAgICAgIDogbV9maWxsQ29sb3IoMCwgMCwgMCwgMjU1KQogICAgICAgICAsIG1fc2hhZG93Q29s
b3IoMCwgMCwgMCwgMCkKICAgICAgICAgLCBtX2FscGhhKDEuMGYpCiAgICAgICAgICwgbV9jb21w
b3NpdGVPcChDb21wb3NpdGVTb3VyY2VPdmVyKQotICAgICAgICAsIG1fY2xpcHBpbmdFbmFibGVk
KGZhbHNlKQorICAgICAgICAsIG1fbnVtQ2xpcHBpbmdQYXRocygwKQogICAgICAgICAsIG1fc2hh
ZG93T2Zmc2V0KDAsIDApCiAgICAgICAgICwgbV9zaGFkb3dCbHVyKDApCiAgICAgICAgICwgbV9z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKQEAgLTgxLDcgKzkxLDcgQEAgc3RydWN0IEdM
RVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgICAgICwgbV9jb21wb3NpdGVPcChvdGhlci5tX2NvbXBv
c2l0ZU9wKQogICAgICAgICAsIG1fY3RtKG90aGVyLm1fY3RtKQogICAgICAgICAsIG1fY2xpcHBp
bmdQYXRocygpIC8vIERvbid0IGNvcHk7IGNsaXBwaW5nIHBhdGhzIGFyZSB0cmFja2VkIHBlci1z
dGF0ZS4KLSAgICAgICAgLCBtX2NsaXBwaW5nRW5hYmxlZChvdGhlci5tX2NsaXBwaW5nRW5hYmxl
ZCkKKyAgICAgICAgLCBtX251bUNsaXBwaW5nUGF0aHMob3RoZXIubV9udW1DbGlwcGluZ1BhdGhz
KQogICAgICAgICAsIG1fc2hhZG93T2Zmc2V0KG90aGVyLm1fc2hhZG93T2Zmc2V0KQogICAgICAg
ICAsIG1fc2hhZG93Qmx1cihvdGhlci5tX3NoYWRvd0JsdXIpCiAgICAgICAgICwgbV9zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyhvdGhlci5tX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQpAQCAtOTIs
OCArMTAyLDggQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgZmxvYXQgbV9hbHBo
YTsKICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2NvbXBvc2l0ZU9wOwogICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2N0bTsKLSAgICBXVEY6OlZlY3RvcjxQYXRoPiBtX2NsaXBwaW5nUGF0aHM7Ci0gICAg
Ym9vbCBtX2NsaXBwaW5nRW5hYmxlZDsKKyAgICBXVEY6OlZlY3RvcjxQYXRoQW5kVHJhbnNmb3Jt
PiBtX2NsaXBwaW5nUGF0aHM7CisgICAgaW50IG1fbnVtQ2xpcHBpbmdQYXRoczsKICAgICBGbG9h
dFNpemUgbV9zaGFkb3dPZmZzZXQ7CiAgICAgZmxvYXQgbV9zaGFkb3dCbHVyOwogICAgIGJvb2wg
bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKQEAgLTExNiw2ICsxMjYsNyBAQCBzdHJ1Y3QgR0xF
UzJDYW52YXM6OlN0YXRlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NoYWRvd0NvbG9yLmFs
cGhhKCkgPiAwICYmIChtX3NoYWRvd0JsdXIgfHwgbV9zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBt
X3NoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgfQorICAgIGJvb2wgY2xpcHBpbmdFbmFibGVk
KCkgeyByZXR1cm4gbV9udW1DbGlwcGluZ1BhdGhzID4gMDsgfQogfTsKIAogc3RhdGljIGlubGlu
ZSBGbG9hdFBvaW50IG9wZXJhdG9yKihjb25zdCBGbG9hdFBvaW50JiBmLCBmbG9hdCBzY2FsZSkK
QEAgLTIwOCw3ICsyMTksNyBAQCB2b2lkIEdMRVMyQ2FudmFzOjpiaW5kRnJhbWVidWZmZXIoKQog
dm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBiaW5kRnJhbWVidWZmZXIoKTsKLSAgICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgp
ICYmICFtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCkgeworICAgIGlmIChtX3N0YXRlLT5tX2N0
bS5pc0lkZW50aXR5KCkgJiYgIW1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpKSB7CiAgICAgICAg
IHNjaXNzb3JDbGVhcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2F2ZSgpOwpAQCAtMjMzLDI5ICsyNDQsMzEg
QEAgdm9pZCBHTEVTMkNhbnZhczo6c2Npc3NvckNsZWFyKGZsb2F0IHgsIAogCiB2b2lkIEdMRVMy
Q2FudmFzOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGJpbmRGcmFtZWJ1ZmZl
cigpOwotICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2Nv
bXBvc2l0ZU9wKTsKLSAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVk
KTsKLQogICAgIGlmIChtX3N0YXRlLT5zaGFkb3dBY3RpdmUoKSkgewogICAgICAgICBiZWdpblNo
YWRvd0RyYXcoKTsKICAgICAgICAgZmlsbFBhdGhJbnRlcm5hbChwYXRoLCBtX3N0YXRlLT5tX3No
YWRvd0NvbG9yKTsKICAgICAgICAgZW5kU2hhZG93RHJhdyhwYXRoLmJvdW5kaW5nUmVjdCgpKTsK
ICAgICB9CisKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmFwcGx5Q29t
cG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAgYXBwbHlDbGlwcGlu
ZyhtX3N0YXRlLT5jbGlwcGluZ0VuYWJsZWQoKSk7CisKICAgICBmaWxsUGF0aEludGVybmFsKHBh
dGgsIG1fc3RhdGUtPmFwcGx5QWxwaGEobV9zdGF0ZS0+bV9maWxsQ29sb3IpKTsKIH0KIAogdm9p
ZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBiaW5kRnJhbWVidWZmZXIo
KTsKLSAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21w
b3NpdGVPcCk7Ci0gICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7
Ci0KICAgICBpZiAobV9zdGF0ZS0+c2hhZG93QWN0aXZlKCkpIHsKICAgICAgICAgYmVnaW5TaGFk
b3dEcmF3KCk7CiAgICAgICAgIGZpbGxSZWN0SW50ZXJuYWwocmVjdCwgbV9zdGF0ZS0+bV9zaGFk
b3dDb2xvcik7CiAgICAgICAgIGVuZFNoYWRvd0RyYXcocmVjdCk7CiAgICAgfQorCisgICAgYmlu
ZEZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1f
c3RhdGUtPm1fY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+Y2xpcHBp
bmdFbmFibGVkKCkpOworCiAgICAgZmlsbFJlY3RJbnRlcm5hbChyZWN0LCBjb2xvcik7CiB9CiAK
QEAgLTMzNSwxMiArMzQ4LDEyIEBAIHZvaWQgR0xFUzJDYW52YXM6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHAKIHsKICAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICBjaGVja0dMRXJyb3IoImJpbmRG
cmFtZWJ1ZmZlciIpOwotICAgIGJlZ2luU3RlbmNpbERyYXcoKTsKKyAgICBiZWdpblN0ZW5jaWxE
cmF3KEdyYXBoaWNzQ29udGV4dDNEOjpJTkNSKTsKICAgICAvLyBSZWQgaXMgdXNlZCBzbyB3ZSBj
YW4gc2VlIGl0IGlmIGl0IGVuZHMgdXAgaW4gdGhlIGNvbG9yIGJ1ZmZlci4KICAgICBDb2xvciBy
ZWQoMjU1LCAwLCAwLCAyNTUpOwogICAgIGZpbGxQYXRoSW50ZXJuYWwocGF0aCwgcmVkKTsKLSAg
ICBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuYXBwZW5kKHBhdGgpOwotICAgIG1fc3RhdGUtPm1f
Y2xpcHBpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuYXBw
ZW5kKFBhdGhBbmRUcmFuc2Zvcm0ocGF0aCwgbV9zdGF0ZS0+bV9jdG0pKTsKKyAgICBtX3N0YXRl
LT5tX251bUNsaXBwaW5nUGF0aHMrKzsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6Y2xpcE91dChj
b25zdCBQYXRoJiBwYXRoKQpAQCAtMzU3LDI0ICszNzAsMTkgQEAgdm9pZCBHTEVTMkNhbnZhczo6
c2F2ZSgpCiB2b2lkIEdMRVMyQ2FudmFzOjpyZXN0b3JlKCkKIHsKICAgICBBU1NFUlQoIW1fc3Rh
dGVTdGFjay5pc0VtcHR5KCkpOwotICAgIGJvb2wgaGFkQ2xpcHBpbmdQYXRocyA9ICFtX3N0YXRl
LT5tX2NsaXBwaW5nUGF0aHMuaXNFbXB0eSgpOwotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIGlmIChoYWRDbGlw
cGluZ1BhdGhzKSB7Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQlVGRkVSX0JJVCk7Ci0gICAgICAgIGJlZ2luU3RlbmNpbERyYXcoKTsKLSAgICAg
ICAgU3RhdGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgIGZvciAoaXRlciA9
IG1fc3RhdGVTdGFjay5iZWdpbigpOyBpdGVyIDwgbV9zdGF0ZVN0YWNrLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9ICppdGVyOwotICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPFBhdGg+JiBjbGlwcGluZ1BhdGhzID0gc3RhdGUubV9jbGlwcGluZ1BhdGhz
OwotICAgICAgICAgICAgVmVjdG9yPFBhdGg+Ojpjb25zdF9pdGVyYXRvciBwYXRoSXRlcjsKLSAg
ICAgICAgICAgIGZvciAocGF0aEl0ZXIgPSBjbGlwcGluZ1BhdGhzLmJlZ2luKCk7IHBhdGhJdGVy
IDwgY2xpcHBpbmdQYXRocy5lbmQoKTsgKytwYXRoSXRlcikgewotICAgICAgICAgICAgICAgIC8v
IFJlZCBpcyB1c2VkIHNvIHdlIGNhbiBzZWUgaXQgaWYgaXQgZW5kcyB1cCBpbiB0aGUgY29sb3Ig
YnVmZmVyLgotICAgICAgICAgICAgICAgIENvbG9yIHJlZCgyNTUsIDAsIDAsIDI1NSk7Ci0gICAg
ICAgICAgICAgICAgZmlsbFBhdGhJbnRlcm5hbCgqcGF0aEl0ZXIsIHJlZCk7Ci0gICAgICAgICAg
ICB9CisgICAgY29uc3QgVmVjdG9yPFBhdGhBbmRUcmFuc2Zvcm0+JiBjbGlwcGluZ1BhdGhzID0g
bV9zdGF0ZS0+bV9jbGlwcGluZ1BhdGhzOworICAgIGlmICghY2xpcHBpbmdQYXRocy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgYmVnaW5TdGVuY2lsRHJhdyhHcmFwaGljc0NvbnRleHQzRDo6REVDUik7
CisgICAgICAgIFdURjo6VmVjdG9yPFBhdGhBbmRUcmFuc2Zvcm0+Ojpjb25zdF9pdGVyYXRvciBw
YXRoSXRlcjsKKyAgICAgICAgZm9yIChwYXRoSXRlciA9IGNsaXBwaW5nUGF0aHMuYmVnaW4oKTsg
cGF0aEl0ZXIgPCBjbGlwcGluZ1BhdGhzLmVuZCgpOyArK3BhdGhJdGVyKSB7CisgICAgICAgICAg
ICBtX3N0YXRlLT5tX2N0bSA9IHBhdGhJdGVyLT50cmFuc2Zvcm07CisgICAgICAgICAgICAvLyBS
ZWQgaXMgdXNlZCBzbyB3ZSBjYW4gc2VlIGl0IGlmIGl0IGVuZHMgdXAgaW4gdGhlIGNvbG9yIGJ1
ZmZlci4KKyAgICAgICAgICAgIENvbG9yIHJlZCgyNTUsIDAsIDAsIDI1NSk7CisgICAgICAgICAg
ICBmaWxsUGF0aEludGVybmFsKHBhdGhJdGVyLT5wYXRoLCByZWQpOwogICAgICAgICB9CiAgICAg
fQorICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9zdGF0ZSA9ICZtX3N0YXRl
U3RhY2subGFzdCgpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVu
c2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKQEAgLTM5Miw3ICs0MDAsNyBAQCB2
b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnCiAKIHZvaWQgR0xFUzJDYW52
YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1cmVkUmVjdCh0
ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBo
YSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsK
KyAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUt
Pm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgbV9zdGF0
ZS0+Y2xpcHBpbmdFbmFibGVkKCkpOwogfQogCiAKQEAgLTc3OCw2ICs3ODYsMTAgQEAgdm9pZCBH
TEVTMkNhbnZhczo6YmVnaW5TaGFkb3dEcmF3KCkKICAgICAgICAgYXBwbHlDbGlwcGluZyhmYWxz
ZSk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKICAg
ICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJ
VCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmluZEZyYW1lYnVmZmVyKCk7CisgICAgICAgIG1f
Y29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsK
KyAgICAgICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5jbGlwcGluZ0VuYWJsZWQoKSk7CiAgICAg
fQogfQogCkBAIC04NTQsNyArODY2LDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZW5kU2hhZG93RHJh
dyhjb25zdCBGbAogICAgICAgICAgICAgLy8gVXBzYW1wbGUgc3JjQnVmZmVyIC0+IG1haW4gZnJh
bWVidWZmZXIgdXNpbmcgYmljdWJpYyBmaWx0ZXJpbmcuCiAgICAgICAgICAgICBiaW5kRnJhbWVi
dWZmZXIoKTsKICAgICAgICAgICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvciht
X3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKLSAgICAgICAgICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0
ZS0+bV9jbGlwcGluZ0VuYWJsZWQpOworICAgICAgICAgICAgYXBwbHlDbGlwcGluZyhtX3N0YXRl
LT5jbGlwcGluZ0VuYWJsZWQoKSk7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCkp
OwogICAgICAgICAgICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBzcmNSZWN0OwogICAgICAgICAgICAg
ZHN0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CkBAIC04NjMsNyArODc1LDcgQEAgdm9pZCBHTEVT
MkNhbnZhczo6ZW5kU2hhZG93RHJhdyhjb25zdCBGbAogICAgICAgICAgICAgLy8gQmx1ciBpbiBZ
IGRpcmVjdGx5IHRvIGZyYW1lYnVmZmVyLgogICAgICAgICAgICAgYmluZEZyYW1lYnVmZmVyKCk7
CiAgICAgICAgICAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+
bV9jb21wb3NpdGVPcCk7Ci0gICAgICAgICAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xp
cHBpbmdFbmFibGVkKTsKKyAgICAgICAgICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+Y2xpcHBp
bmdFbmFibGVkKCkpOwogCiAgICAgICAgICAgICBjb252b2x2ZVJlY3Qoc3JjQnVmZmVyLT5jb2xv
ckJ1ZmZlcigpLCBzcmNCdWZmZXItPnNpemUoKSwgZmxpcFJlY3Qoc3JjUmVjdCksIHNyY1JlY3Qs
IGltYWdlSW5jcmVtZW50WSwga2VybmVsLmdldCgpLCBrZXJuZWxXaWR0aCk7CiAgICAgICAgIH0K
QEAgLTg3MSw3ICs4ODMsNyBAQCB2b2lkIEdMRVMyQ2FudmFzOjplbmRTaGFkb3dEcmF3KGNvbnN0
IEZsCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdMRVMyQ2FudmFzOjpiZWdpblN0ZW5jaWxE
cmF3KCkKK3ZvaWQgR0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcodW5zaWduZWQgb3ApCiB7
CiAgICAgLy8gVHVybiBvbiBzdGVuY2lsIHRlc3QuCiAgICAgbV9jb250ZXh0LT5lbmFibGVTdGVu
Y2lsKHRydWUpOwpAQCAtODgyLDkgKzg5NCw3IEBAIHZvaWQgR0xFUzJDYW52YXM6OmJlZ2luU3Rl
bmNpbERyYXcoKQogICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbEZ1bmMiKTsKIAogICAgIC8vIEFs
bCB3cml0ZXMgaW5jcmVtZW1lbnQgdGhlIHN0ZW5jaWwgYnVmZmVyLgotICAgIG1fY29udGV4dC0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpJTkNSLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTkNSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJTkNSKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29u
dGV4dDNEKCktPnN0ZW5jaWxPcChvcCwgb3AsIG9wKTsKICAgICBjaGVja0dMRXJyb3IoInN0ZW5j
aWxPcCIpOwogfQogCkBAIC04OTMsNyArOTAzLDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6YXBwbHlD
bGlwcGluZyhib29sIGVuYQogICAgIG1fY29udGV4dC0+ZW5hYmxlU3RlbmNpbChlbmFibGUpOwog
ICAgIGlmIChlbmFibGUpIHsKICAgICAgICAgLy8gRW5hYmxlIGRyYXdpbmcgb25seSB3aGVyZSBz
dGVuY2lsIGlzIG5vbi16ZXJvLgotICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgbV9zdGF0ZS0+bV9jbGlw
cGluZ1BhdGhzLnNpemUoKSAlIDI1NiwgMSk7CisgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBtX3N0YXRl
LT5tX251bUNsaXBwaW5nUGF0aHMsIC0xKTsKICAgICAgICAgY2hlY2tHTEVycm9yKCJzdGVuY2ls
RnVuYyIpOwogICAgICAgICAvLyBLZWVwIGFsbCBzdGVuY2lsIHZhbHVlcyB0aGUgc2FtZS4KICAg
ICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3AoR3JhcGhpY3ND
b250ZXh0M0Q6OktFRVAsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHJldmlzaW9uIDgyNDU3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVh
ckJvcmRlcnMoY29uc3QgRmxvYXRSZWN0JiwgaW50IHdpZHRoKTsKICAgICB2b2lkIGJlZ2luU2hh
ZG93RHJhdygpOwogICAgIHZvaWQgZW5kU2hhZG93RHJhdyhjb25zdCBGbG9hdFJlY3QmIGJvdW5k
aW5nQm94KTsKLSAgICB2b2lkIGJlZ2luU3RlbmNpbERyYXcoKTsKKyAgICB2b2lkIGJlZ2luU3Rl
bmNpbERyYXcodW5zaWduZWQgb3ApOwogICAgIHZvaWQgYXBwbHlDbGlwcGluZyhib29sIGVuYWJs
ZSk7CiAgICAgdm9pZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKTsKIAo=
</data>
<flag name="review"
          id="80043"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>