<?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>25276</bug_id>
          
          <creation_ts>2009-04-17 16:06:23 -0700</creation_ts>
          <short_desc>m_absoluteBounds hack should be removed from SVG renderers</short_desc>
          <delta_ts>2009-04-20 12:11:10 -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>
          
          <blocked>23881</blocked>
          <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>117983</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-17 16:06:23 -0700</bug_when>
    <thetext>m_absoluteBounds hack should be removed from SVG renderers

Now that I&apos;ve cleaned up the SVG render tree a little, we can!

See attached patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117985</commentid>
    <comment_count>1</comment_count>
      <attachid>29591</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-17 16:12:18 -0700</bug_when>
    <thetext>Created attachment 29591
Remove m_absoluteBounds hack from SVG renderers and move outlineBoundsForRepaint into RenderSVGModelObject

 10 files changed, 96 insertions(+), 63 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118004</commentid>
    <comment_count>2</comment_count>
      <attachid>29591</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-17 17:38:54 -0700</bug_when>
    <thetext>Comment on attachment 29591
Remove m_absoluteBounds hack from SVG renderers and move outlineBoundsForRepaint into RenderSVGModelObject


&gt; +void RenderSVGModelObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState&amp; transformState) const
&gt; +{
&gt; +    ASSERT(!fixed); // We should have no fixed content in the SVG rendering tree.
&gt; +
&gt; +    // FIXME: If we don&apos;t respect useTransforms we break SVG text rendering.  Seems SVG text has its own broken translation hacks.
&gt; +    if (useTransforms)
&gt; +        transformState.applyTransform(localToParentTransform());

I think calling mapLocalToContainer() with useTransforms == false in SVG is just wrong, and should never happen. We should either assert and
fix callers, or just force it to true.

&gt; +// Copied from RenderBox, this method likely requires further refactoring to work easily for both SVG and CSS Box Model content.
&gt; +IntRect RenderSVGModelObject::outlineBoundsForRepaint(RenderBoxModelObject* /*repaintContainer*/) const
&gt; +{
&gt; +    IntRect box = enclosingIntRect(repaintRectInLocalCoordinates());
&gt; +    adjustRectForOutlineAndShadow(box);
&gt; +
&gt; +    FloatQuad absOutlineQuad = localToAbsoluteQuad(FloatRect(box));
&gt; +    box = absOutlineQuad.enclosingBoundingBox();

Rather than follow the (broken: bug 25282) RenderBox, I think this should do:

FloatQuad containerOutlineQuad = localToContainerQuad(FloatRect(box), repaintContainer)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118143</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-20 12:08:59 -0700</bug_when>
    <thetext>I did not change that back to an ASSERT, but I plan to do that once I fix &lt;text&gt;

I fixed the localToContainerQuad issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118146</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-20 12:10:48 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderPath.cpp
	M	WebCore/rendering/RenderPath.h
	M	WebCore/rendering/RenderSVGContainer.cpp
	M	WebCore/rendering/RenderSVGContainer.h
	M	WebCore/rendering/RenderSVGModelObject.cpp
	M	WebCore/rendering/RenderSVGModelObject.h
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderSVGRoot.h
	M	WebCore/rendering/RenderSVGViewportContainer.cpp
Committed r42677
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29591</attachid>
            <date>2009-04-17 16:12:18 -0700</date>
            <delta_ts>2009-04-17 17:38:54 -0700</delta_ts>
            <desc>Remove m_absoluteBounds hack from SVG renderers and move outlineBoundsForRepaint into RenderSVGModelObject</desc>
            <filename>oluteBounds-hack-from-SVG-renderers-and-move-outlineBoundsForRepaint-into-RenderSVGModelObject.patch</filename>
            <type>text/plain</type>
            <size>16214</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ODY5YTVkMjc0YzI2ZGZhOWY2ZjMyNmIzMjkzNzFjZjU5OTdlMTI5MwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YTdlNTQ0Li4xZTIwNjg1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSw1ICsxLDQwIEBACiAyMDA5LTA0LTE3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmUgbV9hYnNvbHV0ZUJvdW5kcyBoYWNrIGZyb20gU1ZHIHJlbmRlcmVycyBhbmQgbW92ZSBvdXRs
aW5lQm91bmRzRm9yUmVwYWludCBpbnRvIFJlbmRlclNWR01vZGVsT2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTI3NgorCisgICAgICAgIFRo
aXMgYWxzbyBleHBvc2VkIGEgYnVnZ3kgcGFpbnQgY2hlY2sgaW4gUmVuZGVyU1ZHQ29udGFpbmVy
OjpsYXlvdXQoKQorICAgICAgICB3ZSBzaG91bGQgcmVwYWludCBpZiB3ZSBhcmUgc2VsZiBwYWlu
dGluZyBPUiBpZiBvdXIga2lkcyBjaGFuZ2VkLCBub3QgQU5ELgorCisgICAgICAgIFdyaXRpbmcg
cmVhbCBvdXRsaW5lQm91bmRzRm9yUmVwYWludCByZXF1aXJlZCB3cml0aW5nIGEgbWFwTG9jYWxU
b0NvbnRhaW5lcigpIGZ1bmN0aW9uCisKKyAgICAgICAgTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLCB0
aHVzIG5vIHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJQYXRoLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtV2l0aG91dENTU1BhcmVudE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmxheW91dCk6CisKKzIwMDktMDQtMTcg
IEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KIAogICAgICAgICBNb3ZlIG1vcmUgY29kZSBpbnRvIFJlbmRlclNWR01vZGVs
T2JqZWN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCmluZGV4IGUxMWVjMDguLjQ4ZjBjYWEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCkBAIC02OCw2ICs2OCwxMSBAQCBSZW5kZXJQYXRoOjpS
ZW5kZXJQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBub2RlKQogewogfQogCitU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJQYXRoOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsKK30KKwogVHJhbnNmb3JtYXRp
b25NYXRyaXggUmVuZGVyUGF0aDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIHJldHVy
biBtX2xvY2FsVHJhbnNmb3JtOwpAQCAtMTYxLDE1ICsxNjYsMTIgQEAgYm9vbCBSZW5kZXJQYXRo
OjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCiAKIHZvaWQgUmVuZGVyUGF0aDo6bGF5b3V0KCkK
IHsKLSAgICAvLyBGSVhNRTogdXNpbmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFp
bmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUgcm9vdAotICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xh
eW91dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRl
cigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0
KCkpOwogICAgIAogICAgIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAKICAgICBzZXRQYXRo
KHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKS0+dG9Q
YXRoRGF0YSgpKTsKIAotICAgIG1fYWJzb2x1dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVy
Zmxvd1JlY3QoKTsKLQogICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKIAogICAg
IHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKQEAgLTQzNiwxNCArNDM4LDYgQEAgRmxvYXRSZWN0IFJl
bmRlclBhdGg6OmRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFIKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1JbnRSZWN0IFJlbmRlclBhdGg6
Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRD
b250YWluZXIqLykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaGFuZGxlIG5vbi1yb290IHJlcGFp
bnRDb250YWluZXIKLSAgICBJbnRSZWN0IHJlc3VsdCA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0gICAg
YWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3cocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGF0aC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCmlu
ZGV4IDk5OGZmMzkuLjBmMmRkMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhdGguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKQEAgLTQ3LDE4ICs0
NywxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0OwogCisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRQYXRoKGNvbnN0IFBhdGgmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlclBhdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclBhdGgiOyB9CiAKLSAgICBib29s
IGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBh
cmVudFkpOwotCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29u
dGV4dCosIGludCB0eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKQEAgLTY3LDE0ICs2NSwxNSBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdDsKKwor
ICAgIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICB2aXJ0dWFsIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBtdXRhYmxlIFBhdGgg
bV9wYXRoOwogICAgIG11dGFibGUgRmxvYXRSZWN0IG1fY2FjaGVkTG9jYWxGaWxsQkJveDsKICAg
ICBtdXRhYmxlIEZsb2F0UmVjdCBtX2NhY2hlZExvY2FsUmVwYWludFJlY3Q7CiAgICAgRmxvYXRS
ZWN0IG1fbWFya2VyQm91bmRzOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbG9jYWxUcmFu
c2Zvcm07Ci0gICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggMjJhNTU0Ni4uNmVlZTAxYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC02OSw4ICs2OSw3IEBA
IHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKQogICAgIC8vIEFyYml0cmFyeSBhZmZp
bmUgdHJhbnNmb3JtcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCiAgICAgdmll
dygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKIAotICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29s
dXRlQm91bmRzIGJyZWFrcyBpZiBjb250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290
Ci0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkgJiYgc2VsZldpbGxQYWludCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7CisgICAg
TGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5
b3V0KCkgfHwgc2VsZldpbGxQYWludCgpKTsKIAogICAgIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3Jt
KCk7CiAKQEAgLTg2LDggKzg1LDYgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgp
CiAgICAgICAgIEFTU0VSVCghY2hpbGQtPm5lZWRzTGF5b3V0KCkpOwogICAgIH0KIAotICAgIG1f
YWJzb2x1dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLQogICAgIHJl
cGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKIAogICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0
U3RhdGUoKTsKQEAgLTE5NiwxNCArMTkzLDYgQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUludFJlY3QgUmVuZGVyU1ZHQ29udGFpbmVyOjpvdXRsaW5l
Qm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVy
Ki8pIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGhhbmRsZSBub24tcm9vdCByZXBhaW50Q29udGFp
bmVyCi0gICAgSW50UmVjdCByZXN1bHQgPSBtX2Fic29sdXRlQm91bmRzOwotICAgIGFkanVzdFJl
Y3RGb3JPdXRsaW5lQW5kU2hhZG93KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmgKaW5kZXggYjBkNWI1YS4uOWMyNGI2MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmgKQEAgLTQwLDkgKzQwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFJlbmRlck9i
amVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJl
bjsgfQogCi0gICAgLy8gU29tZSBjb250YWluZXJzIGRvIG5vdCB3YW50IGl0J3MgY2hpbGRyZW4K
LSAgICAvLyB0byBiZSBkcmF3biwgYmVjYXVzZSB0aGV5IG1heSBiZSAncmVmZXJlbmNlZCcKLSAg
ICAvLyBFeGFtcGxlOiA8bWFya2VyPiBjaGlsZHJlbiBpbiBTVkcKKyAgICAvLyA8bWFya2VyPiB1
c2VzIHRoZXNlIG1ldGhvZHMgdG8gb25seSBhbGxvdyBkcmF3aW5nIGNoaWxkcmVuIGR1cmluZyBh
IHNwZWNpYWwgbWFya2VyIGRyYXcgdGltZQogICAgIHZvaWQgc2V0RHJhd3NDb250ZW50cyhib29s
KTsKICAgICBib29sIGRyYXdzQ29udGVudHMoKSBjb25zdDsKIApAQCAtNTEsNyArNDksNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkp
OwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKQEAg
LTY0LDE3ICs2MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Q29udGVu
dFRyYW5zZm9ybXMoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5QWRkaXRpb25h
bFRyYW5zZm9ybXMoUGFpbnRJbmZvJik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciov
KSBjb25zdDsKLQogcHJpdmF0ZToKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJl
bjsKLSAgICAKICAgICBib29sIHNlbGZXaWxsUGFpbnQoKSBjb25zdDsKIAorICAgIFJlbmRlck9i
amVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnRzIDogMTsK
LSAgICAKLXByb3RlY3RlZDogICAgCi0gICAgSW50UmVjdCBtX2Fic29sdXRlQm91bmRzOwogfTsK
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKaW5kZXggMDk3ZWNkZC4uMzZkMWRjZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMzUsNyArMzUsOSBAQAogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybVN0YXRlLmgiCiAKICNpZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VGaWx0ZXIuaCIKQEAgLTY4LDYgKzcwLDI5IEBAIHZvaWQgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvCiAgICAgcGFyZW50KCktPmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFp
bmVyLCByZXBhaW50UmVjdCwgZml4ZWQpOwogfQogCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJh
bnNmb3JtU3RhdGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFmaXhlZCk7IC8vIFdlIHNob3VsZCBo
YXZlIG5vIGZpeGVkIGNvbnRlbnQgaW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KKworICAgIC8v
IEZJWE1FOiBJZiB3ZSBkb24ndCByZXNwZWN0IHVzZVRyYW5zZm9ybXMgd2UgYnJlYWsgU1ZHIHRl
eHQgcmVuZGVyaW5nLiAgU2VlbXMgU1ZHIHRleHQgaGFzIGl0cyBvd24gYnJva2VuIHRyYW5zbGF0
aW9uIGhhY2tzLgorICAgIGlmICh1c2VUcmFuc2Zvcm1zKQorICAgICAgICB0cmFuc2Zvcm1TdGF0
ZS5hcHBseVRyYW5zZm9ybShsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOworCisgICAgcGFyZW50
KCktPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5z
Zm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKK30KKworLy8gQ29waWVkIGZyb20gUmVuZGVyQm94LCB0
aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVydGhlciByZWZhY3RvcmluZyB0byB3b3JrIGVh
c2lseSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3ggTW9kZWwgY29udGVudC4KK0ludFJlY3QgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLykgY29uc3QKK3sKKyAgICBJbnRSZWN0IGJveCA9
IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAg
YWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKKworICAgIEZsb2F0UXVhZCBhYnNP
dXRsaW5lUXVhZCA9IGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJveCkpOworICAgIGJv
eCA9IGFic091dGxpbmVRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisKKyAgICByZXR1cm4g
Ym94OworfQorCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50LCBib29sKQogewogICAgIHJlY3RzLmFwcGVuZChh
YnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaAppbmRleCBjOGI5NjkzLi40NDBmNzM5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR01vZGVsT2JqZWN0LmgKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gTW9zdCByZW5kZXJlcnMgaW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZSB3aWxs
IGluaGVyaXQgZnJvbSB0aGlzIGNsYXNzCi0vLyBidXQgbm90IGFsbC4gKGUuZy4gUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdCwgUmVuZGVyU1ZHQmxvY2spIHRodXMgbWV0aG9kcworLy8gYnV0IG5vdCBh
bGwuIChlLmcuIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QsIFJlbmRlclNWR0Jsb2NrLCBSZW5kZXJT
VkdJbWFnZSkgdGh1cyBtZXRob2RzCiAvLyByZXF1aXJlZCBieSBTVkcgcmVuZGVycyBuZWVkIHRv
IGJlIGRlY2xhcmVkIG9uIFJlbmRlck9iamVjdCwgYnV0IHNvbWUgc2hhcmVkCiAvLyBsb2dpYyBj
YW4gZ28gaW4gdGhpcyBjbGFzcy4KIApAQCAtNTIsMTAgKzUyLDEzIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50
UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0g
dHJ1ZSk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZp
eGVkLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgLy8gUmV0dXJu
cyB0aGUgYm91bmRpbmcgYm94IGZvciB0aGUgZmlsdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9i
amVjdCAoaWYgYW55KQogICAgIEZsb2F0UmVjdCBmaWx0ZXJCb3VuZGluZ0JveCgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAppbmRleCAxMzdjOGQxLi4xNmI5NTBmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcApAQCAtODksMTMgKzg5LDExIEBAIHZvaWQgUmVu
ZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICAvLyBBcmJpdHJhcnkgYWZmaW5lIHRyYW5zZm9ybXMg
YXJlIGluY29tcGF0aWJsZSB3aXRoIExheW91dFN0YXRlLgogICAgIHZpZXcoKS0+ZGlzYWJsZUxh
eW91dFN0YXRlKCk7CiAKLSAgICAvLyBGSVhNRTogdXNpbmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVh
a3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUgcm9vdAotICAgIExheW91dFJl
cGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYm
IHNlbGZOZWVkc0xheW91dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7CisgICAgTGF5b3V0UmVwYWlu
dGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCkpOwogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwog
Ci0gICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwog
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2Rl
KCkpOwogICAgIHNldFdpZHRoKHN0YXRpY19jYXN0PGludD4od2lkdGgoKSAqIHN2Zy0+Y3VycmVu
dFNjYWxlKCkpKTsKICAgICBzZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQoKSAqIHN2
Zy0+Y3VycmVudFNjYWxlKCkpKTsKQEAgLTE5MSw3ICsxODksNyBAQCB2b2lkIFJlbmRlclNWR1Jv
b3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
CiAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgaWYgKChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgp
ICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICBwYWludE91dGxp
bmUoY2hpbGRQYWludEluZm8uY29udGV4dCwgbV9hYnNvbHV0ZUJvdW5kcy54KCksIG1fYWJzb2x1
dGVCb3VuZHMueSgpLCBtX2Fic29sdXRlQm91bmRzLndpZHRoKCksIG1fYWJzb2x1dGVCb3VuZHMu
aGVpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8u
Y29udGV4dCwgcGFyZW50WCwgcGFyZW50WSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOwog
fQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUm9vdDo6dmlld3BvcnQoKSBjb25zdApAQCAtMjE4LDEw
ICsyMTYsMTEgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmlld3BvcnQoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBoZWln
aHQudmFsdWUoc3ZnKSk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jvb3Q6
OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAorLy8gQ29tbW9ubHksIHdoZW4gY2FsbGlu
ZyBhIFJlbmRlckJveDo6IG1ldGhvZCwgUmVuZGVyU1ZHUm9vdCB3YW50cyB0byBpbmNsdWRlCisv
LyBhbGwgb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgdHJhbnNmb3JtICpleGNlcHQqIGZvciB0aGUg
Q1NTIHBhcmVudCBvZmZzZXQuCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdSb290Ojps
b2NhbFRvUGFyZW50VHJhbnNmb3JtV2l0aG91dENTU1BhcmVudE9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtOwotICAgIGN0bS50cmFuc2xhdGUoeCgpLCB5KCkp
OwogICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihu
b2RlKCkpOwogICAgIGN0bS5zY2FsZShzdmctPmN1cnJlbnRTY2FsZSgpKTsKICAgICBjdG0udHJh
bnNsYXRlKHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpLngoKSwgc3ZnLT5jdXJyZW50VHJhbnNsYXRl
KCkueSgpKTsKQEAgLTIyOSw2ICsyMjgsMTMgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVy
U1ZHUm9vdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIHN2Zy0+
dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLCBoZWlnaHQoKSkgKiBjdG07CiB9CiAKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9mZnNldFRyYW5zbGF0aW9uOwor
ICAgIG9mZnNldFRyYW5zbGF0aW9uLnRyYW5zbGF0ZSh4KCksIHkoKSk7CisgICAgcmV0dXJuIGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm1XaXRob3V0Q1NTUGFyZW50T2Zmc2V0KCkgKiBvZmZzZXRUcmFu
c2xhdGlvbjsKK30KKwogLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZW1vdmVkIGFz
IHNvb24gYXMgY2FsbGVycyB0byBSZW5kZXJCb3g6OmFic29sdXRlVHJhbnNmb3JtKCkgY2FuIGJl
IHJlbW92ZWQuCiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdSb290OjphYnNvbHV0ZVRy
YW5zZm9ybSgpIGNvbnN0CiB7CkBAIC0yNTQsMTUgKzI2MCw4IEBAIFRyYW5zZm9ybWF0aW9uTWF0
cml4IFJlbmRlclNWR1Jvb3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKIAogdm9pZCBSZW5kZXJT
VkdSb290Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQogewotICAgIC8v
IEFwcGx5IG91ciB2aWV3Ym94IHRyYW5zZm9ybSwgYW5kIHRoZW4gY2FsbCBSZW5kZXJCb3gncyBt
ZXRob2QgdG8gaGFuZGxlIGFsbCB0aGUgbm9ybWFsIENTUyBCb3ggbW9kZWwgYml0cwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVG9QYXJlbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCk7Ci0KLSAgICAvLyBVbmRvIHRoZSB4KCkseSgpIHRyYW5zbGF0aW9uIGluY2x1ZGVkIGluIGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBiZWNhdXNlCi0gICAgLy8gUmVuZGVyQm94Ojpjb21wdXRl
UmVjdEZvclJlcGFpbnQoKSBleHBlY3RzIGl0IHRvIGJlIGluY2x1ZGVkIGluIHJlcGFpbnRSZWN0
Ci0gICAgbG9jYWxUb1BhcmVudC50cmFuc2xhdGVSaWdodCgteCgpLCAteSgpKTsKLQotICAgIC8v
IEFwcGx5IG91ciBsb2NhbFRvUGFyZW50IHRyYW5zZm9ybSBhbmQgcGFzcyB0aGUgcmVjdCBvZmYg
dG8gb3VyIFJlbmRlckJveAotICAgIHJlcGFpbnRSZWN0ID0gbG9jYWxUb1BhcmVudC5tYXBSZWN0
KHJlcGFpbnRSZWN0KTsKKyAgICAvLyBBcHBseSBvdXIgbG9jYWwgdHJhbnNmb3JtcyAoZXhjZXB0
IGZvciB4L3kgdHJhbnNsYXRpb24pIGFuZCBjYWxsIFJlbmRlckJveCdzIG1ldGhvZCB0byBoYW5k
bGUgYWxsIHRoZSBub3JtYWwgQ1NTIEJveCBtb2RlbCBiaXRzCisgICAgcmVwYWludFJlY3QgPSBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtV2l0aG91dENTU1BhcmVudE9mZnNldCgpLm1hcFJlY3QocmVw
YWludFJlY3QpOwogICAgIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRD
b250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuaAppbmRleCAzNTcyNTNiLi42NDljODc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSb290LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5o
CkBAIC03Myw5ICs3MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FsY1ZpZXdwb3J0KCk7IAog
ICAgIHZvaWQgYXBwbHlDb250ZW50VHJhbnNmb3JtcyhQYWludEluZm8mLCBpbnQgcGFyZW50WCwg
aW50IHBhcmVudFkpOwogCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUb1BhcmVudFRy
YW5zZm9ybVdpdGhvdXRDU1NQYXJlbnRPZmZzZXQoKSBjb25zdDsKKwogICAgIFJlbmRlck9iamVj
dENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OwotICAgIElu
dFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAppbmRl
eCAwNWJhNmNjLi5jM2MyNWZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuY3BwCkBAIC01MSwxMSArNTEsOCBAQCB2b2lkIFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyOjpsYXlvdXQoKQogICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNm
b3JtcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCiAgICAgdmlldygpLT5kaXNh
YmxlTGF5b3V0U3RhdGUoKTsKICAgICAKLSAgICAvLyBGSVhNRTogdXNpbmcgbV9hYnNvbHV0ZUJv
dW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUgcm9vdAotICAg
IExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xh
eW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7Ci0gICAgCi0g
ICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAg
IAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1
cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKKwogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQogICAgICAgICAgICAgY2hp
bGQtPnNldE5lZWRzTGF5b3V0KHRydWUpOwo=
</data>
<flag name="review"
          id="14777"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>