<?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>91262</bug_id>
          
          <creation_ts>2012-07-13 10:18:59 -0700</creation_ts>
          <short_desc>TOUCH_ADJUSTMENT is too aggressive when snapping to large elements.</short_desc>
          <delta_ts>2019-02-06 09:18:31 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Ellis">kevers</reporter>
          <assigned_to name="Kevin Ellis">kevers</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>rjkroege</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>669172</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-13 10:18:59 -0700</bug_when>
    <thetext>Currently when TOUCH_ADJUSTMENT is enabled, synthetic mouse events snap to the center of the targeted element.  This works well for snapping to small targets, but creates problems when the snap target is significantly larger than the touch area.

For example, in a wide input field the user has no control over where in the input field the text caret is positioned.

Toolbars can also be problematic if there is a sufficient border on the enclosing DIV to enable adjusting to the DIV rather than the intended button on a near miss.  In this case, snapping to the center of the DIV could result in synthetic click centered on the wrong button, which is potentially far removed from the touch area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669214</commentid>
    <comment_count>1</comment_count>
      <attachid>152296</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-13 10:39:21 -0700</bug_when>
    <thetext>Created attachment 152296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669252</commentid>
    <comment_count>2</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-13 11:04:31 -0700</bug_when>
    <thetext>If the element is transformed and the quad therefore not rectilinear, are you sure this method will give you a point inside the quad?

Snapping to the center was specifically used because I didn&apos;t come up with a good method for finding a spot inside the intersection of the touch-point area and the quad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669256</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-13 11:07:24 -0700</bug_when>
    <thetext>Bonus question: Why are toolbars a problem? Are they replaced elements instead of shadow dom? 

The algorithm is supposed to work on the shadow dom result so it will adjust the point actually responding to the click.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669285</commentid>
    <comment_count>4</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-13 11:23:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Bonus question: Why are toolbars a problem? Are they replaced elements instead of shadow dom? 
&gt; 
&gt; The algorithm is supposed to work on the shadow dom result so it will adjust the point actually responding to the click.

The toolbar issue is not shadow DOM related.  The issue arises if you miss the button sufficiently that there is no overlap with the intended button but still overlap with the border of the enclosing DIV.  In this case, the DIV element becomes the target element and the adjusted position was snapping to the center of the toolbar.  This can result in synthetic mouse events being delivered using a mouse position that is not near the touch area.

Other examples were snap to center is problematic is on the &lt;canvas&gt; tag and &lt;select size=...&gt; .  The &lt;select&gt; case comes up with the month-year selector on the date picker.  Tapping anywhere on the drop-down list, delivers mouse events that  result in selecting the middle element regardless of where on the list you tap.

That said, the existing adjustment algorithm works great for small targets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669361</commentid>
    <comment_count>5</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-13 13:12:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; If the element is transformed and the quad therefore not rectilinear, are you sure this method will give you a point inside the quad?
&gt; 
&gt; Snapping to the center was specifically used because I didn&apos;t come up with a good method for finding a spot inside the intersection of the touch-point area and the quad.

The point is not guaranteed to be inside in the event that the transformed quad is not rectangular; however, I believe that the &quot;cost&quot; of a miss may be less than the cost of a synthetic click that is not close to the touch area.  The month-year drop-down on the calendar picker is a good example.

An alternate algorithm was to move further inside the bounds limited by the radius of the touch area rather than just inside the rectangular enclosure.  The reason this approach was not used is that it becomes very difficult to position the text caret at the start of an input field, more difficult to select the first or last element in a list, ...

The snapping could be adapted to snap to a quad if non-rectangular bounds are sufficiently common.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669374</commentid>
    <comment_count>6</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-13 13:27:47 -0700</bug_when>
    <thetext>FWIW, in blackberry, we snap to the center of the intersection area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669377</commentid>
    <comment_count>7</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-13 13:30:30 -0700</bug_when>
    <thetext>If I understood the problem correct, arbitrarily snapping to the middle of the element can be very bad indeed.

Image a big button and one clicking on its far right portion. Then, if in the middle of it there is a fixed position element, snapping could hit the wrong target.

