<?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>25432</bug_id>
          
          <creation_ts>2009-04-27 14:39:27 -0700</creation_ts>
          <short_desc>Simplify SVG hit testing (and make it floating point precise)</short_desc>
          <delta_ts>2009-04-28 18:00:51 -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>25431</dependson>
          <blocked>25433</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs.webkit.org</cc>
    
    <cc>krit</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119028</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-27 14:39:27 -0700</bug_when>
    <thetext>Simplify SVG hit testing (and make it floating point precise)

SVG hit testing is one of the last clients of absoluteTransform(), so fixing it will bring us one step closer to killing absoluteTransform.

I love that this patch killed at least one &quot;this code is needlessly complicated and probably wrong&quot; statements. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119030</commentid>
    <comment_count>1</comment_count>
      <attachid>29829</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-27 14:46:03 -0700</bug_when>
    <thetext>Created attachment 29829
Simplify nodeAtPoint for SVG

 20 files changed, 185 insertions(+), 95 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119120</commentid>
    <comment_count>2</comment_count>
      <attachid>29829</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-28 11:27:27 -0700</bug_when>
    <thetext>Comment on attachment 29829
Simplify nodeAtPoint for SVG



&gt; +TransformationMatrix RenderForeignObject::localToParentTransform() const
&gt; +{
&gt; +    // FIXME: This trasition is backwards!
&gt; +    // It should be localTransform() * translationForAttributes()
&gt; +    // but leaving it backwards for now for LayoutTest result compatibility
&gt; +    return translationForAttributes() * localTransform();
&gt; +}

Reference the bug you filed in the comment.

&gt; +    // SVG uses a different hit-testing system from CSS
&gt; +    virtual bool nodeAtPoint(const HitTestRequest&amp;, HitTestResult&amp;, const FloatPoint&amp; pointInParent, HitTestAction);

I&apos;d rather the new nodeAtPoint got a different name to make it easier to fix bug 23120.

Looks OK to me but I&apos;d like hyatt to give the final word on whether we should add nodeAtPoint proliferation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119122</commentid>
    <comment_count>3</comment_count>
      <attachid>29829</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-28 11:30:22 -0700</bug_when>
    <thetext>Comment on attachment 29829
Simplify nodeAtPoint for SVG

Dave says it&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119159</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 13:56:30 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderForeignObject.cpp
	M	WebCore/rendering/RenderForeignObject.h
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderPath.cpp
	M	WebCore/rendering/RenderPath.h
	M	WebCore/rendering/RenderSVGContainer.cpp
	M	WebCore/rendering/RenderSVGContainer.h
	M	WebCore/rendering/RenderSVGHiddenContainer.cpp
	M	WebCore/rendering/RenderSVGHiddenContainer.h
	M	WebCore/rendering/RenderSVGImage.cpp
	M	WebCore/rendering/RenderSVGImage.h
	M	WebCore/rendering/RenderSVGModelObject.cpp
	M	WebCore/rendering/RenderSVGModelObject.h
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderSVGText.cpp
	M	WebCore/rendering/RenderSVGText.h
	M	WebCore/rendering/RenderSVGViewportContainer.cpp
	M	WebCore/rendering/RenderSVGViewportContainer.h
Committed r42960
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119243</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 18:00:51 -0700</bug_when>
    <thetext>*** Bug 21892 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29829</attachid>
            <date>2009-04-27 14:46:03 -0700</date>
            <delta_ts>2009-04-28 11:30:22 -0700</delta_ts>
            <desc>Simplify nodeAtPoint for SVG</desc>
            <filename>Simplify-nodeAtPoint-for-SVG.patch</filename>
            <type>text/plain</type>
            <size>29932</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTAxMzc5YjY5MDFjMDM2MDAwNTU2ZjM0M2ZhODgxMmNiZDk1YWFiMApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MmJlNmJhLi40OTZhZjA0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDY5IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAK
