<?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>21870</bug_id>
          
          <creation_ts>2008-10-24 14:32:41 -0700</creation_ts>
          <short_desc>[Transforms] event.offsetX and offsetY are wrong for transformed elements</short_desc>
          <delta_ts>2008-11-06 10:42:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>21941</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>hyatt</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96588</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 14:32:41 -0700</bug_when>
    <thetext>event.offsetX and offsetY (which are supposed to be relative to the target element are not computed correctly for transformed elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96589</commentid>
    <comment_count>1</comment_count>
      <attachid>24653</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 14:33:02 -0700</bug_when>
    <thetext>Created attachment 24653
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96590</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 14:34:09 -0700</bug_when>
    <thetext>Note that this breaks some event handling on transformed sliders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96635</commentid>
    <comment_count>3</comment_count>
      <attachid>24668</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 21:30:34 -0700</bug_when>
    <thetext>Created attachment 24668
WIP patch

Here&apos;s a first cut that adds two new methods to RenderObject:

+    virtual bool objectPointToAbsoluteCoords(FloatPoint&amp;, bool fixed = false) const;
+    virtual bool absolutePointToObjectCoords(FloatPoint&amp;, bool fixed = false) const;

to map points to and from absolute coords, taking transforms into account.

Dave, does this look like a reasonable approach?

I should note that with this patch, a rotated &lt;input type=&quot;range&quot;&gt; works perfectly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96643</commentid>
    <comment_count>4</comment_count>
      <attachid>24670</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 23:03:37 -0700</bug_when>
    <thetext>Created attachment 24670
Patch

Add two new methods to RenderObject:
+    virtual bool objectPointToAbsoluteCoords(FloatPoint&amp;, bool fixed = false) const;
+    virtual bool absolutePointToObjectCoords(FloatPoint&amp;, bool fixed = false) const;

which map points between RenderObject and absolute coords taking transforms into account.

Factor some RenderBox code into a new offsetFromContainer() method, now called in 3 places.

Call absolutePointToObjectCoords() when setting offsetX, offsetY in mouse events.

Add some comments, and a convenience expand() method on IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96645</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 23:05:01 -0700</bug_when>
    <thetext>Hmm, I think offsetX/offsetY will be wrong when there is shadow content</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96646</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 23:05:46 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Hmm, I think offsetX/offsetY will be wrong when there is shadow content

No, it&apos;s OK. MouseRelatedEvent::receivedTarget() gets the renderer from the target element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96753</commentid>
    <comment_count>7</comment_count>
      <attachid>24670</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-27 12:08:33 -0700</bug_when>
    <thetext>Comment on attachment 24670
Patch

It seems like absolutePosition could just be patched rather than adding new code...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97760</commentid>
    <comment_count>8</comment_count>
      <attachid>24928</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-05 18:03:55 -0800</bug_when>
    <thetext>Created attachment 24928
Implement absoluteToLocal, fix event.offsetX/offsetY</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97761</commentid>
    <comment_count>9</comment_count>
      <attachid>24929</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-05 18:04:31 -0800</bug_when>
    <thetext>Created attachment 24929
Testcase in the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97828</commentid>
    <comment_count>10</comment_count>
      <attachid>24928</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-11-06 10:12:40 -0800</bug_when>
    <thetext>Comment on attachment 24928
Implement absoluteToLocal, fix event.offsetX/offsetY

r=me (comments given on IRC).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97831</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-06 10:15:26 -0800</bug_when>
    <thetext>TODO: assert about LayoutState in absoluteToLocal()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97837</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-06 10:42:47 -0800</bug_when>
    <thetext>Committed r38186
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderTableCell.cpp
	M	WebCore/rendering/RenderBox.h
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderBox.cpp
	M	WebCore/rendering/RenderView.cpp
	M	WebCore/rendering/RenderView.h
	M	WebCore/rendering/RenderTableCell.h
	M	WebCore/dom/MouseRelatedEvent.cpp
	M	WebCore/ChangeLog
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/events/offsetX-offsetY.html
	A	LayoutTests/fast/events/offsetX-offsetY-expected.txt
r38186 = 845c2633f46b1eaecab8595b53b2a1cdfb06b7e2 (trunk)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>24653</attachid>
            <date>2008-10-24 14:33:02 -0700</date>
            <delta_ts>2008-11-05 18:04:31 -0800</delta_ts>
            <desc>Testcase</desc>
            <filename>event-offsetxy.html</filename>
            <type>text/html</type>
            <size>1238</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+VGVzdCBldmVudC5vZmZzZXRY
IGFuZCBvZmZzZXRZPC90aXRsZT4KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3Jl
ZW4iPgogICAgLmJveCB7CiAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgIHdpZHRoOiAyMDBweDsK
ICAgICAgbWFyZ2luOiAyMHB4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OwogICAgfQog
ICAgLmJveDpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTU7CiAgICB9CiAgICAu
dHJhbnNmb3JtZWQgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMHB4LCA1
MHB4KTsKICAgIH0KICAgIAogICAgI3Jlc3VsdCB7CiAgICAgIG1hcmdpbi10b3A6IDYwcHg7CiAg
ICB9CiAgPC9zdHlsZT4KICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0i
dXRmLTgiPgogICAgCiAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKGUpCiAgICB7CiAgICAgIHZhciBy
ZXN1bHRCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7CiAgICAgIHZhciBv
ZmZzZXRzID0gJ2VsZW1lbnQgaWQ6ICcgKyBlLnRhcmdldC5pZCArICcgb2Zmc2V0WDogJyArIGUu
b2Zmc2V0WCArICcgb2Zmc2V0WTogJyArIGUub2Zmc2V0WTsKICAgICAgcmVzdWx0Qm94LmlubmVy
SFRNTCA9IG9mZnNldHM7CiAgICB9CiAgICBmdW5jdGlvbiBzZXR1cCgpCiAgICB7CiAgICAgIHZh
ciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94Jyk7CiAgICAgIAogICAgICBkb2N1
bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlbW92ZWQsIGZhbHNl
KTsKICAgIH0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2V0dXAsIGZhbHNl
KQogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKPGRpdiBpZD0iYm94IiBjbGFzcz0iYm94Ij4K
PC9kaXY+Cgo8ZGl2IGlkPSJib3gyIiBjbGFzcz0idHJhbnNmb3JtZWQgYm94Ij4KPC9kaXY+Cgo8
ZGl2IGlkPSJyZXN1bHQiPgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24668</attachid>
            <date>2008-10-24 21:30:34 -0700</date>
            <delta_ts>2008-10-24 23:03:37 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>21870_patch1.txt</filename>
            <type>text/plain</type>
            <size>14430</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcCBiL1dlYkNvcmUv
ZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcA1pbmRleCA1YTZjMWY3Li43YTQzMDI0IDEwMDY0NA0t
LS0gYS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHANKysrIGIvV2ViQ29yZS9kb20v
TW91c2VSZWxhdGVkRXZlbnQuY3BwDUBAIC0xMzMsMTAgKzEzMywxMCBAQCB2b2lkIE1vdXNlUmVs
YXRlZEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpDSAgICAgLy8gQWRqdXN0IG9mZnNldFgvWSB0byBi
ZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0J3MgcG9zaXRpb24uDSAgICAgaWYgKCFpc1NpbXVsYXRl
ZCgpKSB7DSAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSB0YXJnLT5yZW5kZXJlcigpKSB7
DS0gICAgICAgICAgICBpbnQgcngsIHJ5Ow0tICAgICAgICAgICAgaWYgKHItPmFic29sdXRlUG9z
aXRpb24ocngsIHJ5KSkgew0tICAgICAgICAgICAgICAgIG1fb2Zmc2V0WCAtPSByeDsNLSAgICAg
ICAgICAgICAgICBtX29mZnNldFkgLT0gcnk7DSsgICAgICAgICAgICBGbG9hdFBvaW50IG9iamVj
dFBvaW50KG1fcGFnZVgsIG1fcGFnZVkpOw0rICAgICAgICAgICAgaWYgKHItPmFic29sdXRlUG9p
bnRUb09iamVjdENvb3JkcyhvYmplY3RQb2ludCkpIHsNKyAgICAgICAgICAgICAgICBtX29mZnNl
dFggPSBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdFBvaW50LngoKSk7DSsgICAgICAgICAgICAgICAg
bV9vZmZzZXRZID0gc3RhdGljX2Nhc3Q8aW50PihvYmplY3RQb2ludC55KCkpOw0gICAgICAgICAg
ICAgfQ0gICAgICAgICB9DSAgICAgfQ1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHANaW5kZXggNGQxNTM0
MS4uZWI4MTgzNiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcA0r
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwDUBAIC05OTQsNiArOTk0LDggQEAg
SW50U2l6ZSBSZW5kZXJCb3g6Om9mZnNldEZvclBvc2l0aW9uZWRJbkNvbnRhaW5lcihSZW5kZXJP
YmplY3QqIGNvbnRhaW5lcikgY29uc3QNIGJvb2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0aW9u
KGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKSBjb25zdA0gew0gICAgIGlmIChSZW5k
ZXJWaWV3KiB2ID0gdmlldygpKSB7DSsgICAgICAgIC8vIElmIHdlIGhhdmUgbGF5b3V0U3RhdGUs
IHRoZW4gdXNlIHRoYXQgcmF0aGVyIHRoYW4gd2Fsa2luZyBhbGxsIHRoZQ0rICAgICAgICAvLyB3
YXkgdXAgdGhlIHRyZWUuDSAgICAgICAgIGlmIChMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2
LT5sYXlvdXRTdGF0ZSgpKSB7DSAgICAgICAgICAgICB4UG9zID0gbGF5b3V0U3RhdGUtPm1fb2Zm
c2V0LndpZHRoKCkgKyBtX3g7DSAgICAgICAgICAgICB5UG9zID0gbGF5b3V0U3RhdGUtPm1fb2Zm
c2V0LmhlaWdodCgpICsgbV95Ow1AQCAtMTA0NCw2ICsxMDQ2LDEwMyBAQCBib29sIFJlbmRlckJv
eDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29u
c3QNICAgICB9DSB9DSANK2Jvb2wgUmVuZGVyQm94OjpvYmplY3RQb2ludFRvQWJzb2x1dGVDb29y
ZHMoRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgZml4ZWQpIGNvbnN0DSt7DSsgICAgUmVuZGVyT2Jq
ZWN0KiBvID0gY29udGFpbmVyKCk7DSsgICAgaWYgKG8pIHsNKyAgICAgICAgLy8gVW5kbyB0aGUg
ZWZmZWN0cyBvZiB0aGUgdHJhbnNmb3JtLCBpZiBhbnkNKyAgICAgICAgaWYgKG1fbGF5ZXIgJiYg
bV9sYXllci0+dHJhbnNmb3JtKCkpDSsgICAgICAgICAgICBwb2ludCA9IG1fbGF5ZXItPnRyYW5z
Zm9ybSgpLT5tYXBQb2ludChwb2ludCk7DSsNKyAgICAgICAgLy8gVGFrZSByZWxhdGl2ZSBwb3Np
dGlvbmluZyBpbnRvIGFjY291bnQNKyAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQ0rICAg
ICAgICAgICAgcG9pbnQubW92ZShyZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpLCByZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0WSgpKTsNKw0rICAgICAgICBpZiAoIWlzSW5saW5lKCkgfHwgaXNSZXBsYWNl
ZCgpKSB7DSsgICAgICAgICAgICAvLyBBZGQgb2Zmc2V0IGZyb20gY29udGFpbmVyDSsgICAgICAg
ICAgICBSZW5kZXJCbG9jayogY2I7DSsgICAgICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAm
JiBzdHlsZSgpLT5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9z
aXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uDSsgICAgICAgICAgICAgICAgICAgICYmIChjYiA9IHN0
YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obykpLT5oYXNDb2x1bW5zKCkpIHsNKyAgICAgICAgICAg
ICAgICBJbnRSZWN0IHJlY3QobV94LCBtX3ksIDEsIDEpOw0rICAgICAgICAgICAgICAgIGNiLT5h
ZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZWN0KTsNKyAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKHJl
Y3QueCgpLCByZWN0LnkoKSk7DSsgICAgICAgICAgICB9IGVsc2UNKyAgICAgICAgICAgICAgICBw
b2ludC5tb3ZlKG1feCwgbV95KTsNKyAgICAgICAgfQ0rDSsgICAgICAgIC8vIFRha2Ugb3ZlcmZs
b3cgc2Nyb2xsaW5nIGludG8gYWNjb3VudA0rICAgICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlw
KCkpIHsNKyAgICAgICAgICAgIGludCB4T2Zmc2V0ID0gMCwgeU9mZnNldCA9IDA7DSsgICAgICAg
ICAgICBvLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh4T2Zmc2V0LCB5T2Zmc2V0KTsN
KyAgICAgICAgICAgIHBvaW50Lm1vdmUoeE9mZnNldCwgeU9mZnNldCk7DSsgICAgICAgIH0NKw0r
ICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQ0rICAgICAg
ICAgICAgZml4ZWQgPSB0cnVlOw0rDSsgICAgICAgIC8vIEFkZCBib3JkZXJUb3BFeHRyYSgpIChz
ZWUgY29tbWVudCBmb3IgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoKSkNKyAgICAgICAgcG9p
bnQubW92ZSgwLCBvLT5ib3JkZXJUb3BFeHRyYSgpKTsNKw0rICAgICAgICBpZiAoc3R5bGUoKS0+
cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKSB7DSsgICAgICAgICAgICAvLyBBY2NvdW50
IGZvciBhYnNvbHV0ZSBwb3NpdGlvbmluZw0rICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBv
ZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIobyk7DSsgICAgICAgICAgICBwb2ludC5tb3Zl
KG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOw0rICAgICAgICB9DSsgICAgICAgIA0r
ICAgICAgICAvLyBDYWxsIGNvbnRhaW5lcg0rICAgICAgICByZXR1cm4gby0+b2JqZWN0UG9pbnRU
b0Fic29sdXRlQ29vcmRzKHBvaW50LCBmaXhlZCk7DSsgICAgfQ0rICAgIA0rICAgIHBvaW50ID0g
RmxvYXRQb2ludCgpOw0rICAgIHJldHVybiBmYWxzZTsNK30NKw0rYm9vbCBSZW5kZXJCb3g6OmFi
c29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBmaXhlZCkg
Y29uc3QNK3sNKyAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQ0r
ICAgICAgICBmaXhlZCA9IHRydWU7DSsNKyAgICAvLyBTaW1pbGFyIGxvZ2ljIHRvIGFic29sdXRl
UG9zaXRpb24oKSwgYnV0IHdlJ3JlIHN1YnRyYWN0aW5nIG91dA0rICAgIC8vIHRoZSBvZmZzZXRz
IHRvIGxlYXZlIHRoZSBwb2ludCBpbiB0aGUgY29vcmRzIG9mIHRoZSByZW5kZXJlci4NKyAgICBS
ZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsNKyAgICBpZiAobyAmJiBvLT5hYnNvbHV0ZVBv
aW50VG9PYmplY3RDb29yZHMocG9pbnQsIGZpeGVkKSkgew0rICAgICAgICBwb2ludC5tb3ZlKDAs
IC1vLT5ib3JkZXJUb3BFeHRyYSgpKTsNKyAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkg
PT0gQWJzb2x1dGVQb3NpdGlvbikgew0rICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBvZmZz
ZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIobyk7DSsgICAgICAgICAgICBwb2ludC5tb3ZlKC1v
ZmZzZXQud2lkdGgoKSwgLW9mZnNldC5oZWlnaHQoKSk7DSsgICAgICAgIH0NKw0rICAgICAgICBp
ZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsNKyAgICAgICAgICAgIGludCB4T2Zmc2V0ID0gMCwg
eU9mZnNldCA9IDA7DSsgICAgICAgICAgICBvLT5sYXllcigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNl
dCh4T2Zmc2V0LCB5T2Zmc2V0KTsNKyAgICAgICAgICAgIHBvaW50Lm1vdmUoLXhPZmZzZXQsIC15
T2Zmc2V0KTsNKyAgICAgICAgfQ0rICAgICAgICANKyAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8
IGlzUmVwbGFjZWQoKSkgew0rICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiOw0rICAgICAgICAg
ICAgaWYgKG8tPmlzQmxvY2tGbG93KCkgJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0
ZVBvc2l0aW9uICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbg0rICAgICAg
ICAgICAgICAgICAgICAmJiAoY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG8pKS0+aGFz
Q29sdW1ucygpKSB7DSsgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0KG1feCwgbV95LCAxLCAx
KTsNKyAgICAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7DSsgICAg
ICAgICAgICAgICAgcG9pbnQubW92ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7DSsgICAgICAgICAg
ICB9IGVsc2UNKyAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKC1tX3gsIC1tX3kpOw0rICAgICAg
ICB9DSsNKyAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQ0rICAgICAgICAgICAgcG9pbnQu
bW92ZSgtcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKSwgLXJlbGF0aXZlUG9zaXRpb25PZmZzZXRZ
KCkpOw0rDSsgICAgICAgIC8vIE1hcCB0aHJvdWdoIHRoZSBpbnZlcnNlIG9mIHRoZSB0cmFuc2Zv
cm0sIGlmIHRoZXJlIGlzIG9uZQ0rICAgICAgICBpZiAobV9sYXllciAmJiBtX2xheWVyLT50cmFu
c2Zvcm0oKSkNKyAgICAgICAgICAgIHBvaW50ID0gbV9sYXllci0+dHJhbnNmb3JtKCktPmludmVy
c2UoKS5tYXBQb2ludChwb2ludCk7DSsNKyAgICAgICAgcmV0dXJuIHRydWU7DSsgICAgfQ0rICAg
IA0rICAgIHBvaW50ID0gRmxvYXRQb2ludCgpOw0rICAgIHJldHVybiBmYWxzZTsNK30NKw0gdm9p
ZCBSZW5kZXJCb3g6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCAvKmlzUm9v
dExpbmVCb3gqLykNIHsNICAgICBpZiAobV9pbmxpbmVCb3hXcmFwcGVyKSB7DWRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oDWluZGV4IGFhOWJhYjcuLjI1YmFjZTYgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oDUBAIC01
MSw2ICs1MSw5IEBAIHB1YmxpYzoNIA0gICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9u
KGludCYgeCwgaW50JiB5LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Ow0gDSsgICAgdmlydHVh
bCBib29sIG9iamVjdFBvaW50VG9BYnNvbHV0ZUNvb3JkcyhGbG9hdFBvaW50JiwgYm9vbCBmaXhl
ZCA9IGZhbHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb2ludFRvT2JqZWN0
Q29vcmRzKEZsb2F0UG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Ow0rDSAgICAgdmly
dHVhbCBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQ0gICAgIHZpcnR1YWwgaW50IHlQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3k7IH0NICAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zKGludCB4
LCBpbnQgeSk7DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcA1pbmRleCAwYzg1MGM2Li43MDg2
NjExIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwDSsrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHANQEAgLTIzODksNiArMjM4OSw0MCBA
QCBib29sIFJlbmRlck9iamVjdDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBv
cywgYm9vbCBmKSBjb25zdA0gICAgIH0NIH0NIA0rYm9vbCBSZW5kZXJPYmplY3Q6Om9iamVjdFBv
aW50VG9BYnNvbHV0ZUNvb3JkcyhGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBmaXhlZCkgY29uc3QN
K3sNKyAgICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsNKyAgICBpZiAobykgew0rICAgICAg
ICBvLT5vYmplY3RQb2ludFRvQWJzb2x1dGVDb29yZHMocG9pbnQsIGZpeGVkKTsNKyAgICAgICAg
cG9pbnQubW92ZSgwLCAtby0+Ym9yZGVyVG9wRXh0cmEoKSk7DSsgICAgICAgIGlmIChvLT5oYXNP
dmVyZmxvd0NsaXAoKSkgew0rICAgICAgICAgICAgaW50IHhPZmZzZXQgPSAwLCB5T2Zmc2V0ID0g
MDsNKyAgICAgICAgICAgIG8tPmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHhPZmZzZXQs
IHlPZmZzZXQpOw0rICAgICAgICAgICAgcG9pbnQubW92ZSgteE9mZnNldCwgLXlPZmZzZXQpOw0r
ICAgICAgICB9DSsgICAgICAgIHJldHVybiB0cnVlOw0rICAgIH0NKw0rICAgIHJldHVybiBmYWxz
ZTsNK30NKw0rYm9vbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhG
bG9hdFBvaW50JiBwb2ludCwgYm9vbCBmaXhlZCkgY29uc3QNK3sNKyAgICBSZW5kZXJPYmplY3Qq
IG8gPSBwYXJlbnQoKTsNKyAgICBpZiAobykgew0rICAgICAgICBvLT5hYnNvbHV0ZVBvaW50VG9P
YmplY3RDb29yZHMocG9pbnQsIGZpeGVkKTsNKyAgICAgICAgcG9pbnQubW92ZSgwLCAtby0+Ym9y
ZGVyVG9wRXh0cmEoKSk7DSsgICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkgew0rICAg
ICAgICAgICAgaW50IHhPZmZzZXQgPSAwLCB5T2Zmc2V0ID0gMDsNKyAgICAgICAgICAgIG8tPmxh
eWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHhPZmZzZXQsIHlPZmZzZXQpOw0rICAgICAgICAg
ICAgcG9pbnQubW92ZSgteE9mZnNldCwgLXlPZmZzZXQpOw0rICAgICAgICB9DSsgICAgICAgIHJl
dHVybiB0cnVlOw0rICAgIH0NKyAgICANKyAgICByZXR1cm4gdHJ1ZTsNK30NKw0gSW50UmVjdCBS
ZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zm
c2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkNIHsNICAgIGlmIChleHRyYVdpZHRoVG9F
bmRPZkxpbmUpDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oDWluZGV4IGRmNTZkOTYuLjI0NDhkYTEg
MTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oDSsrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oDUBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIENvbG9y
Ow0gY2xhc3MgRG9jdW1lbnQ7DSBjbGFzcyBFbGVtZW50Ow0gY2xhc3MgRXZlbnQ7DStjbGFzcyBG
bG9hdFBvaW50Ow0gY2xhc3MgRmxvYXRSZWN0Ow0gY2xhc3MgRnJhbWVWaWV3Ow0gY2xhc3MgSFRN
TEFyZWFFbGVtZW50Ow1AQCAtNTYxLDcgKzU2Miw5IEBAIHB1YmxpYzoNIA0gICAgIC8vIGNvbnRl
bnQgYXJlYSAoYm94IG1pbnVzIHBhZGRpbmcvYm9yZGVyKQ0gICAgIEludFJlY3QgY29udGVudEJv
eCgpIGNvbnN0Ow0rICAgIC8vIGFic29sdXRlQ29udGVudEJveCgpIGRvZXMgbm90IHRha2UgdHJh
bnNmb3JtcyBpbnRvIGFjY291bnQNICAgICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNv
bnN0Ow0rDSAgICAgaW50IGNvbnRlbnRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudFdpZHRo
KCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCk7IH0NICAgICBpbnQgY29udGVudEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudEhlaWdodCgpIC0gcGFkZGluZ1RvcCgpIC0gcGFk
ZGluZ0JvdHRvbSgpOyB9DSANQEAgLTU4MCwxMiArNTgzLDE0IEBAIHB1YmxpYzoNICAgICB2aXJ0
dWFsIGludCB4UG9zKCkgY29uc3QgeyByZXR1cm4gMDsgfQ0gICAgIHZpcnR1YWwgaW50IHlQb3Mo
KSBjb25zdCB7IHJldHVybiAwOyB9DSANLSAgICAvLyBjYWxjdWxhdGUgY2xpZW50IHBvc2l0aW9u
IG9mIGJveA0rICAgIC8vIENhbGN1bGF0ZSBjbGllbnQgcG9zaXRpb24gb2YgYm94IChpZ25vcmVz
IHRyYW5zZm9ybXMpLiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlDSsgICAg
Ly8gY29tcHV0ZWQsIGZhbHNlIG90aGVyd2lzZSAod2hlbiB0aGUgb2JqZWN0IGlzIHVucm9vdGVk
KS4NICAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9v
bCBmaXhlZCA9IGZhbHNlKSBjb25zdDsNIA0gICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0
byBkZWFsIHdpdGggdGhlIGV4dHJhIHRvcCBzcGFjZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBj
ZWxscyAoY2FsbGVkIGJvcmRlclRvcEV4dHJhKS4NICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhl
IGNlbGwgZG8gbm90IGZhY3RvciB0aGlzIHNwYWNlIGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBp
bi4gIEFueSBjb2RlIHRoYXQgd2FudHMgdG8NICAgICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0
aGUgY29udGVudHMgb2YgYSBjZWxsIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBh
YnNvbHV0ZVBvc2l0aW9uLg0rICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudC4NICAgICBib29sIGFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50
KGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0DSAgICAgew0g
ICAgICAgICBib29sIHJlc3VsdCA9IGFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcywgZml4ZWQp
Ow1AQCAtNTkzLDYgKzU5OCwxMiBAQCBwdWJsaWM6DSAgICAgICAgIHJldHVybiByZXN1bHQ7DSAg
ICAgfQ0gDSsgICAgLy8gTWFwIHBvaW50cyBiZXR3ZWVuIHRoZSBjb29yZGluYXRlIHNwYWNlIG9m
IHRoaXMgUmVuZGVyT2JqZWN0DSsgICAgLy8gYW5kIHRoZSByb290LCB0YWtpbmcgdHJhbnNmb3Jt
cyBpbnRvIGFjY291bnQuDSsgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBSZW5kZXJPYmplY3Qg
aXMgdW5yb290ZWQuDSsgICAgdmlydHVhbCBib29sIG9iamVjdFBvaW50VG9BYnNvbHV0ZUNvb3Jk
cyhGbG9hdFBvaW50JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIGJv
b2wgYWJzb2x1dGVQb2ludFRvT2JqZWN0Q29vcmRzKEZsb2F0UG9pbnQmLCBib29sIGZpeGVkID0g
ZmFsc2UpIGNvbnN0Ow0rDSAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91dCBtYXJn
aW5zIGJ1dCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzDSAgICAgdmlydHVhbCBpbnQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiAwOyB9DSAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQ1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHANaW5kZXggN2Q4YjBiMC4u
NzllZjNjMyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcA0r
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwDUBAIC0yNyw2ICsyNyw3IEBA
DSAjaW5jbHVkZSAiRXZlbnQuaCINICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCINICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiDSsjaW5jbHVkZSAiRmxvYXRSZWN0LmgiDSAjaW5jbHVkZSAiRnJhbWUu
aCINICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiDSAjaW5jbHVkZSAiSFRNTERpdkVsZW1l
bnQuaCINQEAgLTI1Nyw3ICsyNTgsMjEgQEAgYm9vbCBSZW5kZXJTbGlkZXI6Om1vdXNlRXZlbnRJ
c0luVGh1bWIoTW91c2VFdmVudCogZXZ0KQ0gICAgIGlmICghbV90aHVtYiB8fCAhbV90aHVtYi0+
cmVuZGVyZXIoKSkNICAgICAgICAgcmV0dXJuIGZhbHNlOw0gIA0tICAgIEludFJlY3QgdGh1bWJC
b3VuZHMgPSBtX3RodW1iLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOw0r
ICAgIC8vSW50UmVjdCB0aHVtYkJvdW5kcyA9IG1fdGh1bWItPnJlbmRlcmVyKCktPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCk7DSsgICAgLy8gVGVtcG9yYXJ5IGNvZGUgdG8gdGVzdCBvYmplY3RQ
b2ludFRvQWJzb2x1dGVDb29yZHMoKQ0rICAgIEZsb2F0UG9pbnQgdGh1bWJUb3BMZWZ0KG1fdGh1
bWItPnJlbmRlcmVyKCktPmNvbnRlbnRCb3goKS50b3BMZWZ0KCkpOw0rICAgIEZsb2F0UG9pbnQg
dGh1bWJCb3R0b21SaWdodChtX3RodW1iLT5yZW5kZXJlcigpLT5jb250ZW50Qm94KCkuYm90dG9t
UmlnaHQoKSk7DSsNKyAgICBtX3RodW1iLT5yZW5kZXJlcigpLT5vYmplY3RQb2ludFRvQWJzb2x1
dGVDb29yZHModGh1bWJUb3BMZWZ0KTsNKyAgICBtX3RodW1iLT5yZW5kZXJlcigpLT5vYmplY3RQ
b2ludFRvQWJzb2x1dGVDb29yZHModGh1bWJCb3R0b21SaWdodCk7DSsgICAgDSsgICAgRmxvYXRS
ZWN0IHRodW1iQm91bmRzKHRodW1iVG9wTGVmdCwgdGh1bWJCb3R0b21SaWdodCAtIHRodW1iVG9w
TGVmdCk7DSsgICAgDSsgICAgZnByaW50ZihzdGRlcnIsICJFdmVudCB4PSVkLCB5PSVkOyB0b3Ag
bGVmdDogJWYsICVmLCBib3R0b20gcmlnaHQgJWYsICVmXG4iLA0rICAgICAgICBldnQtPnBhZ2VY
KCksIGV2dC0+cGFnZVkoKSwNKyAgICAgICAgdGh1bWJUb3BMZWZ0LngoKSwgdGh1bWJUb3BMZWZ0
LnkoKSwNKyAgICAgICAgdGh1bWJCb3R0b21SaWdodC54KCksIHRodW1iQm90dG9tUmlnaHQueSgp
KTsNKyAgICANICAgICByZXR1cm4gdGh1bWJCb3VuZHMuY29udGFpbnMoZXZ0LT5wYWdlWCgpLCBl
dnQtPnBhZ2VZKCkpOw0gfQ0gDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcA1pbmRl
eCA5ZjQ0YjY1Li40MDg3NjkwIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAN
QEAgLTIwNyw2ICsyMDcsMjUgQEAgYm9vbCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlUG9zaXRp
b24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQpIGNvbnN0DSAgICAgcmV0dXJuIHJl
c3VsdDsNIH0NIA0rYm9vbCBSZW5kZXJUYWJsZUNlbGw6Om9iamVjdFBvaW50VG9BYnNvbHV0ZUNv
b3JkcyhGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBmaXhlZCkgY29uc3QNK3sNKyAgICBpZiAocGFy
ZW50KCkpDSsgICAgICAgIC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2Us
IHNvIHVuZG8gdGhlIHBhcmVudCBvZmZzZXQNKyAgICAgICAgcG9pbnQubW92ZSgtcGFyZW50KCkt
PnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOw0rDSsgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpv
YmplY3RQb2ludFRvQWJzb2x1dGVDb29yZHMocG9pbnQsIGZpeGVkKTsNK30NKw0rYm9vbCBSZW5k
ZXJUYWJsZUNlbGw6OmFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9hdFBvaW50JiBwb2lu
dCwgYm9vbCBmaXhlZCkgY29uc3QNK3sNKyAgICBib29sIHJlc3VsdCA9IFJlbmRlckJsb2NrOjph
YnNvbHV0ZVBvaW50VG9PYmplY3RDb29yZHMocG9pbnQsIGZpeGVkKTsNKyAgICBpZiAocGFyZW50
KCkpDSsgICAgICAgIC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNv
IHVuZG8gdGhlIHBhcmVudCBvZmZzZXQNKyAgICAgICAgcG9pbnQubW92ZShwYXJlbnQoKS0+eFBv
cygpLCBwYXJlbnQoKS0+eVBvcygpKTsNKw0rICAgIHJldHVybiByZXN1bHQ7DSt9DSsNIGludCBS
ZW5kZXJUYWJsZUNlbGw6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCAvKmZpcnN0TGluZSovLCBib29s
IC8qaXNSb290TGluZUJveCovKSBjb25zdA0gew0gICAgIC8vIDxodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDA3L0NSLUNTUzIxLTIwMDcwNzE5L3RhYmxlcy5odG1sI2hlaWdodC1sYXlvdXQ+OiBUaGUg
YmFzZWxpbmUgb2YgYSBjZWxsIGlzIHRoZSBiYXNlbGluZSBvZg1kaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuaA1pbmRleCAyNTI1N2JiLi41YjU1N2JhIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuaA1AQCAtMTAzLDYgKzEwMyw5IEBAIHB1YmxpYzoNICAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7
DSAgICAgdmlydHVhbCBib29sIGFic29sdXRlUG9zaXRpb24oaW50JiB4LCBpbnQmIHksIGJvb2wg
Zml4ZWQgPSBmYWxzZSkgY29uc3Q7DSANKyAgICB2aXJ0dWFsIGJvb2wgb2JqZWN0UG9pbnRUb0Fi
c29sdXRlQ29vcmRzKEZsb2F0UG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Ow0rICAg
IHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvaW50VG9PYmplY3RDb29yZHMoRmxvYXRQb2ludCYsIGJv
b2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7DSsNICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0
aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBj
b25zdDsNIA0gICAgIHZvaWQgc2V0Q2VsbFRvcEV4dHJhKGludCBwKSB7IG1fdG9wRXh0cmEgPSBw
OyB9DWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwDWluZGV4IDgxMTU3YTguLjYwMGYxZDMgMTAwNjQ0
DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwDSsrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwDUBAIC0xNDEsNiArMTQxLDIyIEBAIGJvb2wgUmVuZGVyVmll
dzo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29u
c3QNICAgICByZXR1cm4gdHJ1ZTsNIH0NIA0rYm9vbCBSZW5kZXJWaWV3OjpvYmplY3RQb2ludFRv
QWJzb2x1dGVDb29yZHMoRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgZml4ZWQpIGNvbnN0DSt7DSsg
ICAgaWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3KQ0rICAgICAgICBwb2ludC5tb3ZlKG1fZnJhbWVW
aWV3LT5zY3JvbGxYKCksIG1fZnJhbWVWaWV3LT5zY3JvbGxZKCkpOw0rDSsgICAgcmV0dXJuIHRy
dWU7DSt9DSsNK2Jvb2wgUmVuZGVyVmlldzo6YWJzb2x1dGVQb2ludFRvT2JqZWN0Q29vcmRzKEZs
b2F0UG9pbnQmIHBvaW50LCBib29sIGZpeGVkKSBjb25zdA0rew0rICAgIGlmIChmaXhlZCAmJiBt
X2ZyYW1lVmlldykNKyAgICAgICAgcG9pbnQubW92ZSgtbV9mcmFtZVZpZXctPnNjcm9sbFgoKSwg
LW1fZnJhbWVWaWV3LT5zY3JvbGxZKCkpOw0rDSsgICAgcmV0dXJuIHRydWU7DSt9DSsNIHZvaWQg
UmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQ0g
ew0gICAgIC8vIElmIHdlIGV2ZXIgcmVxdWlyZSBsYXlvdXQgYnV0IHJlY2VpdmUgYSBwYWludCBh
bnl3YXksIHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZy4NZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaA1pbmRleCBiNDM3Y2QxLi5kMjU5NmRjIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgNKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oDUBAIC00
NSw2ICs0NSw5IEBAIHB1YmxpYzoNICAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOw0gICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOw0gICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0
ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0
Ow0rDSsgICAgdmlydHVhbCBib29sIG9iamVjdFBvaW50VG9BYnNvbHV0ZUNvb3JkcyhGbG9hdFBv
aW50JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1
dGVQb2ludFRvT2JqZWN0Q29vcmRzKEZsb2F0UG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0Ow0gICAgIA0gICAgIGludCBkb2NIZWlnaHQoKSBjb25zdDsNICAgICBpbnQgZG9jV2lkdGgo
KSBjb25zdDsN
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24670</attachid>
            <date>2008-10-24 23:03:37 -0700</date>
            <delta_ts>2008-11-05 18:03:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>21870_patch2.txt</filename>
            <type>text/plain</type>
            <size>14974</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcCBiL1dlYkNvcmUv
ZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcA1pbmRleCA1YTZjMWY3Li43YTQzMDI0IDEwMDY0NA0t
LS0gYS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHANKysrIGIvV2ViQ29yZS9kb20v
TW91c2VSZWxhdGVkRXZlbnQuY3BwDUBAIC0xMzMsMTAgKzEzMywxMCBAQCB2b2lkIE1vdXNlUmVs
YXRlZEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpDSAgICAgLy8gQWRqdXN0IG9mZnNldFgvWSB0byBi
ZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0J3MgcG9zaXRpb24uDSAgICAgaWYgKCFpc1NpbXVsYXRl
ZCgpKSB7DSAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSB0YXJnLT5yZW5kZXJlcigpKSB7
DS0gICAgICAgICAgICBpbnQgcngsIHJ5Ow0tICAgICAgICAgICAgaWYgKHItPmFic29sdXRlUG9z
aXRpb24ocngsIHJ5KSkgew0tICAgICAgICAgICAgICAgIG1fb2Zmc2V0WCAtPSByeDsNLSAgICAg
ICAgICAgICAgICBtX29mZnNldFkgLT0gcnk7DSsgICAgICAgICAgICBGbG9hdFBvaW50IG9iamVj
dFBvaW50KG1fcGFnZVgsIG1fcGFnZVkpOw0rICAgICAgICAgICAgaWYgKHItPmFic29sdXRlUG9p
bnRUb09iamVjdENvb3JkcyhvYmplY3RQb2ludCkpIHsNKyAgICAgICAgICAgICAgICBtX29mZnNl
dFggPSBzdGF0aWNfY2FzdDxpbnQ+KG9iamVjdFBvaW50LngoKSk7DSsgICAgICAgICAgICAgICAg
bV9vZmZzZXRZID0gc3RhdGljX2Nhc3Q8aW50PihvYmplY3RQb2ludC55KCkpOw0gICAgICAgICAg
ICAgfQ0gICAgICAgICB9DSAgICAgfQ1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRTaXplLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaA1pbmRl
eCA3MjQ1NDA4Li5hZjFjOTg5IDEwMDY0NA0tLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFNpemUuaA0rKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuaA1AQCAt
NjcsNiArNjcsOCBAQCBwdWJsaWM6DSANICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQgPD0gMDsgfQ0gDSsgICAgdm9pZCBleHBhbmQoaW50
IGhvcml6LCBpbnQgdmVydCkgeyBtX3dpZHRoICs9IGhvcml6OyBtX2hlaWdodCArPSB2ZXJ0OyB9
DSsgICAgDSAgICAgSW50U2l6ZSBleHBhbmRlZFRvKGNvbnN0IEludFNpemUmIG90aGVyKSBjb25z
dA0gICAgIHsNICAgICAgICAgcmV0dXJuIEludFNpemUobV93aWR0aCA+IG90aGVyLm1fd2lkdGgg
PyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwDWluZGV4IDRk
MTUzNDEuLjZmMTJjZjAgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcA1AQCAtOTkxLDkgKzk5MSw0
MiBAQCBJbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKFJl
bmRlck9iamVjdCogY29udGFpbmVyKSBjb25zdA0gICAgIHJldHVybiBvZmZzZXQ7DSB9DSANK0lu
dFNpemUgUmVuZGVyQm94OjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCogY29udGFp
bmVyT2JqZWN0KSBjb25zdA0rew0rICAgIEFTU0VSVChjb250YWluZXJPYmplY3QgPT0gY29udGFp
bmVyKCkpOw0rDSsgICAgSW50U2l6ZSBjb250YWluZXJPZmZzZXQ7DSsgICAgaWYgKHN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbikNKyAgICAgICAgY29udGFpbmVyT2Zmc2V0
ICs9IG9mZnNldEZvclBvc2l0aW9uZWRJbkNvbnRhaW5lcihjb250YWluZXJPYmplY3QpOw0rDSsg
ICAgaWYgKGNvbnRhaW5lck9iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsNKyAgICAgICAgaW50
IHhPZmZzZXQgPSAwLCB5T2Zmc2V0ID0gMDsNKyAgICAgICAgY29udGFpbmVyT2JqZWN0LT5sYXll
cigpLT5zdWJ0cmFjdFNjcm9sbE9mZnNldCh4T2Zmc2V0LCB5T2Zmc2V0KTsNKyAgICAgICAgY29u
dGFpbmVyT2Zmc2V0LmV4cGFuZCh4T2Zmc2V0LCB5T2Zmc2V0KTsNKyAgICB9DSsgICAgDSsgICAg
aWYgKCFpc0lubGluZSgpIHx8IGlzUmVwbGFjZWQoKSkgew0rICAgICAgICBSZW5kZXJCbG9jayog
Y2I7DSsgICAgICAgIGlmIChjb250YWluZXJPYmplY3QtPmlzQmxvY2tGbG93KCkgJiYgc3R5bGUo
KS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uICYmIHN0eWxlKCktPnBvc2l0aW9uKCkg
IT0gRml4ZWRQb3NpdGlvbg0rICAgICAgICAgICAgICAgICYmIChjYiA9IHN0YXRpY19jYXN0PFJl
bmRlckJsb2NrKj4oY29udGFpbmVyT2JqZWN0KSktPmhhc0NvbHVtbnMoKSkgew0rICAgICAgICAg
ICAgSW50UmVjdCByZWN0KG1feCwgbV95LCAxLCAxKTsNKyAgICAgICAgICAgIGNiLT5hZGp1c3RS
ZWN0Rm9yQ29sdW1ucyhyZWN0KTsNKyAgICAgICAgICAgIGNvbnRhaW5lck9mZnNldC5leHBhbmQo
cmVjdC54KCksIHJlY3QueSgpKTsNKyAgICAgICAgfSBlbHNlDSsgICAgICAgICAgICBjb250YWlu
ZXJPZmZzZXQuZXhwYW5kKG1feCwgbV95KTsNKyAgICB9DSsNKyAgICBpZiAoaXNSZWxQb3NpdGlv
bmVkKCkpDSsgICAgICAgIGNvbnRhaW5lck9mZnNldC5leHBhbmQocmVsYXRpdmVQb3NpdGlvbk9m
ZnNldFgoKSwgcmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKSk7DSsNKyAgICByZXR1cm4gY29udGFp
bmVyT2Zmc2V0Ow0rfQ0rDSBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQ
b3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QNIHsNICAgICBpZiAoUmVuZGVyVmlldyog
diA9IHZpZXcoKSkgew0rICAgICAgICAvLyBJZiB3ZSBoYXZlIGxheW91dFN0YXRlLCB0aGVuIHVz
ZSB0aGF0IHJhdGhlciB0aGFuIHdhbGtpbmcgYWxsbCB0aGUNKyAgICAgICAgLy8gd2F5IHVwIHRo
ZSB0cmVlLg0gICAgICAgICBpZiAoTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0
U3RhdGUoKSkgew0gICAgICAgICAgICAgeFBvcyA9IGxheW91dFN0YXRlLT5tX29mZnNldC53aWR0
aCgpICsgbV94Ow0gICAgICAgICAgICAgeVBvcyA9IGxheW91dFN0YXRlLT5tX29mZnNldC5oZWln
aHQoKSArIG1feTsNQEAgLTEwMDgsMzQgKzEwNDEsOSBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1
dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkgY29uc3QNIA0gICAg
IFJlbmRlck9iamVjdCogbyA9IGNvbnRhaW5lcigpOw0gICAgIGlmIChvICYmIG8tPmFic29sdXRl
UG9zaXRpb25Gb3JDb250ZW50KHhQb3MsIHlQb3MsIGZpeGVkKSkgew0tICAgICAgICBpZiAoc3R5
bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKSB7DS0gICAgICAgICAgICBJbnRT
aXplIG9mZnNldCA9IG9mZnNldEZvclBvc2l0aW9uZWRJbkNvbnRhaW5lcihvKTsNLSAgICAgICAg
ICAgIHhQb3MgKz0gb2Zmc2V0LndpZHRoKCk7DS0gICAgICAgICAgICB5UG9zICs9IG9mZnNldC5o
ZWlnaHQoKTsNLSAgICAgICAgfQ0tDS0gICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkN
LSAgICAgICAgICAgIG8tPmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHhQb3MsIHlQb3Mp
Ow0tDS0gICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCBpc1JlcGxhY2VkKCkpIHsNLSAgICAgICAg
ICAgIFJlbmRlckJsb2NrKiBjYjsNLSAgICAgICAgICAgIGlmIChvLT5pc0Jsb2NrRmxvdygpICYm
IHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiAmJiBzdHlsZSgpLT5wb3Np
dGlvbigpICE9IEZpeGVkUG9zaXRpb24NLSAgICAgICAgICAgICAgICAgICAgJiYgKGNiID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKSktPmhhc0NvbHVtbnMoKSkgew0tICAgICAgICAgICAg
ICAgIEludFJlY3QgcmVjdChtX3gsIG1feSwgMSwgMSk7DS0gICAgICAgICAgICAgICAgY2ItPmFk
anVzdFJlY3RGb3JDb2x1bW5zKHJlY3QpOw0tICAgICAgICAgICAgICAgIHhQb3MgKz0gcmVjdC54
KCk7DS0gICAgICAgICAgICAgICAgeVBvcyArPSByZWN0LnkoKTsNLSAgICAgICAgICAgIH0gZWxz
ZSB7DS0gICAgICAgICAgICAgICAgeFBvcyArPSBtX3g7DS0gICAgICAgICAgICAgICAgeVBvcyAr
PSBtX3k7DS0gICAgICAgICAgICB9DS0gICAgICAgIH0NLQ0tICAgICAgICBpZiAoaXNSZWxQb3Np
dGlvbmVkKCkpIHsNLSAgICAgICAgICAgIHhQb3MgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgo
KTsNLSAgICAgICAgICAgIHlQb3MgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKTsNLSAgICAg
ICAgfQ0tDSsgICAgICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRh
aW5lcihvKTsNKyAgICAgICAgeFBvcyArPSBjb250YWluZXJPZmZzZXQud2lkdGgoKTsNKyAgICAg
ICAgeVBvcyArPSBjb250YWluZXJPZmZzZXQuaGVpZ2h0KCk7DSAgICAgICAgIHJldHVybiB0cnVl
Ow0gICAgIH0gZWxzZSB7DSAgICAgICAgIHhQb3MgPSAwOw1AQCAtMTA0NCw2ICsxMDUyLDU3IEBA
IGJvb2wgUmVuZGVyQm94OjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBi
b29sIGZpeGVkKSBjb25zdA0gICAgIH0NIH0NIA0rYm9vbCBSZW5kZXJCb3g6Om9iamVjdFBvaW50
VG9BYnNvbHV0ZUNvb3JkcyhGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBmaXhlZCkgY29uc3QNK3sN
KyAgICBSZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsNKyAgICBpZiAobykgew0rICAgICAg
ICAvLyBVbmRvIHRoZSBlZmZlY3RzIG9mIHRoZSB0cmFuc2Zvcm0sIGlmIGFueQ0rICAgICAgICBp
ZiAobV9sYXllciAmJiBtX2xheWVyLT50cmFuc2Zvcm0oKSkNKyAgICAgICAgICAgIHBvaW50ID0g
bV9sYXllci0+dHJhbnNmb3JtKCktPm1hcFBvaW50KHBvaW50KTsNKw0rICAgICAgICAvLyBBZGQg
b2Zmc2V0IGZyb20gY29udGFpbmVyDSsgICAgICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0g
b2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsNKyAgICAgICAgcG9pbnQubW92ZShjb250YWluZXJPZmZz
ZXQud2lkdGgoKSwgY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpKTsNKw0rICAgICAgICAvLyBUYWtl
IGludG8gYWNjb3VudCBzcGFjZSBhYm92ZSBhIHZlcnRpY2FsbHkgYWxpZ25lZCB0YWJsZSBjZWxs
DSsgICAgICAgIHBvaW50Lm1vdmUoMCwgYm9yZGVyVG9wRXh0cmEoKSk7DSsNKyAgICAgICAgaWYg
KHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikNKyAgICAgICAgICAgIGZpeGVk
ID0gdHJ1ZTsNKw0rICAgICAgICAvLyBDYWxsIGNvbnRhaW5lcg0rICAgICAgICByZXR1cm4gby0+
b2JqZWN0UG9pbnRUb0Fic29sdXRlQ29vcmRzKHBvaW50LCBmaXhlZCk7DSsgICAgfQ0rICAgIA0r
ICAgIHBvaW50ID0gRmxvYXRQb2ludCgpOw0rICAgIHJldHVybiBmYWxzZTsNK30NKw0rYm9vbCBS
ZW5kZXJCb3g6OmFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9hdFBvaW50JiBwb2ludCwg
Ym9vbCBmaXhlZCkgY29uc3QNK3sNKyAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhl
ZFBvc2l0aW9uKQ0rICAgICAgICBmaXhlZCA9IHRydWU7DSsNKyAgICBSZW5kZXJPYmplY3QqIG8g
PSBjb250YWluZXIoKTsNKyAgICBpZiAobyAmJiBvLT5hYnNvbHV0ZVBvaW50VG9PYmplY3RDb29y
ZHMocG9pbnQsIGZpeGVkKSkgew0rICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBzcGFjZSBh
Ym92ZSBhIHZlcnRpY2FsbHkgYWxpZ25lZCB0YWJsZSBjZWxsDSsgICAgICAgIHBvaW50Lm1vdmUo
MCwgLWJvcmRlclRvcEV4dHJhKCkpOw0rDSsgICAgICAgIC8vIFN1YnRyYWN0IG9mZnNldCBmcm9t
IGNvbnRhaW5lcg0rICAgICAgICBJbnRTaXplIGNvbnRhaW5lck9mZnNldCA9IG9mZnNldEZyb21D
b250YWluZXIobyk7DSsgICAgICAgIHBvaW50Lm1vdmUoLWNvbnRhaW5lck9mZnNldC53aWR0aCgp
LCAtY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpKTsNKw0rICAgICAgICAvLyBNYXAgdGhyb3VnaCB0
aGUgaW52ZXJzZSBvZiB0aGUgdHJhbnNmb3JtLCBpZiB0aGVyZSBpcyBvbmUNKyAgICAgICAgaWYg
KG1fbGF5ZXIgJiYgbV9sYXllci0+dHJhbnNmb3JtKCkpDSsgICAgICAgICAgICBwb2ludCA9IG1f
bGF5ZXItPnRyYW5zZm9ybSgpLT5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnQpOw0rDSsgICAgICAg
IHJldHVybiB0cnVlOw0rICAgIH0NKyAgICANKyAgICBwb2ludCA9IEZsb2F0UG9pbnQoKTsNKyAg
ICByZXR1cm4gZmFsc2U7DSt9DSsNIHZvaWQgUmVuZGVyQm94OjpkaXJ0eUxpbmVCb3hlcyhib29s
IGZ1bGxMYXlvdXQsIGJvb2wgLyppc1Jvb3RMaW5lQm94Ki8pDSB7DSAgICAgaWYgKG1faW5saW5l
Qm94V3JhcHBlcikgew1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94Lmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaA1pbmRleCBhYTliYWI3Li4zNzY1NGQ5IDEw
MDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaA0rKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaA1AQCAtNTEsNiArNTEsOSBAQCBwdWJsaWM6DSANICAgICB2aXJ0
dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZh
bHNlKSBjb25zdDsNIA0rICAgIHZpcnR1YWwgYm9vbCBvYmplY3RQb2ludFRvQWJzb2x1dGVDb29y
ZHMoRmxvYXRQb2ludCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7DSsgICAgdmlydHVhbCBi
b29sIGFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9hdFBvaW50JiwgYm9vbCBmaXhlZCA9
IGZhbHNlKSBjb25zdDsNKw0gICAgIHZpcnR1YWwgaW50IHhQb3MoKSBjb25zdCB7IHJldHVybiBt
X3g7IH0NICAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4gbV95OyB9DSAgICAg
dmlydHVhbCB2b2lkIHNldFBvcyhpbnQgeCwgaW50IHkpOw1AQCAtMTg0LDYgKzE4Nyw5IEBAIHBy
b3RlY3RlZDoNICAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGludCB0eCwgaW50IHR5LCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYmVoaW5kVGV4dCk7DSAjZW5kaWYNIA0rICAg
IC8vIENvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGlzIGJveCBmcm9tIGl0cyBjb250YWluZXIoKQ0r
ICAgIEludFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqKSBjb25zdDsNKyAg
ICANICAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWwoKTsNICAgICANICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2FsY3VsYXRlU2l6ZUFzUmVwbGFjZWQoKSBjb25zdCB7IHJldHVybiBpc1Jl
cGxhY2VkKCkgJiYgIWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCk7IH0NZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwDWluZGV4IDBjODUwYzYuLmZiODVlODAgMTAwNjQ0DS0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHANKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcA1AQCAtMjM4OSw2ICsyMzg5LDQwIEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGYpIGNvbnN0DSAgICAg
fQ0gfQ0gDStib29sIFJlbmRlck9iamVjdDo6b2JqZWN0UG9pbnRUb0Fic29sdXRlQ29vcmRzKEZs
b2F0UG9pbnQmIHBvaW50LCBib29sIGZpeGVkKSBjb25zdA0rew0rICAgIFJlbmRlck9iamVjdCog
byA9IHBhcmVudCgpOw0rICAgIGlmIChvKSB7DSsgICAgICAgIG8tPm9iamVjdFBvaW50VG9BYnNv
bHV0ZUNvb3Jkcyhwb2ludCwgZml4ZWQpOw0rICAgICAgICBwb2ludC5tb3ZlKDAsIC1vLT5ib3Jk
ZXJUb3BFeHRyYSgpKTsNKyAgICAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKSB7DSsgICAg
ICAgICAgICBpbnQgeE9mZnNldCA9IDAsIHlPZmZzZXQgPSAwOw0rICAgICAgICAgICAgby0+bGF5
ZXIoKS0+c3VidHJhY3RTY3JvbGxPZmZzZXQoeE9mZnNldCwgeU9mZnNldCk7DSsgICAgICAgICAg
ICBwb2ludC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOw0rICAgICAgICB9DSsgICAgICAgIHJldHVy
biB0cnVlOw0rICAgIH0NKw0rICAgIHJldHVybiBmYWxzZTsNK30NKw0rYm9vbCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBm
aXhlZCkgY29uc3QNK3sNKyAgICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsNKyAgICBpZiAo
bykgew0rICAgICAgICBvLT5hYnNvbHV0ZVBvaW50VG9PYmplY3RDb29yZHMocG9pbnQsIGZpeGVk
KTsNKyAgICAgICAgcG9pbnQubW92ZSgwLCAtby0+Ym9yZGVyVG9wRXh0cmEoKSk7DSsgICAgICAg
IGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkgew0rICAgICAgICAgICAgaW50IHhPZmZzZXQgPSAw
LCB5T2Zmc2V0ID0gMDsNKyAgICAgICAgICAgIG8tPmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zm
c2V0KHhPZmZzZXQsIHlPZmZzZXQpOw0rICAgICAgICAgICAgcG9pbnQubW92ZSgteE9mZnNldCwg
LXlPZmZzZXQpOw0rICAgICAgICB9DSsgICAgICAgIHJldHVybiB0cnVlOw0rICAgIH0NKyAgICAN
KyAgICByZXR1cm4gdHJ1ZTsNK30NKw0gSW50UmVjdCBSZW5kZXJPYmplY3Q6OmNhcmV0UmVjdChJ
bmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkNIHsNICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpDWRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oDWluZGV4IGRmNTZkOTYuLjI0NDhkYTEgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oDSsrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oDUBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIENvbG9yOw0gY2xhc3MgRG9jdW1lbnQ7DSBjbGFz
cyBFbGVtZW50Ow0gY2xhc3MgRXZlbnQ7DStjbGFzcyBGbG9hdFBvaW50Ow0gY2xhc3MgRmxvYXRS
ZWN0Ow0gY2xhc3MgRnJhbWVWaWV3Ow0gY2xhc3MgSFRNTEFyZWFFbGVtZW50Ow1AQCAtNTYxLDcg
KzU2Miw5IEBAIHB1YmxpYzoNIA0gICAgIC8vIGNvbnRlbnQgYXJlYSAoYm94IG1pbnVzIHBhZGRp
bmcvYm9yZGVyKQ0gICAgIEludFJlY3QgY29udGVudEJveCgpIGNvbnN0Ow0rICAgIC8vIGFic29s
dXRlQ29udGVudEJveCgpIGRvZXMgbm90IHRha2UgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQNICAg
ICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0Ow0rDSAgICAgaW50IGNvbnRlbnRX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNsaWVudFdpZHRoKCkgLSBwYWRkaW5nTGVmdCgpIC0gcGFk
ZGluZ1JpZ2h0KCk7IH0NICAgICBpbnQgY29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNs
aWVudEhlaWdodCgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOyB9DSANQEAgLTU4
MCwxMiArNTgzLDE0IEBAIHB1YmxpYzoNICAgICB2aXJ0dWFsIGludCB4UG9zKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQ0gICAgIHZpcnR1YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiAwOyB9DSAN
LSAgICAvLyBjYWxjdWxhdGUgY2xpZW50IHBvc2l0aW9uIG9mIGJveA0rICAgIC8vIENhbGN1bGF0
ZSBjbGllbnQgcG9zaXRpb24gb2YgYm94IChpZ25vcmVzIHRyYW5zZm9ybXMpLiBSZXR1cm5zIHRy
dWUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlDSsgICAgLy8gY29tcHV0ZWQsIGZhbHNlIG90aGVy
d2lzZSAod2hlbiB0aGUgb2JqZWN0IGlzIHVucm9vdGVkKS4NICAgICB2aXJ0dWFsIGJvb2wgYWJz
b2x1dGVQb3NpdGlvbihpbnQmIHgsIGludCYgeSwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsN
IA0gICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkZWFsIHdpdGggdGhlIGV4dHJhIHRv
cCBzcGFjZSB0aGF0IGNhbiBvY2N1ciBpbiB0YWJsZSBjZWxscyAoY2FsbGVkIGJvcmRlclRvcEV4
dHJhKS4NICAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhlIGNlbGwgZG8gbm90IGZhY3RvciB0aGlz
IHNwYWNlIGluLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBpbi4gIEFueSBjb2RlIHRoYXQgd2FudHMg
dG8NICAgICAvLyBhY2N1cmF0ZWx5IGRlYWwgd2l0aCB0aGUgY29udGVudHMgb2YgYSBjZWxsIG11
c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluc3RhZCBvZiBhYnNvbHV0ZVBvc2l0aW9uLg0rICAgIC8v
IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4NICAg
ICBib29sIGFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KGludCYgeFBvcywgaW50JiB5UG9zLCBi
b29sIGZpeGVkID0gZmFsc2UpIGNvbnN0DSAgICAgew0gICAgICAgICBib29sIHJlc3VsdCA9IGFi
c29sdXRlUG9zaXRpb24oeFBvcywgeVBvcywgZml4ZWQpOw1AQCAtNTkzLDYgKzU5OCwxMiBAQCBw
dWJsaWM6DSAgICAgICAgIHJldHVybiByZXN1bHQ7DSAgICAgfQ0gDSsgICAgLy8gTWFwIHBvaW50
cyBiZXR3ZWVuIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoaXMgUmVuZGVyT2JqZWN0DSsgICAg
Ly8gYW5kIHRoZSByb290LCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuDSsgICAgLy8g
UmV0dXJuIGZhbHNlIGlmIHRoZSBSZW5kZXJPYmplY3QgaXMgdW5yb290ZWQuDSsgICAgdmlydHVh
bCBib29sIG9iamVjdFBvaW50VG9BYnNvbHV0ZUNvb3JkcyhGbG9hdFBvaW50JiwgYm9vbCBmaXhl
ZCA9IGZhbHNlKSBjb25zdDsNKyAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb2ludFRvT2JqZWN0
Q29vcmRzKEZsb2F0UG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Ow0rDSAgICAgLy8g
d2lkdGggYW5kIGhlaWdodCBhcmUgd2l0aG91dCBtYXJnaW5zIGJ1dCBpbmNsdWRlIHBhZGRpbmdz
IGFuZCBib3JkZXJzDSAgICAgdmlydHVhbCBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9
DSAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQ1kaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHANaW5kZXggOWY0NGI2NS4uNDA4NzY5MCAxMDA2NDQNLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcA0rKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwDUBAIC0yMDcsNiArMjA3LDI1IEBAIGJvb2wgUmVu
ZGVyVGFibGVDZWxsOjphYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29s
IGZpeGVkKSBjb25zdA0gICAgIHJldHVybiByZXN1bHQ7DSB9DSANK2Jvb2wgUmVuZGVyVGFibGVD
ZWxsOjpvYmplY3RQb2ludFRvQWJzb2x1dGVDb29yZHMoRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wg
Zml4ZWQpIGNvbnN0DSt7DSsgICAgaWYgKHBhcmVudCgpKQ0rICAgICAgICAvLyBSb3dzIGFyZSBp
biB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyB1bmRvIHRoZSBwYXJlbnQgb2Zmc2V0DSsg
ICAgICAgIHBvaW50Lm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1wYXJlbnQoKS0+eVBvcygpKTsN
Kw0rICAgIHJldHVybiBSZW5kZXJCbG9jazo6b2JqZWN0UG9pbnRUb0Fic29sdXRlQ29vcmRzKHBv
aW50LCBmaXhlZCk7DSt9DSsNK2Jvb2wgUmVuZGVyVGFibGVDZWxsOjphYnNvbHV0ZVBvaW50VG9P
YmplY3RDb29yZHMoRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgZml4ZWQpIGNvbnN0DSt7DSsgICAg
Ym9vbCByZXN1bHQgPSBSZW5kZXJCbG9jazo6YWJzb2x1dGVQb2ludFRvT2JqZWN0Q29vcmRzKHBv
aW50LCBmaXhlZCk7DSsgICAgaWYgKHBhcmVudCgpKQ0rICAgICAgICAvLyBSb3dzIGFyZSBpbiB0
aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyB1bmRvIHRoZSBwYXJlbnQgb2Zmc2V0DSsgICAg
ICAgIHBvaW50Lm1vdmUocGFyZW50KCktPnhQb3MoKSwgcGFyZW50KCktPnlQb3MoKSk7DSsNKyAg
ICByZXR1cm4gcmVzdWx0Ow0rfQ0rDSBpbnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGluZVBvc2l0
aW9uKGJvb2wgLypmaXJzdExpbmUqLywgYm9vbCAvKmlzUm9vdExpbmVCb3gqLykgY29uc3QNIHsN
ICAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNy9DUi1DU1MyMS0yMDA3MDcxOS90YWJs
ZXMuaHRtbCNoZWlnaHQtbGF5b3V0PjogVGhlIGJhc2VsaW5lIG9mIGEgY2VsbCBpcyB0aGUgYmFz
ZWxpbmUgb2YNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgNaW5kZXggMjUyNTdiYi4uMTk0
ODNmZiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgNKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgNQEAgLTEwMywxMSArMTAzLDE3
IEBAIHB1YmxpYzoNICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3Qo
SW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7DSAgICAgdmlydHVhbCBib29sIGFic29sdXRl
UG9zaXRpb24oaW50JiB4LCBpbnQmIHksIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7DSANKyAg
ICB2aXJ0dWFsIGJvb2wgb2JqZWN0UG9pbnRUb0Fic29sdXRlQ29vcmRzKEZsb2F0UG9pbnQmLCBi
b29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Ow0rICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvaW50
VG9PYmplY3RDb29yZHMoRmxvYXRQb2ludCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7DSsN
ICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2Us
IGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsNIA0rICAgIC8vIEZJWE1FOiAnY2Vs
bFRvcEV4dHJhJyBhbmQgJ2JvcmRlclRvcEV4dHJhJyBuYW1lcyBkb24ndCBtYXRjaCwgYnV0IHNo
b3VsZA0gICAgIHZvaWQgc2V0Q2VsbFRvcEV4dHJhKGludCBwKSB7IG1fdG9wRXh0cmEgPSBwOyB9
DSAgICAgdm9pZCBzZXRDZWxsQm90dG9tRXh0cmEoaW50IHApIHsgbV9ib3R0b21FeHRyYSA9IHA7
IH0NIA0rICAgIC8vIEJvcmRlciB0b3AgYW5kIGJvdHRvbSBleHRyYSBpcyB0aGUgc3BhY2UgYWJv
dmUgYW5kIGJlbG93IHRoZSBjZWxsDSsgICAgLy8gY29udGVudHMgaW4gY2VsbHMgd2l0aCB2ZXJ0
aWNhbCBhbGlnbm1lbnQNICAgICB2aXJ0dWFsIGludCBib3JkZXJUb3BFeHRyYSgpIGNvbnN0IHsg
cmV0dXJuIG1fdG9wRXh0cmE7IH0NICAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b21FeHRyYSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tRXh0cmE7IH0NIA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cA1pbmRleCA4MTE1N2E4Li42MDBmMWQzIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcA0rKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcA1AQCAt
MTQxLDYgKzE0MSwyMiBAQCBib29sIFJlbmRlclZpZXc6OmFic29sdXRlUG9zaXRpb24oaW50JiB4
UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQpIGNvbnN0DSAgICAgcmV0dXJuIHRydWU7DSB9DSAN
K2Jvb2wgUmVuZGVyVmlldzo6b2JqZWN0UG9pbnRUb0Fic29sdXRlQ29vcmRzKEZsb2F0UG9pbnQm
IHBvaW50LCBib29sIGZpeGVkKSBjb25zdA0rew0rICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmll
dykNKyAgICAgICAgcG9pbnQubW92ZShtX2ZyYW1lVmlldy0+c2Nyb2xsWCgpLCBtX2ZyYW1lVmll
dy0+c2Nyb2xsWSgpKTsNKw0rICAgIHJldHVybiB0cnVlOw0rfQ0rDStib29sIFJlbmRlclZpZXc6
OmFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9hdFBvaW50JiBwb2ludCwgYm9vbCBmaXhl
ZCkgY29uc3QNK3sNKyAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpDSsgICAgICAgIHBvaW50
Lm1vdmUoLW1fZnJhbWVWaWV3LT5zY3JvbGxYKCksIC1tX2ZyYW1lVmlldy0+c2Nyb2xsWSgpKTsN
Kw0rICAgIHJldHVybiB0cnVlOw0rfQ0rDSB2b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkNIHsNICAgICAvLyBJZiB3ZSBldmVyIHJlcXVp
cmUgbGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBzb21ldGhpbmcgaGFzIGdvbmUg
aG9ycmlibHkgd3JvbmcuDWRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgNaW5kZXggYjQzN2NkMS4uZDI1OTZk
YyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oDSsrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaA1AQCAtNDUsNiArNDUsOSBAQCBwdWJsaWM6DSAgICAg
dmlydHVhbCB2b2lkIGNhbGNIZWlnaHQoKTsNICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0
aHMoKTsNICAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYg
eVBvcywgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsNKw0rICAgIHZpcnR1YWwgYm9vbCBvYmpl
Y3RQb2ludFRvQWJzb2x1dGVDb29yZHMoRmxvYXRQb2ludCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkg
Y29uc3Q7DSsgICAgdmlydHVhbCBib29sIGFic29sdXRlUG9pbnRUb09iamVjdENvb3JkcyhGbG9h
dFBvaW50JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsNICAgICANICAgICBpbnQgZG9jSGVp
Z2h0KCkgY29uc3Q7DSAgICAgaW50IGRvY1dpZHRoKCkgY29uc3Q7DQ==
</data>
<flag name="review"
          id="11271"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24928</attachid>
            <date>2008-11-05 18:03:55 -0800</date>
            <delta_ts>2008-11-06 10:12:40 -0800</delta_ts>
            <desc>Implement absoluteToLocal, fix event.offsetX/offsetY</desc>
            <filename>21870_patch.txt</filename>
            <type>text/plain</type>
            <size>21739</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwOTI2YmRkLi5kYTZjN2M2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEt
MDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODcwCisgICAgICAgIAorICAg
ICAgICBUZXN0IGV2ZW50Lm9mZnNldFgvb2Zmc2V0WSBmb3IgdmFyaW91cyB0eXBlcyBvZiBlbGVt
ZW50cywgd2hpY2gKKyAgICAgICAgZXhlcmNpc2VzIGFic29sdXRlVG9Mb2NhbCgpIGNvZGUuCisK
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9vZmZzZXRYLW9mZnNldFktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9vZmZzZXRYLW9mZnNldFkuaHRtbDogQWRkZWQuCisK
IDIwMDgtMTEtMDUgIFBpZXJyZS1PbGl2aWVyIExhdG91ciAgPHBvbEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL29mZnNldFgtb2Zmc2V0WS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9vZmZzZXRYLW9mZnNldFktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzYwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9vZmZzZXRYLW9mZnNldFktZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjMgQEAKK0Fic29sdXRlIHBvc2l0aW9uCitSZWxhdGl2ZSBwb3NpdGlvbgorRml4ZWQgcG9z
aXRpb24KK0ZpcnN0CVNlY29uZAorVGhpcyBjZWxsIGhhcyBib3JkZXJUb3BFeHRyYQorTG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBk
byBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxp
cXVhLgorTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5n
IGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xv
cmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4
ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8g
Y29uc2VxdWF0LgorSW4gY29sdW1ucworRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVu
ZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVs
bGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRl
bnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0
IGxhYm9ydW0uCisKK0RpdiB3aXRoIHRyYW5zZm9ybQorTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBp
bmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1p
bmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlz
aSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LgorCitJbiBSVEwgb3ZlcmZsb3cK
K0R1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxp
dCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIg
c2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBv
ZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLgorCitQQVNTOiBldmVu
dCBhdCAoMTEyLCA2MikgaGl0IGFicy1ib3ggYXQgb2Zmc2V0ICgzMiwgMzcpCitQQVNTOiBldmVu
dCBhdCAoMTU3LCAzMikgaGl0IHJlbC1ib3ggYXQgb2Zmc2V0ICgyMiwgMjQpCitQQVNTOiBldmVu
dCBhdCAoNDEwLCAzMCkgaGl0IGZpeGVkLWJveCBhdCBvZmZzZXQgKDEwLCAxMCkKK1BBU1M6IGV2
ZW50IGF0ICgzNiwgMjcyKSBoaXQgd2l0aC1ib3JkZXJ0b3BleHRyYSBhdCBvZmZzZXQgKDQsIDQp
CitQQVNTOiBldmVudCBhdCAoNTYzLCA0MTApIGhpdCBpbnNpZGUtb3ZlcmZsb3cgYXQgb2Zmc2V0
ICg3LCA2KQorUEFTUzogZXZlbnQgYXQgKDExMiwgMzY5KSBoaXQgdHJhbnNmb3JtZWQgYXQgb2Zm
c2V0ICgxMSwgMTUpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL29mZnNl
dFgtb2Zmc2V0WS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvb2Zmc2V0WC1vZmZzZXRZ
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOGE4ZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL29mZnNldFgtb2Zmc2V0WS5odG1s
CkBAIC0wLDAgKzEsMjI3IEBACis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+VGVzdCBvZmZzZXRY
L29mZnNldFkgb24gdmFyaW91cyB0eXBlcyBvZiBlbGVtZW50czwvdGl0bGU+CisgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKGUpCisgICAgeworICAgICAgdmFyIHJl
c3VsdEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3VzZXBvcycpOworICAgICAgdmFy
IG9mZnNldHMgPSAnZWxlbWVudCBpZDogJyArIGUudGFyZ2V0LmlkICsgJzxicj4gY2xpZW50WDog
JyArIGUuY2xpZW50WCArICcgY2xpZW50WTogJyArIGUuY2xpZW50WSArICc8YnI+JzsKKyAgICAg
IG9mZnNldHMgKz0gJ29mZnNldFg6ICcgKyBlLm9mZnNldFggKyAnIG9mZnNldFk6ICcgKyBlLm9m
ZnNldFk7CisgICAgICByZXN1bHRCb3guaW5uZXJIVE1MID0gb2Zmc2V0czsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBsb2cocykKKyAgICB7CisgICAgICB2YXIgcmVzdWx0c0RpdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJyk7CisgICAgICByZXN1bHRzRGl2LmlubmVySFRNTCAr
PSBzICsgJzxicj4nOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0ZXN0KCkKKyAgICB7Cisg
ICAgICAvLyBTY3JvbGwgc28gdGhhdCBmcmFtZSB2aWV3IG9mZnNldHMgYXJlIG5vbi16ZXJvCisg
ICAgICB3aW5kb3cuc2Nyb2xsVG8oMjAsIDEwMCk7CisKKyAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdvdmVyZmxvdycpLnNjcm9sbExlZnQgPSA4MDsKKyAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdvdmVyZmxvdycpLnNjcm9sbFRvcCA9IDYwOworICAgICAgCisgICAgICAvLyBJ
biBub24tdGVzdCBtb2RlLCBzaG93IHRoZSBtb3VzZSBjb29yZHMgZm9yIHRlc3RpbmcKKyAgICAg
IGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBkb2N1bWVudC5ib2R5
LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlbW92ZWQsIGZhbHNlKTsKKworICAg
ICAgZGlzcGF0Y2hFdmVudCgxMTIsIDYyLCAnYWJzLWJveCcsIDMyLCAzNyk7CisgICAgICBkaXNw
YXRjaEV2ZW50KDE1NywgMzIsICdyZWwtYm94JywgMjIsIDI0KTsKKyAgICAgIGRpc3BhdGNoRXZl
bnQoNDEwLCAzMCwgJ2ZpeGVkLWJveCcsIDEwLCAxMCk7CisgICAgICBkaXNwYXRjaEV2ZW50KDM2
LCAyNzIsICd3aXRoLWJvcmRlcnRvcGV4dHJhJywgNCwgNCk7CisgICAgICAvLyBkaXNwYXRjaEV2
ZW50KDYzOSwgMzE2LCAnaW4tY29sdW1ucycsIDE3MywgLTE3Mik7ICAvLyBUaGlzIGlzIGJ1Z2d5
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkzCisgICAg
ICBkaXNwYXRjaEV2ZW50KDU2MywgNDEwLCAnaW5zaWRlLW92ZXJmbG93JywgNywgNik7CisgICAg
ICBkaXNwYXRjaEV2ZW50KDExMiwgMzY5LCAndHJhbnNmb3JtZWQnLCAxMSwgMTUpOworICAgICAg
ICAgICAgCisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0
aW9uIGRpc3BhdGNoRXZlbnQoY2xpZW50WCwgY2xpZW50WSwgZXhwZWN0ZWRFbGVtZW50SUQsIGV4
cGVjdGVkT2Zmc2V0WCwgZXhwZWN0ZWRPZmZzZXRZKQorICAgIHsKKyAgICAgIHZhciBldiA9IGRv
Y3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50Iik7CisgICAgICBldi5pbml0TW91c2VFdmVu
dCgiY2xpY2siLCB0cnVlLCB0cnVlLCB3aW5kb3csIDEsIDEsIDEsIGNsaWVudFgsIGNsaWVudFks
IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBkb2N1bWVudCk7CisgICAgICBldi5leHBl
Y3RlZEVsZW1lbnQgPSBleHBlY3RlZEVsZW1lbnRJRDsKKyAgICAgIGV2LmV4cGVjdGVkT2Zmc2V0
WCA9IGV4cGVjdGVkT2Zmc2V0WDsKKyAgICAgIGV2LmV4cGVjdGVkT2Zmc2V0WSA9IGV4cGVjdGVk
T2Zmc2V0WTsKKyAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2
LnBhZ2VYLCBldi5wYWdlWSk7CisgICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldik7CisgICAg
fQorCisgICAgZnVuY3Rpb24gY2xpY2tlZChldmVudCkKKyAgICB7CisgICAgICB2YXIgZWxlbWVu
dCA9IGV2ZW50LnRhcmdldDsKKyAgICAgIAorICAgICAgdmFyIHJlc3VsdDsKKyAgICAgIGlmIChl
bGVtZW50LmlkID09IGV2ZW50LmV4cGVjdGVkRWxlbWVudCAmJgorICAgICAgICAgIGV2ZW50Lm9m
ZnNldFggPT0gZXZlbnQuZXhwZWN0ZWRPZmZzZXRYICYmCisgICAgICAgICAgZXZlbnQub2Zmc2V0
WSA9PSBldmVudC5leHBlY3RlZE9mZnNldFkpCisgICAgICAgIHJlc3VsdCA9ICdQQVNTOiBldmVu
dCBhdCAoJyArIGV2ZW50LmNsaWVudFggKyAnLCAnICsgZXZlbnQuY2xpZW50WSArICcpIGhpdCAn
ICsgZWxlbWVudC5pZCArICcgYXQgb2Zmc2V0ICgnICsgZXZlbnQub2Zmc2V0WCArICcsICcgKyBl
dmVudC5vZmZzZXRZICsgJyknOworICAgICAgZWxzZQorICAgICAgICByZXN1bHQgPSAnRkFJTDog
ZXZlbnQgYXQgKCcgKyBldmVudC5jbGllbnRYICsgJywgJyArIGV2ZW50LmNsaWVudFkgKyAnKSBl
eHBlY3RlZCB0byBoaXQgJyArIGV2ZW50LmV4cGVjdGVkRWxlbWVudCArICcgYXQgKCcgKyBldmVu
dC5leHBlY3RlZE9mZnNldFggKyAnLCAnICsgZXZlbnQuZXhwZWN0ZWRPZmZzZXRZICsgJykgYnV0
IGhpdCAnICsgZWxlbWVudC5pZCArICcgYXQgKCcgKyBldmVudC5vZmZzZXRYICsgJywgJyArIGV2
ZW50Lm9mZnNldFkgKyAnKSc7CisKKyAgICAgIGxvZyhyZXN1bHQpOworICAgIH0KKyAgICAKKyAg
ICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgICAgd2lu
ZG93LnNldFRpbWVvdXQodGVzdCwgMCk7CisgICAgfSwgZmFsc2UpOworICA8L3NjcmlwdD4KKyAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgCisgICAgYm9keSB7Cisg
ICAgICBoZWlnaHQ6IDIwNDhweDsKKyAgICAgIHdpZHRoOiAyMDQ4cHg7CisgICAgICBtYXJnaW46
IDA7CisgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKKyAgICB9CisKKyAgICAuYm94IHsKKyAgICAg
IGhlaWdodDogMjAwcHg7CisgICAgICB3aWR0aDogMjAwcHg7CisgICAgICBtYXJnaW46IDIwcHg7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OworICAgIH0KKworICAgICNhYnMtYm94IHsK
KyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIHRvcDogMTI1cHg7CisgICAgICBsZWZ0
OiAxMDBweDsKKyAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICB3aWR0aDogMjAwcHg7CisgICAg
ICBib3JkZXI6IDE1cHggc29saWQgZ3JheTsKKyAgICB9CisgICAgCisgICAgI3JlbC1ib3ggewor
ICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgIHdp
ZHRoOiAyMDBweDsKKyAgICAgIGxlZnQ6IDQwcHg7CisgICAgICB0b3A6IC01MHB4OworICAgICAg
YmFja2dyb3VuZC1jb2xvcjogI0NDQzsKKyAgICB9CisgICAgCisgICAgI2ZpeGVkLWJveCB7Cisg
ICAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgICB0b3A6IDIwcHg7CisgICAgICBsZWZ0OiA0MDBw
eDsKKyAgICAgIHdpZHRoOiAzMDBweDsKKyAgICAgIGhlaWdodDogNTBweDsKKyAgICAgIGJhY2tn
cm91bmQtY29sb3I6ICNBQUE7CisgICAgfQorICAgIAorICAgICNjb2x1bW5zIHsKKyAgICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIC13ZWJraXQtY29sdW1uLWNvdW50OiAzOworICAgICAg
d2lkdGg6IDQwMHB4OworICAgICAgdG9wOiAyMDBweDsKKyAgICAgIGxlZnQ6IDQ2MHB4OworICAg
ICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7CisgICAgfQorICAgIAorICAgICNpbi1jb2x1bW5z
IHsKKyAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgaGVpZ2h0OiA0MHB4OworICAgICAgd2lk
dGg6IDYwJTsKKyAgICAgIG1hcmdpbjogMCBhdXRvOworICAgICAgdGV4dC1hbGlnbjogY2VudGVy
OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKKyAgICB9CisgICAgCisgICAgI3RyYW5z
Zm9ybWVkIHsKKyAgICAgIGhlaWdodDogMTIwcHg7CisgICAgICB3aWR0aDogMjAwcHg7CisgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjREREOworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z
bGF0ZSgxMDBweCwgNTBweCkgcm90YXRlKDIwZGVnKTsKKyAgICB9CisgICAgI292ZXJmbG93IHsK
KyAgICAgIG92ZXJmbG93OiBzY3JvbGw7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICB3aWR0aDogMzAwcHg7CisgICAgICB0b3A6IDQ0MHB4OworICAgICAgbGVmdDogNDYwcHg7Cisg
ICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7CisgICAg
ICBkaXJlY3Rpb246IHJ0bDsKKyAgICB9CisgICAgCisgICAgI292ZXJmbG93LWNvbnRlbnRzIHsK
KyAgICAgIGhlaWdodDogNTAwcHg7CisgICAgICB3aWR0aDogMTIwJTsKKyAgICAgIGJhY2tncm91
bmQtY29sb3I6ICNCQkI7CisgICAgfQorICAgIAorICAgICNpbnNpZGUtb3ZlcmZsb3cgeworICAg
ICAgd2lkdGg6IDUwJTsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CisgICAgfQorICAg
IAorICAgICNyZXN1bHRzIHsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIGxlZnQ6
IDMwcHg7CisgICAgICB0b3A6IDcwMHB4OworICAgIH0KKyAgICAKKyAgICAjbW91c2Vwb3Mgewor
ICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgbGVmdDogMzBweDsKKyAgICAgIHRvcDog
NjUwcHg7CisgICAgICBjb2xvcjogZ3JheTsKKyAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKKyAg
ICB9CisgICAgCisgICAgdHIgeworLyogICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEw
ZGVnKTsqLworICAgIH0KKyAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9uY2xpY2s9ImNsaWNr
ZWQoZXZlbnQpIj4KKworPGRpdiBpZD0iZmlsbGVyIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRl
OyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCUiPjwvZGl2PgorCis8IS0tIFRlc3Qg
YXNzdW1lcyBvZmZzZXRYL29mZnNldFkgYXJlIHJlbGF0aXZlIHRvIGJvcmRlciBib3gsIGJ1dCBz
ZWUKKyAgICAgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vdzNjX2Nzc29tLmh0bWwjbW91
c2Vwb3MgLS0+Cis8ZGl2IGlkPSJhYnMtYm94Ij4KKyAgQWJzb2x1dGUgcG9zaXRpb24KKyAgPGRp
diBpZD0icmVsLWJveCI+CisgICAgUmVsYXRpdmUgcG9zaXRpb24KKyAgPC9kaXY+CisgIDxkaXYg
aWQ9ImZpeGVkLWJveCI+CisgICAgRml4ZWQgcG9zaXRpb24KKyAgPC9kaXY+Cis8L2Rpdj4KKwor
PHRhYmxlIGJvcmRlcj0iMiIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIyIiBzdHlsZT0i
d2lkdGg6IDQwMHB4OyBtYXJnaW4tdG9wOiAyODBweDsgbWFyZ2luLWxlZnQ6IDQwcHg7Ij4KKyAg
PHRyPjx0aD5GaXJzdDwvdGg+PHRoPlNlY29uZDwvdGg+PC90cj4KKyAgPHRyIHN0eWxlPSJ2ZXJ0
aWNhbC1hbGlnbjogY2VudGVyOyI+PHRkPlRoaXMgY2VsbCBoYXMgYm9yZGVyVG9wRXh0cmE8ZGl2
IGNsYXNzPSJib3giIGlkPSJ3aXRoLWJvcmRlcnRvcGV4dHJhIiBzdHlsZT0icG9zaXRpb246IHJl
bGF0aXZlOyBoZWlnaHQ6IDIwcHg7IG1hcmdpbjogNHB4OyI+PC9kaXY+PC90ZD48dGQ+TG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBk
byBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxp
cXVhLgorICA8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8ZGl2IGlkPSJjb2x1bW5zIj4KKyAgPHA+
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRh
dGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2Vx
dWF0LiA8c3BhbiBpZD0iaW4tY29sdW1ucyI+SW4gY29sdW1uczwvc3Bhbj4gRHVpcyBhdXRlIGly
dXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVt
IGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0
IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1
bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPgorPC9kaXY+CisKKzxkaXYgaWQ9InRy
YW5zZm9ybWVkIj4KKyAgRGl2IHdpdGggdHJhbnNmb3JtCis8L2Rpdj4KKworPGRpdiBpZD0ib3Zl
cmZsb3ciPgorICA8ZGl2IGlkPSJvdmVyZmxvdy1jb250ZW50cyI+CisgICAgPHA+TG9yZW0gaXBz
dW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBl
aXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVh
LiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxh
bWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LjwvcD4K
KyAgICA8ZGl2IGlkPSJpbnNpZGUtb3ZlcmZsb3ciPkluIFJUTCBvdmVyZmxvdzwvZGl2PiAKKyAg
ICA8cD5EdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUg
dmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0
ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBx
dWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS48L3A+CisgIDwv
ZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHRzIj48L2Rpdj4KKzxkaXYgaWQ9Im1vdXNlcG9z
Ij48L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjQyOTI2Li43NzdhNWI1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDA4LTExLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MAorICAgICAgICAKKyAgICAgICAg
SW1wbGVtZW50IGFic29sdXRlVG9Mb2NhbCgpIHRvIGNvbnZlcnQgYSBwb2ludCBmcm9tIGFic29s
dXRlCisgICAgICAgIHRvIGxvY2FsIGNvb3JkaW5hdGVzLCBvcHRpb25hbGx5IHRha2luZyB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudC4KKyAgICAgICAgCisgICAgICAgIFVzZSB0aGlzIHRvIHNldCBv
ZmZzZXRYL29mZnNldFkgaW4gbW91c2UgZXZlbnRzLCB0aHVzIGZpeGluZworICAgICAgICBvZmZz
ZXRYL29mZnNldFkgaW4gZXZlbnRzIG9uIGVsZW1lbnRzIHdpdGggdHJhbnNmb3Jtcy4KKworICAg
ICAgICBUZXN0OiBmYXN0L2V2ZW50cy9vZmZzZXRYLW9mZnNldFkuaHRtbAorCisgICAgICAgICog
ZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlUmVsYXRl
ZEV2ZW50OjpyZWNlaXZlZFRhcmdldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFic29sdXRlVG9Mb2NhbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9B
YnNvbHV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlVG9M
b2NhbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OmFic29sdXRlVG9Mb2NhbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKwog
MjAwOC0xMS0wNSAgSmVmZiBDb29rICA8Y29va2llY2FwZXJAZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uIGFuZCBUb3IgQXJuZS4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcCBiL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRl
ZEV2ZW50LmNwcAppbmRleCAxMTdhOGVhLi5hNjljOGE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZl
bnQuY3BwCkBAIC0xMzMsMTEgKzEzMyw5IEBAIHZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OnJlY2Vp
dmVkVGFyZ2V0KCkKICAgICAvLyBBZGp1c3Qgb2Zmc2V0WC9ZIHRvIGJlIHJlbGF0aXZlIHRvIHRo
ZSB0YXJnZXQncyBwb3NpdGlvbi4KICAgICBpZiAoIWlzU2ltdWxhdGVkKCkpIHsKICAgICAgICAg
aWYgKFJlbmRlck9iamVjdCogciA9IHRhcmctPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLiBXZSBu
ZWVkCi0gICAgICAgICAgICAvLyBhbiBhYnNvbHV0ZVRvTG9jYWwoKSBtZXRob2QuCi0gICAgICAg
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOwotICAgICAgICAg
ICAgbV9vZmZzZXRYIC09IGFic1Bvcy54KCk7Ci0gICAgICAgICAgICBtX29mZnNldFkgLT0gYWJz
UG9zLnkoKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gci0+YWJzb2x1dGVUb0xv
Y2FsKEZsb2F0UG9pbnQobV9wYWdlWCwgbV9wYWdlWSksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0WCA9IGFic1Bvcy54KCk7CisgICAgICAgICAgICBtX29mZnNldFkgPSBhYnNQ
b3MueSgpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAx
ZWQyMDUyLi4wNzM4YTlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEwMTQsMzIgKzEw
MTQsNjkgQEAgRmxvYXRQb2ludCBSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
IGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXMKICAgICAgICAgICAgIGxvY2FsUG9pbnQg
PSBtX2xheWVyLT50cmFuc2Zvcm0oKS0+bWFwUG9pbnQobG9jYWxQb2ludCk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50
ICs9IHJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKLQotICAgICAgICBpZiAoIWlzSW5saW5lKCkg
fHwgaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2I7Ci0gICAgICAg
ICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgpLT5wb3NpdGlvbigpICE9IEFic29s
dXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICYmIChjYiA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obykpLT5o
YXNDb2x1bW5zKCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QobV94LCBtX3ksIDEs
IDEpOwotICAgICAgICAgICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZWN0KTsKLSAg
ICAgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUocmVjdC54KCksIHJlY3QueSgpKTsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQubW92ZShtX3gsIG1feSk7
Ci0gICAgICAgIH0KKyAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXRGcm9tQ29udGFpbmVyKG8p
OwogCi0gICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAgIHJl
dHVybiBvLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VU
cmFuc2Zvcm1zKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKK30KIAot
ICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQotICAg
ICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIobyk7
CitGbG9hdFBvaW50IFJlbmRlckJveDo6YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFp
bmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKK3sKKyAgICBp
ZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICBmaXhlZCA9
IHRydWU7CiAKLSAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQobG9j
YWxQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOworICAgIGlmICh1c2VUcmFuc2Zvcm1zICYm
IG1fbGF5ZXIgJiYgbV9sYXllci0+dHJhbnNmb3JtKCkpCisgICAgICAgIGZpeGVkID0gZmFsc2U7
CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBvID0gY29udGFpbmVyKCk7CisgICAgaWYgKG8pIHsK
KyAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gby0+YWJzb2x1dGVUb0xvY2FsKGNvbnRh
aW5lclBvaW50LCBmaXhlZCwgdXNlVHJhbnNmb3Jtcyk7CisKKyAgICAgICAgLy8gVGFrZSBpbnRv
IGFjY291bnQgc3BhY2UgYWJvdmUgYSB2ZXJ0aWNhbGx5IGFsaWduZWQgdGFibGUgY2VsbAorICAg
ICAgICAvLyAoc2VlIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSkKKyAgICAgICAgbG9jYWxQ
b2ludC5tb3ZlKDAuMGYsIC1zdGF0aWNfY2FzdDxmbG9hdD4oYm9yZGVyVG9wRXh0cmEoKSkpOwor
CisgICAgICAgIGxvY2FsUG9pbnQgLT0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKKworICAgICAg
ICBpZiAodXNlVHJhbnNmb3JtcyAmJiBtX2xheWVyICYmIG1fbGF5ZXItPnRyYW5zZm9ybSgpKQor
ICAgICAgICAgICAgbG9jYWxQb2ludCA9IG1fbGF5ZXItPnRyYW5zZm9ybSgpLT5pbnZlcnNlKCku
bWFwUG9pbnQobG9jYWxQb2ludCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbG9jYWxQb2lu
dDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKIH0KIAorSW50U2l6ZSBS
ZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAorewor
ICAgIEFTU0VSVChvID09IGNvbnRhaW5lcigpKTsKKworICAgIEludFNpemUgb2Zmc2V0OyAgICAK
KyAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCisgICAgICAgIG9mZnNldCArPSByZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0KCk7CisKKyAgICBpZiAoIWlzSW5saW5lKCkgfHwgaXNSZXBsYWNlZCgpKSB7
CisgICAgICAgIFJlbmRlckJsb2NrKiBjYjsKKyAgICAgICAgaWYgKG8tPmlzQmxvY2tGbG93KCkg
JiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uICYmIHN0eWxlKCktPnBv
c2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbgorICAgICAgICAgICAgICAgICYmIChjYiA9IHN0YXRp
Y19jYXN0PFJlbmRlckJsb2NrKj4obykpLT5oYXNDb2x1bW5zKCkpIHsKKyAgICAgICAgICAgIElu
dFJlY3QgcmVjdChtX3gsIG1feSwgMSwgMSk7CisgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZv
ckNvbHVtbnMocmVjdCk7CisgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHJlY3QueCgpLCByZWN0
LnkoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChtX3gsIG1f
eSk7CisgICAgfQorCisgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBvZmZz
ZXQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisKKyAgICBpZiAoc3R5
bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQorICAgICAgICBvZmZzZXQgKz0g
b2Zmc2V0Rm9yUG9zaXRpb25lZEluQ29udGFpbmVyKG8pOworCisgICAgcmV0dXJuIG9mZnNldDsK
K30KKwogdm9pZCBSZW5kZXJCb3g6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9v
bCAvKmlzUm9vdExpbmVCb3gqLykKIHsKICAgICBpZiAobV9pbmxpbmVCb3hXcmFwcGVyKSB7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oCmluZGV4IDhkNWVjNzEuLjNjYzhiZTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJp
ZGVTaXplKGludCk7CiAKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBi
b29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFBvaW50
IGFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkID0g
ZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
aW50IHhQb3MoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KICAgICB2aXJ0dWFsIGludCB5UG9zKCkg
Y29uc3QgeyByZXR1cm4gbV95OyB9CkBAIC0xODksNiArMTkwLDggQEAgcHJvdGVjdGVkOgogICAg
IAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWxjdWxhdGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0
IHsgcmV0dXJuIGlzUmVwbGFjZWQoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKTsg
fQogCisgICAgSW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0
OworICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50Um9vdEJveERlY29yYXRpb25zKFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZGlkIGEg
ZnVsbCByZXBhaW50CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBiNzhjNDEwLi5h
N2Y3MjJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTIzODUsNiArMjM4NSwx
OSBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQg
bG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbAogICAgIHJldHVybiBGbG9hdFBvaW50KCk7CiB9
CiAKK0Zsb2F0UG9pbnQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCBj
b250YWluZXJQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdAorewor
ICAgIFJlbmRlck9iamVjdCogbyA9IHBhcmVudCgpOworICAgIGlmIChvKSB7CisgICAgICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IG8tPmFic29sdXRlVG9Mb2NhbChjb250YWluZXJQb2ludCwg
Zml4ZWQsIHVzZVRyYW5zZm9ybXMpOworICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgLXN0
YXRpY19jYXN0PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRyYSgpKSk7CisgICAgICAgIGlmIChvLT5o
YXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gby0+bGF5ZXIoKS0+
c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBsb2NhbFBvaW50OworICAg
IH0KKyAgICByZXR1cm4gRmxvYXRQb2ludCgpOworfQorCiBJbnRSZWN0IFJlbmRlck9iamVjdDo6
Y2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggODI4ZjRhZS4uM2Y1YjY3NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTU4Myw2ICs1ODMsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ29udmVy
dCB0aGUgZ2l2ZW4gbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMKICAgICAvLyBG
SVhNRTogVGVtcG9yYXJ5LiBJZiB1c2VUcmFuc2Zvcm1zIGlzIHRydWUsIHRha2UgdHJhbnNmb3Jt
cyBpbnRvIGFjY291bnQuIEV2ZW50dWFsbHkgbG9jYWxUb0Fic29sdXRlKCkgd2lsbCBhbHdheXMg
YmUgdHJhbnNmb3JtLWF3YXJlLgogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1
dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFs
c2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0
UG9pbnQgYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9v
bCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyB1c2VkIHRvIGRlYWwgd2l0aCB0aGUgZXh0cmEgdG9wIHNwYWNlIHRoYXQgY2FuIG9jY3VyIGlu
IHRhYmxlIGNlbGxzIChjYWxsZWQgYm9yZGVyVG9wRXh0cmEpLgogICAgIC8vIFRoZSBjaGlsZHJl
biBvZiB0aGUgY2VsbCBkbyBub3QgZmFjdG9yIHRoaXMgc3BhY2UgaW4sIHNvIHdlIGhhdmUgdG8g
YWRkIGl0IGluLiAgQW55IGNvZGUgdGhhdCB3YW50cyB0bwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAKaW5kZXggMDhhMTgxOC4uMDJmNTYyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCkBAIC0xOTgsMTMgKzE5OCwyMiBAQCB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmaXhlZCkKIAog
RmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxv
Y2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKIHsKLSAgICBG
bG9hdFBvaW50IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGUobG9jYWxQb2lu
dCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAg
ICAgaWYgKCghdiB8fCAhdi0+bGF5b3V0U3RhdGUoKSkgJiYgcGFyZW50KCkpIHsKICAgICAgICAg
Ly8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRo
ZWlyIG9mZnNldCBpbi4KLSAgICAgICAgcmVzdWx0Lm1vdmUoLXBhcmVudCgpLT54UG9zKCksIC1w
YXJlbnQoKS0+eVBvcygpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1wYXJlbnQoKS0+eFBv
cygpLCAtcGFyZW50KCktPnlQb3MoKSk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGUobG9jYWxQb2ludCwgZml4ZWQsIHVz
ZVRyYW5zZm9ybXMpOzsKK30KKworRmxvYXRQb2ludCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRl
VG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMpIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gUmVuZGVyQmxv
Y2s6OmFic29sdXRlVG9Mb2NhbChjb250YWluZXJQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMp
OworICAgIGlmIChwYXJlbnQoKSkgeworICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBj
b29yZGluYXRlIHNwYWNlLCBzbyBhZGQgdGhlaXIgb2Zmc2V0IGJhY2sgaW4uCisgICAgICAgIGxv
Y2FsUG9pbnQubW92ZShwYXJlbnQoKS0+eFBvcygpLCBwYXJlbnQoKS0+eVBvcygpKTsKKyAgICB9
CisgICAgcmV0dXJuIGxvY2FsUG9pbnQ7CiB9CiAKIGludCBSZW5kZXJUYWJsZUNlbGw6OmJhc2Vs
aW5lUG9zaXRpb24oYm9vbCAvKmZpcnN0TGluZSovLCBib29sIC8qaXNSb290TGluZUJveCovKSBj
b25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRleCBkMjJiMzYyLi5jM2Y3YzQ1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaApAQCAtMTAyLDYgKzEwMiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBi
b29sIGZpeGVkID0gZmFsc2UpOwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1
dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFs
c2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0
UG9pbnQgYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4
ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSA9IGZhbHNlLCBib29sIGlz
Um9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5k
ZXggNWE0OTZlZi4uYWQyMjVkZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTEzOSw2
ICsxMzksMTQgQEAgRmxvYXRQb2ludCBSZW5kZXJWaWV3Ojpsb2NhbFRvQWJzb2x1dGUoRmxvYXRQ
b2ludCBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29sIHUKICAgICByZXR1cm4gbG9jYWxQb2lu
dDsKIH0KIAorRmxvYXRQb2ludCBSZW5kZXJWaWV3OjphYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2lu
dCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdAor
eworICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykKKyAgICAgICAgY29udGFpbmVyUG9pbnQg
LT0gbV9mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpOworCisgICAgcmV0dXJuIGNvbnRhaW5lclBv
aW50OworfQorCiB2b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKIHsKICAgICAvLyBJZiB3ZSBldmVyIHJlcXVpcmUgbGF5b3V0IGJ1dCBy
ZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBzb21ldGhpbmcgaGFzIGdvbmUgaG9ycmlibHkgd3Jvbmcu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggNGM5MmNjOC4uNjUzNjk3OSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaApAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNh
bGNIZWlnaHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICB2aXJ0
dWFsIEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZs
b2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxz
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFBvaW50IGFic29sdXRlVG9Mb2NhbChGbG9hdFBv
aW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3Jt
cyA9IGZhbHNlKSBjb25zdDsKICAgICAKICAgICBpbnQgZG9jSGVpZ2h0KCkgY29uc3Q7CiAgICAg
aW50IGRvY1dpZHRoKCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="11436"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>24929</attachid>
            <date>2008-11-05 18:04:31 -0800</date>
            <delta_ts>2008-11-05 18:04:31 -0800</delta_ts>
            <desc>Testcase in the patch</desc>
            <filename>offsetX-offsetY.html</filename>
            <type>text/html</type>
            <size>7079</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgogIDx0aXRsZT5UZXN0IG9mZnNldFgvb2Zmc2V0WSBvbiB2YXJpb3VzIHR5
cGVzIG9mIGVsZW1lbnRzPC90aXRsZT4KICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
Y2hhcnNldD0idXRmLTgiPgogICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewog
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICB9CgogICAgZnVuY3Rpb24gbW91c2Vt
b3ZlZChlKQogICAgewogICAgICB2YXIgcmVzdWx0Qm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ21vdXNlcG9zJyk7CiAgICAgIHZhciBvZmZzZXRzID0gJ2VsZW1lbnQgaWQ6ICcgKyBlLnRh
cmdldC5pZCArICc8YnI+IGNsaWVudFg6ICcgKyBlLmNsaWVudFggKyAnIGNsaWVudFk6ICcgKyBl
LmNsaWVudFkgKyAnPGJyPic7CiAgICAgIG9mZnNldHMgKz0gJ29mZnNldFg6ICcgKyBlLm9mZnNl
dFggKyAnIG9mZnNldFk6ICcgKyBlLm9mZnNldFk7CiAgICAgIHJlc3VsdEJveC5pbm5lckhUTUwg
PSBvZmZzZXRzOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvZyhzKQogICAgewogICAgICB2YXIgcmVz
dWx0c0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJyk7CiAgICAgIHJlc3Vs
dHNEaXYuaW5uZXJIVE1MICs9IHMgKyAnPGJyPic7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHRl
c3QoKQogICAgewogICAgICAvLyBTY3JvbGwgc28gdGhhdCBmcmFtZSB2aWV3IG9mZnNldHMgYXJl
IG5vbi16ZXJvCiAgICAgIHdpbmRvdy5zY3JvbGxUbygyMCwgMTAwKTsKCiAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdvdmVyZmxvdycpLnNjcm9sbExlZnQgPSA4MDsKICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ292ZXJmbG93Jykuc2Nyb2xsVG9wID0gNjA7CiAgICAgIAogICAg
ICAvLyBJbiBub24tdGVzdCBtb2RlLCBzaG93IHRoZSBtb3VzZSBjb29yZHMgZm9yIHRlc3RpbmcK
ICAgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgZG9jdW1lbnQu
Ym9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmVkLCBmYWxzZSk7Cgog
ICAgICBkaXNwYXRjaEV2ZW50KDExMiwgNjIsICdhYnMtYm94JywgMzIsIDM3KTsKICAgICAgZGlz
cGF0Y2hFdmVudCgxNTcsIDMyLCAncmVsLWJveCcsIDIyLCAyNCk7CiAgICAgIGRpc3BhdGNoRXZl
bnQoNDEwLCAzMCwgJ2ZpeGVkLWJveCcsIDEwLCAxMCk7CiAgICAgIGRpc3BhdGNoRXZlbnQoMzYs
IDI3MiwgJ3dpdGgtYm9yZGVydG9wZXh0cmEnLCA0LCA0KTsKICAgICAgLy8gZGlzcGF0Y2hFdmVu
dCg2MzksIDMxNiwgJ2luLWNvbHVtbnMnLCAxNzMsIC0xNzIpOyAgLy8gVGhpcyBpcyBidWdneS4g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MwogICAgICBk
aXNwYXRjaEV2ZW50KDU2MywgNDEwLCAnaW5zaWRlLW92ZXJmbG93JywgNywgNik7CiAgICAgIGRp
c3BhdGNoRXZlbnQoMTEyLCAzNjksICd0cmFuc2Zvcm1lZCcsIDExLCAxNSk7CiAgICAgICAgICAg
IAogICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZGlzcGF0
Y2hFdmVudChjbGllbnRYLCBjbGllbnRZLCBleHBlY3RlZEVsZW1lbnRJRCwgZXhwZWN0ZWRPZmZz
ZXRYLCBleHBlY3RlZE9mZnNldFkpCiAgICB7CiAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0
ZUV2ZW50KCJNb3VzZUV2ZW50Iik7CiAgICAgIGV2LmluaXRNb3VzZUV2ZW50KCJjbGljayIsIHRy
dWUsIHRydWUsIHdpbmRvdywgMSwgMSwgMSwgY2xpZW50WCwgY2xpZW50WSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIDAsIGRvY3VtZW50KTsKICAgICAgZXYuZXhwZWN0ZWRFbGVtZW50ID0g
ZXhwZWN0ZWRFbGVtZW50SUQ7CiAgICAgIGV2LmV4cGVjdGVkT2Zmc2V0WCA9IGV4cGVjdGVkT2Zm
c2V0WDsKICAgICAgZXYuZXhwZWN0ZWRPZmZzZXRZID0gZXhwZWN0ZWRPZmZzZXRZOwogICAgICB2
YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldi5wYWdlWCwgZXYucGFnZVkp
OwogICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldik7CiAgICB9CgogICAgZnVuY3Rpb24gY2xp
Y2tlZChldmVudCkKICAgIHsKICAgICAgdmFyIGVsZW1lbnQgPSBldmVudC50YXJnZXQ7CiAgICAg
IAogICAgICB2YXIgcmVzdWx0OwogICAgICBpZiAoZWxlbWVudC5pZCA9PSBldmVudC5leHBlY3Rl
ZEVsZW1lbnQgJiYKICAgICAgICAgIGV2ZW50Lm9mZnNldFggPT0gZXZlbnQuZXhwZWN0ZWRPZmZz
ZXRYICYmCiAgICAgICAgICBldmVudC5vZmZzZXRZID09IGV2ZW50LmV4cGVjdGVkT2Zmc2V0WSkK
ICAgICAgICByZXN1bHQgPSAnUEFTUzogZXZlbnQgYXQgKCcgKyBldmVudC5jbGllbnRYICsgJywg
JyArIGV2ZW50LmNsaWVudFkgKyAnKSBoaXQgJyArIGVsZW1lbnQuaWQgKyAnIGF0IG9mZnNldCAo
JyArIGV2ZW50Lm9mZnNldFggKyAnLCAnICsgZXZlbnQub2Zmc2V0WSArICcpJzsKICAgICAgZWxz
ZQogICAgICAgIHJlc3VsdCA9ICdGQUlMOiBldmVudCBhdCAoJyArIGV2ZW50LmNsaWVudFggKyAn
LCAnICsgZXZlbnQuY2xpZW50WSArICcpIGV4cGVjdGVkIHRvIGhpdCAnICsgZXZlbnQuZXhwZWN0
ZWRFbGVtZW50ICsgJyBhdCAoJyArIGV2ZW50LmV4cGVjdGVkT2Zmc2V0WCArICcsICcgKyBldmVu
dC5leHBlY3RlZE9mZnNldFkgKyAnKSBidXQgaGl0ICcgKyBlbGVtZW50LmlkICsgJyBhdCAoJyAr
IGV2ZW50Lm9mZnNldFggKyAnLCAnICsgZXZlbnQub2Zmc2V0WSArICcpJzsKCiAgICAgIGxvZyhy
ZXN1bHQpOwogICAgfQogICAgCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1
bmN0aW9uKCkgewogICAgICB3aW5kb3cuc2V0VGltZW91dCh0ZXN0LCAwKTsKICAgIH0sIGZhbHNl
KTsKICA8L3NjcmlwdD4KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgog
IAogICAgYm9keSB7CiAgICAgIGhlaWdodDogMjA0OHB4OwogICAgICB3aWR0aDogMjA0OHB4Owog
ICAgICBtYXJnaW46IDA7CiAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgfQoKICAgIC5ib3gg
ewogICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB3aWR0aDogMjAwcHg7CiAgICAgIG1hcmdpbjog
MjBweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKICAgIH0KCiAgICAjYWJzLWJveCB7
CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAxMjVweDsKICAgICAgbGVmdDog
MTAwcHg7CiAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgYm9y
ZGVyOiAxNXB4IHNvbGlkIGdyYXk7CiAgICB9CiAgICAKICAgICNyZWwtYm94IHsKICAgICAgcG9z
aXRpb246IHJlbGF0aXZlOwogICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICB3aWR0aDogMjAwcHg7
CiAgICAgIGxlZnQ6IDQwcHg7CiAgICAgIHRvcDogLTUwcHg7CiAgICAgIGJhY2tncm91bmQtY29s
b3I6ICNDQ0M7CiAgICB9CiAgICAKICAgICNmaXhlZC1ib3ggewogICAgICBwb3NpdGlvbjogZml4
ZWQ7CiAgICAgIHRvcDogMjBweDsKICAgICAgbGVmdDogNDAwcHg7CiAgICAgIHdpZHRoOiAzMDBw
eDsKICAgICAgaGVpZ2h0OiA1MHB4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUFBOwogICAg
fQogICAgCiAgICAjY29sdW1ucyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLXdl
YmtpdC1jb2x1bW4tY291bnQ6IDM7CiAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgdG9wOiAyMDBw
eDsKICAgICAgbGVmdDogNDYwcHg7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOwogICAg
fQogICAgCiAgICAjaW4tY29sdW1ucyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBoZWln
aHQ6IDQwcHg7CiAgICAgIHdpZHRoOiA2MCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CiAgICB9CiAg
ICAKICAgICN0cmFuc2Zvcm1lZCB7CiAgICAgIGhlaWdodDogMTIwcHg7CiAgICAgIHdpZHRoOiAy
MDBweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0RERDsKICAgICAgLXdlYmtpdC10cmFuc2Zv
cm06IHRyYW5zbGF0ZSgxMDBweCwgNTBweCkgcm90YXRlKDIwZGVnKTsKICAgIH0KICAgICNvdmVy
ZmxvdyB7CiAgICAgIG92ZXJmbG93OiBzY3JvbGw7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
ICAgICAgd2lkdGg6IDMwMHB4OwogICAgICB0b3A6IDQ0MHB4OwogICAgICBsZWZ0OiA0NjBweDsK
ICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7CiAgICAg
IGRpcmVjdGlvbjogcnRsOwogICAgfQogICAgCiAgICAjb3ZlcmZsb3ctY29udGVudHMgewogICAg
ICBoZWlnaHQ6IDUwMHB4OwogICAgICB3aWR0aDogMTIwJTsKICAgICAgYmFja2dyb3VuZC1jb2xv
cjogI0JCQjsKICAgIH0KICAgIAogICAgI2luc2lkZS1vdmVyZmxvdyB7CiAgICAgIHdpZHRoOiA1
MCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7CiAgICB9CiAgICAKICAgICNyZXN1bHRz
IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAzMHB4OwogICAgICB0b3A6
IDcwMHB4OwogICAgfQogICAgCiAgICAjbW91c2Vwb3MgewogICAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CiAgICAgIGxlZnQ6IDMwcHg7CiAgICAgIHRvcDogNjUwcHg7CiAgICAgIGNvbG9yOiBncmF5
OwogICAgICBmb250LXNpemU6IHNtYWxsZXI7CiAgICB9CiAgICAKICAgIHRyIHsKLyogICAgICAt
d2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwZGVnKTsqLwogICAgfQogIDwvc3R5bGU+CjwvaGVh
ZD4KPGJvZHkgb25jbGljaz0iY2xpY2tlZChldmVudCkiPgoKPGRpdiBpZD0iZmlsbGVyIiBzdHls
ZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCUi
PjwvZGl2PgoKPCEtLSBUZXN0IGFzc3VtZXMgb2Zmc2V0WC9vZmZzZXRZIGFyZSByZWxhdGl2ZSB0
byBib3JkZXIgYm94LCBidXQgc2VlCiAgICAgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20v
dzNjX2Nzc29tLmh0bWwjbW91c2Vwb3MgLS0+CjxkaXYgaWQ9ImFicy1ib3giPgogIEFic29sdXRl
IHBvc2l0aW9uCiAgPGRpdiBpZD0icmVsLWJveCI+CiAgICBSZWxhdGl2ZSBwb3NpdGlvbgogIDwv
ZGl2PgogIDxkaXYgaWQ9ImZpeGVkLWJveCI+CiAgICBGaXhlZCBwb3NpdGlvbgogIDwvZGl2Pgo8
L2Rpdj4KCjx0YWJsZSBib3JkZXI9IjIiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMiIg
c3R5bGU9IndpZHRoOiA0MDBweDsgbWFyZ2luLXRvcDogMjgwcHg7IG1hcmdpbi1sZWZ0OiA0MHB4
OyI+CiAgPHRyPjx0aD5GaXJzdDwvdGg+PHRoPlNlY29uZDwvdGg+PC90cj4KICA8dHIgc3R5bGU9
InZlcnRpY2FsLWFsaWduOiBjZW50ZXI7Ij48dGQ+VGhpcyBjZWxsIGhhcyBib3JkZXJUb3BFeHRy
YTxkaXYgY2xhc3M9ImJveCIgaWQ9IndpdGgtYm9yZGVydG9wZXh0cmEiIHN0eWxlPSJwb3NpdGlv
bjogcmVsYXRpdmU7IGhlaWdodDogMjBweDsgbWFyZ2luOiA0cHg7Ij48L2Rpdj48L3RkPjx0ZD5M
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgPC90ZD48L3RyPgo8L3RhYmxlPgoKPGRpdiBpZD0iY29sdW1ucyI+CiAgPHA+
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRh
dGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2Vx
dWF0LiA8c3BhbiBpZD0iaW4tY29sdW1ucyI+SW4gY29sdW1uczwvc3Bhbj4gRHVpcyBhdXRlIGly
dXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVt
IGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0
IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1
bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPgo8L2Rpdj4KCjxkaXYgaWQ9InRyYW5z
Zm9ybWVkIj4KICBEaXYgd2l0aCB0cmFuc2Zvcm0KPC9kaXY+Cgo8ZGl2IGlkPSJvdmVyZmxvdyI+
CiAgPGRpdiBpZD0ib3ZlcmZsb3ctY29udGVudHMiPgogICAgPHA+TG9yZW0gaXBzdW0gZG9sb3Ig
c2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRl
bXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmlt
IGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9y
aXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LjwvcD4KICAgIDxkaXYg
aWQ9Imluc2lkZS1vdmVyZmxvdyI+SW4gUlRMIG92ZXJmbG93PC9kaXY+IAogICAgPHA+RHVpcyBh
dXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2Ug
Y2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9j
Y2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEg
ZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPgogIDwvZGl2Pgo8L2Rpdj4K
PGRpdiBpZD0icmVzdWx0cyI+PC9kaXY+CjxkaXYgaWQ9Im1vdXNlcG9zIj48L2Rpdj4KCjwvYm9k
eT4KPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>