(In reply to comment #0)
&gt; Currently when TOUCH_ADJUSTMENT is enabled, synthetic mouse events snap to the center of the targeted element.  This works well for snapping to small targets, but creates problems when the snap target is significantly larger than the touch area.
&gt; 
&gt; For example, in a wide input field the user has no control over where in the input field the text caret is positioned.
&gt; 
&gt; Toolbars can also be problematic if there is a sufficient border on the enclosing DIV to enable adjusting to the DIV rather than the intended button on a near miss.  In this case, snapping to the center of the DIV could result in synthetic click centered on the wrong button, which is potentially far removed from the touch area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669424</commentid>
    <comment_count>8</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-13 14:34:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; FWIW, in blackberry, we snap to the center of the intersection area.

This is a very interesting alternative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669826</commentid>
    <comment_count>9</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-14 06:50:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; FWIW, in blackberry, we snap to the center of the intersection area.
&gt; 
&gt; This is a very interesting alternative.

This is what I would prefer. The problem is that it is an intersection of a quad and and rect, not between two rects. It makes it geometrically complicated (though for the 99.9% case of untransformed elements it is trivial).

I have though of an alternative twist to your suggested patch. You could take the center of the quad, and snap that to the touch-area if it is outside. This would adjust to an edge of the touch-area in the direction of the center of the quad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669836</commentid>
    <comment_count>10</comment_count>
      <attachid>152296</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-14 09:09:16 -0700</bug_when>
    <thetext>Comment on attachment 152296
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        adjusted position unchanged if tapping within the element or to snap
&gt; +        to a point just inside the nearest edge if the touch point lies 
&gt; +        outside the bounds of the element.  This strategy works well for
&gt; +        small as well as large targets.

As I said before, it has a weak point: If there is a fixed position element on top of the target&apos;s nearest edge?

Do we care?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670597</commentid>
    <comment_count>11</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-16 13:09:01 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 152296 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152296&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        adjusted position unchanged if tapping within the element or to snap
&gt; &gt; +        to a point just inside the nearest edge if the touch point lies 
&gt; &gt; +        outside the bounds of the element.  This strategy works well for
&gt; &gt; +        small as well as large targets.
&gt; 
&gt; As I said before, it has a weak point: If there is a fixed position element on top of the target&apos;s nearest edge?
&gt; 
&gt; Do we care?

Not sure that this is a problem.  Adjusting to the edge only if the initial point is outside the bounds.  A competing element at the boundary could end up handling the synthetic mouse event, but at least it would need to overlap the touch area.  Currently, it is possible for an element far removed from the touch area to receive the synthetic mouse events after adjustment.

Having said that, there is a problem in the patch whereby the element bounds and touch hotspot are in different coordinate systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670629</commentid>
    <comment_count>12</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-16 13:45:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Having said that, there is a problem in the patch whereby the element bounds and touch hotspot are in different coordinate systems.

They shouldn&apos;t be, there should be a transformation on the target area to screen coords. This transformation is for instance essential to zoom targeting.

Continuing from some of comments earlier:
I am rethinking the problem with transformations. If we hold on to your idea of only adjusting the target if it not already in the picked target area (using FloatQuad::contains for instance), then doing a potentially bad adjustment for rare corner cases is a smaller issue, since we in the worst case scenario only loose the touch adjustment when the point is outside of the area, but could not end up making an area completely un-hittable.

Currently non-rectangular transformations are not handled correctly during hit-detection or distance calculations either, so it still low priority to handle them fault-free here at a latter stage.

To conclude, my suggestion will be to use a combination of your idea of only adjusting the target if is not already in the targeted area, and if it is outside then use a similar idea as in the blackberry port and place the target in the center of the intersection of the bounding-box of the target area and the touch area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671388</commentid>
    <comment_count>13</comment_count>
      <attachid>152786</attachid>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-17 10:52:20 -0700</bug_when>
    <thetext>Created attachment 152786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671411</commentid>
    <comment_count>14</comment_count>
    <who name="Kevin Ellis">kevers</who>
    <bug_when>2012-07-17 11:08:45 -0700</bug_when>
    <thetext>Revised strategy is as follows:

For rectilinear elements
  - Don&apos;t adjust if inside element bounds, but set target node.
  - Adjust to center of overlap between touch area and element bounds.
  - Fail if touch area and element bounds don&apos;t overlap.

For non-rectilinear elements
  - Don&apos;t adjust if inside quad boundary of element, but set target node.
  - Pull point towards center of element by a maximum of the touch radius.
  - Discard adjustment if candidate point is not inside quad.

Added a test for the non-rectilinear case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671498</commentid>
    <comment_count>15</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-17 12:31:37 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Revised strategy is as follows:
&gt; 
&gt; For rectilinear elements
&gt;   - Don&apos;t adjust if inside element bounds, but set target node.
&gt;   - Adjust to center of overlap between touch area and element bounds.
&gt;   - Fail if touch area and element bounds don&apos;t overlap.
&gt; 
&gt; For non-rectilinear elements
&gt;   - Don&apos;t adjust if inside quad boundary of element, but set target node.
&gt;   - Pull point towards center of element by a maximum of the touch radius.
&gt;   - Discard adjustment if candidate point is not inside quad.
&gt; 
&gt; Added a test for the non-rectilinear case.

Good stuff! I was about to say that the strategy doesn&apos;t guarantee to adjust to a point in the quad, but you noticed that already.

I think it is almost overkill, but now that you have already done the work, it looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671557</commentid>
    <comment_count>16</comment_count>
      <attachid>152786</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-17 13:46:09 -0700</bug_when>
    <thetext>Comment on attachment 152786
Patch

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

&gt; Source/WebCore/page/TouchAdjustment.cpp:286
&gt; +    float cx = 0.25*(p1.x() + p2.x() + p3.x() + p4.x());
&gt; +    float cy = 0.25*(p1.y() + p2.y() + p3.y() + p4.y());

space * scpace

&gt; Source/WebCore/page/TouchAdjustment.cpp:290
&gt; +    FloatSize v = center - touchPoint;
&gt; +    float d = v.diagonalLength();

v and d are not the webkit style for var names.

&gt; Source/WebCore/page/TouchAdjustment.cpp:295
&gt; +    float r = sqrt(dx*dx + dy*dy);

ditto + spaces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672338</commentid>
    <comment_count>17</comment_count>
      <attachid>153004</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-07-18 06:54:16 -0700</bug_when>
    <thetext>Created attachment 153004
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672371</commentid>
    <comment_count>18</comment_count>
      <attachid>153004</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-18 07:47:52 -0700</bug_when>
    <thetext>Comment on attachment 153004
Patch for landing

Clearing flags on attachment: 153004

Committed r122970: &lt;http://trac.webkit.org/changeset/122970&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672372</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-18 07:47:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503182</commentid>
    <comment_count>20</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:18:31 -0800</bug_when>
    <thetext>Mass move bugs into the DOM component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152296</attachid>
            <date>2012-07-13 10:39:21 -0700</date>
            <delta_ts>2012-07-17 10:52:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91262-20120713133920.patch</filename>
            <type>text/plain</type>
            <size>12190</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWVmMjYyNzJmNWI5ZDU1
ZDYxOGFkOGJlYzk5OGIzYjljNGZiZjBjOC4uM2UxNWFjNjU0ZTM4ZTdkOTk1MTE1ODY3YWU2MDc3
Mzc1MzI0YmI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTEzICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVE9VQ0hfQURKVVNUTUVO
VCBpcyB0b28gYWdncmVzc2l2ZSB3aGVuIHNuYXBwaW5nIHRvIGxhcmdlIGVsZW1lbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb25zdHJhaW5zIHRo
ZSBleHRlbnQgdG8gd2hpY2ggdGhlIHRvdWNoIHBvaW50IGNhbiBiZSBhZGp1c3RlZCB3aGVuCisg
ICAgICAgIGdlbmVyYXRpbmcgc3ludGhldGljIG1vdXNlIGV2ZW50cyB3aGVuIFRPVUNIX0FESlVT
VEVNTlQgaXMgZW5hYmxlZC4KKyAgICAgICAgUHJldmlvdXNseSwgdGhlIHRhcmdldCBwb3NpdGlv
biBzbmFwcGVkIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHRhcmdldAorICAgICAgICBlbGVtZW50LCB3
aGljaCBjYW4gYmUgZmFyIHJlbW92ZWQgZnJvbSB0aGUgdG91Y2ggcG9zaXRpb24gd2hlbiB0YXBw
aW5nCisgICAgICAgIG9uIG9yIG5lYXIgYSBsYXJnZSBlbGVtZW50LiAgVGhlIHJlZmluZWQgc3Ry
YXRlZ3kgaXMgdG8gbGVhdmUgdGhlCisgICAgICAgIGFkanVzdGVkIHBvc2l0aW9uIHVuY2hhbmdl
ZCBpZiB0YXBwaW5nIHdpdGhpbiB0aGUgZWxlbWVudCBvciB0byBzbmFwCisgICAgICAgIHRvIGEg
cG9pbnQganVzdCBpbnNpZGUgdGhlIG5lYXJlc3QgZWRnZSBpZiB0aGUgdG91Y2ggcG9pbnQgbGll
cyAKKyAgICAgICAgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBlbGVtZW50LiAgVGhpcyBzdHJh
dGVneSB3b3JrcyB3ZWxsIGZvcgorICAgICAgICBzbWFsbCBhcyB3ZWxsIGFzIGxhcmdlIHRhcmdl
dHMuCisKKyAgICAgICAgVGVzdDogdG91Y2hhZGp1c3RtZW50L2JpZy1kaXYuaHRtbAorCisgICAg
ICAgICogcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hB
ZGp1c3RtZW50OjpjbGFtcFRvSW50ZXJ2YWwpOgorICAgICAgICAoVG91Y2hBZGp1c3RtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6c25hcFRvKToKKyAgICAgICAgKFdl
YkNvcmU6OlRvdWNoQWRqdXN0bWVudDo6ZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWMp
OgorCiAyMDEyLTA3LTEyICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlbW92ZSByZXNvdXJjZXMgcGFuZWwgZWRpdGVkIHJl
c291cmNlcyBzZWFyY2ggc3VwcG9ydC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VG91Y2hBZGp1c3RtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50
LmNwcAppbmRleCBjZDQ2MGMwYjc3ZDhiMTg5YzM0NDUxNzM3NDliNzU3ODUyOGM5ZTRhLi4wMzE4
MTk1MjE3NmI3ZmM2NDFjNzk2ZGZkYmU3Yzc1NWQ2NTU4NWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0yMzksNiArMjM5LDIyIEBAIGZsb2F0IHpvb21hYmxl
SW50ZXJzZWN0aW9uUXVvdGllbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3Qg
SW50UmVjdCYKICAgICByZXR1cm4gcmVjdC5zaXplKCkuYXJlYSgpIC8gKGZsb2F0KWludGVyc2Vj
dGlvbi5zaXplKCkuYXJlYSgpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjbGFtcFRvSW50ZXJ2
YWwoaW50IHgsIGludCBtaW4sIGludCBtYXgpCit7CisgICAgaWYgKHggPCBtaW4pCisgICAgICAg
IHJldHVybiBtaW47CisgICAgaWYgKHggPiBtYXgpCisgICAgICAgIHJldHVybiBtYXg7CisgICAg
cmV0dXJuIHg7Cit9CisKK0ludFBvaW50IHNuYXBUbyhjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeSYg
Z2VvbSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIEludFJlY3QgYm91bmRzID0gZ2Vv
bS5ib3VuZGluZ0JveCgpOworICAgIGludCB4ID0gY2xhbXBUb0ludGVydmFsKHBvaW50LngoKSwg
Ym91bmRzLngoKSArIDEsIGJvdW5kcy5tYXhYKCkgLSAxKTsKKyAgICBpbnQgeSA9IGNsYW1wVG9J
bnRlcnZhbChwb2ludC55KCksIGJvdW5kcy55KCkgKyAxLCBib3VuZHMubWF4WSgpIC0gMSk7Cisg
ICAgcmV0dXJuIEludFBvaW50KHgsIHkpOworfQogCiAvLyBBIGdlbmVyaWMgZnVuY3Rpb24gZm9y
IGZpbmRpbmcgdGhlIHRhcmdldCBub2RlIHdpdGggdGhlIGxvd2VzdCBkaXN0YW5jZSBtZXRyaWMu
IEEgZGlzdGFuY2UgbWV0cmljIGhlcmUgaXMgdGhlIHJlc3VsdAogLy8gb2YgYSBkaXN0YW5jZS1s
aWtlIGZ1bmN0aW9uLCB0aGF0IGNvbXB1dGVzIGhvdyB3ZWxsIHRoZSB0b3VjaCBoaXRzIHRoZSBu
b2RlLgpAQCAtMjUzLDEzICsyNjksMTQgQEAgYm9vbCBmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5j
ZU1ldHJpYyhOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRhcmdldFBvaW50LAogICAgICAg
ICBOb2RlKiBub2RlID0gaXQtPm5vZGUoKTsKICAgICAgICAgZmxvYXQgZGlzdGFuY2VNZXRyaWMg
PSBkaXN0YW5jZUZ1bmN0aW9uKHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCAqaXQpOwogICAgICAg
ICBpZiAoZGlzdGFuY2VNZXRyaWMgPCBiZXN0RGlzdGFuY2VNZXRyaWMpIHsKLSAgICAgICAgICAg
IHRhcmdldFBvaW50ID0gcm91bmRlZEludFBvaW50KGl0LT5xdWFkKCkuY2VudGVyKCkpOworICAg
ICAgICAgICAgdGFyZ2V0UG9pbnQgPSBzbmFwVG8oKml0LCB0b3VjaEhvdHNwb3QpOwogICAgICAg
ICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOwogICAgICAgICAgICAgdGFyZ2V0
Tm9kZSA9IG5vZGU7CiAgICAgICAgICAgICBiZXN0RGlzdGFuY2VNZXRyaWMgPSBkaXN0YW5jZU1l
dHJpYzsKICAgICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZU1ldHJpYyA9PSBiZXN0RGlzdGFuY2VN
ZXRyaWMpIHsKICAgICAgICAgICAgIC8vIFRyeSB0byBhbHdheXMgcmV0dXJuIHRoZSBpbm5lci1t
b3N0IGVsZW1lbnQuCiAgICAgICAgICAgICBpZiAobm9kZS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0
Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRQb2ludCA9IHNuYXBUbygqaXQsIHRvdWNo
SG90c3BvdCk7CiAgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7CiAgICAgICAgICAg
ICAgICAgdGFyZ2V0QXJlYSA9IGl0LT5ib3VuZGluZ0JveCgpOwogICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDQxMTA5MTZmYWI5NmIwODIyYThkZWE4ZTE2MDlkZTgwNWU4NzdlMzYuLmQ5MTg0ZDBmOGUy
YzhlYTFkMGZmYjRjMzhjM2VlMTAyOGE3ZGU2ODQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAx
Mi0wNy0xMyAgS2V2aW4gRWxsaXMgIDxrZXZlcnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRP
VUNIX0FESlVTVE1FTlQgaXMgdG9vIGFnZ3Jlc3NpdmUgd2hlbiBzbmFwcGluZyB0byBsYXJnZSBl
bGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTkxMjYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaW5nIGEgdGVzdCBjYXNlIHRvIGVuc3VyZSB0aGF0IHRoZSBhZGp1c3RlZCB0b3VjaCBwb3Np
dGlvbiBpcyAKKyAgICAgICAgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHRhcmdldCBlbGVtZW50
IGFuZCB0aGUgdG91Y2ggYXJlYS4KKyAgICAgICAgUHJldmlvdXNseSwgdGhlIHRhcmdldCBwb3Np
dGlvbiBzbmFwcGVkIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHRhcmdldAorICAgICAgICBlbGVtZW50
LCB3aGljaCBjYW4gYmUgZmFyIHJlbW92ZWQgZnJvbSB0aGUgdG91Y2ggYXJlYS4KKworICAgICAg
ICAqIHRvdWNoYWRqdXN0bWVudC9iaWctZGl2LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogdG91Y2hhZGp1c3RtZW50L2JpZy1kaXYuaHRtbDogQWRkZWQuCisKIDIwMTItMDctMTIgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZW1v
dmUgYSBsYXJnZSBudW1iZXIgb2YgZW1wdHkgZGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvYmlnLWRpdi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvYmlnLWRpdi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNlMzFj
YmY4ODkwMWI3ZDU2ZWM0Mzk3YjJiNzUyYTI3OTdkNDc3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9iaWctZGl2LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDY0IEBACitUZXN0IHRvdWNoIGFkanVzdG1lbnQgb24gYSBsYXJnZSBkaXYuIFRoZSBhZGp1c3Rl
ZCB0b3VjaCBwb2ludCBzaG91bGQgbGllIGluc2lkZSB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIHdp
dGhpbiB0aGUgdG91Y2ggYXJlYS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKwor
T3ZlcmxhcHBpbmcgdG91Y2ggYWJvdmUgdGhlIHRhcmdldCBzaG91bGQgc25hcCB0byB0aGUgdG9w
IG9mIHRoZSB0YXJnZXQgZWxlbWVudC4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQu
aWQKK1BBU1MgYWRqdXN0ZWRQb2ludC54ID49IHRhcmdldEJvdW5kcy54IGlzIHRydWUKK1BBU1Mg
YWRqdXN0ZWRQb2ludC54IDw9IHRhcmdldEJvdW5kcy54ICsgdGFyZ2V0Qm91bmRzLndpZHRoIGlz
IHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55ID49IHRhcmdldEJvdW5kcy55IGlzIHRydWUKK1BB
U1MgYWRqdXN0ZWRQb2ludC55IDw9IHRhcmdldEJvdW5kcy55ICsgdGFyZ2V0Qm91bmRzLmhlaWdo
dCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA+PSB0b3VjaEJvdW5kcy54IGlzIHRydWUK
K1BBU1MgYWRqdXN0ZWRQb2ludC54IDw9IHRvdWNoQm91bmRzLnggKyB0b3VjaEJvdW5kcy53aWR0
aCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA+PSB0b3VjaEJvdW5kcy55IGlzIHRydWUK
K1BBU1MgYWRqdXN0ZWRQb2ludC55IDw9IHRvdWNoQm91bmRzLnkgKyB0b3VjaEJvdW5kcy5oZWln
aHQgaXMgdHJ1ZQorCitPdmVybGFwcGluZyB0b3VjaCBiZWxvdyB0aGUgdGFyZ2V0IHNob3VsZCBz
bmFwIHRvIHRoZSBib3R0b20gb2YgdGhlIHRhcmdldCBlbGVtZW50LgorUEFTUyBhZGp1c3RlZE5v
ZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZFBvaW50LnggPj0gdGFyZ2V0Qm91bmRz
LnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdGFyZ2V0Qm91bmRzLnggKyB0YXJn
ZXRCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPj0gdGFyZ2V0Qm91
bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdGFyZ2V0Qm91bmRzLnkgKyB0
YXJnZXRCb3VuZHMuaGVpZ2h0IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54ID49IHRvdWNo
Qm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdG91Y2hCb3VuZHMueCAr
IHRvdWNoQm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55ID49IHRvdWNo
Qm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdG91Y2hCb3VuZHMueSAr
IHRvdWNoQm91bmRzLmhlaWdodCBpcyB0cnVlCisKK092ZXJsYXBwaW5nIHRvdWNoIGxlZnQgb2Yg
dGhlIHRhcmdldCBzaG91bGQgc25hcCB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YXJnZXQgZWxl
bWVudC4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWRQ
b2ludC54ID49IHRhcmdldEJvdW5kcy54IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54IDw9
IHRhcmdldEJvdW5kcy54ICsgdGFyZ2V0Qm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0
ZWRQb2ludC55ID49IHRhcmdldEJvdW5kcy55IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55
IDw9IHRhcmdldEJvdW5kcy55ICsgdGFyZ2V0Qm91bmRzLmhlaWdodCBpcyB0cnVlCitQQVNTIGFk
anVzdGVkUG9pbnQueCA+PSB0b3VjaEJvdW5kcy54IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2lu
dC54IDw9IHRvdWNoQm91bmRzLnggKyB0b3VjaEJvdW5kcy53aWR0aCBpcyB0cnVlCitQQVNTIGFk
anVzdGVkUG9pbnQueSA+PSB0b3VjaEJvdW5kcy55IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2lu
dC55IDw9IHRvdWNoQm91bmRzLnkgKyB0b3VjaEJvdW5kcy5oZWlnaHQgaXMgdHJ1ZQorCitPdmVy
bGFwcGluZyB0b3VjaCByaWdodCBvZiB0aGUgdGFyZ2V0IHNob3VsZCBzbmFwIHRvIHRoZSByaWdo
dCBzaWRlIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVs
ZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWRQb2ludC54ID49IHRhcmdldEJvdW5kcy54IGlzIHRydWUK
K1BBU1MgYWRqdXN0ZWRQb2ludC54IDw9IHRhcmdldEJvdW5kcy54ICsgdGFyZ2V0Qm91bmRzLndp
ZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55ID49IHRhcmdldEJvdW5kcy55IGlzIHRy
dWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55IDw9IHRhcmdldEJvdW5kcy55ICsgdGFyZ2V0Qm91bmRz
LmhlaWdodCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA+PSB0b3VjaEJvdW5kcy54IGlz
IHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54IDw9IHRvdWNoQm91bmRzLnggKyB0b3VjaEJvdW5k
cy53aWR0aCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA+PSB0b3VjaEJvdW5kcy55IGlz
IHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55IDw9IHRvdWNoQm91bmRzLnkgKyB0b3VjaEJvdW5k
cy5oZWlnaHQgaXMgdHJ1ZQorCitUZXN0IHRvdWNoIGFyZWEgY29udGFpbmVkIHdpdGhpbiB0aGUg
dGFyZ2V0IGVsZW1lbnQuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNT
IGFkanVzdGVkUG9pbnQueCA+PSB0YXJnZXRCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVk
UG9pbnQueCA8PSB0YXJnZXRCb3VuZHMueCArIHRhcmdldEJvdW5kcy53aWR0aCBpcyB0cnVlCitQ
QVNTIGFkanVzdGVkUG9pbnQueSA+PSB0YXJnZXRCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVz
dGVkUG9pbnQueSA8PSB0YXJnZXRCb3VuZHMueSArIHRhcmdldEJvdW5kcy5oZWlnaHQgaXMgdHJ1
ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPj0gdG91Y2hCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFk
anVzdGVkUG9pbnQueCA8PSB0b3VjaEJvdW5kcy54ICsgdG91Y2hCb3VuZHMud2lkdGggaXMgdHJ1
ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPj0gdG91Y2hCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFk
anVzdGVkUG9pbnQueSA8PSB0b3VjaEJvdW5kcy55ICsgdG91Y2hCb3VuZHMuaGVpZ2h0IGlzIHRy
dWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvYmlnLWRpdi5odG1sIGIvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2JpZy1kaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWJjYzc3
Njg5OWY4ZGFkZTBmNDVlY2MyZWQwZjMxNGM4NTVhMWFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2JpZy1kaXYuaHRtbApAQCAtMCwwICsxLDEwOSBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyAgICAjdGFyZ2V0RGl2IHsKKyAgICAgICAgYmFja2dy
b3VuZDogIzAwZjsKKyAgICAgICAgaGVpZ2h0OiA0MDBweDsKKyAgICAgICAgd2lkdGg6IDQwMHB4
OworICAgIH0KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVz
dHMoKSI+CisKKzxkaXYgaWQ9InRhcmdldERpdiI+Cis8L2Rpdj4KKworPHAgaWQ9J2Rlc2NyaXB0
aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKworPHNjcmlwdD4KKyAgICB2YXIg
ZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIHZhciBhZGp1c3RlZFBvaW50Owor
ICAgIHZhciB0YXJnZXRCb3VuZHM7CisgICAgdmFyIHRvdWNoQm91bmRzOworCisgICAgZnVuY3Rp
b24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkgeworICAgICAgICB2YXIgcG9zID0ge2xlZnQ6
IDAsIHRvcDogMH07CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUu
b2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAg
ICAgIH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNldFBhcmVudCk7CisgICAgICAgIHJldHVybiBw
b3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVG91Y2hUZXN0cygpIHsKKyAgICAgICAgZWxl
bWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXREaXYiKTsKKyAgICAgICAgZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge30sIGZhbHNlKTsKKyAg
ICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHt9LCBm
YWxzZSk7CisKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKGVsZW1lbnQp
OworCisgICAgICAgIHZhciB4ID0gcG9zLmxlZnQ7CisgICAgICAgIHZhciB5ID0gcG9zLnRvcDsK
KyAgICAgICAgdmFyIHdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDsKKyAgICAgICAgdmFyIGhl
aWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OworCisgICAgICAgIHRhcmdldEJvdW5kcyA9IHsK
KyAgICAgICAgICAgIHg6IHgsCisgICAgICAgICAgICB5OiB5LAorICAgICAgICAgICAgd2lkdGg6
IHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQKKyAgICAgICAgfTsKKworICAgICAg
ICB2YXIgdG91Y2hSYWRpdXMgPSAxMDsKKyAgICAgICAgdmFyIG9mZnNldCA9IHRvdWNoUmFkaXVz
IC8gMjsKKyAgICAgICAgdmFyIG1pZFggPSB4ICsgd2lkdGggLyAyOworICAgICAgICB2YXIgbWlk
WSA9IHkgKyBoZWlnaHQgLyAyOworCisgICAgICAgIGRlYnVnKCdcbk92ZXJsYXBwaW5nIHRvdWNo
IGFib3ZlIHRoZSB0YXJnZXQgc2hvdWxkIHNuYXAgdG8gdGhlIHRvcCBvZiB0aGUgdGFyZ2V0IGVs
ZW1lbnQuJyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYLCB5IC0gb2Zmc2V0LCB0b3VjaFJhZGl1
cywgdGFyZ2V0Qm91bmRzKTsKKyAgICAgICAgZGVidWcoJ1xuT3ZlcmxhcHBpbmcgdG91Y2ggYmVs
b3cgdGhlIHRhcmdldCBzaG91bGQgc25hcCB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXQgZWxl
bWVudC4nKTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFgsIHkgKyBoZWlnaHQgKyBvZmZzZXQsIHRv
dWNoUmFkaXVzLCB0YXJnZXRCb3VuZHMpOworICAgICAgICBkZWJ1ZygnXG5PdmVybGFwcGluZyB0
b3VjaCBsZWZ0IG9mIHRoZSB0YXJnZXQgc2hvdWxkIHNuYXAgdG8gdGhlIGxlZnQgc2lkZSBvZiB0
aGUgdGFyZ2V0IGVsZW1lbnQuJyk7CisgICAgICAgIHRlc3RUb3VjaCh4IC0gb2Zmc2V0LCBtaWRZ
LCB0b3VjaFJhZGl1cywgdGFyZ2V0Qm91bmRzKTsKKyAgICAgICAgZGVidWcoJ1xuT3ZlcmxhcHBp
bmcgdG91Y2ggcmlnaHQgb2YgdGhlIHRhcmdldCBzaG91bGQgc25hcCB0byB0aGUgcmlnaHQgc2lk
ZSBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuJyk7CisgICAgICAgIHRlc3RUb3VjaCh4ICsgd2lkdGgg
KyBvZmZzZXQsIG1pZFksIHRvdWNoUmFkaXVzLCB0YXJnZXRCb3VuZHMpOworICAgICAgICBkZWJ1
ZygnXG5UZXN0IHRvdWNoIGFyZWEgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFyZ2V0IGVsZW1lbnQu
Jyk7CisgICAgICAgIHRlc3RUb3VjaChtaWRYLCBtaWRZLCB0b3VjaFJhZGl1cywgdGFyZ2V0Qm91
bmRzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0VG91Y2godG91Y2hYLCB0b3VjaFksIHJh
ZGl1cywgdGFyZ2V0Qm91bmRzKSB7CisKKyAgICAgICAgdG91Y2hCb3VuZHMgPSB7CisgICAgICAg
ICAgICB4OiB0b3VjaFggLSByYWRpdXMsCisgICAgICAgICAgICB5OiB0b3VjaFkgLSByYWRpdXMs
CisgICAgICAgICAgICB3aWR0aDogMiAqIHJhZGl1cywKKyAgICAgICAgICAgIGhlaWdodDogMiAq
IHJhZGl1cworICAgICAgICB9OworICAgICAgICBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91
Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHRvdWNoQm91bmRzLngsIHRvdWNoQm91
bmRzLnksIHRvdWNoQm91bmRzLndpZHRoLCB0b3VjaEJvdW5kcy5oZWlnaHQsIGRvY3VtZW50KTsK
KyAgICAgICAgc2hvdWxkQmUoJ2FkanVzdGVkTm9kZS5pZCcsICdlbGVtZW50LmlkJyk7CisgICAg
ICAgIGFkanVzdGVkUG9pbnQgPSBpbnRlcm5hbHMudG91Y2hQb3NpdGlvbkFkanVzdGVkVG9CZXN0
Q2xpY2thYmxlTm9kZSh0b3VjaEJvdW5kcy54LCB0b3VjaEJvdW5kcy55LCB0b3VjaEJvdW5kcy53
aWR0aCwgdG91Y2hCb3VuZHMuaGVpZ2h0LCBkb2N1bWVudCk7CisKKyAgICAgICAgc2hvdWxkQmVU
cnVlKCdhZGp1c3RlZFBvaW50LnggPj0gdGFyZ2V0Qm91bmRzLngnKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCdhZGp1c3RlZFBvaW50LnggPD0gdGFyZ2V0Qm91bmRzLnggKyB0YXJnZXRCb3VuZHMu
d2lkdGgnKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdhZGp1c3RlZFBvaW50LnkgPj0gdGFyZ2V0
Qm91bmRzLnknKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdhZGp1c3RlZFBvaW50LnkgPD0gdGFy
Z2V0Qm91bmRzLnkgKyB0YXJnZXRCb3VuZHMuaGVpZ2h0Jyk7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgnYWRqdXN0ZWRQb2ludC54ID49IHRvdWNoQm91bmRzLngnKTsKKyAgICAgICAgc2hvdWxkQmVU
cnVlKCdhZGp1c3RlZFBvaW50LnggPD0gdG91Y2hCb3VuZHMueCArIHRvdWNoQm91bmRzLndpZHRo
Jyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnYWRqdXN0ZWRQb2ludC55ID49IHRvdWNoQm91bmRz
LnknKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdhZGp1c3RlZFBvaW50LnkgPD0gdG91Y2hCb3Vu
ZHMueSArIHRvdWNoQm91bmRzLmhlaWdodCcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRl
c3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50
ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUp
IHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoIGFkanVzdG1lbnQgb24gYSBs
YXJnZSBkaXYuICBUaGUgYWRqdXN0ZWQgdG91Y2ggcG9pbnQgc2hvdWxkIGxpZSBpbnNpZGUgdGhl
IHRhcmdldCBlbGVtZW50IGFuZCB3aXRoaW4gdGhlIHRvdWNoIGFyZWEuJyk7CisgICAgICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgICAgICAgICAgcnVuVG91Y2hUZXN0cygpOworICAgICAgICAgICAgaXNT
dWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152786</attachid>
            <date>2012-07-17 10:52:20 -0700</date>
            <delta_ts>2012-07-18 06:54:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91262-20120717135220.patch</filename>
            <type>text/plain</type>
            <size>20932</size>
            <attacher name="Kevin Ellis">kevers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGYyMGFjNzQ5YzU1ODgz
OGNiOWZkYTNjMTE0ZTVkN2ViYTYyYmM0OC4uOWRiOTdkOWQ3ZWI3ZWU1YWEzMWM3N2IxYTRkZDRm
MWIxM2E5NWQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA3LTE3ICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVE9VQ0hfQURKVVNUTUVO
VCBpcyB0b28gYWdncmVzc2l2ZSB3aGVuIHNuYXBwaW5nIHRvIGxhcmdlIGVsZW1lbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb25zdHJhaW5zIHRo
ZSBleHRlbnQgdG8gd2hpY2ggdGhlIHRvdWNoIHBvaW50IGNhbiBiZSBhZGp1c3RlZCB3aGVuCisg
ICAgICAgIGdlbmVyYXRpbmcgc3ludGhldGljIG1vdXNlIGV2ZW50cyB3aGVuIFRPVUNIX0FESlVT
VEVNTlQgaXMgZW5hYmxlZC4KKyAgICAgICAgUHJldmlvdXNseSwgdGhlIHRhcmdldCBwb3NpdGlv
biBzbmFwcGVkIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHRhcmdldAorICAgICAgICBlbGVtZW50LCB3
aGljaCBjYW4gYmUgZmFyIHJlbW92ZWQgZnJvbSB0aGUgdG91Y2ggcG9zaXRpb24gd2hlbiB0YXBw
aW5nCisgICAgICAgIG9uIG9yIG5lYXIgYSBsYXJnZSBlbGVtZW50LiAgVGhlIHJlZmluZWQgc3Ry
YXRlZ3kgaXMgdG8gbGVhdmUgdGhlCisgICAgICAgIGFkanVzdGVkIHBvc2l0aW9uIHVuY2hhbmdl
ZCBpZiB0YXBwaW5nIHdpdGhpbiB0aGUgZWxlbWVudCBvciB0byBzbmFwCisgICAgICAgIHRvIHRo
ZSBjZW50ZXIgb2YgdGhlIG92ZXJsYXAgcmVnaW9uIGlmIHRoZSB0b3VjaCBwb2ludCBsaWVzIG91
dHNpZGUgdGhlCisgICAgICAgIGJvdW5kcyBvZiB0aGUgZWxlbWVudCwgYnV0IHRoZSB0b3VjaCBh
cmVhIGFuZCBlbGVtZW50IGJvdW5kcyBvdmVybGFwLgorICAgICAgICBGb3Igbm9uLXJlY3RpbGlu
ZWFyeSBib3VuZHMsIGEgcG9pbnQgbHlpbmcgb3V0c2lkZSB0aGUgZWxlbWVudCBib3VuZGFyeQor
ICAgICAgICBpcyBwdWxsZWQgdG93YXJkcyB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50LCBieSBh
biBhbW91bnQgbGltaXRlZCBieQorICAgICAgICB0aGUgcmFkaXVzIG9mIHRoZSB0b3VjaCBhcmVh
LgorCisgICAgICAgIFRlc3RzOiB0b3VjaGFkanVzdG1lbnQvYmlnLWRpdi5odG1sCisgICAgICAg
ICAgICAgICB0b3VjaGFkanVzdG1lbnQvcm90YXRlZC1ub2RlLmh0bWwKKworICAgICAgICAqIHBh
Z2UvVG91Y2hBZGp1c3RtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoQWRqdXN0bWVu
dDo6Y29udGVudHNUb1dpbmRvdyk6CisgICAgICAgIChUb3VjaEFkanVzdG1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50OjpzbmFwVG8pOgorICAgICAgICAoV2ViQ29yZTo6
VG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5jZU1ldHJpYyk6CisKIDIw
MTItMDctMTcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAgICAgUmVu
YW1lIENTUyBFeGNsdXNpb25zIENTU1dyYXBTaGFwZSBjbGFzcyBwcm9wZXJ0aWVzIHRvIG1hdGNo
IEV4Y2x1c2lvbiBzaGFwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Rv
dWNoQWRqdXN0bWVudC5jcHAKaW5kZXggY2Q0NjBjMGI3N2Q4YjE4OWMzNDQ1MTczNzQ5Yjc1Nzg1
MjhjOWU0YS4uOWI3YjhhMzc5MzFhZDg5ZTY2NjQ5NzVhNGI5ZWE3NjVlYzY1NDc3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApAQCAtMjM5LDYgKzIzOSw3NiBAQCBm
bG9hdCB6b29tYWJsZUludGVyc2VjdGlvblF1b3RpZW50KGNvbnN0IEludFBvaW50JiB0b3VjaEhv
dHNwb3QsIGNvbnN0IEludFJlY3QmCiAgICAgcmV0dXJuIHJlY3Quc2l6ZSgpLmFyZWEoKSAvIChm
bG9hdClpbnRlcnNlY3Rpb24uc2l6ZSgpLmFyZWEoKTsKIH0KIAorRmxvYXRQb2ludCBjb250ZW50
c1RvV2luZG93KEZyYW1lVmlldyAqdmlldywgRmxvYXRQb2ludCBwdCkKK3sKKyAgICBpbnQgeCA9
IHN0YXRpY19jYXN0PGludD4ocHQueCgpICsgMC41Zik7CisgICAgaW50IHkgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHB0LnkoKSArIDAuNWYpOworICAgIEludFBvaW50IGFkanVzdGVkID0gdmlldy0+Y29u
dGVudHNUb1dpbmRvdyhJbnRQb2ludCh4LCB5KSk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoYWRq
dXN0ZWQueCgpLCBhZGp1c3RlZC55KCkpOworfQorCitib29sIHNuYXBUbyhjb25zdCBTdWJ0YXJn
ZXRHZW9tZXRyeSYgZ2VvbSwgY29uc3QgSW50UG9pbnQmIHRvdWNoUG9pbnQsIGNvbnN0IEludFJl
Y3QmIHRvdWNoQXJlYSwgSW50UG9pbnQmIGFkanVzdGVkUG9pbnQpCit7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gZ2VvbS5ub2RlKCktPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBGbG9hdFF1YWQg
cXVhZCA9IGdlb20ucXVhZCgpOworCisgICAgaWYgKHF1YWQuaXNSZWN0aWxpbmVhcigpKSB7Cisg
ICAgICAgIEludFJlY3QgY29udGVudEJvdW5kcyA9IGdlb20uYm91bmRpbmdCb3goKTsKKyAgICAg
ICAgLy8gQ29udmVydCBmcm9tIGZyYW1lIGNvb3JkaW5hdGVzIHRvIHdpbmRvdyBjb29yZGluYXRl
cy4KKyAgICAgICAgSW50UmVjdCBib3VuZHMgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRl
bnRCb3VuZHMpOworICAgICAgICBpZiAoYm91bmRzLmNvbnRhaW5zKHRvdWNoUG9pbnQpKSB7Cisg
ICAgICAgICAgICBhZGp1c3RlZFBvaW50ID0gdG91Y2hQb2ludDsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChib3VuZHMuaW50ZXJzZWN0cyh0b3VjaEFy
ZWEpKSB7CisgICAgICAgICAgICBib3VuZHMuaW50ZXJzZWN0KHRvdWNoQXJlYSk7CisgICAgICAg
ICAgICBhZGp1c3RlZFBvaW50ID0gYm91bmRzLmNlbnRlcigpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IE5vbi1yZWN0aWxpbmVhciBlbGVtZW50LgorICAgIC8vIENvbnZlcnQgcXVhZCBmcm9tIGNvbnRl
bnQgdG8gd2luZG93IGNvb3JkaW5hdGVzLgorICAgIEZsb2F0UG9pbnQgcDEgPSBjb250ZW50c1Rv
V2luZG93KHZpZXcsIHF1YWQucDEoKSk7CisgICAgRmxvYXRQb2ludCBwMiA9IGNvbnRlbnRzVG9X
aW5kb3codmlldywgcXVhZC5wMigpKTsKKyAgICBGbG9hdFBvaW50IHAzID0gY29udGVudHNUb1dp
bmRvdyh2aWV3LCBxdWFkLnAzKCkpOworICAgIEZsb2F0UG9pbnQgcDQgPSBjb250ZW50c1RvV2lu
ZG93KHZpZXcsIHF1YWQucDQoKSk7CisgICAgcXVhZCA9IEZsb2F0UXVhZChwMSwgcDIsIHAzLCBw
NCk7CisKKyAgICBpZiAocXVhZC5jb250YWluc1BvaW50KHRvdWNoUG9pbnQpKSB7CisgICAgICAg
IGFkanVzdGVkUG9pbnQgPSB0b3VjaFBvaW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBQdWxsIHBvaW50IHRvd2FyZHMgdGhlIGNlbnRlciBvZiB0aGUgZWxlbWVudC4K
KyAgICBmbG9hdCBjeCA9IDAuMjUqKHAxLngoKSArIHAyLngoKSArIHAzLngoKSArIHA0LngoKSk7
CisgICAgZmxvYXQgY3kgPSAwLjI1KihwMS55KCkgKyBwMi55KCkgKyBwMy55KCkgKyBwNC55KCkp
OworICAgIEZsb2F0UG9pbnQgY2VudGVyID0gRmxvYXRQb2ludChjeCwgY3kpOworCisgICAgRmxv
YXRTaXplIHYgPSBjZW50ZXIgLSB0b3VjaFBvaW50OworICAgIGZsb2F0IGQgPSB2LmRpYWdvbmFs
TGVuZ3RoKCk7CisKKyAgICAvLyBVc2UgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gY29ybmVyIG9m
IHRvdWNoIGFyZWEgdG8gbGltaXQgYWRqdXN0bWVudCBkaXN0YW5jZS4KKyAgICBmbG9hdCBkeCA9
IDAuNWYgKiB0b3VjaEFyZWEud2lkdGgoKTsKKyAgICBmbG9hdCBkeSA9IDAuNWYgKiB0b3VjaEFy
ZWEuaGVpZ2h0KCk7CisgICAgZmxvYXQgciA9IHNxcnQoZHgqZHggKyBkeSpkeSk7CisKKyAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IHIgLyBkOworICAgIGlmIChzY2FsZUZhY3RvciA+IDEpCisgICAg
ICAgIHNjYWxlRmFjdG9yID0gMTsKKyAgICB2LnNjYWxlKHNjYWxlRmFjdG9yKTsKKworICAgIGlu
dCB4ID0gc3RhdGljX2Nhc3Q8aW50Pih0b3VjaFBvaW50LngoKSArIHYud2lkdGgoKSk7CisgICAg
aW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KHRvdWNoUG9pbnQueSgpICsgdi5oZWlnaHQoKSk7Cisg
ICAgSW50UG9pbnQgcG9pbnQoeCwgeSk7CisKKyAgICBpZiAocXVhZC5jb250YWluc1BvaW50KHBv
aW50KSkgeworICAgICAgICBhZGp1c3RlZFBvaW50ID0gcG9pbnQ7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vIEEgZ2VuZXJpYyBmdW5jdGlv
biBmb3IgZmluZGluZyB0aGUgdGFyZ2V0IG5vZGUgd2l0aCB0aGUgbG93ZXN0IGRpc3RhbmNlIG1l
dHJpYy4gQSBkaXN0YW5jZSBtZXRyaWMgaGVyZSBpcyB0aGUgcmVzdWx0CiAvLyBvZiBhIGRpc3Rh
bmNlLWxpa2UgZnVuY3Rpb24sIHRoYXQgY29tcHV0ZXMgaG93IHdlbGwgdGhlIHRvdWNoIGhpdHMg
dGhlIG5vZGUuCkBAIC0yNDksMTcgKzMxOSwyMSBAQCBib29sIGZpbmROb2RlV2l0aExvd2VzdERp
c3RhbmNlTWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsCiAg
ICAgZmxvYXQgYmVzdERpc3RhbmNlTWV0cmljID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCk7CiAgICAgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHN1YnRhcmdldHMuYmVnaW4oKTsKICAgICBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN1YnRhcmdldHMuZW5kKCk7CisgICAgSW50UG9pbnQgYWRq
dXN0ZWRQb2ludDsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIE5vZGUq
IG5vZGUgPSBpdC0+bm9kZSgpOwogICAgICAgICBmbG9hdCBkaXN0YW5jZU1ldHJpYyA9IGRpc3Rh
bmNlRnVuY3Rpb24odG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CiAgICAgICAgIGlmIChk
aXN0YW5jZU1ldHJpYyA8IGJlc3REaXN0YW5jZU1ldHJpYykgewotICAgICAgICAgICAgdGFyZ2V0
UG9pbnQgPSByb3VuZGVkSW50UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIoKSk7Ci0gICAgICAgICAg
ICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICB0YXJnZXROb2Rl
ID0gbm9kZTsKLSAgICAgICAgICAgIGJlc3REaXN0YW5jZU1ldHJpYyA9IGRpc3RhbmNlTWV0cmlj
OworICAgICAgICAgICAgaWYgKHNuYXBUbygqaXQsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBh
ZGp1c3RlZFBvaW50KSkgeworICAgICAgICAgICAgICAgIHRhcmdldFBvaW50ID0gYWRqdXN0ZWRQ
b2ludDsKKyAgICAgICAgICAgICAgICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7Cisg
ICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgYmVzdERp
c3RhbmNlTWV0cmljID0gZGlzdGFuY2VNZXRyaWM7CisgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAoZGlzdGFuY2VNZXRyaWMgPT0gYmVzdERpc3RhbmNlTWV0cmljKSB7CiAgICAgICAg
ICAgICAvLyBUcnkgdG8gYWx3YXlzIHJldHVybiB0aGUgaW5uZXItbW9zdCBlbGVtZW50LgotICAg
ICAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKHRhcmdldE5vZGUpKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSkgJiYgc25hcFRvKCppdCwg
dG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsIGFkanVzdGVkUG9pbnQpKSB7CisgICAgICAgICAgICAg
ICAgdGFyZ2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OwogICAgICAgICAgICAgICAgIHRhcmdldE5v
ZGUgPSBub2RlOwogICAgICAgICAgICAgICAgIHRhcmdldEFyZWEgPSBpdC0+Ym91bmRpbmdCb3go
KTsKICAgICAgICAgICAgIH0KQEAgLTI2Nyw5ICszNDEsNyBAQCBib29sIGZpbmROb2RlV2l0aExv
d2VzdERpc3RhbmNlTWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9p
bnQsCiAgICAgfQogICAgIGlmICh0YXJnZXROb2RlKSB7CiAgICAgICAgIHRhcmdldEFyZWEgPSB0
YXJnZXROb2RlLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codGFyZ2V0QXJl
YSk7Ci0gICAgICAgIHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS0+ZG9jdW1lbnQoKS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KHRhcmdldFBvaW50KTsKICAgICB9Ci0KICAgICByZXR1cm4gKHRh
cmdldE5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmU3YzE2ZGI2NDdmODRhNGFhOWM5NzFmODE4MzI4Mjdl
Yjg0ZWZlMC4uYzhiYzU0NzYyZGI3MmIxNGI0NjBjMWQwOWNkZjVkYzg1YmJlMWU5ZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI0IEBACisyMDEyLTA3LTE3ICBLZXZpbiBFbGxpcyAgPGtldmVyc0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgVE9VQ0hfQURKVVNUTUVOVCBpcyB0b28gYWdncmVzc2l2ZSB3aGVu
IHNuYXBwaW5nIHRvIGxhcmdlIGVsZW1lbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSB0ZXN0IGNhc2UgdG8gZW5zdXJlIHRoYXQgdGhl
IGFkanVzdGVkIHRvdWNoIHBvc2l0aW9uIGlzIAorICAgICAgICB3aXRoaW4gdGhlIGJvdW5kcyBv
ZiB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIHRoZSB0b3VjaCBhcmVhLgorICAgICAgICBQcmV2aW91
c2x5LCB0aGUgdGFyZ2V0IHBvc2l0aW9uIHNuYXBwZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgdGFy
Z2V0CisgICAgICAgIGVsZW1lbnQsIHdoaWNoIGNhbiBiZSBmYXIgcmVtb3ZlZCBmcm9tIHRoZSB0
b3VjaCBhcmVhLgorCisgICAgICAgIFRoZSBzZWNvbmQgdGVzdCBpcyBmb3Igbm9uLXJlY3RpbGlu
ZWFyIGVsZW1lbnRzLCBhbmQgdmVyaWZpZXMgdGhhdAorICAgICAgICB0aGUgdG91Y2ggYXJlYSBt
dXN0IG92ZXJsYXAgdGhlIHRydWUgYm91bmRzIG9mIHRoZSBlbGVtZW50IGZvciBhbgorICAgICAg
ICBhZGp1c3RtZW50IHRvIG9jY3VyLgorCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L2JpZy1k
aXYtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvYmlnLWRp
di5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvcm90YXRlZC1ub2RlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3JvdGF0ZWQtbm9k
ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNy0xNyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiAgUmVtb3ZlIHRlc3RzIHRoYXQg
aGF2ZSBiZWVuIHBhc3NpbmcgY29uc2lzdGVudGx5IGFjY29yZGluZyB0byB0aGUgZmxha2luZXNz
IGRhc2hib2FyZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9iaWct
ZGl2LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9iaWctZGl2LWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2UzMWNiZjg4OTAxYjdkNTZlYzQzOTdiMmI3NTJhMjc5
N2Q0NzdmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2Jp
Zy1kaXYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK1Rlc3QgdG91Y2ggYWRqdXN0bWVu
dCBvbiBhIGxhcmdlIGRpdi4gVGhlIGFkanVzdGVkIHRvdWNoIHBvaW50IHNob3VsZCBsaWUgaW5z
aWRlIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgd2l0aGluIHRoZSB0b3VjaCBhcmVhLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitPdmVybGFwcGluZyB0b3VjaCBhYm92ZSB0aGUg
dGFyZ2V0IHNob3VsZCBzbmFwIHRvIHRoZSB0b3Agb2YgdGhlIHRhcmdldCBlbGVtZW50LgorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZFBvaW50LnggPj0g
dGFyZ2V0Qm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdGFyZ2V0Qm91
bmRzLnggKyB0YXJnZXRCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50Lnkg
Pj0gdGFyZ2V0Qm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdGFyZ2V0
Qm91bmRzLnkgKyB0YXJnZXRCb3VuZHMuaGVpZ2h0IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2lu
dC54ID49IHRvdWNoQm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdG91
Y2hCb3VuZHMueCArIHRvdWNoQm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2lu
dC55ID49IHRvdWNoQm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdG91
Y2hCb3VuZHMueSArIHRvdWNoQm91bmRzLmhlaWdodCBpcyB0cnVlCisKK092ZXJsYXBwaW5nIHRv
dWNoIGJlbG93IHRoZSB0YXJnZXQgc2hvdWxkIHNuYXAgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFy
Z2V0IGVsZW1lbnQuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFk
anVzdGVkUG9pbnQueCA+PSB0YXJnZXRCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9p
bnQueCA8PSB0YXJnZXRCb3VuZHMueCArIHRhcmdldEJvdW5kcy53aWR0aCBpcyB0cnVlCitQQVNT
IGFkanVzdGVkUG9pbnQueSA+PSB0YXJnZXRCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVzdGVk
UG9pbnQueSA8PSB0YXJnZXRCb3VuZHMueSArIHRhcmdldEJvdW5kcy5oZWlnaHQgaXMgdHJ1ZQor
UEFTUyBhZGp1c3RlZFBvaW50LnggPj0gdG91Y2hCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVz
dGVkUG9pbnQueCA8PSB0b3VjaEJvdW5kcy54ICsgdG91Y2hCb3VuZHMud2lkdGggaXMgdHJ1ZQor
UEFTUyBhZGp1c3RlZFBvaW50LnkgPj0gdG91Y2hCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVz
dGVkUG9pbnQueSA8PSB0b3VjaEJvdW5kcy55ICsgdG91Y2hCb3VuZHMuaGVpZ2h0IGlzIHRydWUK
KworT3ZlcmxhcHBpbmcgdG91Y2ggbGVmdCBvZiB0aGUgdGFyZ2V0IHNob3VsZCBzbmFwIHRvIHRo
ZSBsZWZ0IHNpZGUgb2YgdGhlIHRhcmdldCBlbGVtZW50LgorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZFBvaW50LnggPj0gdGFyZ2V0Qm91bmRzLnggaXMg
dHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdGFyZ2V0Qm91bmRzLnggKyB0YXJnZXRCb3Vu
ZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPj0gdGFyZ2V0Qm91bmRzLnkg
aXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdGFyZ2V0Qm91bmRzLnkgKyB0YXJnZXRC
b3VuZHMuaGVpZ2h0IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54ID49IHRvdWNoQm91bmRz
LnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdG91Y2hCb3VuZHMueCArIHRvdWNo
Qm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55ID49IHRvdWNoQm91bmRz
LnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdG91Y2hCb3VuZHMueSArIHRvdWNo
Qm91bmRzLmhlaWdodCBpcyB0cnVlCisKK092ZXJsYXBwaW5nIHRvdWNoIHJpZ2h0IG9mIHRoZSB0
YXJnZXQgc2hvdWxkIHNuYXAgdG8gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHRhcmdldCBlbGVtZW50
LgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZFBvaW50
LnggPj0gdGFyZ2V0Qm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdGFy
Z2V0Qm91bmRzLnggKyB0YXJnZXRCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBv
aW50LnkgPj0gdGFyZ2V0Qm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0g
dGFyZ2V0Qm91bmRzLnkgKyB0YXJnZXRCb3VuZHMuaGVpZ2h0IGlzIHRydWUKK1BBU1MgYWRqdXN0
ZWRQb2ludC54ID49IHRvdWNoQm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50Lngg
PD0gdG91Y2hCb3VuZHMueCArIHRvdWNoQm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0
ZWRQb2ludC55ID49IHRvdWNoQm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50Lnkg
PD0gdG91Y2hCb3VuZHMueSArIHRvdWNoQm91bmRzLmhlaWdodCBpcyB0cnVlCisKK1Rlc3QgdG91
Y2ggYXJlYSBjb250YWluZWQgd2l0aGluIHRoZSB0YXJnZXQgZWxlbWVudC4KK1BBU1MgYWRqdXN0
ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1MgYWRqdXN0ZWRQb2ludC54ID49IHRhcmdldEJv
dW5kcy54IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54IDw9IHRhcmdldEJvdW5kcy54ICsg
dGFyZ2V0Qm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55ID49IHRhcmdl
dEJvdW5kcy55IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55IDw9IHRhcmdldEJvdW5kcy55
ICsgdGFyZ2V0Qm91bmRzLmhlaWdodCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA+PSB0
b3VjaEJvdW5kcy54IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54IDw9IHRvdWNoQm91bmRz
LnggKyB0b3VjaEJvdW5kcy53aWR0aCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA+PSB0
b3VjaEJvdW5kcy55IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55IDw9IHRvdWNoQm91bmRz
LnkgKyB0b3VjaEJvdW5kcy5oZWlnaHQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC9iaWctZGl2Lmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvYmln
LWRpdi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhYmNjNzc2ODk5ZjhkYWRlMGY0NWVjYzJlZDBmMzE0Yzg1
NWExYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvYmln
LWRpdi5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAg
ICN0YXJnZXREaXYgeworICAgICAgICBiYWNrZ3JvdW5kOiAjMDBmOworICAgICAgICBoZWlnaHQ6
IDQwMHB4OworICAgICAgICB3aWR0aDogNDAwcHg7CisgICAgfQorPC9zdHlsZT4KKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwv
aGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKworPGRpdiBpZD0idGFyZ2V0RGl2
Ij4KKzwvZGl2PgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUn
PjwvZGl2PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5v
ZGU7CisgICAgdmFyIGFkanVzdGVkUG9pbnQ7CisgICAgdmFyIHRhcmdldEJvdW5kczsKKyAgICB2
YXIgdG91Y2hCb3VuZHM7CisKKyAgICBmdW5jdGlvbiBmaW5kQWJzb2x1dGVQb3NpdGlvbihub2Rl
KSB7CisgICAgICAgIHZhciBwb3MgPSB7bGVmdDogMCwgdG9wOiAwfTsKKyAgICAgICAgZG8gewor
ICAgICAgICAgICAgcG9zLmxlZnQgKz0gbm9kZS5vZmZzZXRMZWZ0OworICAgICAgICAgICAgcG9z
LnRvcCArPSBub2RlLm9mZnNldFRvcDsKKyAgICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUub2Zm
c2V0UGFyZW50KTsKKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBy
dW5Ub3VjaFRlc3RzKCkgeworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldERpdiIpOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNr
JywgZnVuY3Rpb24oKSB7fSwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge30sIGZhbHNlKTsKKworICAgICAgICB2YXIgcG9zID0g
ZmluZEFic29sdXRlUG9zaXRpb24oZWxlbWVudCk7CisKKyAgICAgICAgdmFyIHggPSBwb3MubGVm
dDsKKyAgICAgICAgdmFyIHkgPSBwb3MudG9wOworICAgICAgICB2YXIgd2lkdGggPSBlbGVtZW50
LmNsaWVudFdpZHRoOworICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7
CisKKyAgICAgICAgdGFyZ2V0Qm91bmRzID0geworICAgICAgICAgICAgeDogeCwKKyAgICAgICAg
ICAgIHk6IHksCisgICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAgICBoZWlnaHQ6
IGhlaWdodAorICAgICAgICB9OworCisgICAgICAgIHZhciB0b3VjaFJhZGl1cyA9IDEwOworICAg
ICAgICB2YXIgb2Zmc2V0ID0gdG91Y2hSYWRpdXMgLyAyOworICAgICAgICB2YXIgbWlkWCA9IHgg
KyB3aWR0aCAvIDI7CisgICAgICAgIHZhciBtaWRZID0geSArIGhlaWdodCAvIDI7CisKKyAgICAg
ICAgZGVidWcoJ1xuT3ZlcmxhcHBpbmcgdG91Y2ggYWJvdmUgdGhlIHRhcmdldCBzaG91bGQgc25h
cCB0byB0aGUgdG9wIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4nKTsKKyAgICAgICAgdGVzdFRvdWNo
KG1pZFgsIHkgLSBvZmZzZXQsIHRvdWNoUmFkaXVzLCB0YXJnZXRCb3VuZHMpOworICAgICAgICBk
ZWJ1ZygnXG5PdmVybGFwcGluZyB0b3VjaCBiZWxvdyB0aGUgdGFyZ2V0IHNob3VsZCBzbmFwIHRv
IHRoZSBib3R0b20gb2YgdGhlIHRhcmdldCBlbGVtZW50LicpOworICAgICAgICB0ZXN0VG91Y2go
bWlkWCwgeSArIGhlaWdodCArIG9mZnNldCwgdG91Y2hSYWRpdXMsIHRhcmdldEJvdW5kcyk7Cisg
ICAgICAgIGRlYnVnKCdcbk92ZXJsYXBwaW5nIHRvdWNoIGxlZnQgb2YgdGhlIHRhcmdldCBzaG91
bGQgc25hcCB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4nKTsKKyAgICAg
ICAgdGVzdFRvdWNoKHggLSBvZmZzZXQsIG1pZFksIHRvdWNoUmFkaXVzLCB0YXJnZXRCb3VuZHMp
OworICAgICAgICBkZWJ1ZygnXG5PdmVybGFwcGluZyB0b3VjaCByaWdodCBvZiB0aGUgdGFyZ2V0
IHNob3VsZCBzbmFwIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4nKTsK
KyAgICAgICAgdGVzdFRvdWNoKHggKyB3aWR0aCArIG9mZnNldCwgbWlkWSwgdG91Y2hSYWRpdXMs
IHRhcmdldEJvdW5kcyk7CisgICAgICAgIGRlYnVnKCdcblRlc3QgdG91Y2ggYXJlYSBjb250YWlu
ZWQgd2l0aGluIHRoZSB0YXJnZXQgZWxlbWVudC4nKTsKKyAgICAgICAgdGVzdFRvdWNoKG1pZFgs
IG1pZFksIHRvdWNoUmFkaXVzLCB0YXJnZXRCb3VuZHMpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3RUb3VjaCh0b3VjaFgsIHRvdWNoWSwgcmFkaXVzLCB0YXJnZXRCb3VuZHMpIHsKKworICAg
ICAgICB0b3VjaEJvdW5kcyA9IHsKKyAgICAgICAgICAgIHg6IHRvdWNoWCAtIHJhZGl1cywKKyAg
ICAgICAgICAgIHk6IHRvdWNoWSAtIHJhZGl1cywKKyAgICAgICAgICAgIHdpZHRoOiAyICogcmFk
aXVzLAorICAgICAgICAgICAgaGVpZ2h0OiAyICogcmFkaXVzCisgICAgICAgIH07CisgICAgICAg
IGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJs
ZU5vZGUodG91Y2hCb3VuZHMueCwgdG91Y2hCb3VuZHMueSwgdG91Y2hCb3VuZHMud2lkdGgsIHRv
dWNoQm91bmRzLmhlaWdodCwgZG9jdW1lbnQpOworICAgICAgICBzaG91bGRCZSgnYWRqdXN0ZWRO
b2RlLmlkJywgJ2VsZW1lbnQuaWQnKTsKKyAgICAgICAgYWRqdXN0ZWRQb2ludCA9IGludGVybmFs
cy50b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHRvdWNoQm91bmRzLngs
IHRvdWNoQm91bmRzLnksIHRvdWNoQm91bmRzLndpZHRoLCB0b3VjaEJvdW5kcy5oZWlnaHQsIGRv
Y3VtZW50KTsKKworICAgICAgICBzaG91bGRCZVRydWUoJ2FkanVzdGVkUG9pbnQueCA+PSB0YXJn
ZXRCb3VuZHMueCcpOworICAgICAgICBzaG91bGRCZVRydWUoJ2FkanVzdGVkUG9pbnQueCA8PSB0
YXJnZXRCb3VuZHMueCArIHRhcmdldEJvdW5kcy53aWR0aCcpOworICAgICAgICBzaG91bGRCZVRy
dWUoJ2FkanVzdGVkUG9pbnQueSA+PSB0YXJnZXRCb3VuZHMueScpOworICAgICAgICBzaG91bGRC
ZVRydWUoJ2FkanVzdGVkUG9pbnQueSA8PSB0YXJnZXRCb3VuZHMueSArIHRhcmdldEJvdW5kcy5o
ZWlnaHQnKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdhZGp1c3RlZFBvaW50LnggPj0gdG91Y2hC
b3VuZHMueCcpOworICAgICAgICBzaG91bGRCZVRydWUoJ2FkanVzdGVkUG9pbnQueCA8PSB0b3Vj
aEJvdW5kcy54ICsgdG91Y2hCb3VuZHMud2lkdGgnKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdh
ZGp1c3RlZFBvaW50LnkgPj0gdG91Y2hCb3VuZHMueScpOworICAgICAgICBzaG91bGRCZVRydWUo
J2FkanVzdGVkUG9pbnQueSA8PSB0b3VjaEJvdW5kcy55ICsgdG91Y2hCb3VuZHMuaGVpZ2h0Jyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9k
ZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24o
J1Rlc3QgdG91Y2ggYWRqdXN0bWVudCBvbiBhIGxhcmdlIGRpdi4gIFRoZSBhZGp1c3RlZCB0b3Vj
aCBwb2ludCBzaG91bGQgbGllIGluc2lkZSB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIHdpdGhpbiB0
aGUgdG91Y2ggYXJlYS4nKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICBydW5U
b3VjaFRlc3RzKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0
bWVudC9yb3RhdGVkLW5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3Rt
ZW50L3JvdGF0ZWQtbm9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZhMjk0MjdkZDUzNzdh
MWUyY2IzOTJkMzkwOWVmMjAzMWU3M2QzNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3RvdWNoYWRqdXN0bWVudC9yb3RhdGVkLW5vZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYg
QEAKK1Rlc3QgdG91Y2ggYWRqdXN0bWVudCB0byBhIG5vbi1yZWN0aWxpbmVhciBlbGVtZW50Lgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRGlyZWN0IFRvdWNoZXMKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzICJyb3RhdGVkRGl2IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgInJv
dGF0ZWREaXYiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAicm90YXRlZERpdiIKK1BBU1MgYWRq
dXN0ZWROb2RlLmlkIGlzICJyb3RhdGVkRGl2IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgInJv
dGF0ZWREaXYiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiY29udGFpbmVyRGl2IgorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgImNvbnRhaW5lckRpdiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlz
ICJjb250YWluZXJEaXYiCisKK0FkanVzdGVkIFRvdWNoZXMKK1BBU1MgYWRqdXN0ZWROb2RlLmlk
IGlzICJyb3RhdGVkRGl2IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQgaXMgInJvdGF0ZWREaXYiCisK
K05lYXIgTWlzc2VzCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiY29udGFpbmVyRGl2IgorUEFT
UyBhZGp1c3RlZE5vZGUuaWQgaXMgImNvbnRhaW5lckRpdiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
b3VjaGFkanVzdG1lbnQvcm90YXRlZC1ub2RlLmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvcm90YXRlZC1ub2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYxOTljYTZkNzRiYjk2Mzk3OGY5
YThmOWVlMDZiN2M0YTM0MDE1YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNo
YWRqdXN0bWVudC9yb3RhdGVkLW5vZGUuaHRtbApAQCAtMCwwICsxLDEzNiBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyAgICAjY29udGFpbmVyRGl2IHsKKyAgICAgICAgLXdlYmtpdC1ib3gt
c2l6aW5nOiBib3JkZXItYm94OworICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAg
ICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAg
ICB3aWR0aDogMTAwcHg7CisgICAgfQorICAgICNyb3RhdGVkRGl2IHsKKyAgICAgIC13ZWJraXQt
Ym94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUo
NDVkZWcpOworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICBoZWlnaHQ6IDQw
cHg7CisgICAgICBsZWZ0OiAxMHB4OworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAg
dG9wOiAxMHB4OworICAgICAgd2lkdGg6IDQwcHg7CisgICAgfQorCisgICAgI3Rlc3REaXYgewor
ICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgYm9yZGVyOiAxcHgg
c29saWQgYmxhY2s7CisgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgICBsZWZ0OiA1MHB4OworICAg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgdG9wOiA0MHB4OworICAgICAgd2lkdGg6IDQw
cHg7CisgICAgfQorCis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1
blRlc3RzKCkiPgorCis8ZGl2IGlkPSJjb250YWluZXJEaXYiPgorICA8ZGl2IGlkPSJyb3RhdGVk
RGl2Ij48L2Rpdj4KKyAgPCEtLSA8ZGl2IGlkPSJ0ZXN0RGl2Ij48L2Rpdj4gLS0+Cis8L2Rpdj4K
KworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKwor
PHNjcmlwdD4KKyAgICB2YXIgYWRqdXN0ZWROb2RlOworICAgIHZhciBhZGp1c3RlZFBvaW50Owor
CisgICAgZnVuY3Rpb24gbm9kZUF0VG91Y2goeCwgeSwgcmFkaXVzKQorICAgIHsKKyAgICAgICAg
dmFyIHRvdWNoQXJlYSA9IGdldFRvdWNoQXJlYSh4LCB5LCByYWRpdXMpOworICAgICAgICBhZGp1
c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KHRvdWNoQXJlYS54LCB0b3VjaEFyZWEueSwgdG91Y2hBcmVhLndpZHRoLCB0b3VjaEFyZWEuaGVp
Z2h0LCBkb2N1bWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0VG91Y2hBcmVhKHgsIHks
IHJhZGl1cykgeworICAgICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b250YWluZXJEaXYnKTsKKyAgICAgICAgdmFyIHBvcyA9IGZpbmRBYnNvbHV0ZVBvc2l0aW9uKG5v
ZGUpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgeDogcG9zLmxlZnQgKyB4IC0gcmFk
aXVzLAorICAgICAgICAgICAgeTogcG9zLnRvcCArIHkgLSByYWRpdXMsCisgICAgICAgICAgICB3
aWR0aDogMiAqIHJhZGl1cywKKyAgICAgICAgICAgIGhlaWdodDogMiAqIHJhZGl1cworICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0aW9uKG5vZGUpIHsK
KyAgICAgICAgdmFyIHBvcyA9IHtsZWZ0OiAwLCB0b3A6IDB9OworICAgICAgICBkbyB7CisgICAg
ICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAgICBwb3MudG9w
ICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5vZmZzZXRQ
YXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RE
aXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdEaXJlY3QgVG91Y2hlcycpOwor
CisgICAgICAgIG5vZGVBdFRvdWNoKDMwLCAzMCwgMjApOworICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdyb3RhdGVkRGl2Jyk7CisgICAgICAgIG5vZGVB
dFRvdWNoKDIwLCAzMCwgMjApOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVz
dGVkTm9kZS5pZCcsICdyb3RhdGVkRGl2Jyk7CisgICAgICAgIG5vZGVBdFRvdWNoKDQwLCAzMCwg
MjApOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdy
b3RhdGVkRGl2Jyk7CisgICAgICAgIG5vZGVBdFRvdWNoKDMwLCAyMCwgMjApOworICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdyb3RhdGVkRGl2Jyk7Cisg
ICAgICAgIG5vZGVBdFRvdWNoKDMwLCA0MCwgMjApOworICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdyb3RhdGVkRGl2Jyk7CisKKyAgICAgICAgbm9kZUF0
VG91Y2goODAsIDgwLCAyMCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0
ZWROb2RlLmlkJywgJ2NvbnRhaW5lckRpdicpOworICAgICAgICBub2RlQXRUb3VjaCg4MCwgMjAs
IDIwKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAn
Y29udGFpbmVyRGl2Jyk7CisgICAgICAgIG5vZGVBdFRvdWNoKDIwLCA4MCwgMjApOworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdjb250YWluZXJEaXYn
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0QWRqdXN0ZWRUb3VjaGVzKCkKKyAgICB7Cisg
ICAgICAgIGRlYnVnKCdcbkFkanVzdGVkIFRvdWNoZXMnKTsKKworICAgICAgICAvLyBUb3VjaCBv
dmVybGFwcyBjZW50ZXIgb2YgZWxlbWVudC4KKyAgICAgICAgbm9kZUF0VG91Y2goMTAsIDEwLCAz
MCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ3Jv
dGF0ZWREaXYnKTsKKworICAgICAgICAvLyBUb3VjaCBvdmVybGFwcyBjb3JuZXIgb2YgZWxlbWVu
dC4KKyAgICAgICAgbm9kZUF0VG91Y2goMjAsIDAsIDIwKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAncm90YXRlZERpdicpOworCisgICAgICAgIGRl
YnVnKCdcbk5lYXIgTWlzc2VzJyk7CisKKyAgICAgICAgLy8gVG91Y2ggb3ZlcmxhcHMgYm91bmRp
bmctYm94IG9mIGVsZW1lbnQsIGJ1dCBub3QgdGhlIGFjdHVhbCBib3VuZHMuCisgICAgICAgIG5v
ZGVBdFRvdWNoKDcwLCAwLCAyMCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRq
dXN0ZWROb2RlLmlkJywgJ2NvbnRhaW5lckRpdicpOworICAgICAgICBub2RlQXRUb3VjaCg3MCwg
NjAsIDIwKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQn
LCAnY29udGFpbmVyRGl2Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAg
IHsKKyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigp
IHt9LCBmYWxzZSk7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50
ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUp
IHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoIGFkanVzdG1lbnQgdG8gYSBu
b24tcmVjdGlsaW5lYXIgZWxlbWVudC4nKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
ICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOworICAgICAgICAgICAgdGVzdEFkanVzdGVkVG91Y2hl
cygpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153004</attachid>
            <date>2012-07-18 06:54:16 -0700</date>
            <delta_ts>2012-07-18 07:47:52 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-91262-20120718095415.patch</filename>
            <type>text/plain</type>
            <size>21048</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGYyMGFjNzQ5YzU1ODgz
OGNiOWZkYTNjMTE0ZTVkN2ViYTYyYmM0OC4uYTVjMTZlOGY0YmY2NDllNTI0ODJlN2E0OGJkNjEw
ZDI2NDM2YjgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA3LTE4ICBLZXZp
biBFbGxpcyAgPGtldmVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVE9VQ0hfQURKVVNUTUVO
VCBpcyB0b28gYWdncmVzc2l2ZSB3aGVuIHNuYXBwaW5nIHRvIGxhcmdlIGVsZW1lbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgorCisgICAgICAgIENvbnN0cmFpbnMgdGhl
IGV4dGVudCB0byB3aGljaCB0aGUgdG91Y2ggcG9pbnQgY2FuIGJlIGFkanVzdGVkIHdoZW4KKyAg
ICAgICAgZ2VuZXJhdGluZyBzeW50aGV0aWMgbW91c2UgZXZlbnRzIHdoZW4gVE9VQ0hfQURKVVNU
RU1OVCBpcyBlbmFibGVkLgorICAgICAgICBQcmV2aW91c2x5LCB0aGUgdGFyZ2V0IHBvc2l0aW9u
IHNuYXBwZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgdGFyZ2V0CisgICAgICAgIGVsZW1lbnQsIHdo
aWNoIGNhbiBiZSBmYXIgcmVtb3ZlZCBmcm9tIHRoZSB0b3VjaCBwb3NpdGlvbiB3aGVuIHRhcHBp
bmcKKyAgICAgICAgb24gb3IgbmVhciBhIGxhcmdlIGVsZW1lbnQuICBUaGUgcmVmaW5lZCBzdHJh
dGVneSBpcyB0byBsZWF2ZSB0aGUKKyAgICAgICAgYWRqdXN0ZWQgcG9zaXRpb24gdW5jaGFuZ2Vk
IGlmIHRhcHBpbmcgd2l0aGluIHRoZSBlbGVtZW50IG9yIHRvIHNuYXAKKyAgICAgICAgdG8gdGhl
IGNlbnRlciBvZiB0aGUgb3ZlcmxhcCByZWdpb24gaWYgdGhlIHRvdWNoIHBvaW50IGxpZXMgb3V0
c2lkZSB0aGUKKyAgICAgICAgYm91bmRzIG9mIHRoZSBlbGVtZW50LCBidXQgdGhlIHRvdWNoIGFy
ZWEgYW5kIGVsZW1lbnQgYm91bmRzIG92ZXJsYXAuCisgICAgICAgIEZvciBub24tcmVjdGlsaW5l
YXJ5IGJvdW5kcywgYSBwb2ludCBseWluZyBvdXRzaWRlIHRoZSBlbGVtZW50IGJvdW5kYXJ5Cisg
ICAgICAgIGlzIHB1bGxlZCB0b3dhcmRzIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQsIGJ5IGFu
IGFtb3VudCBsaW1pdGVkIGJ5CisgICAgICAgIHRoZSByYWRpdXMgb2YgdGhlIHRvdWNoIGFyZWEu
CisKKyAgICAgICAgVGVzdHM6IHRvdWNoYWRqdXN0bWVudC9iaWctZGl2Lmh0bWwKKyAgICAgICAg
ICAgICAgIHRvdWNoYWRqdXN0bWVudC9yb3RhdGVkLW5vZGUuaHRtbAorCisgICAgICAgICogcGFn
ZS9Ub3VjaEFkanVzdG1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hBZGp1c3RtZW50
Ojpjb250ZW50c1RvV2luZG93KToKKyAgICAgICAgKFRvdWNoQWRqdXN0bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6OnNuYXBUbyk6CisgICAgICAgIChXZWJDb3JlOjpU
b3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKToKKwogMjAx
Mi0wNy0xNyAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4KIAogICAgICAgICBSZW5h
bWUgQ1NTIEV4Y2x1c2lvbnMgQ1NTV3JhcFNoYXBlIGNsYXNzIHByb3BlcnRpZXMgdG8gbWF0Y2gg
RXhjbHVzaW9uIHNoYXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91
Y2hBZGp1c3RtZW50LmNwcAppbmRleCBjZDQ2MGMwYjc3ZDhiMTg5YzM0NDUxNzM3NDliNzU3ODUy
OGM5ZTRhLi5jZjRiYTFiYjM3YTUwMTQ3Mzk2ZWUzZWFiNWE3NjVlM2VhZWRkNTVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCkBAIC0yMzksNiArMjM5LDc2IEBAIGZs
b2F0IHpvb21hYmxlSW50ZXJzZWN0aW9uUXVvdGllbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoSG90
c3BvdCwgY29uc3QgSW50UmVjdCYKICAgICByZXR1cm4gcmVjdC5zaXplKCkuYXJlYSgpIC8gKGZs
b2F0KWludGVyc2VjdGlvbi5zaXplKCkuYXJlYSgpOwogfQogCitGbG9hdFBvaW50IGNvbnRlbnRz
VG9XaW5kb3coRnJhbWVWaWV3ICp2aWV3LCBGbG9hdFBvaW50IHB0KQoreworICAgIGludCB4ID0g
c3RhdGljX2Nhc3Q8aW50PihwdC54KCkgKyAwLjVmKTsKKyAgICBpbnQgeSA9IHN0YXRpY19jYXN0
PGludD4ocHQueSgpICsgMC41Zik7CisgICAgSW50UG9pbnQgYWRqdXN0ZWQgPSB2aWV3LT5jb250
ZW50c1RvV2luZG93KEludFBvaW50KHgsIHkpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludChhZGp1
c3RlZC54KCksIGFkanVzdGVkLnkoKSk7Cit9CisKK2Jvb2wgc25hcFRvKGNvbnN0IFN1YnRhcmdl
dEdlb21ldHJ5JiBnZW9tLCBjb25zdCBJbnRQb2ludCYgdG91Y2hQb2ludCwgY29uc3QgSW50UmVj
dCYgdG91Y2hBcmVhLCBJbnRQb2ludCYgYWRqdXN0ZWRQb2ludCkKK3sKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSBnZW9tLm5vZGUoKS0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIEZsb2F0UXVhZCBx
dWFkID0gZ2VvbS5xdWFkKCk7CisKKyAgICBpZiAocXVhZC5pc1JlY3RpbGluZWFyKCkpIHsKKyAg
ICAgICAgSW50UmVjdCBjb250ZW50Qm91bmRzID0gZ2VvbS5ib3VuZGluZ0JveCgpOworICAgICAg
ICAvLyBDb252ZXJ0IGZyb20gZnJhbWUgY29vcmRpbmF0ZXMgdG8gd2luZG93IGNvb3JkaW5hdGVz
LgorICAgICAgICBJbnRSZWN0IGJvdW5kcyA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGVu
dEJvdW5kcyk7CisgICAgICAgIGlmIChib3VuZHMuY29udGFpbnModG91Y2hQb2ludCkpIHsKKyAg
ICAgICAgICAgIGFkanVzdGVkUG9pbnQgPSB0b3VjaFBvaW50OworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvdW5kcy5pbnRlcnNlY3RzKHRvdWNoQXJl
YSkpIHsKKyAgICAgICAgICAgIGJvdW5kcy5pbnRlcnNlY3QodG91Y2hBcmVhKTsKKyAgICAgICAg
ICAgIGFkanVzdGVkUG9pbnQgPSBib3VuZHMuY2VudGVyKCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
Tm9uLXJlY3RpbGluZWFyIGVsZW1lbnQuCisgICAgLy8gQ29udmVydCBxdWFkIGZyb20gY29udGVu
dCB0byB3aW5kb3cgY29vcmRpbmF0ZXMuCisgICAgRmxvYXRQb2ludCBwMSA9IGNvbnRlbnRzVG9X
aW5kb3codmlldywgcXVhZC5wMSgpKTsKKyAgICBGbG9hdFBvaW50IHAyID0gY29udGVudHNUb1dp
bmRvdyh2aWV3LCBxdWFkLnAyKCkpOworICAgIEZsb2F0UG9pbnQgcDMgPSBjb250ZW50c1RvV2lu
ZG93KHZpZXcsIHF1YWQucDMoKSk7CisgICAgRmxvYXRQb2ludCBwNCA9IGNvbnRlbnRzVG9XaW5k
b3codmlldywgcXVhZC5wNCgpKTsKKyAgICBxdWFkID0gRmxvYXRRdWFkKHAxLCBwMiwgcDMsIHA0
KTsKKworICAgIGlmIChxdWFkLmNvbnRhaW5zUG9pbnQodG91Y2hQb2ludCkpIHsKKyAgICAgICAg
YWRqdXN0ZWRQb2ludCA9IHRvdWNoUG9pbnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIFB1bGwgcG9pbnQgdG93YXJkcyB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50Lgor
ICAgIGZsb2F0IGN4ID0gMC4yNSAqIChwMS54KCkgKyBwMi54KCkgKyBwMy54KCkgKyBwNC54KCkp
OworICAgIGZsb2F0IGN5ID0gMC4yNSAqIChwMS55KCkgKyBwMi55KCkgKyBwMy55KCkgKyBwNC55
KCkpOworICAgIEZsb2F0UG9pbnQgY2VudGVyID0gRmxvYXRQb2ludChjeCwgY3kpOworCisgICAg
RmxvYXRTaXplIHB1bGxEaXJlY3Rpb24gPSBjZW50ZXIgLSB0b3VjaFBvaW50OworICAgIGZsb2F0
IGRpc3RhbmNlVG9DZW50ZXIgPSBwdWxsRGlyZWN0aW9uLmRpYWdvbmFsTGVuZ3RoKCk7CisKKyAg
ICAvLyBVc2UgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gY29ybmVyIG9mIHRvdWNoIGFyZWEgdG8g
bGltaXQgYWRqdXN0bWVudCBkaXN0YW5jZS4KKyAgICBmbG9hdCBkeCA9IDAuNWYgKiB0b3VjaEFy
ZWEud2lkdGgoKTsKKyAgICBmbG9hdCBkeSA9IDAuNWYgKiB0b3VjaEFyZWEuaGVpZ2h0KCk7Cisg
ICAgZmxvYXQgdG91Y2hSYWRpdXMgPSBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKKworICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gdG91Y2hSYWRpdXMgLyBkaXN0YW5jZVRvQ2VudGVyOworICAgIGlm
IChzY2FsZUZhY3RvciA+IDEpCisgICAgICAgIHNjYWxlRmFjdG9yID0gMTsKKyAgICBwdWxsRGly
ZWN0aW9uLnNjYWxlKHNjYWxlRmFjdG9yKTsKKworICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50
Pih0b3VjaFBvaW50LngoKSArIHB1bGxEaXJlY3Rpb24ud2lkdGgoKSk7CisgICAgaW50IHkgPSBz
dGF0aWNfY2FzdDxpbnQ+KHRvdWNoUG9pbnQueSgpICsgcHVsbERpcmVjdGlvbi5oZWlnaHQoKSk7
CisgICAgSW50UG9pbnQgcG9pbnQoeCwgeSk7CisKKyAgICBpZiAocXVhZC5jb250YWluc1BvaW50
KHBvaW50KSkgeworICAgICAgICBhZGp1c3RlZFBvaW50ID0gcG9pbnQ7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vIEEgZ2VuZXJpYyBmdW5j
dGlvbiBmb3IgZmluZGluZyB0aGUgdGFyZ2V0IG5vZGUgd2l0aCB0aGUgbG93ZXN0IGRpc3RhbmNl
IG1ldHJpYy4gQSBkaXN0YW5jZSBtZXRyaWMgaGVyZSBpcyB0aGUgcmVzdWx0CiAvLyBvZiBhIGRp
c3RhbmNlLWxpa2UgZnVuY3Rpb24sIHRoYXQgY29tcHV0ZXMgaG93IHdlbGwgdGhlIHRvdWNoIGhp
dHMgdGhlIG5vZGUuCkBAIC0yNDksMTcgKzMxOSwyMSBAQCBib29sIGZpbmROb2RlV2l0aExvd2Vz
dERpc3RhbmNlTWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQs
CiAgICAgZmxvYXQgYmVzdERpc3RhbmNlTWV0cmljID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCk7CiAgICAgU3VidGFyZ2V0R2VvbWV0cnlMaXN0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHN1YnRhcmdldHMuYmVnaW4oKTsKICAgICBjb25zdCBTdWJ0YXJnZXRHZW9tZXRyeUxp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN1YnRhcmdldHMuZW5kKCk7CisgICAgSW50UG9pbnQg
YWRqdXN0ZWRQb2ludDsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIE5v
ZGUqIG5vZGUgPSBpdC0+bm9kZSgpOwogICAgICAgICBmbG9hdCBkaXN0YW5jZU1ldHJpYyA9IGRp
c3RhbmNlRnVuY3Rpb24odG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsICppdCk7CiAgICAgICAgIGlm
IChkaXN0YW5jZU1ldHJpYyA8IGJlc3REaXN0YW5jZU1ldHJpYykgewotICAgICAgICAgICAgdGFy
Z2V0UG9pbnQgPSByb3VuZGVkSW50UG9pbnQoaXQtPnF1YWQoKS5jZW50ZXIoKSk7Ci0gICAgICAg
ICAgICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICB0YXJnZXRO
b2RlID0gbm9kZTsKLSAgICAgICAgICAgIGJlc3REaXN0YW5jZU1ldHJpYyA9IGRpc3RhbmNlTWV0
cmljOworICAgICAgICAgICAgaWYgKHNuYXBUbygqaXQsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVh
LCBhZGp1c3RlZFBvaW50KSkgeworICAgICAgICAgICAgICAgIHRhcmdldFBvaW50ID0gYWRqdXN0
ZWRQb2ludDsKKyAgICAgICAgICAgICAgICB0YXJnZXRBcmVhID0gaXQtPmJvdW5kaW5nQm94KCk7
CisgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICAgICAgYmVz
dERpc3RhbmNlTWV0cmljID0gZGlzdGFuY2VNZXRyaWM7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSBpZiAoZGlzdGFuY2VNZXRyaWMgPT0gYmVzdERpc3RhbmNlTWV0cmljKSB7CiAgICAg
ICAgICAgICAvLyBUcnkgdG8gYWx3YXlzIHJldHVybiB0aGUgaW5uZXItbW9zdCBlbGVtZW50Lgot
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKHRhcmdldE5vZGUpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+aXNEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSkgJiYgc25hcFRvKCpp
dCwgdG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsIGFkanVzdGVkUG9pbnQpKSB7CisgICAgICAgICAg
ICAgICAgdGFyZ2V0UG9pbnQgPSBhZGp1c3RlZFBvaW50OwogICAgICAgICAgICAgICAgIHRhcmdl
dE5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAgIHRhcmdldEFyZWEgPSBpdC0+Ym91bmRpbmdC
b3goKTsKICAgICAgICAgICAgIH0KQEAgLTI2Nyw5ICszNDEsNyBAQCBib29sIGZpbmROb2RlV2l0
aExvd2VzdERpc3RhbmNlTWV0cmljKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0
UG9pbnQsCiAgICAgfQogICAgIGlmICh0YXJnZXROb2RlKSB7CiAgICAgICAgIHRhcmdldEFyZWEg
PSB0YXJnZXROb2RlLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codGFyZ2V0
QXJlYSk7Ci0gICAgICAgIHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS0+ZG9jdW1lbnQoKS0+dmll
dygpLT5jb250ZW50c1RvV2luZG93KHRhcmdldFBvaW50KTsKICAgICB9Ci0KICAgICByZXR1cm4g
KHRhcmdldE5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmU3YzE2ZGI2NDdmODRhNGFhOWM5NzFmODE4MzI4
MjdlYjg0ZWZlMC4uNzk1YzFiNDU5NGEzZjY2ZjRmY2EwNTI5MGM3YmI2ZWZiODRmNDUwYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA3LTE4ICBLZXZpbiBFbGxpcyAgPGtldmVyc0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgVE9VQ0hfQURKVVNUTUVOVCBpcyB0b28gYWdncmVzc2l2ZSB3
aGVuIHNuYXBwaW5nIHRvIGxhcmdlIGVsZW1lbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNjIKKworICAgICAgICBSZXZpZXdlZCBieSBBbnRv
bmlvIEdvbWVzLgorCisgICAgICAgIEFkZGluZyBhIHRlc3QgY2FzZSB0byBlbnN1cmUgdGhhdCB0
aGUgYWRqdXN0ZWQgdG91Y2ggcG9zaXRpb24gaXMgCisgICAgICAgIHdpdGhpbiB0aGUgYm91bmRz
IG9mIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgdGhlIHRvdWNoIGFyZWEuCisgICAgICAgIFByZXZp
b3VzbHksIHRoZSB0YXJnZXQgcG9zaXRpb24gc25hcHBlZCB0byB0aGUgY2VudGVyIG9mIHRoZSB0
YXJnZXQKKyAgICAgICAgZWxlbWVudCwgd2hpY2ggY2FuIGJlIGZhciByZW1vdmVkIGZyb20gdGhl
IHRvdWNoIGFyZWEuCisKKyAgICAgICAgVGhlIHNlY29uZCB0ZXN0IGlzIGZvciBub24tcmVjdGls
aW5lYXIgZWxlbWVudHMsIGFuZCB2ZXJpZmllcyB0aGF0CisgICAgICAgIHRoZSB0b3VjaCBhcmVh
IG11c3Qgb3ZlcmxhcCB0aGUgdHJ1ZSBib3VuZHMgb2YgdGhlIGVsZW1lbnQgZm9yIGFuCisgICAg
ICAgIGFkanVzdG1lbnQgdG8gb2NjdXIuCisKKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvYmln
LWRpdi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9iaWct
ZGl2Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9yb3RhdGVkLW5vZGUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvcm90YXRlZC1u
b2RlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTE3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmcuICBSZW1vdmUgdGVzdHMgdGhh
dCBoYXZlIGJlZW4gcGFzc2luZyBjb25zaXN0ZW50bHkgYWNjb3JkaW5nIHRvIHRoZSBmbGFraW5l
c3MgZGFzaGJvYXJkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2Jp
Zy1kaXYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2JpZy1kaXYt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzZTMxY2JmODg5MDFiN2Q1NmVjNDM5N2IyYjc1MmEy
Nzk3ZDQ3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQv
YmlnLWRpdi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2NCBAQAorVGVzdCB0b3VjaCBhZGp1c3Rt
ZW50IG9uIGEgbGFyZ2UgZGl2LiBUaGUgYWRqdXN0ZWQgdG91Y2ggcG9pbnQgc2hvdWxkIGxpZSBp
bnNpZGUgdGhlIHRhcmdldCBlbGVtZW50IGFuZCB3aXRoaW4gdGhlIHRvdWNoIGFyZWEuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK092ZXJsYXBwaW5nIHRvdWNoIGFib3ZlIHRo
ZSB0YXJnZXQgc2hvdWxkIHNuYXAgdG8gdGhlIHRvcCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkUG9pbnQueCA+
PSB0YXJnZXRCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA8PSB0YXJnZXRC
b3VuZHMueCArIHRhcmdldEJvdW5kcy53aWR0aCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQu
eSA+PSB0YXJnZXRCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA8PSB0YXJn
ZXRCb3VuZHMueSArIHRhcmdldEJvdW5kcy5oZWlnaHQgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBv
aW50LnggPj0gdG91Y2hCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA8PSB0
b3VjaEJvdW5kcy54ICsgdG91Y2hCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBv
aW50LnkgPj0gdG91Y2hCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA8PSB0
b3VjaEJvdW5kcy55ICsgdG91Y2hCb3VuZHMuaGVpZ2h0IGlzIHRydWUKKworT3ZlcmxhcHBpbmcg
dG91Y2ggYmVsb3cgdGhlIHRhcmdldCBzaG91bGQgc25hcCB0byB0aGUgYm90dG9tIG9mIHRoZSB0
YXJnZXQgZWxlbWVudC4KK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzIGVsZW1lbnQuaWQKK1BBU1Mg
YWRqdXN0ZWRQb2ludC54ID49IHRhcmdldEJvdW5kcy54IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQ
b2ludC54IDw9IHRhcmdldEJvdW5kcy54ICsgdGFyZ2V0Qm91bmRzLndpZHRoIGlzIHRydWUKK1BB
U1MgYWRqdXN0ZWRQb2ludC55ID49IHRhcmdldEJvdW5kcy55IGlzIHRydWUKK1BBU1MgYWRqdXN0
ZWRQb2ludC55IDw9IHRhcmdldEJvdW5kcy55ICsgdGFyZ2V0Qm91bmRzLmhlaWdodCBpcyB0cnVl
CitQQVNTIGFkanVzdGVkUG9pbnQueCA+PSB0b3VjaEJvdW5kcy54IGlzIHRydWUKK1BBU1MgYWRq
dXN0ZWRQb2ludC54IDw9IHRvdWNoQm91bmRzLnggKyB0b3VjaEJvdW5kcy53aWR0aCBpcyB0cnVl
CitQQVNTIGFkanVzdGVkUG9pbnQueSA+PSB0b3VjaEJvdW5kcy55IGlzIHRydWUKK1BBU1MgYWRq
dXN0ZWRQb2ludC55IDw9IHRvdWNoQm91bmRzLnkgKyB0b3VjaEJvdW5kcy5oZWlnaHQgaXMgdHJ1
ZQorCitPdmVybGFwcGluZyB0b3VjaCBsZWZ0IG9mIHRoZSB0YXJnZXQgc2hvdWxkIHNuYXAgdG8g
dGhlIGxlZnQgc2lkZSBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuCitQQVNTIGFkanVzdGVkTm9kZS5p
ZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkUG9pbnQueCA+PSB0YXJnZXRCb3VuZHMueCBp
cyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA8PSB0YXJnZXRCb3VuZHMueCArIHRhcmdldEJv
dW5kcy53aWR0aCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA+PSB0YXJnZXRCb3VuZHMu
eSBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA8PSB0YXJnZXRCb3VuZHMueSArIHRhcmdl
dEJvdW5kcy5oZWlnaHQgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPj0gdG91Y2hCb3Vu
ZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA8PSB0b3VjaEJvdW5kcy54ICsgdG91
Y2hCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPj0gdG91Y2hCb3Vu
ZHMueSBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA8PSB0b3VjaEJvdW5kcy55ICsgdG91
Y2hCb3VuZHMuaGVpZ2h0IGlzIHRydWUKKworT3ZlcmxhcHBpbmcgdG91Y2ggcmlnaHQgb2YgdGhl
IHRhcmdldCBzaG91bGQgc25hcCB0byB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdGFyZ2V0IGVsZW1l
bnQuCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyBlbGVtZW50LmlkCitQQVNTIGFkanVzdGVkUG9p
bnQueCA+PSB0YXJnZXRCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueCA8PSB0
YXJnZXRCb3VuZHMueCArIHRhcmdldEJvdW5kcy53aWR0aCBpcyB0cnVlCitQQVNTIGFkanVzdGVk
UG9pbnQueSA+PSB0YXJnZXRCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQueSA8
PSB0YXJnZXRCb3VuZHMueSArIHRhcmdldEJvdW5kcy5oZWlnaHQgaXMgdHJ1ZQorUEFTUyBhZGp1
c3RlZFBvaW50LnggPj0gdG91Y2hCb3VuZHMueCBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQu
eCA8PSB0b3VjaEJvdW5kcy54ICsgdG91Y2hCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1
c3RlZFBvaW50LnkgPj0gdG91Y2hCb3VuZHMueSBpcyB0cnVlCitQQVNTIGFkanVzdGVkUG9pbnQu
eSA8PSB0b3VjaEJvdW5kcy55ICsgdG91Y2hCb3VuZHMuaGVpZ2h0IGlzIHRydWUKKworVGVzdCB0
b3VjaCBhcmVhIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBlbGVtZW50LgorUEFTUyBhZGp1
c3RlZE5vZGUuaWQgaXMgZWxlbWVudC5pZAorUEFTUyBhZGp1c3RlZFBvaW50LnggPj0gdGFyZ2V0
Qm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdGFyZ2V0Qm91bmRzLngg
KyB0YXJnZXRCb3VuZHMud2lkdGggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPj0gdGFy
Z2V0Qm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdGFyZ2V0Qm91bmRz
LnkgKyB0YXJnZXRCb3VuZHMuaGVpZ2h0IGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC54ID49
IHRvdWNoQm91bmRzLnggaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnggPD0gdG91Y2hCb3Vu
ZHMueCArIHRvdWNoQm91bmRzLndpZHRoIGlzIHRydWUKK1BBU1MgYWRqdXN0ZWRQb2ludC55ID49
IHRvdWNoQm91bmRzLnkgaXMgdHJ1ZQorUEFTUyBhZGp1c3RlZFBvaW50LnkgPD0gdG91Y2hCb3Vu
ZHMueSArIHRvdWNoQm91bmRzLmhlaWdodCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L2JpZy1kaXYuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9i
aWctZGl2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFiY2M3NzY4OTlmOGRhZGUwZjQ1ZWNjMmVkMGYzMTRj
ODU1YTFhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9i
aWctZGl2Lmh0bWwKQEAgLTAsMCArMSwxMDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+Cisg
ICAgI3RhcmdldERpdiB7CisgICAgICAgIGJhY2tncm91bmQ6ICMwMGY7CisgICAgICAgIGhlaWdo
dDogNDAwcHg7CisgICAgICAgIHdpZHRoOiA0MDBweDsKKyAgICB9Cis8L3N0eWxlPgorPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKwor
PC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorCis8ZGl2IGlkPSJ0YXJnZXRE
aXYiPgorPC9kaXY+CisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29s
ZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVk
Tm9kZTsKKyAgICB2YXIgYWRqdXN0ZWRQb2ludDsKKyAgICB2YXIgdGFyZ2V0Qm91bmRzOworICAg
IHZhciB0b3VjaEJvdW5kczsKKworICAgIGZ1bmN0aW9uIGZpbmRBYnNvbHV0ZVBvc2l0aW9uKG5v
ZGUpIHsKKyAgICAgICAgdmFyIHBvcyA9IHtsZWZ0OiAwLCB0b3A6IDB9OworICAgICAgICBkbyB7
CisgICAgICAgICAgICBwb3MubGVmdCArPSBub2RlLm9mZnNldExlZnQ7CisgICAgICAgICAgICBw
b3MudG9wICs9IG5vZGUub2Zmc2V0VG9wOworICAgICAgICB9IHdoaWxlIChub2RlID0gbm9kZS5v
ZmZzZXRQYXJlbnQpOworICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHJ1blRvdWNoVGVzdHMoKSB7CisgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidGFyZ2V0RGl2Iik7CisgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xp
Y2snLCBmdW5jdGlvbigpIHt9LCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7fSwgZmFsc2UpOworCisgICAgICAgIHZhciBwb3Mg
PSBmaW5kQWJzb2x1dGVQb3NpdGlvbihlbGVtZW50KTsKKworICAgICAgICB2YXIgeCA9IHBvcy5s
ZWZ0OworICAgICAgICB2YXIgeSA9IHBvcy50b3A7CisgICAgICAgIHZhciB3aWR0aCA9IGVsZW1l
bnQuY2xpZW50V2lkdGg7CisgICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdo
dDsKKworICAgICAgICB0YXJnZXRCb3VuZHMgPSB7CisgICAgICAgICAgICB4OiB4LAorICAgICAg
ICAgICAgeTogeSwKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdo
dDogaGVpZ2h0CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIHRvdWNoUmFkaXVzID0gMTA7Cisg
ICAgICAgIHZhciBvZmZzZXQgPSB0b3VjaFJhZGl1cyAvIDI7CisgICAgICAgIHZhciBtaWRYID0g
eCArIHdpZHRoIC8gMjsKKyAgICAgICAgdmFyIG1pZFkgPSB5ICsgaGVpZ2h0IC8gMjsKKworICAg
ICAgICBkZWJ1ZygnXG5PdmVybGFwcGluZyB0b3VjaCBhYm92ZSB0aGUgdGFyZ2V0IHNob3VsZCBz
bmFwIHRvIHRoZSB0b3Agb2YgdGhlIHRhcmdldCBlbGVtZW50LicpOworICAgICAgICB0ZXN0VG91
Y2gobWlkWCwgeSAtIG9mZnNldCwgdG91Y2hSYWRpdXMsIHRhcmdldEJvdW5kcyk7CisgICAgICAg
IGRlYnVnKCdcbk92ZXJsYXBwaW5nIHRvdWNoIGJlbG93IHRoZSB0YXJnZXQgc2hvdWxkIHNuYXAg
dG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuJyk7CisgICAgICAgIHRlc3RUb3Vj
aChtaWRYLCB5ICsgaGVpZ2h0ICsgb2Zmc2V0LCB0b3VjaFJhZGl1cywgdGFyZ2V0Qm91bmRzKTsK
KyAgICAgICAgZGVidWcoJ1xuT3ZlcmxhcHBpbmcgdG91Y2ggbGVmdCBvZiB0aGUgdGFyZ2V0IHNo
b3VsZCBzbmFwIHRvIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRhcmdldCBlbGVtZW50LicpOworICAg
ICAgICB0ZXN0VG91Y2goeCAtIG9mZnNldCwgbWlkWSwgdG91Y2hSYWRpdXMsIHRhcmdldEJvdW5k
cyk7CisgICAgICAgIGRlYnVnKCdcbk92ZXJsYXBwaW5nIHRvdWNoIHJpZ2h0IG9mIHRoZSB0YXJn
ZXQgc2hvdWxkIHNuYXAgdG8gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHRhcmdldCBlbGVtZW50Licp
OworICAgICAgICB0ZXN0VG91Y2goeCArIHdpZHRoICsgb2Zmc2V0LCBtaWRZLCB0b3VjaFJhZGl1
cywgdGFyZ2V0Qm91bmRzKTsKKyAgICAgICAgZGVidWcoJ1xuVGVzdCB0b3VjaCBhcmVhIGNvbnRh
aW5lZCB3aXRoaW4gdGhlIHRhcmdldCBlbGVtZW50LicpOworICAgICAgICB0ZXN0VG91Y2gobWlk
WCwgbWlkWSwgdG91Y2hSYWRpdXMsIHRhcmdldEJvdW5kcyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gdGVzdFRvdWNoKHRvdWNoWCwgdG91Y2hZLCByYWRpdXMsIHRhcmdldEJvdW5kcykgeworCisg
ICAgICAgIHRvdWNoQm91bmRzID0geworICAgICAgICAgICAgeDogdG91Y2hYIC0gcmFkaXVzLAor
ICAgICAgICAgICAgeTogdG91Y2hZIC0gcmFkaXVzLAorICAgICAgICAgICAgd2lkdGg6IDIgKiBy
YWRpdXMsCisgICAgICAgICAgICBoZWlnaHQ6IDIgKiByYWRpdXMKKyAgICAgICAgfTsKKyAgICAg
ICAgYWRqdXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2th
YmxlTm9kZSh0b3VjaEJvdW5kcy54LCB0b3VjaEJvdW5kcy55LCB0b3VjaEJvdW5kcy53aWR0aCwg
dG91Y2hCb3VuZHMuaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgICAgIHNob3VsZEJlKCdhZGp1c3Rl
ZE5vZGUuaWQnLCAnZWxlbWVudC5pZCcpOworICAgICAgICBhZGp1c3RlZFBvaW50ID0gaW50ZXJu
YWxzLnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUodG91Y2hCb3VuZHMu
eCwgdG91Y2hCb3VuZHMueSwgdG91Y2hCb3VuZHMud2lkdGgsIHRvdWNoQm91bmRzLmhlaWdodCwg
ZG9jdW1lbnQpOworCisgICAgICAgIHNob3VsZEJlVHJ1ZSgnYWRqdXN0ZWRQb2ludC54ID49IHRh
cmdldEJvdW5kcy54Jyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnYWRqdXN0ZWRQb2ludC54IDw9
IHRhcmdldEJvdW5kcy54ICsgdGFyZ2V0Qm91bmRzLndpZHRoJyk7CisgICAgICAgIHNob3VsZEJl
VHJ1ZSgnYWRqdXN0ZWRQb2ludC55ID49IHRhcmdldEJvdW5kcy55Jyk7CisgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgnYWRqdXN0ZWRQb2ludC55IDw9IHRhcmdldEJvdW5kcy55ICsgdGFyZ2V0Qm91bmRz
LmhlaWdodCcpOworICAgICAgICBzaG91bGRCZVRydWUoJ2FkanVzdGVkUG9pbnQueCA+PSB0b3Vj
aEJvdW5kcy54Jyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnYWRqdXN0ZWRQb2ludC54IDw9IHRv
dWNoQm91bmRzLnggKyB0b3VjaEJvdW5kcy53aWR0aCcpOworICAgICAgICBzaG91bGRCZVRydWUo
J2FkanVzdGVkUG9pbnQueSA+PSB0b3VjaEJvdW5kcy55Jyk7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgnYWRqdXN0ZWRQb2ludC55IDw9IHRvdWNoQm91bmRzLnkgKyB0b3VjaEJvdW5kcy5oZWlnaHQn
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscyAmJiBpbnRlcm5hbHMudG91Y2hO
b2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7CisgICAgICAgICAgICBkZXNjcmlwdGlv
bignVGVzdCB0b3VjaCBhZGp1c3RtZW50IG9uIGEgbGFyZ2UgZGl2LiAgVGhlIGFkanVzdGVkIHRv
dWNoIHBvaW50IHNob3VsZCBsaWUgaW5zaWRlIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgd2l0aGlu
IHRoZSB0b3VjaCBhcmVhLicpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIHJ1
blRvdWNoVGVzdHMoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1
c3RtZW50L3JvdGF0ZWQtbm9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVz
dG1lbnQvcm90YXRlZC1ub2RlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmEyOTQyN2RkNTM3
N2ExZTJjYjM5MmQzOTA5ZWYyMDMxZTczZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvdG91Y2hhZGp1c3RtZW50L3JvdGF0ZWQtbm9kZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
NiBAQAorVGVzdCB0b3VjaCBhZGp1c3RtZW50IHRvIGEgbm9uLXJlY3RpbGluZWFyIGVsZW1lbnQu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitEaXJlY3QgVG91Y2hlcworUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgInJvdGF0ZWREaXYiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAi
cm90YXRlZERpdiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJyb3RhdGVkRGl2IgorUEFTUyBh
ZGp1c3RlZE5vZGUuaWQgaXMgInJvdGF0ZWREaXYiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAi
cm90YXRlZERpdiIKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJjb250YWluZXJEaXYiCitQQVNT
IGFkanVzdGVkTm9kZS5pZCBpcyAiY29udGFpbmVyRGl2IgorUEFTUyBhZGp1c3RlZE5vZGUuaWQg
aXMgImNvbnRhaW5lckRpdiIKKworQWRqdXN0ZWQgVG91Y2hlcworUEFTUyBhZGp1c3RlZE5vZGUu
aWQgaXMgInJvdGF0ZWREaXYiCitQQVNTIGFkanVzdGVkTm9kZS5pZCBpcyAicm90YXRlZERpdiIK
KworTmVhciBNaXNzZXMKK1BBU1MgYWRqdXN0ZWROb2RlLmlkIGlzICJjb250YWluZXJEaXYiCitQ
QVNTIGFkanVzdGVkTm9kZS5pZCBpcyAiY29udGFpbmVyRGl2IgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RvdWNoYWRqdXN0bWVudC9yb3RhdGVkLW5vZGUuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC9yb3RhdGVkLW5vZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjE5OWNhNmQ3NGJiOTYzOTc4
ZjlhOGY5ZWUwNmI3YzRhMzQwMTVjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91
Y2hhZGp1c3RtZW50L3JvdGF0ZWQtbm9kZS5odG1sCkBAIC0wLDAgKzEsMTM2IEBACis8aHRtbD4K
KzxoZWFkPgorPHN0eWxlPgorICAgICNjb250YWluZXJEaXYgeworICAgICAgICAtd2Via2l0LWJv
eC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwor
ICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
ICAgIHdpZHRoOiAxMDBweDsKKyAgICB9CisgICAgI3JvdGF0ZWREaXYgeworICAgICAgLXdlYmtp
dC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0
ZSg0NWRlZyk7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAgIGhlaWdodDog
NDBweDsKKyAgICAgIGxlZnQ6IDEwcHg7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
ICB0b3A6IDEwcHg7CisgICAgICB3aWR0aDogNDBweDsKKyAgICB9CisKKyAgICAjdGVzdERpdiB7
CisgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICBib3JkZXI6IDFw
eCBzb2xpZCBibGFjazsKKyAgICAgIGhlaWdodDogNDBweDsKKyAgICAgIGxlZnQ6IDUwcHg7Cisg
ICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICB0b3A6IDQwcHg7CisgICAgICB3aWR0aDog
NDBweDsKKyAgICB9CisKKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
cnVuVGVzdHMoKSI+CisKKzxkaXYgaWQ9ImNvbnRhaW5lckRpdiI+CisgIDxkaXYgaWQ9InJvdGF0
ZWREaXYiPjwvZGl2PgorICA8IS0tIDxkaXYgaWQ9InRlc3REaXYiPjwvZGl2PiAtLT4KKzwvZGl2
PgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2Pgor
Cis8c2NyaXB0PgorICAgIHZhciBhZGp1c3RlZE5vZGU7CisgICAgdmFyIGFkanVzdGVkUG9pbnQ7
CisKKyAgICBmdW5jdGlvbiBub2RlQXRUb3VjaCh4LCB5LCByYWRpdXMpCisgICAgeworICAgICAg
ICB2YXIgdG91Y2hBcmVhID0gZ2V0VG91Y2hBcmVhKHgsIHksIHJhZGl1cyk7CisgICAgICAgIGFk
anVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUodG91Y2hBcmVhLngsIHRvdWNoQXJlYS55LCB0b3VjaEFyZWEud2lkdGgsIHRvdWNoQXJlYS5o
ZWlnaHQsIGRvY3VtZW50KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRUb3VjaEFyZWEoeCwg
eSwgcmFkaXVzKSB7CisgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnRhaW5lckRpdicpOworICAgICAgICB2YXIgcG9zID0gZmluZEFic29sdXRlUG9zaXRpb24o
bm9kZSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB4OiBwb3MubGVmdCArIHggLSBy
YWRpdXMsCisgICAgICAgICAgICB5OiBwb3MudG9wICsgeSAtIHJhZGl1cywKKyAgICAgICAgICAg
IHdpZHRoOiAyICogcmFkaXVzLAorICAgICAgICAgICAgaGVpZ2h0OiAyICogcmFkaXVzCisgICAg
ICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZEFic29sdXRlUG9zaXRpb24obm9kZSkg
eworICAgICAgICB2YXIgcG9zID0ge2xlZnQ6IDAsIHRvcDogMH07CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIHBvcy5sZWZ0ICs9IG5vZGUub2Zmc2V0TGVmdDsKKyAgICAgICAgICAgIHBvcy50
b3AgKz0gbm9kZS5vZmZzZXRUb3A7CisgICAgICAgIH0gd2hpbGUgKG5vZGUgPSBub2RlLm9mZnNl
dFBhcmVudCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVz
dERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWcoJ0RpcmVjdCBUb3VjaGVzJyk7
CisKKyAgICAgICAgbm9kZUF0VG91Y2goMzAsIDMwLCAyMCk7CisgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ3JvdGF0ZWREaXYnKTsKKyAgICAgICAgbm9k
ZUF0VG91Y2goMjAsIDMwLCAyMCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRq
dXN0ZWROb2RlLmlkJywgJ3JvdGF0ZWREaXYnKTsKKyAgICAgICAgbm9kZUF0VG91Y2goNDAsIDMw
LCAyMCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywg
J3JvdGF0ZWREaXYnKTsKKyAgICAgICAgbm9kZUF0VG91Y2goMzAsIDIwLCAyMCk7CisgICAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ3JvdGF0ZWREaXYnKTsK
KyAgICAgICAgbm9kZUF0VG91Y2goMzAsIDQwLCAyMCk7CisgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ3JvdGF0ZWREaXYnKTsKKworICAgICAgICBub2Rl
QXRUb3VjaCg4MCwgODAsIDIwKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1
c3RlZE5vZGUuaWQnLCAnY29udGFpbmVyRGl2Jyk7CisgICAgICAgIG5vZGVBdFRvdWNoKDgwLCAy
MCwgMjApOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcs
ICdjb250YWluZXJEaXYnKTsKKyAgICAgICAgbm9kZUF0VG91Y2goMjAsIDgwLCAyMCk7CisgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnYWRqdXN0ZWROb2RlLmlkJywgJ2NvbnRhaW5lckRp
dicpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RBZGp1c3RlZFRvdWNoZXMoKQorICAgIHsK
KyAgICAgICAgZGVidWcoJ1xuQWRqdXN0ZWQgVG91Y2hlcycpOworCisgICAgICAgIC8vIFRvdWNo
IG92ZXJsYXBzIGNlbnRlciBvZiBlbGVtZW50LgorICAgICAgICBub2RlQXRUb3VjaCgxMCwgMTAs
IDMwKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdhZGp1c3RlZE5vZGUuaWQnLCAn
cm90YXRlZERpdicpOworCisgICAgICAgIC8vIFRvdWNoIG92ZXJsYXBzIGNvcm5lciBvZiBlbGVt
ZW50LgorICAgICAgICBub2RlQXRUb3VjaCgyMCwgMCwgMjApOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5pZCcsICdyb3RhdGVkRGl2Jyk7CisKKyAgICAgICAg
ZGVidWcoJ1xuTmVhciBNaXNzZXMnKTsKKworICAgICAgICAvLyBUb3VjaCBvdmVybGFwcyBib3Vu
ZGluZy1ib3ggb2YgZWxlbWVudCwgYnV0IG5vdCB0aGUgYWN0dWFsIGJvdW5kcy4KKyAgICAgICAg
bm9kZUF0VG91Y2goNzAsIDAsIDIwKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdh
ZGp1c3RlZE5vZGUuaWQnLCAnY29udGFpbmVyRGl2Jyk7CisgICAgICAgIG5vZGVBdFRvdWNoKDcw
LCA2MCwgMjApOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2FkanVzdGVkTm9kZS5p
ZCcsICdjb250YWluZXJEaXYnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygpCisg
ICAgeworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9u
KCkge30sIGZhbHNlKTsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5p
bnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9k
ZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdG91Y2ggYWRqdXN0bWVudCB0byBh
IG5vbi1yZWN0aWxpbmVhciBlbGVtZW50LicpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0QWRqdXN0ZWRUb3Vj
aGVzKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>