<?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>49437</bug_id>
          
          <creation_ts>2010-11-12 03:48:21 -0800</creation_ts>
          <short_desc>SVGAnimations with IRI references via &apos;xlink:href&apos; are slow</short_desc>
          <delta_ts>2011-02-24 08:24:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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>
          
          <blocked>41761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mdelaney7</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>308479</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-12 03:48:21 -0800</bug_when>
    <thetext>SVGAnimations with IRI references via &apos;xlink:href&apos; are slow. This is caused by multiple calls of getElementById.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308501</commentid>
    <comment_count>1</comment_count>
      <attachid>73731</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-12 05:56:49 -0800</bug_when>
    <thetext>Created attachment 73731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308502</commentid>
    <comment_count>2</comment_count>
      <attachid>73731</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-12 06:07:27 -0800</bug_when>
    <thetext>Comment on attachment 73731
Patch

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

Hm, I&apos;m slightly worried that we have no new tests about this.
What happens when you change &apos;target&apos; dynamically via JS, while the animation is running? I guess m_targetElement won&apos;t be recached from reading the code...

I think you should try that and compare to Opera.

&gt; WebCore/svg/SVGAnimateMotionElement.cpp:55
&gt; -bool SVGAnimateMotionElement::hasValidTarget() const
&gt; +bool SVGAnimateMotionElement::hasValidTarget()

Why is it a non-const version?

&gt; WebCore/svg/SVGAnimateTransformElement.cpp:106
&gt; +    SVGElement* targetElement = this-&gt;targetElement();

I&apos;d rather use const_cast&lt;SVGAnimateTransformElement*&gt;(this)-&gt;targetElement() here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308503</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-12 06:07:43 -0800</bug_when>
    <thetext>btw, r- as patch doesn&apos;t apply...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308505</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-12 06:17:11 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 73731 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73731&amp;action=review
&gt; 
&gt; Hm, I&apos;m slightly worried that we have no new tests about this.
Yes, asking Sean if we might upload his test. I tried to create a test my self, but couldn&apos;t reproduce such a perf issue like on his test.

&gt; What happens when you change &apos;target&apos; dynamically via JS, while the animation is running? I guess m_targetElement won&apos;t be recached from reading the code...
&gt; 
Bug 12065 has a test for it and I plan to upload as a patch on this bug.

&gt; I think you should try that and compare to Opera.
&gt; 
&gt; &gt; WebCore/svg/SVGAnimateMotionElement.cpp:55
&gt; &gt; -bool SVGAnimateMotionElement::hasValidTarget() const
&gt; &gt; +bool SVGAnimateMotionElement::hasValidTarget()
targetElement() is not const anymore, since I save the reference to the target in m_targetElement, this caused these functions to be non-const.

&gt; 
&gt; Why is it a non-const version?
&gt; 
&gt; &gt; WebCore/svg/SVGAnimateTransformElement.cpp:106
&gt; &gt; +    SVGElement* targetElement = this-&gt;targetElement();
&gt; 
&gt; I&apos;d rather use const_cast&lt;SVGAnimateTransformElement*&gt;(this)-&gt;targetElement() here!
Well, I&apos;m not a friend of const_cast and we would need it nearly everywhere, where we call targetElement(), like in all hasValidTarget functions.

The patch did not apply because of devregion=english changes in XCode :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308507</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-12 06:31:19 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 73731 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73731&amp;action=review
&gt; 
&gt; Hm, I&apos;m slightly worried that we have no new tests about this.
&gt; What happens when you change &apos;target&apos; dynamically via JS, while the animation is running? I guess m_targetElement won&apos;t be recached from reading the code...

Oh sorry, misunderstood the comment. You were not talking about removing the target, but _changing_ the target. Indeed this needs to be tested. Not necessarily part of this patch. And I could imagine situations that really cause wrong results.
I&apos;ll write some test cases and open a new bug for these scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308508</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-12 06:35:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 73731 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73731&amp;action=review
&gt; &gt; 
&gt; &gt; Hm, I&apos;m slightly worried that we have no new tests about this.
&gt; Yes, asking Sean if we might upload his test. I tried to create a test my self, but couldn&apos;t reproduce such a perf issue like on his test.
Well, this would be useless, as the SVG animation won&apos;t run....

 
&gt; targetElement() is not const anymore, since I save the reference to the target in m_targetElement, this caused these functions to be non-const.
You mean hasValidTarget()  is not const anymore?
I&apos;d rather revert the constness changes for hasValidTarget and targetElement and make the m_targetElement mutable?