KyAgICAgICAgU2ltcGxpZnkgbm9kZUF0UG9pbnQgZm9yIFNWRworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU0MzIKKworICAgICAgICBBZGRlZCBhIG5l
dyBub2RlQXRQb2ludCBtZXRob2Qgd2hpY2ggdGFrZXMgYSBGbG9hdFBvaW50CisgICAgICAgIGlu
c3RlYWQgb2YgdGhlICpzdXBlciBjb25mdXNpbmcqIHgveSB0eC90eSBwYWlycyB0aGF0IEhUTUwg
dXNlcy4KKyAgICAgICAgTW9zdGx5IHRoaXMgaXMganVzdCBsb3RzIG9mIG1pbnVzLWxpbmVzIGFz
IHRoZSBuZXcgY29kZSBpcyAqbXVjaCogc2ltcGxlci4KKworICAgICAgICBJIG1hZGUgYWxsIHRo
ZSBTVkcgcmVuZGVyZXJzIHVzZSB0aGUgbmV3IG5vZGVBdFBvaW50IGFuZCBBU1NFUlRfTk9UX1JF
QUNIRUQKKyAgICAgICAgZm9yIHRoZSBIVE1ML0NTUyBpbnQgeC95IHZlcnNpb24uCisKKyAgICAg
ICAgRXZlbnR1YWxseSBJIHRoaW5rIHRoYXQgdGhlIHJlc3Qgb2YgQ1NTL0hUTUwgcmVuZGVyIG9i
amVjdHMgd2lsbCBmb2xsb3cgc3VpdAorICAgICAgICBhbmQgbW92ZSB0byB0aGlzIG5ld2VyIEZs
b2F0UG9pbnQgdmVyc2lvbiBvZiBub2RlQXRQb2ludCwgYnV0IGNoYW5naW5nIHRoZW0KKyAgICAg
ICAgb3ZlciB3YXMgd2VsbCBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4KKworICAg
ICAgICBTVkcgaGl0IHRlc3RpbmcgaXMgbm90IGFjdHVhbGx5IGZsb2F0aW5nIHBvaW50IHByZWNp
c2UgeWV0LCBzaW5jZSBpdHMgc3RpbGwKKyAgICAgICAgcGFzc2VkIGluIGFuIGludGVnZXIgeC95
LiAgQ2VydGFpbiB0cmFuc2Zvcm0gaGl0LXRlc3QgZWRnZSBjYXNlcyBhcmUgbGlrZWx5IGZpeGVk
CisgICAgICAgIGJ5IG1vdmluZyB0byBGbG9hdFBvaW50IGhlcmUsIGJ1dCBJIGRpZG4ndCB0cnkg
dG8gZmluZCBvbmUuCisKKyAgICAgICAgVGhpcyBzaG91bGQgbm90IGNhdXNlIGZ1bmN0aW9uYWwg
Y2hhbmdlcyBmb3IgY29tbW9uLWNhc2UgaGl0IHRlc3RpbmcsIHRodXMKKyAgICAgICAgbm8gdGVz
dHMgY2hhbmdlZCwgbm9yIHNob3VsZCBuZXcgdGVzdHMgYmUgbmVlZGVkLgorCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRm9yZWlnbk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6OmxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhdGguaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Nv
bnRhaW5lcjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250
YWluZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdl
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bG9jYWxUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuaDoKKworMjAwOS0wNC0yNyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgU2ltcGxpZnkg
aG93IFNWRyBjb250YWluZXJzIHBhaW50CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNTQzMQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25P
YmplY3QuY3BwCmluZGV4IDUyYjFmMDcuLjQzZDAzYjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZvcmVpZ25PYmplY3QuY3BwCkBAIC0zNyw3ICszNyw3IEBAIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6OlJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqIG5vZGUpCiB7
CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckZvcmVpZ25PYmplY3Q6OnRyYW5zbGF0
aW9uRm9yQXR0cmlidXRlcygpCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJGb3JlaWduT2Jq
ZWN0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIFNWR0ZvcmVpZ25P
YmplY3RFbGVtZW50KiBmb3JlaWduID0gc3RhdGljX2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQqPihub2RlKCkpOwogICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0
ZShmb3JlaWduLT54KCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPnkoKS52YWx1ZShmb3JlaWdu
KSk7CkBAIC00NSwxMyArNDUsMTUgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyRm9yZWln
bk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKIAogdm9pZCBSZW5kZXJGb3JlaWdu
T2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJl
bnRZKQogeworICAgIC8vIFRoZSBTVkcgcmVuZGVyaW5nIHRyZWUgc2hvdWxkIG5vdCBiZSB1c2lu
ZyBwYXJlbnRYL3BhcmVudFkKKyAgICBBU1NFUlQoIXBhcmVudFgpOworICAgIEFTU0VSVCghcGFy
ZW50WSk7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0
ZShwYXJlbnRYLCBwYXJlbnRZKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShs
b2NhbFRyYW5zZm9ybSgpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5z
bGF0aW9uRm9yQXR0cmlidXRlcygpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RN
KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAo
Y2xpcFJlY3QocGFyZW50WCwgcGFyZW50WSkpOwogCiAgICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxl
KCktPm9wYWNpdHkoKTsKQEAgLTg1LDkgKzg3LDcgQEAgRmxvYXRSZWN0IFJlbmRlckZvcmVpZ25P
YmplY3Q6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIAogdm9pZCBSZW5k
ZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCiB7Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVz
KCkgKiBsb2NhbFRyYW5zZm9ybSgpOwotICAgIHJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChyZWN0
KTsKLQorICAgIHJlY3QgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KTsK
ICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIs
IHJlY3QsIGZpeGVkKTsKIH0KIApAQCAtOTgsNiArOTgsMTQgQEAgYm9vbCBSZW5kZXJGb3JlaWdu
T2JqZWN0OjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCiAgICAgcmV0dXJuIChvbGRUcmFuc2Zv
cm0gIT0gbV9sb2NhbFRyYW5zZm9ybSk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRl
ckZvcmVpZ25PYmplY3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBUaGlzIHRyYXNpdGlvbiBpcyBiYWNrd2FyZHMhCisgICAgLy8gSXQgc2hvdWxkIGJl
IGxvY2FsVHJhbnNmb3JtKCkgKiB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQorICAgIC8vIGJ1
dCBsZWF2aW5nIGl0IGJhY2t3YXJkcyBmb3Igbm93IGZvciBMYXlvdXRUZXN0IHJlc3VsdCBjb21w
YXRpYmlsaXR5CisgICAgcmV0dXJuIHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogbG9jYWxU
cmFuc2Zvcm0oKTsKK30KKwogdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpsYXlvdXQoKQogewog
ICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKQEAgLTEwNSwyOCArMTEzLDI4IEBAIHZvaWQgUmVu
ZGVyRm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKICAgICAvLyBBcmJpdHJhcnkgYWZmaW5lIHRyYW5z
Zm9ybXMgYXJlIGluY29tcGF0aWJsZSB3aXRoIExheW91dFN0YXRlLgogICAgIHZpZXcoKS0+ZGlz
YWJsZUxheW91dFN0YXRlKCk7CiAKLSAgICAvLyBGSVhNRTogdXNpbmcgbV9hYnNvbHV0ZUJvdW5k
cyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUgcm9vdAotICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigq
dGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwogICAgIAogICAgIGNhbGN1bGF0
ZUxvY2FsVHJhbnNmb3JtKCk7CiAgICAgCiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwogCi0g
ICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotCiAg
ICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogCiAgICAgdmlldygpLT5lbmFibGVM
YXlvdXRTdGF0ZSgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotYm9vbCBSZW5k
ZXJGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBzdGF0aWNfY2FzdDxp
bnQ+KGxvY2FsUG9pbnQueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbFBvaW50LnkoKSksIDAs
IDAsIGhpdFRlc3RBY3Rpb24pOworfQorCitib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b3Rh
bFRyYW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgdG90YWxUcmFuc2Zvcm0gKj0g
dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7Ci0gICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwot
ICAgIHRvdGFsVHJhbnNmb3JtLmludmVyc2UoKS5tYXAoeCwgeSwgbG9jYWxYLCBsb2NhbFkpOwot
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsWCksIHN0YXRpY19jYXN0PGludD4obG9jYWxZKSwgdHgsIHR5LCBo
aXRUZXN0QWN0aW9uKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZv
cmVpZ25PYmplY3QuaAppbmRleCBhMGYyMGM5Li4xMzY1ZGI3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRm9yZWlnbk9iamVjdC5oCkBAIC0zOCw4ICszOCw5IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwog
CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIGJvb2wg
Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICBib29sIGNhbGN1bGF0ZUxvY2FsVHJhbnNm
b3JtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZh
bHNlKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC00OCwxMyArNDksMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICBwcml2YXRlOgotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpIGNvbnN0OwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKLSAgICBJbnRSZWN0IG1f
YWJzb2x1dGVCb3VuZHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3ODkzNDk4Li4wYjQ4Yzk4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKQEAgLTI0MDEsNiArMjQwMSwxMiBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKICAgICByZXR1cm4gbG9j
YWxUcmFuc2Zvcm0oKTsKIH0KIAorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBIaXRU
ZXN0QWN0aW9uKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShTVkcpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZDliYjdkNC4uOWRmYzI3ZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRDZWxsV2lkdGhDaGFuZ2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxsV2lkdGhDaGFuZ2VkID0g
YjsgfQogCiAjaWYgRU5BQkxFKFNWRykKKyAgICAvLyBGSVhNRTogVW50aWwgYWxsIFNWRyByZW5k
ZXJzIGNhbiBiZSBzdWJjbGFzc2VzIG9mIFJlbmRlclNWR01vZGVsT2JqZWN0IHdlIGhhdmUKKyAg
ICAvLyB0byBhZGQgU1ZHIHJlbmRlcmVyIG1ldGhvZHMgdG8gUmVuZGVyT2JqZWN0IHdpdGggYW4g
QVNTRVJUX05PVF9SRUFDSEVEKCkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0z
MjEsNiArMzIzLDkgQEAgcHVibGljOgogICAgIC8vIE5PVEU6IFRoaXMgbWV0aG9kIGlzIGRlcHJl
Y2F0ZWQhICBJdCBkb2Vzbid0IHJlc3BlY3Qgc2Nyb2xsIG9mZnNldHMgb3IgcmVwYWludCBjb250
YWluZXJzLgogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgdmlydHVhbCBzbyB0aGF0IFJlbmRl
clNWR0hpZGRlbkNvbnRhaW5lciBjYW4gb3ZlcnJpZGUgaXQgdG8gbWF0Y2ggb2xkIExheW91dFRl
c3QgcmVzdWx0cy4KICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFic29sdXRlVHJh
bnNmb3JtKCkgY29uc3Q7CisKKyAgICAvLyBTVkcgdXNlcyBhIGRpZmZlcmVudCBoaXQtdGVzdGlu
ZyBzeXN0ZW0gZnJvbSBDU1MKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbik7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNBbm9ueW1vdXMoKSBj
b25zdCB7IHJldHVybiBtX2lzQW5vbnltb3VzOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQYXRoLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCmlu
ZGV4IGFiZmQ5OTQuLjE0ZjAyMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clBhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCkBAIC0yMzMs
MjIgKzIzMywyMSBAQCB2b2lkIFJlbmRlclBhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQsIGludCkKICAgICBncmFwaGljc0NvbnRleHQt
PmFkZEZvY3VzUmluZ1JlY3QoZW5jbG9zaW5nSW50UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKSk7CiB9CiAKLWJvb2wgUmVuZGVyUGF0aDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQs
IGludCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJQYXRoOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewogICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBv
bmx5IGhpdC10ZXN0IHRoZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVn
cm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBJbnRQb2ludCBhYnNvbHV0
ZVBvaW50KF94LCBfeSk7CisKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAg
UG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZH
X1BBVEhfSElUVEVTVElORywgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKIAogICAgIGJvb2wg
aXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKICAgICBpZiAo
aXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBGbG9hdFBv
aW50IGhpdFBvaW50ID0gbWFwQWJzb2x1dGVQb2ludFRvTG9jYWwoYWJzb2x1dGVQb2ludCk7Ci0g
ICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdHlsZSgpLT5zdmdTdHlsZSgp
LT5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFp
bnMoaGl0UG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2UpKQotICAgICAgICAgICAgfHwgKGhp
dFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSB8fCAh
aGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlucyhoaXRQb2ludCwgaGl0UnVsZXMu
cmVxdWlyZUZpbGwpKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGFic29sdXRlUG9pbnQpOworICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAo
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVTdHJv
a2UpICYmIHN0cm9rZUNvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVTdHJva2Up
KQorICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYgKHN0eWxlKCktPnN2Z1N0
eWxlKCktPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwpICYmIGZpbGxDb250YWlu
cyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlRmlsbCkpKSB7CisgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0
aC5oCmluZGV4IDBmMmRkMDguLjUwNmY4ZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclBhdGguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKQEAgLTU5
LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBp
bnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdS
ZWN0cyhHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgRmxv
YXRSZWN0IGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgUGF0aCYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAppbmRleCBiMjU1NmNjLi40NjczYTgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTE2OCwxMSArMTY4LDEzIEBAIEZsb2F0UmVjdCBSZW5k
ZXJTVkdDb250YWluZXI6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKICAg
ICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKKyAg
ICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJz
ZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgX3gs
IF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIF90eCwgX3kgLSBfdHkpKTsKKyAgICAgICAg
aWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRl
c3RBY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91
bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAppbmRleCBm
ZjQxOTdhLi40NzliODNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaApA
QCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3goKSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Ym9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKaW5kZXggOWJlMTY3OC4uYjQ0NDViYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCkBAIC03Niw3
ICs3Niw3IEBAIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCkKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFr
ZSB1cCBzcGFjZSBvciBwYWludAogfQogCi1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBp
bnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIHJldHVybiBmYWxzZTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgKaW5kZXggYTU2
ZjJlYi4uMmYyYTI1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmgKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OwogCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRl
c3RBY3Rpb24pOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0ltYWdlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcApp
bmRleCA4ZjgzNDBjLi4yNTkyMDIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCwgaW50KQogICAgICAgICByZXR1cm47CiAKICAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0obG9jYWxU
cmFuc2Zvcm0oKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkpOwogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkgewogICAgICAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gMDsKQEAg
LTE4NSw3ICsxODUsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgaW50LCBpbnQpCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0K
IAotYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQsIGludCwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAg
ICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQt
dGVzdCB0aGVuLgogICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQpA
QCAtMTk1LDEyICsxOTUsMTEgQEAgYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGkKICAgICAKICAgICBi
b29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CiAgICAg
aWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKLSAgICAgICAgZG91
YmxlIGxvY2FsWCwgbG9jYWxZOwotICAgICAgICBhYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2Uo
KS5tYXAoX3gsIF95LCBsb2NhbFgsIGxvY2FsWSk7CisgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJ
blBhcmVudCk7CiAKICAgICAgICAgaWYgKGhpdFJ1bGVzLmNhbkhpdEZpbGwpIHsKLSAgICAgICAg
ICAgIGlmIChtX2xvY2FsQm91bmRzLmNvbnRhaW5zKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobG9j
YWxYKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChsb2NhbFkpKSkgewotICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCwgX3kpKTsKKyAgICAgICAg
ICAgIGlmIChtX2xvY2FsQm91bmRzLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhbFBv
aW50KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIwOSw2ICsyMDgsMTIgQEAgYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0
VGVzdEFjdGlvbikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIEZsb2F0UmVjdCBSZW5kZXJTVkdJbWFnZTo6b2JqZWN0Qm91bmRpbmdCb3goKSBj
b25zdAogewogICAgIHJldHVybiBtX2xvY2FsQm91bmRzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lt
YWdlLmgKaW5kZXggNmM4YjEyMi4uMDA5OTc3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFn
ZS5oCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0ltYWdl
IjsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgICAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKQEAgLTYyLDE1ICs2MiwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAorICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJ
blBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgX3gsIGludCBfeSwg
aW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbik7CiAKKyAgICBwcml2YXRlOgogICAgICAg
ICBib29sIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIHZpcnR1YWwgVHJhbnNm
b3JtYXRpb25NYXRyaXggbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJh
bnNmb3JtOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNhbGN1bGF0ZUFic29sdXRl
Qm91bmRzKCk7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fbG9jYWxUcmFuc2Zvcm07
CiAgICAgICAgIEZsb2F0UmVjdCBtX2xvY2FsQm91bmRzOwotICAgICAgICBJbnRSZWN0IG1fYWJz
b2x1dGVCb3VuZHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IDczZjQ0ZDUuLmE3NTU5MjUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTEwMyw2
ICsxMDMsMTIgQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wpCiAgICAgcXVhZHMuYXBwZW5kKGFic29sdXRlQ2xp
cHBlZE92ZXJmbG93UmVjdCgpKTsKIH0KIAorYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQs
IGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCmlu
ZGV4IDk1NjI3OTIuLjQ5M2ZiZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR01vZGVsT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaApAQCAtNTgsNiArNTgsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwogCiAg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNm
b3JtU3RhdGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkLCBTVkcgdXNlcyBhIGRpZmZlcmVudCBub2RlQXRQb2ludCBtZXRob2QK
KyAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGludCB4SW5Db250YWluZXIsIGludCB5SW5Db250YWluZXIsIGlu
dCBkeFBhcmVudFRvQ29udGFpbmVyLCBpbnQgZHlQYXJlbnRUb0NvbnRhaW5lciwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5j
cHAKaW5kZXggNjgwODI5Yy4uMjUyMzhjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5j
cHAKQEAgLTI2OSwzNCArMjY5LDMzIEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyCiAKIGJvb2wg
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHks
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjdG0gPSBSZW5kZXJCb3g6OmFic29sdXRlVHJhbnNmb3JtKCk7Ci0KLSAgICBpbnQgc3ggPSAo
X3R4IC0gc3RhdGljX2Nhc3Q8aW50PihjdG0uZSgpKSk7IC8vIHNjcm9sbCBvZmZzZXQKLSAgICBp
bnQgc3kgPSAoX3R5IC0gc3RhdGljX2Nhc3Q8aW50PihjdG0uZigpKSk7IC8vIHNjcm9sbCBvZmZz
ZXQKLSAKLSAgICBpZiAoIXZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKQotICAgICAgICAmJiBzdHls
ZSgpLT5vdmVyZmxvd1goKSA9PSBPSElEREVOCi0gICAgICAgICYmIHN0eWxlKCktPm92ZXJmbG93
WSgpID09IE9ISURERU4pIHsKLSAgICAgICAgaW50IHR4ID0geCgpIC0gX3R4ICsgc3g7Ci0gICAg
ICAgIGludCB0eSA9IHkoKSAtIF90eSArIHN5OwotCi0gICAgICAgIC8vIENoZWNrIGlmIHdlIG5l
ZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgotICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0g
b3ZlcmZsb3dSZWN0KGZhbHNlKTsKLSAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOwot
ICAgICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7Ci0gICAgICAgIGN0bS5pbnZlcnNlKCkubWFw
KF94IC0gX3R4LCBfeSAtIF90eSwgbG9jYWxYLCBsb2NhbFkpOwotICAgICAgICBpZiAoIW92ZXJm
bG93Qm94LmNvbnRhaW5zKChpbnQpbG9jYWxYLCAoaW50KWxvY2FsWSkpCisgICAgSW50UG9pbnQg
cG9pbnRJbkNvbnRhaW5lcihfeCwgX3kpOworICAgIEludFNpemUgY29udGFpbmVyVG9QYXJlbnRP
ZmZzZXQoX3R4LCBfdHkpOworCisgICAgSW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5D
b250YWluZXIgLSBjb250YWluZXJUb1BhcmVudE9mZnNldDsKKyAgICBJbnRQb2ludCBwb2ludElu
Qm9yZGVyQm94ID0gcG9pbnRJblBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CisK
KyAgICAvLyBOb3RlOiBGb3Igbm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQg
cGFkZGluZyBmb3IgPHN2Zz4KKworICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElE
REVOKSB7CisgICAgICAgIC8vIFNWRyBkb2Vzbid0IHN1cHBvcnQgaW5kZXBlbmRlbnQgeC95IG92
ZXJmbG93CisgICAgICAgIEFTU0VSVChzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPSElEREVOKTsK
KyAgICAgICAgSW50UG9pbnQgcG9pbnRJbkNvbnRlbnRCb3ggPSBwb2ludEluQm9yZGVyQm94IC0g
Ym9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCk7CisgICAgICAgIGlmICghY29udGVudEJveFJlY3Qo
KS5jb250YWlucyhwb2ludEluQ29udGVudEJveCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZp
b3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBfeCAtIHN4LCBfeSAtIHN5LCAwLCAwLCBoaXRUZXN0QWN0aW9uKSkgewotICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gX3R4LCBfeSAt
IF90eSkpOworICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
bG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDU1Mv
SFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJv
eCwgcmlnaHQ/CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJ
bkJvcmRlckJveCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
LSAgICAKLSAgICAvLyBTcGVjOiBPbmx5IGdyYXBoaWNhbCBlbGVtZW50cyBjYW4gYmUgdGFyZ2V0
ZWQgYnkgdGhlIG1vdXNlLCBwZXJpb2QuCisKKyAgICAvLyBTcGVjOiBPbmx5IGdyYXBoaWNhbCBl
bGVtZW50cyBjYW4gYmUgdGFyZ2V0ZWQgYnkgdGhlIG1vdXNlLCBzbyB3ZSBkb24ndCBjaGVjayBz
ZWxmIGhlcmUuCiAgICAgLy8gMTYuNDogIklmIHRoZXJlIGFyZSBubyBncmFwaGljcyBlbGVtZW50
cyB3aG9zZSByZWxldmFudCBncmFwaGljcyBjb250ZW50IGlzIHVuZGVyIHRoZSBwb2ludGVyIChp
LmUuLCB0aGVyZSBpcyBubyB0YXJnZXQgZWxlbWVudCksIHRoZSBldmVudCBpcyBub3QgZGlzcGF0
Y2hlZC4iCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cAppbmRleCA5YmUyZTc4Li40N2ViZWM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cApAQCAtMTEyLDI0ICsxMTIsMjcgQEAgUm9vdElubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3Jl
YXRlUm9vdEJveCgpCiAgICAgcmV0dXJuIGJveDsKIH0KIAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAg
UG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZH
X1RFWFRfSElUVEVTVElORywgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlz
VmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CiAgICAgaWYgKGlz
VmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKICAgICAgICAgaWYgKChoaXRS
dWxlcy5jYW5IaXRTdHJva2UgJiYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpIHx8
ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5I
aXRGaWxsICYmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVGaWxsKSkpIHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvdGFsVHJh
bnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIGRvdWJsZSBsb2NhbFgs
IGxvY2FsWTsKLSAgICAgICAgICAgIHRvdGFsVHJhbnNmb3JtLmludmVyc2UoKS5tYXAoX3gsIF95
LCBsb2NhbFgsIGxvY2FsWSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGhpdFBvaW50KF94LCBf
eSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgKGludClsb2NhbFgsIChpbnQpbG9jYWxZLCBfdHgsIF90eSwgaGl0VGVzdEFjdGlv
bik7CisgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgICAgICAgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIChpbnQpbG9j
YWxQb2ludC54KCksIChpbnQpbG9jYWxQb2ludC55KCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlclNW
R1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCwgYm9vbCkKIHsKICAg
ICBSZW5kZXJTVkdSb290KiByb290ID0gZmluZFNWR1Jvb3RPYmplY3QocGFyZW50KCkpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCmluZGV4IGVhYjk4NjUuLmEwYmFjZTYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdUZXh0LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmNwcAppbmRleCA1Mzc4NmFmLi5lZDg5YzJmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCkBAIC0xNDMsMzYg
KzE0MywyNCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cjo6YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdAogICAgIHJldHVybiBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgKiBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CiB9CiAK
LWJvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95
LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgaWYgKCF2aWV3
cG9ydCgpLmlzRW1wdHkoKQotICAgICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElE
REVOCi0gICAgICAgICYmIHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9ISURERU4pIHsKLSAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSByZWdpb24gaXMgb3V0c2lkZSBvZiBvdXIgdmlld3Bv
cnQgKGFuZCB0aHVzIGNhbid0IGhpdCBvdXIga2lkcykKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
Y29kZSBzZWVtcyBuZWVkbGVzc2x5IGNvbXBsaWNhdGVkIChhbmQgdGh1cyBsaWtlbHkgd3Jvbmcp
Ci0gICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSBJbnRSZWN0KDAsIDAsIHZpZXdwb3J0KCku
d2lkdGgoKSwgdmlld3BvcnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgIG92ZXJmbG93Qm94Lm1vdmUo
X3R4LCBfdHkpOwotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdG0gPSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgIGN0bS50cmFuc2xhdGUodmlld3BvcnQo
KS54KCksIHZpZXdwb3J0KCkueSgpKTsKLSAgICAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwot
ICAgICAgICBjdG0uaW52ZXJzZSgpLm1hcChfeCAtIF90eCwgX3kgLSBfdHksIGxvY2FsWCwgbG9j
YWxZKTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5jb250YWlucygoaW50KWxvY2FsWCwgKGlu
dClsb2NhbFkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAvLyBXZSBv
bmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25seSBoaXQtdGVzdCB0aGVu
LgorICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgc3ggPSAwOwotICAgIGludCBzeSA9IDA7CisgICAgRmxv
YXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5t
YXBQb2ludChwb2ludEluUGFyZW50KTsKIAotICAgIC8vIFJlc3BlY3QgcGFyZW50IHRyYW5zbGF0
aW9uIG9mZnNldCBmb3Igbm9uLW91dGVybW9zdCA8c3ZnPiBlbGVtZW50cy4KLSAgICAvLyBPdXRl
cm1vc3QgPHN2Zz4gZWxlbWVudCBpcyBoYW5kbGVkIGJ5IFJlbmRlclNWR1Jvb3QuCi0gICAgaWYg
KG5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewotICAgICAgICBzeCA9IF90
eDsKLSAgICAgICAgc3kgPSBfdHk7CisgICAgLy8gUmVzcGVjdCB0aGUgdmlld3BvcnQgY2xpcCAo
d2hpY2ggaXMgaW4gcGFyZW50IGNvb3JkcykuICBTVkcgZG9lcyBub3Qgc3VwcG9ydCBzZXBhcmF0
ZSB4L3kgb3ZlcmZsb3cgcnVsZXMuCisgICAgaWYgKHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9I
SURERU4pIHsKKyAgICAgICAgQVNTRVJUKHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9ISURERU4p
OworICAgICAgICBpZiAoIXZpZXdwb3J0KCkuY29udGFpbnMocG9pbnRJblBhcmVudCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgX3gg
LSBzeCwgX3kgLSBzeSwgX3R4LCBfdHksIGhpdFRlc3RBY3Rpb24pKSB7Ci0gICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSBfdHgsIF95IC0gX3R5KSk7
CisgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBv
aW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lci5oCmluZGV4IDdkMTEyNzkuLjVkZGVkYjIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaApAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwogCi0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKIAogICAg
IHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNv
bnN0OwogCg==
</data>
<flag name="review"
          id="14937"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>