<?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>25226</bug_id>
          
          <creation_ts>2009-04-15 17:40:38 -0700</creation_ts>
          <short_desc>Add a RenderObject::localToParentTransform method which includes the full transform between local and parent local</short_desc>
          <delta_ts>2009-04-16 16:27:56 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</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>
          <dependson>25224</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117702</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-15 17:40:38 -0700</bug_when>
    <thetext>Add a RenderObject::localToParentTransform method which includes the full transform between local and parent local

The current localTransform() method is just the transform=&quot;&quot; animated transform value from the SVGStyledTransformable element.  Commonly we need the full transform from local coordinates to parent local coordinates (as in computeRepaintRect() or even in the current absoluteTransform() implementation).  Add a localToParentTransform() to cover this case (and possibly remove localTransform()... although the layout test results currently depend on localTransform()).

This will make it very easy to add functioning computeRepaintRect() methods, and will clean up lots of places where we have to be sure to add all the transforms in the right order.  Now we&apos;ll just add one single transform (or its inverse) which will be easy to tell if we have it in the right order or not. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117825</commentid>
    <comment_count>1</comment_count>
      <attachid>29558</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-16 15:36:07 -0700</bug_when>
    <thetext>Created attachment 29558
First stab at localToParentTransform

 14 files changed, 142 insertions(+), 49 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117836</commentid>
    <comment_count>2</comment_count>
      <attachid>29558</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-16 16:21:46 -0700</bug_when>
    <thetext>Comment on attachment 29558
First stab at localToParentTransform

r=me, but the localToParentTransform() terminology is a bit of a mismatch with RenderObjects &apos;getTransformFromContainer&apos;, which includes the offset the containing blocks renderer, and the transform of the renderer.

Eventually it would be good to have the point/quad mapping methods that are exposed on RenderObject just work for SVG, so we should look at mapLocalToContainer/mapAbsoluteToLocalPoint at some point too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117837</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-16 16:24:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 29558 [review])
&gt; r=me, but the localToParentTransform() terminology is a bit of a mismatch with
&gt; RenderObjects &apos;getTransformFromContainer&apos;, which includes the offset the
&gt; containing blocks renderer, and the transform of the renderer.
&gt; 
&gt; Eventually it would be good to have the point/quad mapping methods that are
&gt; exposed on RenderObject just work for SVG, so we should look at
&gt; mapLocalToContainer/mapAbsoluteToLocalPoint at some point too.

Agreed.  I&apos;m still not a fan of the getTransformFromContainer terminology (or I don&apos;t really understand it) after you description over IRC.  But I would like to unify the two transform models (or at least make them interoperable) sooner rather than later!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117840</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-16 16:27:56 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderSVGContainer.cpp
	M	WebCore/rendering/RenderSVGContainer.h
	M	WebCore/rendering/RenderSVGHiddenContainer.cpp
	M	WebCore/rendering/RenderSVGHiddenContainer.h
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderSVGRoot.h
	M	WebCore/rendering/RenderSVGTransformableContainer.cpp
	M	WebCore/rendering/RenderSVGTransformableContainer.h
	M	WebCore/rendering/RenderSVGViewportContainer.cpp
	M	WebCore/rendering/RenderSVGViewportContainer.h
	M	WebCore/rendering/SVGRenderSupport.cpp
Committed r42598
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29558</attachid>
            <date>2009-04-16 15:36:07 -0700</date>
            <delta_ts>2009-04-16 16:21:46 -0700</delta_ts>
            <desc>First stab at localToParentTransform</desc>
            <filename>First-stab-at-localToParentTransform.patch</filename>
            <type>text/plain</type>
            <size>19412</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NDYxN2Q4OWMzY2U5OGM2OTM4MDNiMzMxZDc0NzkwNDk4NWE4ODMwMApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNzMxOTg3Li5mNDEyNjc5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUxIEBACisyMDA5LTA0LTE2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
YSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgbWV0aG9kIHdoaWNoIGluY2x1ZGVzIHRoZQorICAg
ICAgICBmdWxsIHRyYW5zZm9ybSBiZXR3ZWVuIGxvY2FsIGFuZCBwYXJlbnQgbG9jYWwgY29vcmRp
bmF0ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NTIyNgorCisgICAgICAgIE1vdmVkIG1fbG9jYWxUcmFuc2Zvcm0gdXAgaW50byBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyCisgICAgICAgIGFuZCBhZGRlZCBhIGNvbW1lbnQgdG8gUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8gbWFrZSBpdCBtb3JlCisgICAgICAgIGNsZWFyIHRo
YXQgaXQgZG9lcyBub3QgaGF2ZSBhIGxvY2FsVHJhbnNmb3JtKCkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCByZXZlYWxzIHR3byBtb3JlIGZhaWxlZCBkZXNpZ24gZGVjaXNpb25zOgorICAgICAgICAx
LiAgVXNlIG9mIFJlbmRlckJveDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSB0byBtZWFuICJhYnNvbHV0
ZVRyYW5zZm9ybSgpCisgICAgICAgICAgICBpbmNsdWRpbmcgb25seSBteSBsb2NhbFRyYW5zZm9y
bSgpIiBjYWxsZXJzIGFyZSBwcm9iYWJseSB1c2luZyBpdAorICAgICAgICAgICAgaW5jb3JyZWN0
bHkgYW55d2F5IGFuZCBhcmUganVzdCBtYXNraW5nIGJ1Z3MgaW4gdGhlIGNvbmZ1c2VkIGNvZGUu
CisgICAgICAgIDIuICBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3ggZG9lcyBub3QgaW5jbHVk
ZSB2aWV3cG9ydCB0cmFuc2xhdGlvbnMgaW4KKyAgICAgICAgICAgIGl0cyBjb21wdXRlZCBib3Vu
ZGluZyBib3gsIHNvIGJvdW5kaW5nIGJveGVzIHdpbGwgYmUgb2ZmIGZvciBwYXJlbnRzIG9mCisg
ICAgICAgICAgICBpbm5lciA8c3ZnPiBlbGVtZW50cy4gIEknbGwgZml4IHRoaXMgYW4gdXBkYXRl
ZCB0aGUgcmVzdWx0cyBpbiBhIHNlcGFyYXRlIGNoYW5nZS4KKworICAgICAgICBObyBmdW5jdGlv
bmFsIGNoYW5nZXMsIHRodXMgbm8gdGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVHJh
bnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdDb250YWluZXI6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjp2aWV3cG9y
dFRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVRyYW5z
Zm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjphYnNvbHV0ZVRyYW5zZm9ybSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmxvY2FsVHJhbnNmb3Jt
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cjo6YWJzb2x1dGVUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5oOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveCk6CisKIDIw
MDktMDQtMTYgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAppbmRleCBmNmMwODI4Li4zNjBmM2M2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTIzNjksOCArMjM2OSwxNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJPYmplY3Q6
OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KTsKIH0KIAorVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojpsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBkb3VibGUgdmlydHVhbCBj
YWxsIGluZGlyZWN0aW9uIGlzIHRlbXBvcmFyeSB1bnRpbCBJIGNhbiBsYW5kIHRoZQorICAgIC8v
IHJlc3Qgb2YgdGhlIG9mIHRoZSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgc3VwcG9ydCBmb3Ig
U1ZHLgorICAgIHJldHVybiBsb2NhbFRyYW5zZm9ybSgpOworfQorCiBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKIHsKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSwgYnV0IG11Y2gg
b2YgdGhlIFNWRyBjb2RlCisgICAgLy8gZGVwZW5kcyBvbiBSZW5kZXJCb3g6OmFic29sdXRlVHJh
bnNmb3JtKCkgYmVpbmcgdGhlIHN1bSBvZiB0aGUgbG9jYWxUcmFuc2Zvcm0oKXMgb2YgYWxsIHBh
cmVudCByZW5kZXJlcnMuCiAgICAgaWYgKHBhcmVudCgpKQogICAgICAgICByZXR1cm4gbG9jYWxU
cmFuc2Zvcm0oKSAqIHBhcmVudCgpLT5hYnNvbHV0ZVRyYW5zZm9ybSgpOwogICAgIHJldHVybiBs
b2NhbFRyYW5zZm9ybSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA3YzJkNTFmLi43
YWVkNGIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzA2LDcgKzMwNiwxOCBAQCBw
dWJsaWM6CiAgICAgLy8gcmVzcGVjdGluZyBjbGlwcGluZywgbWFza2luZywgZmlsdGVycywgb3Bh
Y2l0eSwgc3Ryb2tlLXdpZHRoIGFuZCBtYXJrZXJzCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAorICAgIC8vIEZJWE1FOiBUaGlz
IGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQgYW5kIG1vc3RseSBhcm91bmQgZm9yIFNWR1JlbmRlclRy
ZWVBc1RleHQuCisgICAgLy8gVGhpcyBvbmx5IHJldHVybnMgdGhlIHRyYW5zZm9ybT0iIiB2YWx1
ZSBmcm9tIHRoZSBlbGVtZW50CisgICAgLy8gbW9zdCBjYWxsc2l0ZXMgd2FudCBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkgaW5zdGVhZC4KICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBmdWxsIHRyYW5z
Zm9ybSBtYXBwaW5nIGZyb20gbG9jYWwgY29vcmRpbmF0ZXMgdG8gbG9jYWwgY29vcmRzIGZvciB0
aGUgcGFyZW50IFNWRyByZW5kZXJlcgorICAgIC8vIFRoaXMgaW5jbHVkZXMgYW55IHZpZXdwb3J0
IHRyYW5zZm9ybXMgYW5kIHgveSBvZmZzZXRzIGFzIHdlbGwgYXMgdGhlIHRyYW5zZm9ybT0iIiB2
YWx1ZSBvZmYgdGhlIGVsZW1lbnQuCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICAvLyBXYWxrcyB1cCB0aGUgcGFy
ZW50IGNoYWluIHRvIGNyZWF0ZSBhIHRyYW5zZm9ybSB3aGljaCBtYXBzIGZyb20gbG9jYWwgdG8g
ZG9jdW1lbnQgY29vcmRzCisgICAgLy8gTk9URTogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCEg
IEl0IGRvZXNuJ3QgcmVzcGVjdCBzY3JvbGwgb2Zmc2V0cyBvciByZXBhaW50IGNvbnRhaW5lcnMu
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSB2aXJ0dWFsIHNvIHRoYXQgUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyIGNhbiBvdmVycmlkZSBpdCB0byBtYXRjaCBvbGQgTGF5b3V0VGVzdCByZXN1
bHRzLgogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm0o
KSBjb25zdDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cAppbmRleCAzMmU2YWIwLi5mYTkzN2Q2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHAKQEAgLTU2LDExICs1Niw2IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpz
ZXREcmF3c0NvbnRlbnRzKGJvb2wgZHJhd3NDb250ZW50cykKICAgICBtX2RyYXdzQ29udGVudHMg
PSBkcmF3c0NvbnRlbnRzOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdDb250
YWluZXI6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sb2NhbFRyYW5z
Zm9ybTsKLX0KLQogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OmNhbGN1bGF0ZUxvY2FsVHJhbnNm
b3JtKCkKIHsKICAgICAvLyBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIHRvIGFkZCB0cmFu
c2Zvcm0gc3VwcG9ydApAQCAtNzYsNyArNzEsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6
bGF5b3V0KCkKIAogICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29sdXRlQm91bmRzIGJyZWFrcyBp
ZiBjb250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290CiAgICAgTGF5b3V0UmVwYWlu
dGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2Vs
ZldpbGxQYWludCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7Ci0gICAgCisKICAgICBjYWxjdWxhdGVM
b2NhbFRyYW5zZm9ybSgpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewpAQCAtMTU3LDEx
ICsxNTIsNiBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCwgaW50KQogICAgICAgICBwYWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQs
IG1fYWJzb2x1dGVCb3VuZHMueCgpLCBtX2Fic29sdXRlQm91bmRzLnkoKSwgbV9hYnNvbHV0ZUJv
dW5kcy53aWR0aCgpLCBtX2Fic29sdXRlQm91bmRzLmhlaWdodCgpLCBzdHlsZSgpKTsKIH0KIAot
VHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHQ29udGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9y
bSgpIGNvbnN0Ci17Ci0gICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotfQotCiBJ
bnRSZWN0IFJlbmRlclNWR0NvbnRhaW5lcjo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgRmxvYXRSZWN0
IHJlcGFpbnRSZWN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAppbmRleCA2
NGZkMjcxLi44NWUyNzQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaApA
QCAtNjAsMTMgKzYwLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RC
b3VuZGluZ0JveCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9j
YWxUcmFuc2Zvcm0oKTsKLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJh
bnNmb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9y
dFRyYW5zZm9ybSgpIGNvbnN0OworICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIHRvIGFs
bG93IGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveCdzIGJyb2tlbiB0cmFuc2Zvcm1hdGlvbgor
ICAgIC8vIE9uY2UgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGlzIGxhbmRlZCwgdGhpcyB3aWxs
IGJlIHJlbW92ZWQsIGFuZCBsYXlvdXQgdGVzdCByZXN1bHRzIHVwZGF0ZWQuCisgICAgdmlydHVh
bCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
Ym9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUNv
bnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUFkZGl0
aW9uYWxUcmFuc2Zvcm1zKFBhaW50SW5mbyYpOwogCkBAIC04MSw3ICs4Miw2IEBAIHByaXZhdGU6
CiAgICAgCiBwcm90ZWN0ZWQ6ICAgIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xvY2FsVHJhbnNmb3JtOwogfTsKICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmNwcAppbmRleCBjOTU4NTM2Li45YmUxNjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKQEAgLTc2LDE2ICs3Niw2IEBAIHZvaWQg
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JiwgYm9vbCkKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFjZSBvciBw
YWludAogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKLX0KLQotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCk7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBp
bnQsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAppbmRleCAyMGQyMjFjLi5hNTZmMmViIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaApAQCAtNTEs
OSArNTEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lcik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9v
bCB0b3BMZXZlbCA9IHRydWUpOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgb3ZlcnJpZGUgb25seSBleGlzdHMgdG8gbWF0Y2ggZXhpc3RpbmcgTGF5b3V0
VGVzdCByZXN1bHRzLgorICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFic29s
dXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsgfQog
CiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IGI5NDQ4NDcuLjk0NGNh
YzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yMTksOSArMjE5LDkgQEAg
dm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmlld3BvcnQoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBoZWlnaHQudmFsdWUoc3Zn
KSk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlVHJh
bnNmb3JtKCkgY29uc3QKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jvb3Q6OmxvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0
bSA9IFJlbmRlckJveDo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjdG07CiAgICAgY3RtLnRyYW5zbGF0ZSh4KCksIHkoKSk7CiAgICAgU1ZHU1ZHRWxlbWVu
dCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgY3RtLnNj
YWxlKHN2Zy0+Y3VycmVudFNjYWxlKCkpOwpAQCAtMjMwLDYgKzIzMCwxMyBAQCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiAgICAg
cmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLCBoZWlnaHQoKSkgKiBj
dG07CiB9CiAKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgcmVtb3ZlZCBhcyBzb29u
IGFzIGNhbGxlcnMgdG8gUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNhbiBiZSByZW1v
dmVkLgorVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVUcmFuc2Zv
cm0oKSBjb25zdAoreworICAgIC8vIFRoaXMgd291bGQgYXBwbHkgbG9jYWxUcmFuc2Zvcm0oKSB0
d2ljZSBpZiBsb2NhbFRyYW5zZm9ybSgpIHdlcmUgbm90IHRoZSBpZGVudGl0eS4KKyAgICByZXR1
cm4gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpICogUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5zZm9y
bSgpOworfQorCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUm9vdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBj
b25zdAogewogICAgIHJldHVybiBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3godGhpcywgZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCmluZGV4IDE1ZWZlNTIuLjc5MmI4YzQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKIAotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRp
b25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIGJvb2wg
ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBib29sIHN0cm9rZUNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKQEAgLTU5LDcgKzU5LDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsK
IAorICAgIC8vIEZJWE1FOiBCb3RoIG9mIHRoZXNlIG92ZXJyaWRlcyBzaG91bGQgYmUgcmVtb3Zl
ZC4KICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29u
c3Q7CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhYnNvbHV0ZVRyYW5zZm9ybSgp
IGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IHZpZXdwb3J0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKaW5k
ZXggNmQ2NWI1NS4uNDRhM2JlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKQEAgLTEsOCArMSw3IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2Rl
Lm9yZz4KLSAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDkgR29vZ2xlLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDYgKzM0LDE2
IEBAIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OlJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIoU1ZHU3R5bGVkVHJhbnNmCiB7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOworfQorCitUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpsb2NhbFRyYW5zZm9y
bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07Cit9CisKIGJvb2wgUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKQog
ewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9sZFRyYW5zZm9ybSA9IG1fbG9jYWxUcmFuc2Zv
cm07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyLmgKaW5kZXggODk3Y2M2My4uMjBkOTU3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmcK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDkgR29vZ2xlLCBJbmMuCiAgICAgICAKICAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTE3LDcgKzE4LDYgQEAKICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCi0KICNpZm5kZWYgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCiAjZGVmaW5l
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXJfaAogCkBAIC0zMCw4ICszMCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lciA6IHB1YmxpYyBSZW5kZXJTVkdDb250YWluZXIgewogICAgIHB1YmxpYzoKICAgICAgICAg
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcihTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudCopOwotICAgICAgICAKKworICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJl
IG1hZGUgbm9uLXZpcnR1YWwgb25jZSBTVkdSZW5kZXJUcmVlQXNUZXh0IHN0b3BzIHVzaW5nIGxv
Y2FsVHJhbnNmb3JtKCkKKyAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKaW5kZXggZjAwZTNkMS4uMDVi
YTZjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcApAQCAtMiw4ICsyLDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgICAgICAg
ICAgICAgICAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKyAgICAgICAgICAgICAgICAgIDIwMDkgR29v
Z2xlLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE0MSwxMSArMTQwLDIwIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjp2aWV3cG9ydFRyYW5z
Zm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CiB9CiAKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9y
dFRyYW5zbGF0aW9uOworICAgIHZpZXdwb3J0VHJhbnNsYXRpb24udHJhbnNsYXRlKHZpZXdwb3J0
KCkueCgpLCB2aWV3cG9ydCgpLnkoKSk7CisgICAgcmV0dXJuIHZpZXdwb3J0VHJhbnNmb3JtKCkg
KiB2aWV3cG9ydFRyYW5zbGF0aW9uOworICAgIC8vIElmIHRoaXMgY2xhc3Mgd2VyZSBldmVyIGdp
dmVuIGEgbG9jYWxUcmFuc2Zvcm0oKSwgdGhlbiB0aGUgYWJvdmUgd291bGQgcmVhZDoKKyAgICAv
LyByZXR1cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIGxvY2FsVHJhbnNmb3JtKCkgKiB2aWV3cG9y
dFRyYW5zbGF0aW9uOworfQorCisvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHJlbW92
ZWQgYXMgc29vbiBhcyBjYWxsZXJzIHRvIFJlbmRlckJveDo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBj
YW4gYmUgcmVtb3ZlZC4KIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyOjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggY3RtID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgIGN0bS50
cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKLSAgICByZXR1cm4gdmll
d3BvcnRUcmFuc2Zvcm0oKSAqIGN0bTsKKyAgICAvLyBUaGlzIHdvdWxkIGFwcGx5IGxvY2FsVHJh
bnNmb3JtKCkgdHdpY2UgaWYgbG9jYWxUcmFuc2Zvcm0oKSB3ZXJlIG5vdCB0aGUgaWRlbnRpdHku
CisgICAgcmV0dXJuIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSAqIFJlbmRlclNWR0NvbnRhaW5l
cjo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKIH0KIAogYm9vbCBSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lcjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RB
Y3Rpb24gaGl0VGVzdEFjdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5oCmluZGV4IDJlNGE0OWMuLmFjYWI2NWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaApAQCAtMSw4ICsxLDcgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNyBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAyMDA5IEdvb2dsZSwgSW5jLgogCiAgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yOSw2ICsyOCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
VGhpcyBpcyB1c2VkIGZvciBub24tcm9vdCA8c3ZnPiBlbGVtZW50cyBhbmQgPG1hcmtlcj4gZWxl
bWVudHMsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIFNWR1RyYW5zZm9ybWFibGUKKy8vIHRodXMgd2Ug
aW5oZXJpdCBmcm9tIFJlbmRlclNWR0NvbnRhaW5lciBpbnN0ZWFkIG9mIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIKIGNsYXNzIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIDogcHVi
bGljIFJlbmRlclNWR0NvbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCopOwpAQCAtNDAsMTUgKzQxLDIwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAKLSAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCisgICAgdmly
dHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7
CisKKyAgICAvLyBGSVhNRTogVGhpcyBvdmVycmlkZSBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIGNh
bGxlcnMgb2YgUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNhbiBiZSByZW1vdmVkLgor
ICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25z
dDsKKwogICAgIEZsb2F0UmVjdCB2aWV3cG9ydCgpIGNvbnN0OwogCisgICAgLy8gRklYTUU6IFRo
aXMgaXMgb25seSBwdWJsaWMgZm9yIFNWR1Jlc291cmNlTWFya2VyOjpkcmF3LCBsaWtlbHkgdGhl
IGNhbGxzaXRlIHNob3VsZCBiZSBjaGFuZ2VkLgorICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25N
YXRyaXggdmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICB2b2lkIGNh
bGNWaWV3cG9ydCgpOyAKKyAgICB2b2lkIGNhbGNWaWV3cG9ydCgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGFwcGx5Q29udGVudFRyYW5zZm9ybXMoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lk
IGFwcGx5QWRkaXRpb25hbFRyYW5zZm9ybXMoUGFpbnRJbmZvJik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGQ3M2U0NTYuLjUxM2Y5MjkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0xODIsMTIgKzE4MiwxOCBAQCBGbG9hdFJlY3Qg
Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVy
LCBib29sIGluY2x1ZAogICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGNvbnRhaW5lci0+Zmly
c3RDaGlsZCgpOwogICAgIGZvciAoOyBjdXJyZW50ICE9IDA7IGN1cnJlbnQgPSBjdXJyZW50LT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBjaGlsZEJCb3ggPSBpbmNsdWRlQWxs
UGFpbnRlZENvbnRlbnQgPyBjdXJyZW50LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IDogY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGp1c3QgY2FsbCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkKKyAgICAgICAgLy8gaG93
ZXZlciwgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIHJlc3BlY3RzIHRoZSB2aWV3cG9ydCB0cmFu
c2xhdGlvbiwgYW5kIHRoaXMgbWV0aG9kIGhhc3Qgbm90IGhpc3RvcmljYWxseSBkb25lIHNvCisg
ICAgICAgIC8vIEknbGwgZml4IHRoaXMsIGFuZCB1cGRhdGUgdGhlIExheW91dFRlc3RzIGluIGEg
c2VwYXJhdGUgcGF0Y2guCisgICAgICAgIC8vIE5vdGU6IEEgcmVuZGVyZXIgd2lsbCBoYXZlIGVp
dGhlciBhIGxvY2FsVHJhbnNmb3JtIG9yIGEgdmlld3BvcnRUcmFuc2Zvcm0sIG5vIHJlbmRlcnMg
aGF2ZSBib3RoLgogICAgICAgICBGbG9hdFJlY3QgY2hpbGRCQm94SW5Mb2NhbENvb3JkcyA9IGN1
cnJlbnQtPmxvY2FsVHJhbnNmb3JtKCkubWFwUmVjdChjaGlsZEJCb3gpOwogCi0gICAgICAgIC8v
IDxzdmc+IGVsZW1lbnRzIG1heSBhIHZpZXdCb3ggdHJhbnNmb3JtIGFzIHdlbGwKICAgICAgICAg
aWYgKGN1cnJlbnQtPmlzU1ZHQ29udGFpbmVyKCkpCiAgICAgICAgICAgICBjaGlsZEJCb3hJbkxv
Y2FsQ29vcmRzID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4oY3VycmVudCktPnZp
ZXdwb3J0VHJhbnNmb3JtKCkubWFwUmVjdChjaGlsZEJCb3hJbkxvY2FsQ29vcmRzKTsKIAorICAg
ICAgICAvLyBGSVhNRTogV2UncmUgbm90IGluY2x1ZGluZyB0aGUgdmlld3BvcnQgdHJhbnNsYXRp
b24gKGUuZy4gdGhlIHgsIHkgb2Zmc2V0IG9mIGEgbmVzdGVkIDxzdmc+KSwgdGhlIHJlc3VsdCBv
ZiB0aGlzIGZ1bmN0aW9uIGlzIHdyb25nLgorCiAgICAgICAgIGJvdW5kaW5nQm94LnVuaXRlKGNo
aWxkQkJveEluTG9jYWxDb29yZHMpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="14748"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>