<?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>14003</bug_id>
          
          <creation_ts>2007-06-05 13:19:53 -0700</creation_ts>
          <short_desc>WebKit invalidates *way* too much during JS based SVG animation</short_desc>
          <delta_ts>2007-10-05 18:12:46 -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>SVG</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://hixie.ch/tests/adhoc/svg/perf/001.xml</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>ml</cc>
    
    <cc>oliver</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>8288</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-06-05 13:19:53 -0700</bug_when>
    <thetext>WebKit invalidates *way* too much during JS based SVG animation

See Hixie&apos;s perf test.  Watch how we end up redrawing the entire tiger every time, even though we should only be redrawing the area where the circle was before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>8301</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-06-05 14:53:13 -0700</bug_when>
    <thetext>Ok, it turns out the problem is due to this line:

    while (child) {
        if (!child-&gt;isRenderPath() || static_cast&lt;RenderPath*&gt;(child)-&gt;hasRelativeValues())
            child-&gt;setNeedsLayout(true);


We end up causing any container child to re-layout, even when not necessary.  Instead the RenderSVGContainer code needs to be smart enough to see if it&apos;s width/height has changed, and then (and only then) bother to mark it&apos;s relative-length path or container kids as needing layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2028</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-08-18 13:16:06 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; WebKit invalidates *way* too much during JS based SVG animation
&gt; 
&gt; See Hixie&apos;s perf test.  Watch how we end up redrawing the entire tiger every
&gt; time, even though we should only be redrawing the area where the circle was
&gt; before.
&gt; 
Seems fixed on fb?

Cheers,

Rob.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1977</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-08-19 12:44:28 -0700</bug_when>
    <thetext>Do you remember which patch had the fix?  I&apos;ve not been watching the checkins closely *at all* but closing this would require the &quot;relayout every child when doing a layout&quot; bug described above to have been fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57103</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-09-26 12:14:44 -0700</bug_when>
    <thetext>The bad code still exists in RenderSVGContainer:

    while (child) {
        // FIXME: This check is bogus, see http://bugs.webkit.org/show_bug.cgi?id=14003
        if (!child-&gt;isRenderPath() || static_cast&lt;RenderPath*&gt;(child)-&gt;hasRelativeValues())
            child-&gt;setNeedsLayout(true);

line 243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57521</commentid>
    <comment_count>5</comment_count>
      <attachid>16479</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-09-30 19:49:21 -0700</bug_when>
    <thetext>Created attachment 16479
fix (exposes a bug in text repaint code)

So this fixes our overzealous repainting, however it exposes a repaint bug in RenderSVGText&apos;s use of RenderBlock::layout().  RenderBlock::layout() will attempt to do a partial repaint when the block itself has not changed size.  The calculations used for the partial repaint were initially not SVG transform aware (this patch fixes that), but even with this patch there seem to be int vs. float issues regarding those repaints.  With this patch applied you can view the perf01.xml example with Quartz Debug&apos;s &quot;Flash Screen Updates&quot; enabled and see how as you resize the window *sometimes* the repaint rect overlaps with the changing text, and sometimes it doesn&apos;t.  :(

I should note that only RenderSVGRoot needs this change (to check if the bounds changed before forcing kids to layout), due to the fact that RenderSVGRoot determines its own bounds, and RenderSVGContainer does not (RenderSVGContainer&apos;s bounds are determined by its kids).  Actually, as I type that, I realize that might not always be true.  &lt;g&gt;&apos;s bounds are determined by its kids, but other containers might determine their own bounds, in which case this change is still not quite correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57819</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-10-05 00:04:24 -0700</bug_when>
    <thetext>Alas you patch destroys text input repainting :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57884</commentid>
    <comment_count>7</comment_count>
      <attachid>16555</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-05 17:25:55 -0700</bug_when>
    <thetext>Created attachment 16555
fix (and avoids bad RenderBlock code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57886</commentid>
    <comment_count>8</comment_count>
      <attachid>16555</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-10-05 17:52:16 -0700</bug_when>
    <thetext>Comment on attachment 16555
fix (and avoids bad RenderBlock code)

While this doesn&apos;t resolve all issues, it&apos;s certainly improved things dramatically</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57889</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-05 18:12:46 -0700</bug_when>
    <thetext>Landed as r26075 on the feature-branch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16479</attachid>
            <date>2007-09-30 19:49:21 -0700</date>
            <delta_ts>2007-10-05 17:25:55 -0700</delta_ts>
            <desc>fix (exposes a bug in text repaint code)</desc>
            <filename>repaint.patch</filename>
            <type>text/plain</type>
            <size>2899</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMjU3NzYpCisrKyByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCkBAIC02MzEsNyArNjMyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2soYm9vbCByZWxheQogICAgICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9uLWVtcHR5IGFmdGVyIGludGVyc2Vj
dGluZyBmb3Igb3ZlcmZsb3cgYWJvdmUKICAgICAgICAgaWYgKCFyZXBhaW50UmVjdC5pc0VtcHR5
KCkgJiYgdiAmJiB2LT5mcmFtZVZpZXcoKSkKLSAgICAgICAgICAgIHYtPmZyYW1lVmlldygpLT5h
ZGRSZXBhaW50SW5mbyh0aGlzLCByZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0
aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCisgICAgICAgICAgICB2LT5mcmFtZVZpZXcoKS0+
YWRkUmVwYWludEluZm8odGhpcywgYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRS
ZWN0KSk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQu
CiAgICAgfQogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5j
cHAJKHJldmlzaW9uIDI1Nzc2KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCwyNCArNzAsMTEgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQo
KQogICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUgaW5jb21wYXRpYmxlIHdp
dGggTGF5b3V0U3RhdGUuCiAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKIAotICAg
IEludFJlY3Qgb2xkQm91bmRzOworICAgIEludFJlY3Qgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJv
dW5kczsKICAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CiAgICAgYm9vbCBjaGVja0ZvclJlcGFp
bnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBpZiAoc2VsZk5lZWRzTGF5
b3V0KCkgJiYgY2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9IG1fYWJzb2x1
dGVCb3VuZHM7CisgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpICYmIGNoZWNrRm9yUmVwYWludCkK
ICAgICAgICAgb2xkT3V0bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJveCgpOwotICAgIH0KLQot
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxk
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGJvZ3VzLCBzZWUgaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMDMKLSAgICAgICAgaWYgKCFjaGlsZC0+
aXNSZW5kZXJQYXRoKCkgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyUGF0aCo+KGNoaWxkKS0+aGFzUmVs
YXRpdmVWYWx1ZXMoKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dCh0cnVlKTsK
LQotICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgQVNTRVJUKCFjaGls
ZC0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
Ci0gICAgfQogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtOTYsNiAr
ODMsMjAgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogICAgIFNWR1NWR0VsZW1lbnQq
IHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihlbGVtZW50KCkpOwogICAgIG1fd2lk
dGggPSBtX3dpZHRoICogc3ZnLT5jdXJyZW50U2NhbGUoKTsKICAgICBtX2hlaWdodCA9IG1faGVp
Z2h0ICogc3ZnLT5jdXJyZW50U2NhbGUoKTsKKyAgICAKKyAgICBib29sIGJvdW5kc0NoYW5nZWQg
PSBtX2Fic29sdXRlQm91bmRzICE9IG9sZEJvdW5kczsKKyAgICAKKyAgICBpZiAoYm91bmRzQ2hh
bmdlZCB8fCBub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgfHwgcG9zQ2hpbGROZWVkc0xheW91dCgp
KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgICAg
IHdoaWxlIChjaGlsZCkgeworICAgICAgICAgICAgaWYgKGJvdW5kc0NoYW5nZWQgJiYgKCFjaGls
ZC0+aXNSZW5kZXJQYXRoKCkgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyUGF0aCo+KGNoaWxkKS0+aGFz
UmVsYXRpdmVWYWx1ZXMoKSkpCisgICAgICAgICAgICAgICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0
KHRydWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQo
KTsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQtPm5lZWRzTGF5b3V0KCkpOworICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQorICAgIH0KIAogICAg
IGlmIChzZWxmTmVlZHNMYXlvdXQoKSAmJiBjaGVja0ZvclJlcGFpbnQpCiAgICAgICAgIHJlcGFp
bnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16555</attachid>
            <date>2007-10-05 17:25:55 -0700</date>
            <delta_ts>2007-10-05 17:52:16 -0700</delta_ts>
            <desc>fix (and avoids bad RenderBlock code)</desc>
            <filename>hack.patch</filename>
            <type>text/plain</type>
            <size>8616</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI2MDcy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMTAt
MDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNWRyBpbnZhbGlkYXRlcyB3YXkgdG9vIG11Y2gg
ZHVyaW5nIGxheW91dCgpCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MDAzCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpvd25lclNWR0VsZW1lbnQpOiBzaW1wbGlmeSBpZgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6dmlld3BvcnRFbGVtZW50KTogc2ltcGxpZnkg
aWYKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KTogb25seSBsYXlvdXQgY2hpbGRy
ZW4gaWYgcGFyZW50IGNoYW5nZWQKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOiBvbmx5IGxheW91
dCBjaGlsZHJlbiB3aGVuIHNpemUgY2hhbmdlcworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6IGhh
Y2sgdG8gYXZvaWQgYmFkIFJlbmRlckJsb2NrOjpsYXlvdXQgY29kZQorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bGF5b3V0KTogZG9uJ3QgdXNlIFJlbmRlclNWR0Nv
bnRhaW5lcjo6bGF5b3V0KCkKKwogMjAwNy0xMC0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjYwNzIpCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMjUxLDcgKzEzMjUxLDYgQEAKIAkJMDg2
N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0g
UEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjEx
MDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJD
b3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNo
LApJbmRleDoga3N2ZzIvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYwNzIpCisrKyBrc3ZnMi9zdmcvU1ZHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgU1ZHU1ZHRWxlbWVudCogU1ZH
RWxlbWVudDo6b3duZXJTVkdFbGVtZQogewogICAgIE5vZGUqIG4gPSBwYXJlbnROb2RlKCk7CiAg
ICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gRUxFTUVOVF9OT0RF
ICYmIG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCisgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNWR1NWR0VsZW1lbnQqPihuKTsKIAogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwpAQCAt
MTAzLDggKzEwMyw3IEBAIFNWR0VsZW1lbnQqIFNWR0VsZW1lbnQ6OnZpZXdwb3J0RWxlbWVudCgK
ICAgICAvLyB0byBkZXRlcm1pbmUgdGhlICJvdmVyZmxvdyIgcHJvcGVydHkuIDx1c2U+IG9uIDxz
eW1ib2w+IHdvdWxkbid0IHdvcmsgb3RoZXJ3aGlzZS4KICAgICBOb2RlKiBuID0gaXNTaGFkb3dO
b2RlKCkgPyBjb25zdF9jYXN0PFNWR0VsZW1lbnQqPih0aGlzKS0+c2hhZG93UGFyZW50Tm9kZSgp
IDogcGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5pc0VsZW1l
bnROb2RlKCkgJiYKLSAgICAgICAgICAgIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcp
IHx8IG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmltYWdlVGFnKSB8fCBuLT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpzeW1ib2xUYWcpKSkKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnN2Z1RhZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpIHx8IG4tPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG4pOwogCiAgICAgICAgIG4gPSBuLT5pc1NoYWRvd05vZGUoKSA/IG4t
PnNoYWRvd1BhcmVudE5vZGUoKSA6IG4tPnBhcmVudE5vZGUoKTsKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCShyZXZpc2lvbiAyNjA3MikKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsMTUgKzIzNCwxNSBAQCB2b2lkIFJlbmRl
clNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBJbnRSZWN0IG9sZEJvdW5kczsKICAgICBJbnRS
ZWN0IG9sZE91dGxpbmVCb3g7CiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hlY2tG
b3JSZXBhaW50KSB7CisgICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewogICAgICAgICBvbGRCb3Vu
ZHMgPSBtX2Fic29sdXRlQm91bmRzOwogICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVP
dXRsaW5lQm94KCk7CiAgICAgfQogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sg
aXMgYm9ndXMsIHNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAw
MwotICAgICAgICBpZiAoIWNoaWxkLT5pc1JlbmRlclBhdGgoKSB8fCBzdGF0aWNfY2FzdDxSZW5k
ZXJQYXRoKj4oY2hpbGQpLT5oYXNSZWxhdGl2ZVZhbHVlcygpKQorICAgICAgICAvLyBPbmx5IGZv
cmNlIG91ciBraWRzIHRvIGxheW91dCBpZiB3ZSdyZSBiZWluZyBhc2tlZCB0byByZWxheW91dCBh
cyBhIHJlc3VsdCBvZiBhIHBhcmVudCBjaGFuZ2luZworICAgICAgICBpZiAoc2VsZk5lZWRzTGF5
b3V0KCkgJiYgKCFjaGlsZC0+aXNSZW5kZXJQYXRoKCkgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyUGF0
aCo+KGNoaWxkKS0+aGFzUmVsYXRpdmVWYWx1ZXMoKSkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CiAKICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CkBA
IC0yNTUsNyArMjU1LDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAgICAg
bV9oZWlnaHQgPSBjYWxjUmVwbGFjZWRIZWlnaHQoKTsKICAgICBtX2Fic29sdXRlQm91bmRzID0g
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAKLSAgICBpZiAoc2VsZk5lZWRzTGF5b3V0
KCkgJiYgY2hlY2tGb3JSZXBhaW50KQorICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCiAgICAgICAg
IHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7CiAK
ICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCShy
ZXZpc2lvbiAyNjA3MikKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsMjQgKzcwLDExIEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAg
ICAvLyBBcmJpdHJhcnkgYWZmaW5lIHRyYW5zZm9ybXMgYXJlIGluY29tcGF0aWJsZSB3aXRoIExh
eW91dFN0YXRlLgogICAgIHZpZXcoKS0+ZGlzYWJsZUxheW91dFN0YXRlKCk7CiAKLSAgICBJbnRS
ZWN0IG9sZEJvdW5kczsKKyAgICBJbnRSZWN0IG9sZEJvdW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7
CiAgICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwogICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0g
Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCk7Ci0gICAgaWYgKHNlbGZOZWVkc0xheW91dCgp
ICYmIGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBvbGRCb3VuZHMgPSBtX2Fic29sdXRlQm91
bmRzOworICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSAmJiBjaGVja0ZvclJlcGFpbnQpCiAgICAg
ICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3goKTsKLSAgICB9Ci0KLSAgICBS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjaGlsZCkgewot
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBib2d1cywgc2VlIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDAzCi0gICAgICAgIGlmICghY2hpbGQtPmlzUmVu
ZGVyUGF0aCgpIHx8IHN0YXRpY19jYXN0PFJlbmRlclBhdGgqPihjaGlsZCktPmhhc1JlbGF0aXZl
VmFsdWVzKCkpCi0gICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7Ci0KLSAg
ICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQtPm5l
ZWRzTGF5b3V0KCkpOwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAg
IH0KIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNIZWlnaHQoKTsKQEAgLTk2LDYgKzgzLDIw
IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICBTVkdTVkdFbGVtZW50KiBzdmcg
PSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4oZWxlbWVudCgpKTsKICAgICBtX3dpZHRoID0g
bV93aWR0aCAqIHN2Zy0+Y3VycmVudFNjYWxlKCk7CiAgICAgbV9oZWlnaHQgPSBtX2hlaWdodCAq
IHN2Zy0+Y3VycmVudFNjYWxlKCk7CisgICAgCisgICAgYm9vbCBib3VuZHNDaGFuZ2VkID0gbV9h
YnNvbHV0ZUJvdW5kcyAhPSBvbGRCb3VuZHM7CisgICAgCisgICAgaWYgKGJvdW5kc0NoYW5nZWQg
fHwgbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpIHx8IHBvc0NoaWxkTmVlZHNMYXlvdXQoKSkgewor
ICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOworICAgICAgICB3aGls
ZSAoY2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChib3VuZHNDaGFuZ2VkICYmICghY2hpbGQtPmlz
UmVuZGVyUGF0aCgpIHx8IHN0YXRpY19jYXN0PFJlbmRlclBhdGgqPihjaGlsZCktPmhhc1JlbGF0
aXZlVmFsdWVzKCkpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dCh0cnVl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKKyAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAo
c2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hlY2tGb3JSZXBhaW50KQogICAgICAgICByZXBhaW50QWZ0
ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gpOwpJbmRleDogcmVuZGVy
aW5nL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAkocmV2aXNpb24gMjYwNzIpCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDkgQEAgYm9vbCBSZW5kZXJTVkdUZXh0OjpyZXF1
aXJlc0xheWVyKCkKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBoYWNrIHRvIGF2
b2lkIHRoZSBSZW5kZXJCbG9jayBwYXJ0aWFsIHJlcGFpbnRpbmcgY29kZSB3aGljaCBpcyBub3Qg
KHlldCkgU1ZHIGF3YXJlCisgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAKICAgICBJbnRSZWN0
IG9sZEJvdW5kczsKICAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAJKHJldmlzaW9uIDI2MDcyKQorKysgcmVuZGVy
aW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsOCBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgiCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgog
CkBAIC00NCw4ICs0Niw0MSBAQCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6flJlbmRlclNW
R1ZpCiAKIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmxheW91dCgpCiB7CisgICAg
QVNTRVJUKG5lZWRzTGF5b3V0KCkpOworICAgIAogICAgIGNhbGNWaWV3cG9ydCgpOwotICAgIFJl
bmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCk7CisgICAgCisgICAgLy8gQXJiaXRyYXJ5IGFmZmlu
ZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KKyAgICB2aWV3
KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOworICAgIAorICAgIEludFJlY3Qgb2xkQm91bmRzID0g
bV9hYnNvbHV0ZUJvdW5kczsKKyAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CisgICAgYm9vbCBj
aGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKTsKKyAgICBpZiAo
c2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hlY2tGb3JSZXBhaW50KQorICAgICAgICBvbGRPdXRsaW5l
Qm94ID0gYWJzb2x1dGVPdXRsaW5lQm94KCk7CisgICAgCisgICAgY2FsY1dpZHRoKCk7CisgICAg
CisgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwor
ICAgIGJvb2wgYm91bmRzQ2hhbmdlZCA9IG1fYWJzb2x1dGVCb3VuZHMgIT0gb2xkQm91bmRzOwor
ICAgIAorICAgIGlmIChib3VuZHNDaGFuZ2VkIHx8IG5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSB8
fCBwb3NDaGlsZE5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsKKyAgICAgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgICAgICBpZiAo
Ym91bmRzQ2hhbmdlZCAmJiAoIWNoaWxkLT5pc1JlbmRlclBhdGgoKSB8fCBzdGF0aWNfY2FzdDxS
ZW5kZXJQYXRoKj4oY2hpbGQpLT5oYXNSZWxhdGl2ZVZhbHVlcygpKSkKKyAgICAgICAgICAgICAg
ICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgQVNTRVJUKCFjaGlsZC0+bmVl
ZHNMYXlvdXQoKSk7CisgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSAmJiBjaGVj
a0ZvclJlcGFpbnQpCisgICAgICAgIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5k
cywgb2xkT3V0bGluZUJveCk7CisgICAgCisgICAgdmlldygpLT5lbmFibGVMYXlvdXRTdGF0ZSgp
OworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQg
cGFyZW50WSkK
</data>
<flag name="review"
          id="6978"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>