&gt; The patch did not apply because of devregion=english changes in XCode :-(
Ah, ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308509</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-12 06:36:39 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 73731 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73731&amp;action=review
&gt; &gt; 
&gt; &gt; Hm, I&apos;m slightly worried that we have no new tests about this.
&gt; &gt; What happens when you change &apos;target&apos; dynamically via JS, while the animation is running? I guess m_targetElement won&apos;t be recached from reading the code...
&gt; 
&gt; Oh sorry, misunderstood the comment. You were not talking about removing the target, but _changing_ the target. Indeed this needs to be tested. Not necessarily part of this patch. And I could imagine situations that really cause wrong results.
&gt; I&apos;ll write some test cases and open a new bug for these scenarios.
I think it&apos;s part of this patch, as before your patch changing the target, would be immediately cause a new targetElement() to be returned,, which is not the case anymore.
(I&apos;m sure that would reveal other bugs, but still..)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308512</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-12 06:46:07 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think it&apos;s part of this patch, as before your patch changing the target, would be immediately cause a new targetElement() to be returned,, which is not the case anymore.
&gt; (I&apos;m sure that would reveal other bugs, but still..)

Hm, you&apos;re right, there might be some scenarios:
* simple example, the animated value changed by JS (IIRC the spec wants us to proceed the animation and set the baseVal afterwards, take a look at it)
* the animation is a children of the target and we change the hierarchy in the DOM. I would expect that the animation stops or, that the old parent still gets animated till the animation stoped.
* the IRI of the target changed, or more worst, another element gets the id of our current target. This is a bit more complicated and will not work with this patch. Not sure how we could handle it at all. Maybe we use the Resource handler to give back changes to the animation API. hmm..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308515</commentid>
    <comment_count>9</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-12 06:52:30 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I think it&apos;s part of this patch, as before your patch changing the target, would be immediately cause a new targetElement() to be returned,, which is not the case anymore.
&gt; &gt; (I&apos;m sure that would reveal other bugs, but still..)
&gt; 
&gt; Hm, you&apos;re right, there might be some scenarios:
&gt; * simple example, the animated value changed by JS (IIRC the spec wants us to proceed the animation and set the baseVal afterwards, take a look at it)
Yes, but that&apos;s another issue, hightly related to the fact that we&apos;re animating baseVal at the moment.... no way to fix that, w/o adding &quot;proper&quot; animVal support.

&gt; * the animation is a children of the target and we change the hierarchy in the DOM. I would expect that the animation stops or, that the old parent still gets animated till the animation stoped.
Very true, didn&apos;t think about that one.

&gt; * the IRI of the target changed, or more worst, another element gets the id of our current target. This is a bit more complicated and will not work with this patch. Not sure how we could handle it at all. Maybe we use the Resource handler to give back changes to the animation API. hmm..
Hm, indeed really tricky. With your patch, the target element could change the ID, and the animation wouldnt&apos;t be affected (it would just go on), so it would be even better than the current behaviour (maybe just write a test for that..)

If an element &lt;x&gt; is animated, and it&apos;s id changes, it has to notify all SVGAnimate*Elements about this change (triggered from eg. SVGElement::svgAttributeChanged, when &apos;id&apos; changes), similar to what we do when the id changes, that SVGResourcesCache gets updated... but that&apos;s really out of scope for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308624</commentid>
    <comment_count>10</comment_count>
      <attachid>73755</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-12 10:20:36 -0800</bug_when>
    <thetext>Created attachment 73755
Test if changing the DOM affects animation (expected behavior)

Ok, a short test for the three scenarios I mentioned above. You&apos;ll see three animations á 10s.

1. baseVal gets changed by XML-bindings after 5s to 0, shouldn&apos;t affect the animation (works in Safari)

2. two rects with id&apos;s b1 and b2, animation is applied to b1. Change ids b2 to b1 and b1 to b2 after 5 seconds, 2nd rect should get animated; first rect should be reseted to x=0. (old Safari changes the animation to the second rect, but doesn&apos;t reset first rect)

3. Move animation from first rect to second rect after 5s. first rect should get reset to x=0 second rect should proceed where the first rect stopped (looks the same like 2.). (old Safari changes the animation to the second rect, but doesn&apos;t reset first rect like for 2.)

With the patch above, the first rect of 1. and the first rect of 2. get animated the whole 10 seconds. The second rects don&apos;t get touched at all.

FF and Opera behave like the expected results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357019</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-24 08:24:54 -0800</bug_when>
    <thetext>Fix landed with http://trac.webkit.org/changeset/79569.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73731</attachid>
            <date>2010-11-12 05:56:49 -0800</date>
            <delta_ts>2010-11-12 06:07:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49437-20101112145639.patch</filename>
            <type>text/plain</type>
            <size>14026</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTkwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTEtMTIgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkdB
bmltYXRpb25zIHdpdGggSVJJIHJlZmVyZW5jZXMgdmlhICd4bGluazpocmVmJyBhcmUgc2xvdwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MzcKKwor
ICAgICAgICBTYXZlIHJlZmVyZW5jZSB0byB0YXJnZXRFbGVtZW50IGluc3RhZWQgb2YgY2FsbGlu
ZyBnZXRFbGVtZW50QnlJZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhlIGFuaW1hdGlvbi4KKyAg
ICAgICAgTW9yZSBjbGVhbnVwIG9mIFNWR0FuaW1hdGlvbiBjb2RlLCByZW5hbWVkIHRhcmdldCB0
byB0YXJnZXRFbGVtZW50IG9uIGFsbCBmdW5jdGlvbnMgZm9yCisgICAgICAgIGNvbnNpc3RlbmN5
IHJlYXNvbnMsIHJlbW92ZWQgZWRpdG9yIGZsYWdzIGFuZCB1c2Ugd3RmL01hdGhFeHRyYXMuaCBp
bnN0ZWFkIG9mIG1hdGguaC4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eSwg
c28gbm8gbmV3IHRlc3QuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAgICAgKiBzdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRy
aWJ1dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZvckN1cnJlbnRD
b2xvcik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50OjpldmVudEJhc2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1l
bnQ6OnRhcmdldEVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuaDoKKwogMjAxMC0xMS0xMiAgSm9obiBLbm90dGVuYmVsdCAgPGprbm90dGVuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MTgzMikKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTQyMSw2ICsyMTQyMSw3IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29tcGF0aWJpbGl0
eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsK
IAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJ
CUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTgz
MikKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1BhdGhQYXJzZXJGYWN0b3J5LmgiCiAjaW5j
bHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKLSNpbmNs
dWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIApAQCAtMzMxLDYgKzMzMSw1IEBAIGZsb2F0IFNWR0FuaW1hdGVFbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW4KICAgIAogfQogCi0vLyB2aW06dHM9NDpub2V0CiAjZW5kaWYgLy8gRU5B
QkxFKFNWRykKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gNzE4MzIpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJTVkdQYXRoUGFy
c2VyRmFjdG9yeS5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTIsNyArNTIsNyBAQCBQYXNzUmVmUHRyPFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
PiBTVkdBCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdBbmltYXRlTW90aW9uRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1ib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpo
YXNWYWxpZFRhcmdldCgpIGNvbnN0Citib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYXNW
YWxpZFRhcmdldCgpCiB7CiAgICAgaWYgKCFTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRh
cmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTEsOCArMTUxLDggQEAgdm9pZCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6cmVzZXRUb0JhcwogewogICAgIGlmICghaGFzVmFsaWRU
YXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdl
dEVsZW1lbnQoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRhcmdldC0+c3Vw
cGxlbWVudGFsVHJhbnNmb3JtKCk7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRo
aXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0qIHRyYW5zZm9ybSA9IHRh
cmdldEVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwogICAgIGlmICghdHJhbnNmb3Jt
KQogICAgICAgICByZXR1cm47CiAgICAgdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNzE4MzIpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBT
VkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDcxODMyKQorKysg
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKLSNpbmNsdWRl
IDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKQEAgLTU4LDcgKzU3LDcgQEAgUGFzc1JlZlB0cjxTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudD4gUwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6aGFzVmFsaWRUYXJnZXQoKSBjb25zdAorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6aGFzVmFsaWRUYXJnZXQoKQogewogICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQg
PSB0aGlzLT50YXJnZXRFbGVtZW50KCk7CiAgICAgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
Omhhc1ZhbGlkVGFyZ2V0KCkKQEAgLTEwNCwxNiArMTAzLDE3IEBAIHZvaWQgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OnJlc2V0VG8KICAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICh0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmxpbmVhckdyYWRpZW50VGFnKSB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnKSkgewotICAgICAgICB0YXJnZXRFbGVtZW50KCktPnNl
dEF0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyLCBiYXNlVmFsdWUuaXNF
bXB0eSgpID8gIm1hdHJpeCgxIDAgMCAxIDAgMCkiIDogYmFzZVZhbHVlKTsKKyAgICBTVkdFbGVt
ZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICh0YXJn
ZXRFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwgdGFy
Z2V0RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKSB7Cisg
ICAgICAgIHRhcmdldEVsZW1lbnQtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRUcmFu
c2Zvcm1BdHRyLCBiYXNlVmFsdWUuaXNFbXB0eSgpID8gIm1hdHJpeCgxIDAgMCAxIDAgMCkiIDog
YmFzZVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChiYXNlVmFsdWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0ID0gdHJhbnNm
b3JtTGlzdEZvcih0YXJnZXRFbGVtZW50KCkpKQorICAgICAgICBpZiAoU1ZHVHJhbnNmb3JtTGlz
dCogbGlzdCA9IHRyYW5zZm9ybUxpc3RGb3IodGFyZ2V0RWxlbWVudCkpCiAgICAgICAgICAgICBs
aXN0LT5jbGVhcigpOwogICAgIH0gZWxzZQotICAgICAgICB0YXJnZXRFbGVtZW50KCktPnNldEF0
dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgYmFzZVZhbHVlKTsKKyAgICAgICAgdGFy
Z2V0RWxlbWVudC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBiYXNlVmFs
dWUpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVBbmlt
YXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1l
bnQqIHJlc3VsdEVsZW1lbnQpCkBAIC0yMjgsNiArMjI4LDUgQEAgZmxvYXQgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OmNhbGN1bAogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAv
LyBFTkFCTEUoU1ZHKQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmgJKHJldmlzaW9uIDcxODMyKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpOwogCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNzE4MzIpCisrKyBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogI2lu
Y2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwpAQCAtMjgwLDcgKzI4MCw3IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
aXNBY2N1bXVsYXRlZCgKICAgICByZXR1cm4gdmFsdWUgPT0gc3VtICYmIGFuaW1hdGlvbk1vZGUo
KSAhPSBUb0FuaW1hdGlvbjsKIH0KIAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxp
ZFRhcmdldCgpIGNvbnN0Citib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1ZhbGlkVGFyZ2V0
KCkKIHsKICAgICByZXR1cm4gdGFyZ2V0RWxlbWVudCgpOwogfQpAQCAtMzEzLDMyICszMTMsMzIg
QEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaQogewogICAgIGlmICgh
aGFzVmFsaWRUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdl
dCA9IHRhcmdldEVsZW1lbnQoKTsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhp
cy0+dGFyZ2V0RWxlbWVudCgpOwogICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0
cmlidXRlTmFtZSgpOwotICAgIGlmICghdGFyZ2V0IHx8IGF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgp
IHx8IHZhbHVlLmlzTnVsbCgpKQorICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVO
YW1lLmlzRW1wdHkoKSB8fCB2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0aGUgaW5zdGFuY2UgdHJlZSB0byBnZXQgcmVidWlsZC4gSW5zdGFu
Y2VzIGFyZSB1cGRhdGVkIGluIHRoZSBsb29wIGJlbG93LgotICAgIGlmICh0YXJnZXQtPmlzU3R5
bGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpLT5z
ZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKHRydWUpOworICAgIGlmICh0YXJnZXRFbGVtZW50LT5p
c1N0eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0
RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQodHJ1ZSk7CiAgICAgICAgIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgYm9vbCBpc0NTUyA9IHRhcmdldEF0dHJpYnV0ZUlzQ1NT
KCk7CiAgICAgaWYgKGlzQ1NTKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBzZXQg
dGhlIG92ZXJyaWRlIHN0eWxlLCBub3QgdGhlIGlubGluZSBzdHlsZS4KICAgICAgICAgLy8gU2Fk
bHkgb3ZlcnJpZGUgc3R5bGVzIGFyZSBub3QgeWV0IGltcGxlbWVudGVkLgotICAgICAgICB0YXJn
ZXQtPnN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCAiIiwgZWMpOwor
ICAgICAgICB0YXJnZXRFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVOYW1l
LCB2YWx1ZSwgIiIsIGVjKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgc2V0IHRoZSAncHJlc2VudGF0aW9uJyB2YWx1ZSwgbm90IHRoZSBhY3R1YWwgCiAgICAg
ICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZS4gV2hhdGV2ZXIgdGhhdCBtZWFucyBpbiBwcmFjdGljZS4K
LSAgICAgICAgdGFyZ2V0LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUsIGVjKTsK
KyAgICAgICAgdGFyZ2V0RWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVl
LCBlYyk7CiAgICAgfQogICAgIAotICAgIGlmICh0YXJnZXQtPmlzU3R5bGVkKCkpCi0gICAgICAg
IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpLT5zZXRJbnN0YW5jZVVwZGF0
ZXNCbG9ja2VkKGZhbHNlKTsKKyAgICBpZiAodGFyZ2V0RWxlbWVudC0+aXNTdHlsZWQoKSkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldEVsZW1lbnQpLT5zZXRJ
bnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGZhbHNlKTsKICAgICAKICAgICAvLyBJZiB0aGUgdGFyZ2V0
IGVsZW1lbnQgaXMgdXNlZCBpbiBhbiA8dXNlPiBpbnN0YW5jZSB0cmVlLCB1cGRhdGUgdGhhdCBh
cyB3ZWxsLgotICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNl
cyA9IHRhcmdldC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U1ZH
RWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IHRhcmdldEVsZW1lbnQtPmluc3RhbmNlc0Zv
ckVsZW1lbnQoKTsKICAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFNWR0Vs
ZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQg
PSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKQEAgLTQ4OCwxMiArNDg4LDEyIEBAIHZvaWQg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y3VycmVudFZhbHVlc0YKICAgICAgICAgZWZmZWN0aXZlUGVy
Y2VudCA9IGNhbGN1bGF0ZVBlcmNlbnRGb3JTcGxpbmUoZWZmZWN0aXZlUGVyY2VudCwgaW5kZXgp
OwogICAgIH0KIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RGb3JDdXJyZW50Q29sb3IoU3Ry
aW5nJiB2YWx1ZSwgU1ZHRWxlbWVudCogdGFyZ2V0KQorc3RhdGljIGlubGluZSB2b2lkIGFkanVz
dEZvckN1cnJlbnRDb2xvcihTdHJpbmcmIHZhbHVlLCBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50
KQogewotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzU3R5bGVkKCkgfHwgdmFsdWUgIT0g
ImN1cnJlbnRDb2xvciIpCisgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8ICF0YXJnZXRFbGVtZW50
LT5pc1N0eWxlZCgpIHx8IHZhbHVlICE9ICJjdXJyZW50Q29sb3IiKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiB0YXJnZXRSZW5kZXJlciA9IHRhcmdldC0+cmVuZGVy
ZXIoKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiB0YXJnZXRSZW5kZXJlciA9IHRhcmdldEVsZW1l
bnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIHZhbHVlID0gdGFyZ2V0UmVuZGVyZXItPnN0eWxlKCkt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5uYW1lKCk7CiB9CiAgICAg
CkBAIC01ODUsNiArNTg1LDUgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjplbmRlZEFjdGl2
ZUludAogCiB9CiAKLS8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBFTkFCTEUoU1ZHX0FOSU1B
VElPTikKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNzE4MzIp
CisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDcgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBlbnVtIEFuaW1hdGlv
bk1vZGUgeyBOb0FuaW1hdGlvbiwgVG9BbmltYXRpb24sIEJ5QW5pbWF0aW9uLCBWYWx1ZXNBbmlt
YXRpb24sIEZyb21Ub0FuaW1hdGlvbiwgRnJvbUJ5QW5pbWF0aW9uLCBQYXRoQW5pbWF0aW9uIH07
CiAgICAgICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSgpIGNvbnN0OwogCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJv
b2wgaGFzVmFsaWRUYXJnZXQoKTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyB0YXJnZXRBdHRy
aWJ1dGVCYXNlVmFsdWUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKGNvbnN0IFN0cmluZyYpOwpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MTgzMikKKysrIFdlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAK
ICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgi
CiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC0zOTAsNyArMzg5LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6
YXR0cmlidXRlQ2hhbmdlZChBdAogICAgIH0KIH0KIAotaW5saW5lIEVsZW1lbnQqIFNWR1NNSUxF
bGVtZW50OjpldmVudEJhc2VGb3IoY29uc3QgQ29uZGl0aW9uJiBjb25kaXRpb24pIGNvbnN0Citp
bmxpbmUgRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OmV2ZW50QmFzZUZvcihjb25zdCBDb25kaXRp
b24mIGNvbmRpdGlvbikKIHsKICAgICByZXR1cm4gY29uZGl0aW9uLm1fYmFzZUlELmlzRW1wdHko
KSA/IHRhcmdldEVsZW1lbnQoKSA6IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGNvbmRpdGlv
bi5tX2Jhc2VJRCk7CiB9CkBAIC00NjAsMTMgKzQ1OSwxNiBAQCB2b2lkIFNWR1NNSUxFbGVtZW50
OjpyZXNjaGVkdWxlKCkKICAgICAgICAgbV90aW1lQ29udGFpbmVyLT5zY2hlZHVsZSh0aGlzKTsK
IH0KIAotU1ZHRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKSBjb25zdAor
U1ZHRWxlbWVudCogU1ZHU01JTEVsZW1lbnQ6OnRhcmdldEVsZW1lbnQoKQogeworICAgIGlmICht
X3RhcmdldEVsZW1lbnQpCisgICAgICAgIHJldHVybiBtX3RhcmdldEVsZW1lbnQuZ2V0KCk7CisK
ICAgICBTdHJpbmcgaHJlZiA9IHhsaW5rSHJlZigpOwogICAgIENvbnRhaW5lck5vZGUqIHRhcmdl
dCA9IGhyZWYuaXNFbXB0eSgpID8gcGFyZW50Tm9kZSgpIDogZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZikpOwogICAgIGlmICh0YXJnZXQg
JiYgdGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNW
R0VsZW1lbnQqPih0YXJnZXQpOwotICAgIHJldHVybiAwOworICAgICAgICBtX3RhcmdldEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4odGFyZ2V0KTsKKyAgICByZXR1cm4gbV90YXJn
ZXRFbGVtZW50LmdldCgpOwogfQogICAgIAogU3RyaW5nIFNWR1NNSUxFbGVtZW50OjphdHRyaWJ1
dGVOYW1lKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
CShyZXZpc2lvbiA3MTgzMikKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWlu
ZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KIAotICAgICAgICBT
VkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KCkgY29uc3Q7CisgICAgICAgIFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoKSBjb25zdDsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgYmVnaW5CeUxpbmtBY3RpdmF0aW9uKCk7CkBAIC0xMzMsNyAr
MTMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfTsKICAgICAgICAgYm9vbCBwYXJzZUNvbmRpdGlv
bihjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOwogICAgICAgICB2b2lkIHBh
cnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmLCBCZWdpbk9yRW5kIGJlZ2luT3JFbmQpOwotICAg
ICAgICBFbGVtZW50KiBldmVudEJhc2VGb3IoY29uc3QgQ29uZGl0aW9uJikgY29uc3Q7CisgICAg
ICAgIEVsZW1lbnQqIGV2ZW50QmFzZUZvcihjb25zdCBDb25kaXRpb24mKTsKIAogICAgICAgICB2
b2lkIGNvbm5lY3RDb25kaXRpb25zKCk7CiAgICAgICAgIHZvaWQgZGlzY29ubmVjdENvbmRpdGlv
bnMoKTsKQEAgLTE3OCw2ICsxNzgsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgU01J
TFRpbWUgbV9uZXh0UHJvZ3Jlc3NUaW1lOwogICAgICAgICAKKyAgICAgICAgUmVmUHRyPFNWR0Vs
ZW1lbnQ+IG1fdGFyZ2V0RWxlbWVudDsKICAgICAgICAgUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVy
PiBtX3RpbWVDb250YWluZXI7CiAgICAgICAgIHVuc2lnbmVkIG1fZG9jdW1lbnRPcmRlckluZGV4
OwogCg==
</data>
<flag name="review"
          id="64221"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>73755</attachid>
            <date>2010-11-12 10:20:36 -0800</date>
            <delta_ts>2010-11-12 10:20:36 -0800</delta_ts>
            <desc>Test if changing the DOM affects animation (expected behavior)</desc>
            <filename>svgAnimCrashTest.svg</filename>
            <type>image/svg+xml</type>
            <size>1785</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvbmxvYWQ9InJ1blRlc3QoKSIgdmlld0JveD0iMCAw
IDQyMCAzNjAiPgo8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+CiAgPCFbQ0RBVEFbCiAg
ICBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImEiKS54LmJhc2VWYWwudmFsdWUgPSAwOwoK
ICAgICAgICB2YXIgYjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYjEiKTsKICAgICAgICB2
YXIgYjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYjIiKTsKCiAgICAgICAgYjIuc2V0QXR0
cmlidXRlKCJpZCIsImIxIik7CiAgICAgICAgYjEuc2V0QXR0cmlidXRlKCJpZCIsImIyIik7Cgog
ICAgICAgIHZhciBhbmltID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNfYW5pbSIpOwogICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjMiIpLmFwcGVuZENoaWxkKGFuaW0pOwogICAg
ICB9LCA1MDAwLCBudWxsKTsKICAgIH0KICBdXT4KPC9zY3JpcHQ+CjxsaW5lIHgxPSIxMCIgeDI9
IjQxMCIgeTE9IjUwIiB5Mj0iNTAiIHN0cm9rZT0iYmxhY2siIC8+Cgo8bGluZSB4MT0iMTAiIHgy
PSI0MTAiIHkxPSIxNTAiIHkyPSIxNTAiIHN0cm9rZT0iYmxhY2siIC8+CjxsaW5lIHgxPSIxMCIg
eDI9IjQxMCIgeTE9IjE5MCIgeTI9IjE5MCIgc3Ryb2tlPSJibGFjayIgLz4KCjxsaW5lIHgxPSIx
MCIgeDI9IjQxMCIgeTE9IjI3MCIgeTI9IjI3MCIgc3Ryb2tlPSJibGFjayIgLz4KPGxpbmUgeDE9
IjEwIiB4Mj0iNDEwIiB5MT0iMzEwIiB5Mj0iMzEwIiBzdHJva2U9ImJsYWNrIiAvPgoKPGxpbmUg
eDE9IjIxMCIgeDI9IjIxMCIgeTE9IjEwIiB5Mj0iMzUwIiBzdHJva2U9ImJsYWNrIiAvPgoKPCEt
LSB0ZXN0IHdoYXQgaGFwcGVucyBvbiBjaGFuZ2Ugb2YgYmFzZVZhbCBkdXJpbmcgYW5pbWF0aW9u
IC0tPgo8cmVjdCBpZD0iYSIgeD0iMCIgeT0iNDAiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmls
bD0iZ3JlZW4iPgogIDxhbmltYXRlIGlkPSJhX2FuaW0iIGF0dHJpYnV0ZVR5cGU9IlhNTCIgYXR0
cmlidXRlTmFtZT0ieCIgZnJvbT0iMCIgdG89IjQwMCIgYmVnaW49IjBzIiBkdXI9IjEwcyIgLz4K
PC9yZWN0PgoKPCEtLSB0ZXN0IHdoYXQgaGFwcGVucyB3aGVuIGlkIGNoYW5nZXMgLS0+CjxyZWN0
IGlkPSJiMSIgeT0iMTQwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGZpbGw9ImdyZWVuIiAvPgo8
cmVjdCBpZD0iYjIiIHk9IjE4MCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiBmaWxsPSJncmVlbiIg
Lz4KPGFuaW1hdGUgaWQ9ImJfYW5pbSIgeGxpbms6aHJlZj0iI2IxIiBhdHRyaWJ1dGVUeXBlPSJY
TUwiIGF0dHJpYnV0ZU5hbWU9IngiIGZyb209IjAiIHRvPSI0MDAiIGJlZ2luPSIwcyIgZHVyPSIx
MHMiIC8+Cgo8IS0tIHRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gYW5pbWF0aW9uIGNoYW5nZXMgcGFy
ZW50IC0tPgo8cmVjdCBpZD0iYzEiIHk9IjI2MCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiBmaWxs
PSJncmVlbiI+CiAgPGFuaW1hdGUgaWQ9ImNfYW5pbSIgYXR0cmlidXRlVHlwZT0iWE1MIiBhdHRy
aWJ1dGVOYW1lPSJ4IiBmcm9tPSIwIiB0bz0iNDAwIiBiZWdpbj0iMHMiIGR1cj0iMTBzIiAvPgo8
L3JlY3Q+CjxyZWN0IGlkPSJjMiIgeT0iMzAwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGZpbGw9
ImdyZWVuIiAvPgo8L3N2Zz4K
</data>

          </attachment>
      

    </bug>

</bugzilla>