<?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>96677</bug_id>
          
          <creation_ts>2012-09-13 12:00:22 -0700</creation_ts>
          <short_desc>Do touch adjustment on GestureTapDown</short_desc>
          <delta_ts>2012-09-19 07:08:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</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>
          <dependson>96060</dependson>
    
    <dependson>96806</dependson>
          <blocked>96810</blocked>
    
    <blocked>97041</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Rick Byers">rbyers</reporter>
          <assigned_to name="Rick Byers">rbyers</assigned_to>
          <cc>abarth</cc>
    
    <cc>aelias</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>kevers</cc>
    
    <cc>rjkroege</cc>
    
    <cc>tdanderson</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>719751</commentid>
    <comment_count>0</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-13 12:00:22 -0700</bug_when>
    <thetext>Since we now (as of bug 96060) can use GestureTapDown to trigger :active states, we should really use the same approach for hit testing GestureTapDown as GestureTap (to increase the chance they&apos;ll select the same element).  In particular we should be applying touch adjustment.

It&apos;s debatable whether we should go even further than this - i.e. maybe we should keep track of the element hit by TapDown and ensure the same done is used by Tap (either by using it, or deciding to convert a Tap into a TapCancel).  But here I&apos;d like to take just the first step of using the same algorithm, so that most times (in the absence of the page moving under your finger), Tap will target the element activated/hilighted by TapDown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720989</commentid>
    <comment_count>1</comment_count>
      <attachid>164199</attachid>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-14 11:44:12 -0700</bug_when>
    <thetext>Created attachment 164199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720992</commentid>
    <comment_count>2</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-14 11:50:23 -0700</bug_when>
    <thetext>Note this patch depends on my changes in bug 96060 (just for merge context) and 96806.  I&apos;ll upload a combined patch for the sake of EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720993</commentid>
    <comment_count>3</comment_count>
      <attachid>164200</attachid>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-14 11:51:19 -0700</bug_when>
    <thetext>Created attachment 164200
Combined with dependant patches for the sake of EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720997</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-14 11:54:05 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722221</commentid>
    <comment_count>5</comment_count>
      <attachid>164446</attachid>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-17 13:35:25 -0700</bug_when>
    <thetext>Created attachment 164446
Merge with trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722768</commentid>
    <comment_count>6</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-18 07:45:32 -0700</bug_when>
    <thetext>Allan / Antonio, can you please review this change for me?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722774</commentid>
    <comment_count>7</comment_count>
      <attachid>164446</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-09-18 07:49:32 -0700</bug_when>
    <thetext>Comment on attachment 164446
Merge with trunk

Could you explain to me the flow of gesture events in:

1) touch down on a link (i.e. activatable), and scroll the page.
2) tap on a link (touch down / up within a reasonable tap time).

I want to see something like;

&quot;for _1_, tapgesturedown is processed, no rect hit test is performed yet, then when scroll and let it go, gesturetapcancel. With the patch, a rect based hit test is performed when ...&quot;

&quot;for _2_ we touch down, no hit test, then when I lift my finger, we do a rect based hit test, find the target and send a &apos;tap&apos;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722805</commentid>
    <comment_count>8</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-18 08:20:25 -0700</bug_when>
    <thetext>Thanks Antonio.  Let me know how much of this should be in the ChangeLog, or comments.  Note that I&apos;m describing the event flow for desktop chromium (the only platform that has GestureTapDownCancel at the moment), the gesture recognizer details may differ slightly for ports like Qt and Chromium Android.

(In reply to comment #7)
&gt; (From update of attachment 164446 [details])
&gt; Could you explain to me the flow of gesture events in:
&gt; 
&gt; 1) touch down on a link (i.e. activatable), and scroll the page.

Current behavior:
- GestureTapDown is received, do a point hit test, but no rect hit test
- finger moves enough, get get GestureTapDownCancel (point hit test with Release)
- get GestureScrollBegin, and as the finger moves GestureScrollUpdate and ultimately GestureScrollEnd

With this patch:
- On GestureTapDown, do the rect-based hittest, using the &apos;adjusted point&apos; as the new input to the (now redundant) point-based hit test.
- otherwise identical to the above

&gt; 2) tap on a link (touch down / up within a reasonable tap time).

Current behavior:
- GestureTapDown, do a point hit test with Active
- finger goes up within acceptable movement/time bounds: GestureTap, do a point hit test with Release, then a rect-based hit test and send the tap event to the resulting node.

With this patch:
- On GestureTapDown, do the rect-based hittest, using the &apos;adjusted point&apos; as the new input to the (now redundant) point-based hit test.
- otherwise identical to the above


I see some potential options for improving this.  Being relatively new to this code I didn&apos;t want to change the architecture as part of this CL, but I&apos;m happy to (in this or a future CL) if you think it makes sense.
 - Combine the point and rect based hit tests so that we only ever do one or the other.  I&apos;m a little worried about making sure I get the identical semantics, but it shouldn&apos;t be too hard.
 - don&apos;t do another rect-based hit test on GestureTap, but instead re-use the result from GestureTapDown time.  It&apos;s debatable whether this is the behavior we want, i.e. when the page is changing under the finger (personally I think it is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722825</commentid>
    <comment_count>9</comment_count>
      <attachid>164446</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-18 08:45:43 -0700</bug_when>
    <thetext>Comment on attachment 164446
Merge with trunk

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

&gt; Tools/DumpRenderTree/chromium/TestRunner/EventSender.cpp:1194
&gt; +        if (arguments.size() &gt;= 4) {
&gt; +            event.data.tapDown.width = static_cast&lt;float&gt;(arguments[2].toDouble());
&gt; +            event.data.tapDown.height = static_cast&lt;float&gt;(arguments[3].toDouble());
&gt; +        }

Perhaps these gesture evens could be using the touch-radius set by setTouchRadius? This way you wouldn&apos;t need to expand all the other TestRunners with another extension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722827</commentid>
    <comment_count>10</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-18 08:50:31 -0700</bug_when>
    <thetext>Do you have any plans or ideas for reusing the TapDown result of the touch-adjusted for link highlighting and later handling of Tap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722828</commentid>
    <comment_count>11</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-18 08:51:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Do you have any plans or ideas for reusing the TapDown result of the touch-adjusted for link highlighting and later handling of Tap?

Aghh. Let me rephrase that: Resuing the result of touch-adjustment here in TapDown, when the same result is needed for link-highlighting and again in the actualy handling  of Tap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722830</commentid>
    <comment_count>12</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-18 08:58:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 164446 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=164446&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/TestRunner/EventSender.cpp:1194
&gt; &gt; +        if (arguments.size() &gt;= 4) {
&gt; &gt; +            event.data.tapDown.width = static_cast&lt;float&gt;(arguments[2].toDouble());
&gt; &gt; +            event.data.tapDown.height = static_cast&lt;float&gt;(arguments[3].toDouble());
&gt; &gt; +        }
&gt; 
&gt; Perhaps these gesture evens could be using the touch-radius set by setTouchRadius? This way you wouldn&apos;t need to expand all the other TestRunners with another extension.

In general I don&apos;t think we want to assume that gesture bounding box == touch point radius.  For example, in chromium we currently set the bounding box of a tap gesture to include the small movements we inevitably get between touchstart and touchend (the idea being that if your finger wiggles during a tap, we want effectively the union of all the ellipses for the list of candidates).  That said, we might eliminate that, and TapDown is a pretty simple case that correlates quite closely to touchstart.

Still, if this is just about making the test infrastructure simpler, I&apos;d prefer other approaches to solving that problem (eg. maybe we should have a cross-port mechanism for generating PlatformGestureEvents, rather than a port-specific WebGestureEvent).  Personally I like the purity of leaving gesture and touch events decoupled in WebKit (maybe in the future there should be some way to send a GestureTap with input other than touchscreen - eg. eye tracking for the disabled or something).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722832</commentid>
    <comment_count>13</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-18 09:03:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Do you have any plans or ideas for reusing the TapDown result of the touch-adjusted for link highlighting and later handling of Tap?
&gt; 
&gt; Aghh. Let me rephrase that: Resuing the result of touch-adjustment here in TapDown, when the same result is needed for link-highlighting and again in the actualy handling  of Tap.

I&apos;ve thought about it a bit, but I&apos;m not sure yet exactly what we should do.  There is some discussion here: http://code.google.com/p/chromium/issues/detail?id=132439.  The simplest thing would just be to save the target on TapDown here in EventHandler.cpp, and re-use the same target for Tap - perhaps similar to m_scrollGestureHandlingNode.

Is it OK if I file a separate bug to track this question?  It&apos;s lower priority in my mind (but still something I intend to drive to conclusion).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722847</commentid>
    <comment_count>14</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-09-18 09:13:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; Do you have any plans or ideas for reusing the TapDown result of the touch-adjusted for link highlighting and later handling of Tap?
&gt; &gt; 
&gt; &gt; Aghh. Let me rephrase that: Resuing the result of touch-adjustment here in TapDown, when the same result is needed for link-highlighting and again in the actualy handling  of Tap.
&gt; 
&gt; I&apos;ve thought about it a bit, but I&apos;m not sure yet exactly what we should do.  There is some discussion here: http://code.google.com/p/chromium/issues/detail?id=132439.  The simplest thing would just be to save the target on TapDown here in EventHandler.cpp, and re-use the same target for Tap - perhaps similar to m_scrollGestureHandlingNode.
&gt; 
&gt; Is it OK if I file a separate bug to track this question?  It&apos;s lower priority in my mind (but still something I intend to drive to conclusion).

Of course, I just want to make sure you have thought about it so we don&apos;t end up in a situation where this patch would have to be redone to support it.

For my perspective I would like TapDown to be able to work together with the logic used by WebKit2 WebPage::highlightPotentialActivation, so we don&apos;t end up with even more redundant hit-tests. Hit tests are expensive, and especially area based ones, so just redoing it everywhere is not a winning strategy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722855</commentid>
    <comment_count>15</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-09-18 09:21:27 -0700</bug_when>
    <thetext>
&gt; Current behavior:
&gt; - GestureTapDown, do a point hit test with Active
&gt; - finger goes up within acceptable movement/time bounds: GestureTap, do a point hit test with Release, then a rect-based hit test and send the tap event to the resulting node.
&gt; 
&gt; With this patch:
&gt; - On GestureTapDown, do the rect-based hittest, using the &apos;adjusted point&apos; as the new input to the (now redundant) point-based hit test.
&gt; - otherwise identical to the above
&gt; 
&gt; 
&gt; I see some potential options for improving this.  Being relatively new to this code I didn&apos;t want to change the architecture as part of this CL, but I&apos;m happy to (in this or a future CL) if you think it makes sense.
&gt;  - Combine the point and rect based hit tests so that we only ever do one or the other.  I&apos;m a little worried about making sure I get the identical semantics, but it shouldn&apos;t be too hard.
&gt;  - don&apos;t do another rect-based hit test on GestureTap, but instead re-use the result from GestureTapDown time.  It&apos;s debatable whether this is the behavior we want, i.e. when the page is changing under the finger (personally I think it is).

Thanks. That was exactly what I was looking for: how many and when we point/rect hit test for a given action.

I do see needs for unifications here, as you pointed out. For BlackBerry, we have a cache class called FatFingersResult: until another gesture action is started or we receive a TouchCancel, we keep using the same cached result, we so avoid hit testing as much as we can. 

I think we can go with what you have now, but definitively there is room for improvements here, specially perf-wise, given that hit tests can take up 0.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723024</commentid>
    <comment_count>16</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2012-09-18 13:42:01 -0700</bug_when>
    <thetext>Thanks guys.  I filed bug 97040 to track improving the perf here - at least merging redundant hit tests.  I also filed bug 97041 to track the question of how to handle  changes between TapDown and Tap (perhaps eliminating another hit test).

Anything else you&apos;d like to discuss before putting this in the CQ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723540</commentid>
    <comment_count>17</comment_count>
      <attachid>164446</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 07:07:59 -0700</bug_when>
    <thetext>Comment on attachment 164446
Merge with trunk

Clearing flags on attachment: 164446

Committed r128999: &lt;http://trac.webkit.org/changeset/128999&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723541</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 07:08:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164199</attachid>
            <date>2012-09-14 11:44:12 -0700</date>
            <delta_ts>2012-09-17 13:35:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96677-20120914144343.patch</filename>
            <type>text/plain</type>
            <size>14761</size>
            <attacher name="Rick Byers">rbyers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NjI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNhMmZiNjliYTA5NTUw
M2Q5Y2UyNWExOWFlYThiZGQ2Yzc4YzMyNC4uYWQxOTIxZjJlMjljZTlmYjBmYjVhNDQ2ZWNmZjYz
MWNjNzQxZGMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA5LTE0ICBSaWNr
IEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyB0b3VjaCBhZGp1c3Rt
ZW50IG9uIEdlc3R1cmVUYXBEb3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NjY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIERvIHRvdWNoIGFkanVzdG1lbnQgb24gR2VzdHVyZVRhcERvd24gZXhhY3Rs
eSBhcyBmb3IgR2VzdHVyZVRhcCB0b2RheS4KKworICAgICAgICBUZXN0OiB0b3VjaGFkanVzdG1l
bnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YWRqdXN0R2VzdHVyZVBvc2l0aW9u
KToKKwogMjAxMi0wOS0wOCAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWxsb3cgZ2VzdHVyZSBldmVudHMgdG8gc2V0IGFjdGl2ZS9ob3ZlciBzdGF0ZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjOWJlOWY0OTkxZDkwYTBjMjNhMjEz
MzI4NzRjNGQ2OTFiY2Q4YTEzLi4wNzkxZDEyZGE2NjM3OGVhYWQ1ODZjODc2MWY1M2U0MzAzNDA5
NmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yMzkyLDEwICsyMzky
LDE1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUo
KSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kIHx8IGdlc3R1cmVFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZSkKICAgICAgICAgZXZlbnRU
YXJnZXQgPSBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05vZGUuZ2V0KCk7CiAKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CiAgICAgSGl0VGVzdFJl
cXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OlRvdWNo
RXZlbnQ7Ci0gICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVRhcERvd24pCisgICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVRhcERvd24pIHsKICAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6
QWN0aXZlOwotICAgIGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVRhcCB8fCBnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdl
c3R1cmVUYXBEb3duQ2FuY2VsKQorI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQorICAgICAg
ICBpZiAoIWdlc3R1cmVFdmVudC5hcmVhKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYWRqdXN0
R2VzdHVyZVBvc2l0aW9uKGdlc3R1cmVFdmVudCwgYWRqdXN0ZWRQb2ludCk7CisjZW5kaWYKKyAg
ICB9IGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVy
ZVRhcCB8fCBnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBE
b3duQ2FuY2VsKQogICAgICAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWxlYXNlOwog
ICAgIGVsc2UKICAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6TW92ZSB8IEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seTsKQEAgLTI0MDQsNyArMjQwOSw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1
cmVFdmVudCkKICAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHk7CiAK
ICAgICBpZiAoIWV2ZW50VGFyZ2V0IHx8ICEoaGl0VHlwZSAmIEhpdFRlc3RSZXF1ZXN0OjpSZWFk
T25seSkpIHsKLSAgICAgICAgSW50UG9pbnQgaGl0VGVzdFBvaW50ID0gbV9mcmFtZS0+dmlldygp
LT53aW5kb3dUb0NvbnRlbnRzKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKTsKKyAgICAgICAgSW50
UG9pbnQgaGl0VGVzdFBvaW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGFk
anVzdGVkUG9pbnQpOwogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1
bHRBdFBvaW50KGhpdFRlc3RQb2ludCwgZmFsc2UsIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJh
cnMsIGhpdFR5cGUpOwogICAgICAgICBldmVudFRhcmdldCA9IHJlc3VsdC50YXJnZXROb2RlKCk7
CiAgICAgfQpAQCAtMjU1Miw2ICsyNTU3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmFkanVzdEdl
c3R1cmVQb3NpdGlvbihjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW4KICAg
ICBOb2RlKiB0YXJnZXROb2RlID0gMDsKICAgICBzd2l0Y2ggKGdlc3R1cmVFdmVudC50eXBlKCkp
IHsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAgY2FzZSBQbGF0Zm9y
bUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKICAgICAgICAgYmVzdENsaWNrYWJsZU5vZGVGb3JUb3Vj
aFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVFdmVudC5hcmVh
KCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0
ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6R2VzdHVyZUxvbmdQcmVzczoKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCAxNDMzODM2NmQ4ZDE3ZjU2ODc3MzY1NjE3NDZiOTU4MzBjYmJl
Zjg4Li5iYWNmODVjNGNkZDU1Yzc4YzY5N2UwOTA4MjkyZmQxMWFiNThjZWZkIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDktMTQgIFJpY2sgQnllcnMgIDxyYnllcnNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IERvIHRvdWNoIGFkanVzdG1lbnQgb24gR2VzdHVyZVRhcERvd24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2Njc3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsb3cgcmFkaXVzIHRvIGJlIHNldCBmb3Ig
R2VzdHVyZVRhcERvd24gZXZlbnRzLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvRXZlbnRTZW5kZXIuY3BwOgorICAgICAgICAoRXZlbnRTZW5kZXI6Omdlc3R1
cmVFdmVudCk6CisKIDIwMTItMDktMDggIFJpY2sgQnllcnMgIDxyYnllcnNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEFkZCBoYW5kbGluZyBvZiBuZXcgR2VzdHVyZVRhcENhbmNlbCBpbiBEUlQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvRXZl
bnRTZW5kZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9F
dmVudFNlbmRlci5jcHAKaW5kZXggMjM2MDEyODY1MWM2MGY5OWZmMjVjN2RlYmU2MDc3NTI5NTE2
OTM3Yy4uMjNiNjVkMDcxN2I1ZjNlNTkzMzZlMmZjOGQwYTVlZmIwNTk1MWUzNCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNl
bmRlci5jcHAKQEAgLTExODgsNiArMTE4OCwxMCBAQCB2b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJl
RXZlbnQoV2ViSW5wdXRFdmVudDo6VHlwZSB0eXBlLCBjb25zdCBDcHBBcmd1bWVudExpc3QmCiAg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjoKICAgICAgICAgZXZlbnQueCA9
IHBvaW50Lng7CiAgICAgICAgIGV2ZW50LnkgPSBwb2ludC55OworICAgICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+PSA0KSB7CisgICAgICAgICAgICBldmVudC5kYXRhLnRhcERvd24ud2lkdGgg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOworICAgICAgICAg
ICAgZXZlbnQuZGF0YS50YXBEb3duLmhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVu
dHNbM10udG9Eb3VibGUoKSk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwQ2FuY2VsOgogICAgICAgICBldmVudC54ID0gcG9pbnQu
eDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBlNzA1NWVlOWNjNDVlODEyYzNlYWFjNWY5MmI5N2I1ZWY5NzY0ZWRlLi44Zjlm
NzU2YWU3MzJiNmFhYjc0NmI1MTRkODIxMDRlYmExNDkyODBmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTItMDktMTQgIFJpY2sgQnllcnMgIDxyYnllcnNAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIERvIHRvdWNoIGFkanVzdG1lbnQgb24gR2VzdHVyZVRhcERvd24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2Njc3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBhIGZldyB0d2Vha3MgdG8gdGhl
IHRvdWNoYWRqdXN0bWVudC5qcyBpbmZyYXN0cnVjdHVyZSB0byBtYWtlIGl0CisgICAgICAgIHNp
bXBsZXIgYW5kIGVhc2llciB0byB1c2UuICBBZGQgYSB0ZXN0IGZvciB0b3VjaC1hZGp1c3RtZW50
IG9mCisgICAgICAgIEdlc3R1cmVUYXBEb3duIGV2ZW50cyAoYmFzZWQgb24gdG91Y2gtbGlua3Mt
bG9uZ3ByZXNzKS4KKworICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hh
ZGp1c3RtZW50LmpzOgorICAgICAgICAodG91Y2hQb2ludC5yZXR1cm4ubGVmdC54LnJhZGl1c1gu
dG9wLnkucmFkaXVzWS53aWR0aC5yYWRpdXNYLjIuaGVpZ2h0LnJhZGl1c1kuMi5nZXQgeCk6Cisg
ICAgICAgICh0b3VjaFBvaW50LnJldHVybi5nZXQgeSk6CisgICAgICAgICh0b3VjaFBvaW50KToK
KyAgICAgICAgKG9mZnNldFRvdWNoUG9pbnQpOgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90
b3VjaC1saW5rcy1hY3RpdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFk
anVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA5LTE0ICBN
aWNoZWxhbmdlbG8gRGUgU2ltb25lICA8bWljaGVsYW5nZWxvQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVXNlIGFycmF5cyBpbiBzaGFkZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCBkZTVj
Zjk1NzI1ZTU3ZmM5NTg2NTBkZWNkMTI3NzNiMzFmNWQzZGI0Li45ZjdiMjA4OTQwMzk0MzAxNjI0
MjgxMWM4ZjMzNmJlOTAxN2U3YjFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTQyNCw2
ICs0MjQsMTAgQEAgZmFzdC9tdXRhdGlvbi90cmFuc2llbnQtZ2MtY3Jhc2guaHRtbAogIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwODgKIGZhc3QvanMvbmFtZXMu
aHRtbAogCisjIERvbid0IGhhdmUgR2VzdHVyZUxvbmdQcmVzcywgR2VzdHVyZVRhcENhbmNlbCBl
dmVudCB0eXBlcwordG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtzLWxvbmdwcmVzcy5odG1sCit0
b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwKKwogIyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0gIwogIyAgICAgICBGZWF0dXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwpA
QCAtMjc0MCw5ICsyNzQ0LDYgQEAgY3NzMy9mbGV4Ym94L2ZsZXgtcm91bmRpbmcuaHRtbAogIyBF
TkFCTEUoV0lER0VUX1JFR0lPTikgaXMgZGlzYWJsZWQKIGZhc3QvY3NzL3dpZGdldC1yZWdpb24t
cGFyc2VyLmh0bWwKIAotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTI5MTQKLXRvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1sb25ncHJlc3MuaHRtbAotCiAjIFtR
dF1bR1RLXSBSRUdSRVNTSU9OKHIxMjUyNTEpOiBJdCBtYWRlIHN2Zy9jdXN0b20vdXNlLWluc3Rh
bmNlUm9vdC1hcy1ldmVudC10YXJnZXQueGh0bWwgYXNzZXJ0IGFuZCBmbGFrZXkKICMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzODEyCiBzdmcvY3VzdG9tL3VzZS1p
bnN0YW5jZVJvb3QtYXMtZXZlbnQtdGFyZ2V0LnhodG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5qcyBiL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzCmluZGV4IDU0
NzU0NmM0MTQxMDg5MzIzZWNiMzM0MzY4YjIyM2NiYjRjOGZmZmMuLjczOGM0OThjMzFkZDBlODJj
MGU5ZjYyODA5YjY1ZDIyYjlmODgyM2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RvdWNoYWRq
dXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzCisrKyBiL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzCkBAIC05MSwxMiArOTEs
MTUgQEAgZnVuY3Rpb24gdG91Y2hQb2ludCh4LCB5LCByYWRpdXNYLCByYWRpdXNZKQogewogICAg
IGlmICghcmFkaXVzWSkKICAgICAgICAgcmFkaXVzWSA9IHJhZGl1c1g7Ci0gICAgdmFyIHRvdWNo
cG9pbnQgPSBuZXcgT2JqZWN0KCk7Ci0gICAgdG91Y2hwb2ludC5sZWZ0ID0geCAtIHJhZGl1c1g7
Ci0gICAgdG91Y2hwb2ludC50b3AgPSB5IC0gcmFkaXVzWTsKLSAgICB0b3VjaHBvaW50LndpZHRo
ID0gcmFkaXVzWCAqIDI7Ci0gICAgdG91Y2hwb2ludC5oZWlnaHQgPSByYWRpdXNZICogMjsKLSAg
ICByZXR1cm4gdG91Y2hwb2ludDsKKworICAgIHJldHVybiB7CisgICAgICAgIGxlZnQ6IHggLSBy
YWRpdXNYLAorICAgICAgICB0b3A6IHkgLSByYWRpdXNZLAorICAgICAgICB3aWR0aDogcmFkaXVz
WCAqIDIsCisgICAgICAgIGhlaWdodDogcmFkaXVzWSAqIDIsCisgICAgICAgIGdldCB4KCkgeyBy
ZXR1cm4gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aC8yOyB9LAorICAgICAgICBnZXQgeSgpIHsgcmV0
dXJuIHRoaXMudG9wICsgdGhpcy5oZWlnaHQvMjsgfQorICAgIH07CiB9CiAKIGZ1bmN0aW9uIG9m
ZnNldFRvdWNoUG9pbnQoYm91bmRzLCByZWxhdGl2ZVBvc2l0aW9uLCB0b3VjaE9mZnNldCwgdG91
Y2hSYWRpdXNYLCB0b3VjaFJhZGl1c1kpCkBAIC0xMDQsOSArMTA3LDEwIEBAIGZ1bmN0aW9uIG9m
ZnNldFRvdWNoUG9pbnQoYm91bmRzLCByZWxhdGl2ZVBvc2l0aW9uLCB0b3VjaE9mZnNldCwgdG91
Y2hSYWRpdXNYLCB0CiAgICAgaWYgKCF0b3VjaFJhZGl1c1kpCiAgICAgICAgIHRvdWNoUmFkaXVz
WSA9IHRvdWNoUmFkaXVzWDsKIAotICAgIHZhciB0b3VjaHBvaW50ID0ge2xlZnQgOiBib3VuZHMu
bGVmdCwgdG9wOiBib3VuZHMudG9wIH07CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgY2VudGVyIG9m
IHRoZSB0b3VjaCBhdCB0aGUgdG9wLWxlZnQgb2YgdGhlIGJvdW5kcy4KKyAgICB2YXIgdG91Y2hw
b2ludCA9IHRvdWNoUG9pbnQoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIHRvdWNoUmFkaXVzWCwg
dG91Y2hSYWRpdXNZKTsKICAKLSAgICAvLyBTZXQgY2VudGVyIHBvaW50IGZvciB0b3VjaC4KKyAg
ICAvLyBBZGp1c3QgdGhlIHRvdWNoIHBvaW50IGFkIHJlcXVlc3RlZC4KICAgICBzd2l0Y2ggKHJl
bGF0aXZlUG9zaXRpb24pIHsKICAgICBjYXNlICdjZW50ZXInOgogICAgICAgICB0b3VjaHBvaW50
LmxlZnQgKz0gYm91bmRzLndpZHRoIC8gMjsKQEAgLTE0NCwxMiArMTQ4LDYgQEAgZnVuY3Rpb24g
b2Zmc2V0VG91Y2hQb2ludChib3VuZHMsIHJlbGF0aXZlUG9zaXRpb24sIHRvdWNoT2Zmc2V0LCB0
b3VjaFJhZGl1c1gsIHQKICAgICAgICAgdG91Y2hwb2ludC5sZWZ0ICs9IGJvdW5kcy53aWR0aCAv
IDI7CiAgICAgICAgIHRvdWNocG9pbnQudG9wICs9IGJvdW5kcy5oZWlnaHQgKyB0b3VjaE9mZnNl
dDsKICAgICB9Ci0gICAgLy8gQWRqdXN0IGZyb20gdG91Y2ggY2VudGVyIHRvIHRvcC1sZWZ0IGNv
cm5lci4KLSAgICB0b3VjaHBvaW50LmxlZnQgLT0gdG91Y2hSYWRpdXNYOwotICAgIHRvdWNocG9p
bnQudG9wIC09IHRvdWNoUmFkaXVzWTsKLQotICAgIHRvdWNocG9pbnQud2lkdGggPSAyICogdG91
Y2hSYWRpdXNYOwotICAgIHRvdWNocG9pbnQuaGVpZ2h0ID0gMiAqIHRvdWNoUmFkaXVzWTsKIAog
ICAgIHJldHVybiB0b3VjaHBvaW50OwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hh
ZGp1c3RtZW50L3RvdWNoLWxpbmtzLWFjdGl2ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90
b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kZDRmZWQyMTVkOWFhMTlmNDkxNjFiNzAxMDUzYzY4MTk1MWRlZmZkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtzLWFjdGl2ZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgdGhhdCB0YXBEb3duIHdpbGwgdHJpZ2dl
ciB0aGUgYWN0aXZlIHN0YXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVz
dGluZyBpbmRpcmVjdCBoaXRzLgorUEFTUyBpc0xpbmtBY3RpdmUoKSBpcyB0cnVlCitQQVNTIGlz
TGlua0FjdGl2ZSgpIGlzIHRydWUKK1BBU1MgaXNMaW5rQWN0aXZlKCkgaXMgdHJ1ZQorVGVzdGlu
ZyBkaXJlY3QgaGl0cy4KK1BBU1MgaXNMaW5rQWN0aXZlKCkgaXMgdHJ1ZQorUEFTUyBpc0xpbmtB
Y3RpdmUoKSBpcyB0cnVlCitQQVNTIGlzTGlua0FjdGl2ZSgpIGlzIHRydWUKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwgYi9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTNjNjE4ZTdlMjMwOGEwMWQxYThmNDNlN2Y1YThjNTBmOTg5MDgxMQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3RpdmUuaHRtbApA
QCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0
aXRsZT5Ub3VjaCBBZGp1c3RtZW50IDogVGVzdGluZyB0aGF0IGFjdGl2ZSB3aWxsIGJlIHNldCBv
biBhIHRhcERvd24gLSBidWcgOTY2Nzc8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzdHlsZT4KKyAg
ICAgICAgI3NhbmRib3ggeworICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAg
ICAgICAgbGVmdDogMHB4OworICAgICAgICAgICAgdG9wOiAxMDBweDsKKyAgICAgICAgfQorICAg
ICAgICBhIHsKKyAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LDI1NSwyNTUpOwor
ICAgICAgICB9CisgICAgICAgIGE6YWN0aXZlIHsKKyAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZ2IoMCwwLDI1NSk7CisgICAgICAgIH0gICAgICAgIAorICAgIDwvc3R5bGU+Cis8L2hlYWQ+
CisKKzxib2R5PgorCis8ZGl2IGlkPSJzYW5kYm94Ij4KKzxwPjxhIGhyZWY9IiIgaWQ9Imxpbmsx
Ij5JPC9hPiBwcm9wb3NlIHRvIGNvbnNpZGVyIDxhIGhyZWY9IiIgaWQ9ImxpbmsyIj50aGUgcXVl
c3Rpb248L2E+LCAiQ2FuIG1hY2hpbmVzIHRoaW5rPyI8YnI+VGhpcyBzaG91bGQgYmVnaW4gd2l0
aCBkZWZpbml0aW9ucyBvZiB0aGUgbWVhbmluZyBvZiB0aGUgdGVybXMgIm1hY2hpbmUiIGFuZCA8
YSBocmVmPSIiIGlkPSJsaW5rMyI+InRoaW5rLiI8L2E+PC9wPgorPC9kaXY+CisKKzxwIGlkPSdk
ZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+Cisg
ICAgdmFyIGVsZW1lbnQ7CisgICAgdmFyIGFkanVzdGVkTm9kZTsKKyAgICAvLyBTZXQgdXAgc2hv
cnRjdXQgYWNjZXNzIHRvIGVsZW1lbnRzCisgICAgdmFyIGUgPSB7fTsKKyAgICBbJ3NhbmRib3gn
LCAnbGluazEnLCAnbGluazInLCAnbGluazMnXS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKKyAgICAg
ICAgZVthXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpOworICAgIH0pOworICAgIAorICAg
IHZhciBjdXJFbGVtZW50OworICAgIAorICAgIGZ1bmN0aW9uIGlzTGlua0FjdGl2ZSgpCisgICAg
eworICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIG1hdGNoIHRoZSBiYWNrZ3JvdW5kLWNvbG9yIHVz
ZWQgYWJvdmUsIGFmdGVyIHJvdW5kLXRyaXBwaW5nLgorICAgICAgICB2YXIgZGVmYXVsdENvbG9y
ID0gInJnYigyNTUsIDI1NSwgMjU1KSI7CisgICAgICAgIHZhciBhY3RpdmVDb2xvciA9ICJyZ2Io
MCwgMCwgMjU1KSI7CisgICAgCisgICAgICAgIGNvbG9yID0gd2luZG93LmdldENvbXB1dGVkU3R5
bGUoY3VyRWxlbWVudCkuYmFja2dyb3VuZENvbG9yOworICAgICAgICBpZiAoY29sb3IgPT0gYWN0
aXZlQ29sb3IpCisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChjb2xvciAhPSBk
ZWZhdWx0Q29sb3IpCisgICAgICAgICAgdGVzdEZhaWxlZCgnR290IHVuZXhwZWN0ZWQgYmFja2dy
b3VuZENvbG9yOiAnICsgY29sb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGZ1bmN0aW9uIHRlc3RUYXBEb3duKHRvdWNocG9pbnQsIGVsZW1lbnQpCisgICAgewor
ICAgICAgICBjdXJFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgaWYgKGlzTGlua0FjdGl2ZSgp
KSB0ZXN0RmFpbGVkKCdMaW5rIHVuZXhwZWN0ZWRseSBhY3RpdmUgb24gZW50cnknKTsKKyAgICAg
ICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVRhcERvd24odG91Y2hwb2ludC54LCB0b3VjaHBvaW50Lnks
IHRvdWNocG9pbnQud2lkdGgsIHRvdWNocG9pbnQuaGVpZ2h0KTsKKyAgICAgICAgc2hvdWxkQmVU
cnVlKCJpc0xpbmtBY3RpdmUoKSIpOworICAgICAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwQ2Fu
Y2VsKHRvdWNocG9pbnQueCwgdG91Y2hwb2ludC55KTsKKyAgICAgICAgaWYgKGlzTGlua0FjdGl2
ZSgpKSB0ZXN0RmFpbGVkKCdMaW5rIHVuZXhwZWN0ZWRseSBhY3RpdmUgb24gZXhpdCcpOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGUgYXBwcm9hY2ggaW4gZmluZEFic29s
dXRlQm91bmRzIHdvcmsgY29ycmVjdGx5IGhlcmU/CisgICAgLy8gSSdsbCBpbnZlc3RpZ2F0ZS9m
aXggYWxvbmcgd2l0aCBodHRwOi8vd2tiLnVnLzk2ODEwCisgICAgZnVuY3Rpb24gZ2V0Qm91bmRz
KG5vZGUpCisgICAgeworICAgICAgdmFyIGJvdW5kcyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7CisgICAgICByZXR1cm4geworICAgICAgICBsZWZ0OiBib3VuZHMubGVmdCwKKyAgICAg
ICAgdG9wOiBib3VuZHMudG9wLAorICAgICAgICB3aWR0aDogYm91bmRzLnJpZ2h0IC0gYm91bmRz
LmxlZnQsCisgICAgICAgIGhlaWdodDogYm91bmRzLmJvdHRvbSAtIGJvdW5kcy50b3AKKyAgICAg
IH07ICAgIAorICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2goZWxlbWVu
dCkKKyAgICB7CisgICAgICAgIC8vIFRvdWNoIGRpcmVjdGx5IGluIHRoZSBjZW50ZXIgb2YgdGhl
IGVsZW1lbnQuCisgICAgICAgIHZhciB0b3VjaHBvaW50ID0gb2Zmc2V0VG91Y2hQb2ludChnZXRC
b3VuZHMoZWxlbWVudCksICdjZW50ZXInLCAwLCAyMCwgMzApOworICAgICAgICBpZiAoZG9jdW1l
bnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaHBvaW50LngsIHRvdWNocG9pbnQueSkgIT0gZWxlbWVu
dCkKKyAgICAgICAgICB0ZXN0RmFpbGVkKCdEaXJlY3QgdG91Y2ggZW5kZWQgdXAgb24gc29tZSBv
dGhlciBlbGVtZW50Jyk7CisgICAgICAgIHRlc3RUYXBEb3duKHRvdWNocG9pbnQsIGVsZW1lbnQp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVzY2VuZGFudE9mKHBhcmVudCwgY2hpbGQpCisg
ICAgeworICAgICAgICB2YXIgbiA9IGNoaWxkOworICAgICAgICB3aGlsZShuKSB7CisgICAgICAg
ICAgICBpZihuPT1wYXJlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBuID0gbi5wYXJlbnROb2RlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdEluZGlyZWN0VG91Y2goZWxlbWVudCkKKyAg
ICB7CisgICAgICAgIC8vIFRvdWNoIGp1c3QgcmlnaHQgb2YgdGhlIGVsZW1lbnQuCisgICAgICAg
IHZhciB0b3VjaHBvaW50ID0gb2Zmc2V0VG91Y2hQb2ludChnZXRCb3VuZHMoZWxlbWVudCksICdy
aWdodCcsIDEwLCAzMCwgMjApOworICAgICAgICBpZiAoaXNEZXNjZW5kYW50T2YoZWxlbWVudCwg
ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaHBvaW50LngsIHRvdWNocG9pbnQueSkpKQor
ICAgICAgICAgIHRlc3RGYWlsZWQoJ0luZGlyZWN0IHRvdWNoIGVuZGVkIHVwIHN0aWxsIG9uIHRv
cCBvZiB0aGUgZWxlbWVudCcpOworICAgICAgICB0ZXN0VGFwRG93bih0b3VjaHBvaW50LCBlbGVt
ZW50KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgewor
ICAgICAgICBkZWJ1ZygnVGVzdGluZyBkaXJlY3QgaGl0cy4nKTsKKyAgICAgICAgdGVzdERpcmVj
dFRvdWNoKGUubGluazEpOworICAgICAgICB0ZXN0RGlyZWN0VG91Y2goZS5saW5rMik7CisgICAg
ICAgIHRlc3REaXJlY3RUb3VjaChlLmxpbmszKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0
SW5kaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGluZGlyZWN0
IGhpdHMuJyk7CisgICAgICAgIHRlc3RJbmRpcmVjdFRvdWNoKGUubGluazEpOworICAgICAgICB0
ZXN0SW5kaXJlY3RUb3VjaChlLmxpbmsyKTsKKyAgICAgICAgdGVzdEluZGlyZWN0VG91Y2goZS5s
aW5rMyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAg
aWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgICBkZWJ1ZygnVGhpcyB0ZXN0IHJl
cXVpcmVzIER1bXBSZW5kZXJUcmVlJyk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyLmdlc3R1cmVUYXBEb3duKSB7CisgICAgICAg
ICAgZGVidWcoJ0dlc3R1cmVUYXBEb3duIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybScp
OworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSAKKyAgICAgICAgICAKKyAgICAgICAgZGVz
Y3JpcHRpb24oJ1Rlc3RzIHRoYXQgdGFwRG93biB3aWxsIHRyaWdnZXIgdGhlIGFjdGl2ZSBzdGF0
ZS4nKTsKKyAgICAgICAgdGVzdEluZGlyZWN0VG91Y2hlcygpOworICAgICAgICB0ZXN0RGlyZWN0
VG91Y2hlcygpOworICAgICAgICBlLnNhbmRib3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAg
ICB9CisgICAgcnVuVGVzdHMoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164200</attachid>
            <date>2012-09-14 11:51:19 -0700</date>
            <delta_ts>2012-09-17 13:35:20 -0700</delta_ts>
            <desc>Combined with dependant patches for the sake of EWS</desc>
            <filename>bug-96677-20120914145050.patch</filename>
            <type>text/plain</type>
            <size>39630</size>
            <attacher name="Rick Byers">rbyers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NjI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTE5YmE2NDFmMmJmZTNh
ZTJmNmJjMDg4NzhjNGE0M2IxNTExZDdlMy4uYWQxOTIxZjJlMjljZTlmYjBmYjVhNDQ2ZWNmZjYz
MWNjNzQxZGMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA5LTE0ICBSaWNr
IEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyB0b3VjaCBhZGp1c3Rt
ZW50IG9uIEdlc3R1cmVUYXBEb3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NjY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIERvIHRvdWNoIGFkanVzdG1lbnQgb24gR2VzdHVyZVRhcERvd24gZXhhY3Rs
eSBhcyBmb3IgR2VzdHVyZVRhcCB0b2RheS4KKworICAgICAgICBUZXN0OiB0b3VjaGFkanVzdG1l
bnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YWRqdXN0R2VzdHVyZVBvc2l0aW9u
KToKKworMjAxMi0wOS0wOCAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgQWxsb3cgZ2VzdHVyZSBldmVudHMgdG8gc2V0IGFjdGl2ZS9ob3ZlciBzdGF0ZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MDYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBHZXN0dXJl
VGFwRG93bkNhbmNlbCBhcyBhIG5ldyBQbGF0Zm9ybUdlc3R1cmVFdmVudCB0eXBlLiAgT24gcG9y
dHMKKyAgICAgICAgdGhhdCBzdXBwb3J0IGdlc3R1cmUgZXZlbnRzLCB1c2UgR2VzdHVyZVRhcERv
d24gdG8gdHJpZ2dlciBhY3RpdmUvaG92ZXIKKyAgICAgICAgc3RhdGVzLCBhbmQgR2VzdHVyZVRh
cC9HZXN0dXJlVGFwRG93bkNhbmNlbCB0byBjbGVhciB0aGVtLiAgVGhpcyBpcworICAgICAgICBz
dXBlcmlvciB0byB1c2luZyB0b3VjaCBldmVudHMgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnM6Cisg
ICAgICAgICAgMSkgc29tZSBwb3J0cyAoY2hyb21pdW0pIGF2b2lkIHNlbmRpbmcgdG91Y2ggZXZl
bnRzIHVubGVzcyBhYnNvbHV0ZWx5CisgICAgICAgICAgbmVjZXNzYXJ5LCBzaW5jZSB0aGV5IGh1
cnQgc2Nyb2xsIHBlcmZvcm1hbmNlIGJ5IGJsb2NraW5nIHRocmVhZGVkCisgICAgICAgICAgc2Ny
b2xsaW5nLgorICAgICAgICAgIDIpIHdpdGggdG91Y2gsIGFuZCBlbGVtZW50IHJlYWxseSBzaG91
bGRuJ3QgYmUgJ2FjdGl2ZScgd2hlbiB0aGUgdXNlcgorICAgICAgICAgIGhhcHBlbnMgdG8gYmUg
dG91Y2hpbmcgaXQgd2hpbGUgc2Nyb2xsaW5nLiAgSW4gdGhhdCBjYXNlIHRoZXkgYXJlbid0Cisg
ICAgICAgICAgJ21hbmlwdWxhdGluZyB0aGUgZWxlbWVudCcsIHRoZXkncmUgbWFuaXB1bGF0aW5n
IHRoZSBwYWdlIG9yIGRpdiB0aGF0CisgICAgICAgICAgaXMgc2Nyb2xsaW5nLgorICAgICAgICAg
IDMpIHNpbWlsYXJseSwgdGhlcmUgbWF5IGJlIG90aGVyIGdlc3R1cmVzIHRoYXQgaW52b2x2ZSB0
b3VjaGluZyB0aGUKKyAgICAgICAgICBlbGVtZW50IHdoaWNoIGFyZW4ndCByZWFsbHkgYWJvdXQg
bWFuaXB1bGF0aW5nIHRoYXQgZWxlbWVudCAoZWcuCisgICAgICAgICAgcGluY2ggdG8gem9vbSku
CisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1h
Y3RpdmUtc3RhdGUuaHRtbAorICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L2dlc3R1cmUtdGFwLWFjdGl2ZS1zdGF0ZS1pZnJhbWUuaHRtbAorICAgICAgICAqIGRvbS9HZXN0
dXJlRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZUV2ZW50OjpjcmVhdGUpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1FdmVu
dC5oOgorCiAyMDEyLTA5LTE0ICBNaWNoZWxhbmdlbG8gRGUgU2ltb25lICA8bWljaGVsYW5nZWxv
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIGFycmF5cyBpbiBzaGFkZXJzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGRmNjA1MWZiMzhlYTE2MmY4ZmExZDZkYTA4YjUzZmJjMTFjNDU4
NzYuLjZkMmE0YjdhOGE1ZTdmNWQ0YzAwOTU3ODFjNWViZjNhMGQ2OGJlNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMTQgIFJpY2sgQnllcnMg
IDxyYnllcnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gYWRkIHRvdWNoIGFy
ZWEgdG8gZ2VzdHVyZVRhcERvd24gZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTY4MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgd2lkdGgvaGVpZ2h0IGZvciBHZXN0dXJlVGFwRG93biBhcyBm
b3IgR2VzdHVyZVRhcC9Mb25nUHJlc3Mgc28gdGhhdAorICAgICAgICB3ZSBjYW4gZXZlbnR1YWxs
eSBkbyBmdXp6aW5nIG9uIGl0LgorICAgICAgICAqIHB1YmxpYy9XZWJJbnB1dEV2ZW50Lmg6Cisg
ICAgICAgICogc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyOjpQbGF0Zm9ybUdlc3R1cmVFdmVudEJ1aWxk
ZXIpOgorCisyMDEyLTA5LTA4ICBSaWNrIEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBTZW5kIEdlc3R1cmVUYXBEb3duQ2FuY2VsIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MDYwCisKKyAgICAgICAgUGx1
bWIgV2ViSW5wdXRFdmVudDo6R2V0c3VyZVRhcENhbmNlbCB0bworICAgICAgICBQbGF0Zm9ybUlu
cHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duQ2FuY2VsLiAgQWZ0ZXIgYWxsIHRoZSBjaHJvbWl1bSBj
b2RlCisgICAgICAgIHdhcyBsYW5kZWQsIGl0IHdhcyBzdWdnZXN0ZWQgdGhhdCAnVGFwRG93bkNh
bmNlbCcgd2FzIGEgYmV0dGVyIG5hbWUKKyAgICAgICAgdGhhbiAnVGFwQ2FuY2VsJyBzaW5jZSB5
b3UgY2FuJ3QgY2FuY2VsIGEgVGFwLiAgSSdtIG5vdCBjaGFuZ2luZyB0aGUKKyAgICAgICAgV2Vi
SW5wdXRFdmVudCBkZWZpbml0aW9uIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIGJlIGEgYnJlYWtp
bmcgY2hhbmdlCisgICAgICAgIHRvIGNocm9taXVtLCBidXQgSSBjYW4gZG8gdGhhdCBhcyBhIHNl
cmllcyBvZiBmb2xsb3ctdXAgQ0xzLgorICAgICAgICAqIHNyYy9XZWJJbnB1dEV2ZW50Q29udmVy
c2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtR2VzdHVyZUV2ZW50QnVpbGRlcjo6
UGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlucHV0
RXZlbnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorCiAyMDEyLTA5LTE0ICBLZWlzaGkg
SGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgdGltZSBpbnB1dCBs
YW5nIGF0dHJpYnV0ZSBhd2FyZSBmb3IgdGVzdGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0dlc3R1cmVFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50
LmNwcAppbmRleCBkNzVjZGFhMDk2NjllZjNhNzE1NmM5ZDU1NjE0MTQ3M2UwNjY4YmMyLi4xZTdi
ODdlN2FmMmE1ZmNlNzRiZmVlNTY4ZjdkM2M0ZTg3MzVhYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vR2VzdHVyZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vR2Vz
dHVyZUV2ZW50LmNwcApAQCAtNTgsNiArNTgsNyBAQCBQYXNzUmVmUHRyPEdlc3R1cmVFdmVudD4g
R2VzdHVyZUV2ZW50OjpjcmVhdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbgog
ICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVBpbmNoQmVnaW46CiAgICAgY2FzZSBQbGF0
Zm9ybUV2ZW50OjpHZXN0dXJlUGluY2hFbmQ6CiAgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0
dXJlUGluY2hVcGRhdGU6CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bkNh
bmNlbDoKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNDhkMDc5ZTIyYjcxYzQxYTVkOTMwNGQ4YmUyMWJh
MjZiOGIzODkyMS4uMDc5MWQxMmRhNjYzNzhlYWFkNTg2Yzg3NjFmNTNlNDMwMzQwOTZmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjM2OSw2ICsyMzY5LDE4IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlVGFwRG93bigpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitib29sIEV2ZW50SGFuZGxlcjo6c2hvdWxkR2VzdHVyZXNUcmlnZ2VyQWN0aXZlKCkK
K3sKKyAgICAvLyBJZiB0aGUgcGxhdGZvcm0gd2UncmUgb24gc3VwcG9ydHMgR2VzdHVyZVRhcERv
d24gYW5kIEdlc3R1cmVUYXBDYW5jZWwgdGhlbiB3ZSdsbAorICAgIC8vIHJlbHkgb24gdGhlbSB0
byBzZXQgdGhlIGFjdGl2ZSBzdGF0ZS4gVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIGdlbmVyaWMg
d2F5IHRvCisgICAgLy8ga25vdyBpbiBhZHZhbmNlIHdoYXQgZXZlbnQgdHlwZXMgYXJlIHN1cHBv
cnRlZC4KKyNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgIU9TKEFORFJPSUQpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBib29sIEV2ZW50
SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBn
ZXN0dXJlRXZlbnQpCiB7CiAgICAgLy8gV2UgZG9uJ3QgdXNlIERvdWJsZVRhcCBhdCB0aGUgbW9t
ZW50LCBpdCdzIG1vc3RseSByZWR1bmRhbnQgd2l0aCB0YXAgc2luY2UgdGFwIG5vdyBjb250YWlu
cwpAQCAtMjM4MCw5ICsyMzkyLDI1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJl
RXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBpZiAo
Z2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kIHx8
IGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0
ZSkKICAgICAgICAgZXZlbnRUYXJnZXQgPSBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05vZGUuZ2V0
KCk7CiAKLSAgICBpZiAoIWV2ZW50VGFyZ2V0KSB7Ci0gICAgICAgIEludFBvaW50IGhpdFRlc3RQ
b2ludCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhnZXN0dXJlRXZlbnQucG9z
aXRpb24oKSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0
UG9pbnQoaGl0VGVzdFBvaW50LCBmYWxzZSwgZmFsc2UsIERvbnRIaXRUZXN0U2Nyb2xsYmFycywg
SGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAg
SW50UG9pbnQgYWRqdXN0ZWRQb2ludCA9IGdlc3R1cmVFdmVudC5wb3NpdGlvbigpOworICAgIEhp
dFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0
OjpUb3VjaEV2ZW50OworICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZl
bnQ6Okdlc3R1cmVUYXBEb3duKSB7CisgICAgICAgIGhpdFR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6
OkFjdGl2ZTsKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICAgICAgaWYgKCFnZXN0
dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFkanVzdEdlc3R1cmVQb3Np
dGlvbihnZXN0dXJlRXZlbnQsIGFkanVzdGVkUG9pbnQpOworI2VuZGlmCisgICAgfSBlbHNlIGlm
IChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXAgfHwgZ2Vz
dHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bkNhbmNlbCkK
KyAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6UmVsZWFzZTsKKyAgICBlbHNlCisg
ICAgICAgIGhpdFR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmUgfCBIaXRUZXN0UmVxdWVzdDo6
UmVhZE9ubHk7CisKKyAgICBpZiAoIXNob3VsZEdlc3R1cmVzVHJpZ2dlckFjdGl2ZSgpKQorICAg
ICAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seTsKKworICAgIGlmICghZXZl
bnRUYXJnZXQgfHwgIShoaXRUeXBlICYgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KSkgeworICAg
ICAgICBJbnRQb2ludCBoaXRUZXN0UG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29u
dGVudHMoYWRqdXN0ZWRQb2ludCk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0
VGVzdFJlc3VsdEF0UG9pbnQoaGl0VGVzdFBvaW50LCBmYWxzZSwgZmFsc2UsIERvbnRIaXRUZXN0
U2Nyb2xsYmFycywgaGl0VHlwZSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0ID0gcmVzdWx0LnRhcmdl
dE5vZGUoKTsKICAgICB9CiAKQEAgLTI0MjAsNiArMjQ0OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVF
dmVudCkKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVQaW5jaEJlZ2luOgogICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVBpbmNoRW5kOgogICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVBpbmNoVXBkYXRlOgorICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRh
cERvd25DYW5jZWw6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjUyOCw2ICsyNTU3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmFkanVzdEdlc3R1cmVQb3NpdGlvbihjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVy
ZUV2ZW4KICAgICBOb2RlKiB0YXJnZXROb2RlID0gMDsKICAgICBzd2l0Y2ggKGdlc3R1cmVFdmVu
dC50eXBlKCkpIHsKICAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAgY2Fz
ZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bjoKICAgICAgICAgYmVzdENsaWNrYWJsZU5v
ZGVGb3JUb3VjaFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVF
dmVudC5hcmVhKCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAy
KSwgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6R2VzdHVyZUxvbmdQcmVzczoKQEAgLTM1NTQsNiArMzU4NCwxMSBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmIGV2ZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorI2lmIEVOQUJMRShH
RVNUVVJFX0VWRU5UUykKKyAgICAgICAgaWYgKHNob3VsZEdlc3R1cmVzVHJpZ2dlckFjdGl2ZSgp
KQorICAgICAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHk7CisjZW5k
aWYKKwogICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHBsYXRmb3JtIHRvdWNoIGlkIGJ5IDEgdG8g
YXZvaWQgc3RvcmluZyBhIGtleSBvZiAwIGluIHRoZSBoYXNobWFwLgogICAgICAgICB1bnNpZ25l
ZCB0b3VjaFBvaW50VGFyZ2V0S2V5ID0gcG9pbnQuaWQoKSArIDE7CiAgICAgICAgIFJlZlB0cjxF
dmVudFRhcmdldD4gdG91Y2hUYXJnZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRl
eCA2ZDhhMGFiNzY3M2E4YzhmZGZiNGM5YTk1ZGJmYzFhYWQ5NTVkNDg3Li5iODRhMTk1OTEzY2Q4
NDg5NmVmN2JjMjBhNjRkMmQ3YWY2YzBlM2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKQEAgLTM1OSw2ICszNTksNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKICAgICBib29sIGhhbmRsZUdlc3R1cmVTY3JvbGxDb3JlKGNvbnN0IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50JiwgUGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHksIGJvb2wgbGF0Y2hlZFdoZWVs
KTsKICAgICBib29sIGhhbmRsZUdlc3R1cmVUYXBEb3duKCk7CisgICAgc3RhdGljIGJvb2wgc2hv
dWxkR2VzdHVyZXNUcmlnZ2VyQWN0aXZlKCk7CiAjZW5kaWYKIAogICAgIEZyYW1lKiBtX2ZyYW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1FdmVudC5oCmluZGV4IDUyYzY0ODhiNmIy
NjRjOWFlMGYzNDIyZmYwZTgyZWIwOTE4NzZkZjAuLjE3ODJiNjM0YTVkNGRkNDFjMmIwZmNhN2Q0
MjJiOTAzYTgwMmRjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUV2ZW50LmgK
QEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBHZXN0dXJlU2Nyb2xsVXBkYXRlLAog
ICAgICAgICBHZXN0dXJlVGFwLAogICAgICAgICBHZXN0dXJlVGFwRG93biwKKyAgICAgICAgR2Vz
dHVyZVRhcERvd25DYW5jZWwsCiAgICAgICAgIEdlc3R1cmVEb3VibGVUYXAsCiAgICAgICAgIEdl
c3R1cmVUd29GaW5nZXJUYXAsCiAgICAgICAgIEdlc3R1cmVMb25nUHJlc3MsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKaW5kZXggMDc1YmQwYzRlNWQ4
YjEyNjQwZThmZmVkZGY2MmY0YzVlMGY3ZWJhOC4uZjNlZGFmOTVlMDRhOTE3MTk5Zjg3YmRkYTIz
YjFjYTYxN2E2NDA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSW5wdXRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklu
cHV0RXZlbnQuaApAQCAtMzg4LDYgKzM4OCwxMSBAQCBwdWJsaWM6CiAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICBpbnQgd2lkdGg7CiAgICAgICAgIGludCBoZWlnaHQ7CisgICAgICB9IHRhcERvd247
CisKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdo
dDsKICAgICAgIH0gbG9uZ1ByZXNzOwogCiAgICAgICBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uY3BwCmluZGV4
IDJhZmM3ZGNmZTc5OTVjMjg0M2MxYzI0YTBlNzc4NzYyNjcxYjc3NDQuLjBjYzFlMGMyNGY1MDA4
MjgwMTdkZjA0YTg0NDg1M2UxYWJhODdiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTE2MCw2ICsxNjAs
MTAgQEAgUGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyOjpQbGF0Zm9ybUdlc3R1cmVFdmVudEJ1
aWxkZXIoV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFcKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjoKICAgICAgICAgbV90eXBlID0gUGxhdGZvcm1F
dmVudDo6R2VzdHVyZVRhcERvd247CisgICAgICAgIG1fYXJlYSA9IEludFNpemUoZS5kYXRhLnRh
cERvd24ud2lkdGgsIGUuZGF0YS50YXBEb3duLmhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcENhbmNlbDoKKyAgICAgICAgbV90eXBlID0g
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd25DYW5jZWw7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZURvdWJsZVRhcDoKICAgICAgICAgbV90eXBlID0g
UGxhdGZvcm1FdmVudDo6R2VzdHVyZURvdWJsZVRhcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNThhMjg1NWNkOWIzNGRjYTFkYmUy
MDFlNTczNmE2NzlmMTc2YjRkMy4uNTExMTQwMjBiZjNiYzUwZWIyZWYyZmI1YmNiY2NjZTA2Y2M2
MmJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1w
bC5jcHAKQEAgLTI3Nyw2ICsyNzcsNyBAQCBib29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgaW5wdXRFdmVudCkKICAgICBjYXNlIFdlYklu
cHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDoKICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdl
c3R1cmVUYXA6CiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjoKKyAgICBj
YXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWw6CiAgICAgY2FzZSBXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlRG91YmxlVGFwOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVR3
b0ZpbmdlclRhcDoKICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nUHJlc3M6CkBA
IC0yODgsNyArMjg5LDYgQEAgYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpVbmRlZmluZWQ6CiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUVudGVyOgogICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6Q29udGV4dE1lbnU6Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpH
ZXN0dXJlVGFwQ2FuY2VsOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRl
eCBkMThjZDIzNmNlZDQ5MmQzNWY3MTMwMmIxODM2MDZjYzI1ZDU5NDMzLi45NzQxNmUwMjQwMzI4
ZjM2NzVkNGQxZmIxZjBhMjRjZDY3YmU3Mjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCkBAIC03NjUsMTUgKzc2NSwxMiBAQCBib29sIFdlYlZpZXdJbXBs
OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKICAgICAg
ICAgbV9jbGllbnQtPmNhbmNlbFNjaGVkdWxlZENvbnRlbnRJbnRlbnRzKCk7CiAgICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
R2VzdHVyZVNjcm9sbFVwZGF0ZToKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBD
YW5jZWw6CiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hFbmQ6CiAgICAgY2Fz
ZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hVcGRhdGU6IHsKICAgICAgICAgUGxhdGZvcm1H
ZXN0dXJlRXZlbnRCdWlsZGVyIHBsYXRmb3JtRXZlbnQobWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZp
ZXcoKSwgZXZlbnQpOwogICAgICAgICByZXR1cm4gbWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlR2VzdHVyZUV2ZW50KHBsYXRmb3JtRXZlbnQpOwogICAgIH0K
LSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWw6Ci0gICAgICAgIC8vIEZJ
WE1FOiBVcGRhdGUgV2ViQ29yZSB0byBoYW5kbGUgdGhpcyBldmVudCBhZnRlciBjaHJvbWl1bSBo
YXMgYmVlbiB1cGRhdGVkIHRvIHNlbmQgaXQKLSAgICAgICAgLy8gaHR0cDovL3drYi51Zy85NjA2
MAotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDU2YTljZmM1OTZlNjFkZWNhMDg3OTJkNjc0ZWM1MzJiNmU1NDkyM2Eu
LmJhY2Y4NWM0Y2RkNTVjNzhjNjk3ZTA5MDgyOTJmZDExYWI1OGNlZmQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAx
Mi0wOS0xNCAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRG8g
dG91Y2ggYWRqdXN0bWVudCBvbiBHZXN0dXJlVGFwRG93bgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyByYWRpdXMgdG8gYmUgc2V0IGZvciBHZXN0
dXJlVGFwRG93biBldmVudHMuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9FdmVudFNlbmRlci5jcHA6CisgICAgICAgIChFdmVudFNlbmRlcjo6Z2VzdHVyZUV2
ZW50KToKKworMjAxMi0wOS0wOCAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQWRkIGhhbmRsaW5nIG9mIG5ldyBHZXN0dXJlVGFwQ2FuY2VsIGluIERSVAorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjE4MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5jcHA6CisgICAgICAgIChUZXN0V2ViUGx1Z2lu
OjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9F
dmVudFNlbmRlci5jcHA6CisgICAgICAgIChFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcENhbmNlbCk6
CisKIDIwMTItMDktMTQgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgY2hlY2std2Via2l0LXN0eWxlIHNob3VsZCBub3Qgd2FybiBpbiBjYXNlIG9mIE5PTkNP
UFlBQkxFIGFuZCBGQVNUX0FMTE9DQVRFRCBtYWNyb3MKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvRXZlbnRTZW5kZXIuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5jcHAKaW5kZXggZDVl
YWFjNGFkYTFkZGU1OTZjMDhhODYwZDkzNWFmMjJlNmJiOWVmYy4uMjNiNjVkMDcxN2I1ZjNlNTkz
MzZlMmZjOGQwYTVlZmIwNTk1MWUzNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5jcHAKQEAgLTI4Nyw2ICsyODcs
NyBAQCBFdmVudFNlbmRlcjo6RXZlbnRTZW5kZXIoKQogICAgIGJpbmRNZXRob2QoImdlc3R1cmVT
Y3JvbGxVcGRhdGUiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxVcGRhdGUpOwogICAgIGJp
bmRNZXRob2QoImdlc3R1cmVUYXAiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVUYXApOwogICAgIGJp
bmRNZXRob2QoImdlc3R1cmVUYXBEb3duIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlVGFwRG93bik7
CisgICAgYmluZE1ldGhvZCgiZ2VzdHVyZVRhcENhbmNlbCIsICZFdmVudFNlbmRlcjo6Z2VzdHVy
ZVRhcENhbmNlbCk7CiAgICAgYmluZE1ldGhvZCgiZ2VzdHVyZUxvbmdQcmVzcyIsICZFdmVudFNl
bmRlcjo6Z2VzdHVyZUxvbmdQcmVzcyk7CiAgICAgYmluZE1ldGhvZCgiZ2VzdHVyZVR3b0Zpbmdl
clRhcCIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVR3b0ZpbmdlclRhcCk7CiAgICAgYmluZE1ldGhv
ZCgiem9vbVBhZ2VJbiIsICZFdmVudFNlbmRlcjo6em9vbVBhZ2VJbik7CkBAIC0xMTE5LDYgKzEx
MjAsMTIgQEAgdm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcERvd24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHIKICAgICBnZXN0dXJlRXZlbnQoV2ViSW5w
dXRFdmVudDo6R2VzdHVyZVRhcERvd24sIGFyZ3VtZW50cyk7CiB9CiAKK3ZvaWQgRXZlbnRTZW5k
ZXI6Omdlc3R1cmVUYXBDYW5jZWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBnZXN0dXJl
RXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcENhbmNlbCwgYXJndW1lbnRzKTsKK30KKwog
dm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZUxvbmdQcmVzcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwpAQCAtMTE4MSw2ICsxMTg4LDE0IEBAIHZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVFdmVudChX
ZWJJbnB1dEV2ZW50OjpUeXBlIHR5cGUsIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYKICAgICBjYXNl
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duOgogICAgICAgICBldmVudC54ID0gcG9pbnQu
eDsKICAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7CisgICAgICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID49IDQpIHsKKyAgICAgICAgICAgIGV2ZW50LmRhdGEudGFwRG93bi53aWR0aCA9IHN0YXRp
Y19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBldmVu
dC5kYXRhLnRhcERvd24uaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1szXS50
b0RvdWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWw6CisgICAgICAgIGV2ZW50LnggPSBwb2ludC54OworICAg
ICAgICBldmVudC55ID0gcG9pbnQueTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOgogICAgICAgICBldmVudC54ID0gcG9pbnQueDsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvRXZlbnRT
ZW5kZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvRXZlbnRT
ZW5kZXIuaAppbmRleCA4MjhlN2M4NDI2Mzc1OTE0ZDhjMWZhZWYwYzMwN2M0YzVhZTA5OWI1Li5l
Njc5NGEwNzcwYmQ4OGY3NGZlNTBjYTJmNzE2NjIxZDQxOTg3OWNjIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0V2ZW50U2VuZGVyLmgKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5oCkBA
IC0xMDYsNiArMTA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2VzdHVyZVNjcm9sbFVwZGF0ZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBnZXN0dXJlVGFw
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGdlc3R1cmVU
YXBEb3duKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGdl
c3R1cmVUYXBDYW5jZWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAg
IHZvaWQgZ2VzdHVyZUxvbmdQcmVzcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CiAgICAgdm9pZCBnZXN0dXJlVHdvRmluZ2VyVGFwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGdlc3R1cmVFdmVudChXZWJLaXQ6OldlYklucHV0RXZl
bnQ6OlR5cGUsIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU3MDU1ZWU5Y2M0NWU4
MTJjM2VhYWM1ZjkyYjk3YjVlZjk3NjRlZGUuLjhmOWY3NTZhZTczMmI2YWFiNzQ2YjUxNGQ4MjEw
NGViYTE0OTI4MGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wOS0xNCAgUmljayBCeWVy
cyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRG8gdG91Y2ggYWRqdXN0bWVudCBv
biBHZXN0dXJlVGFwRG93bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTY2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNYWtlIGEgZmV3IHR3ZWFrcyB0byB0aGUgdG91Y2hhZGp1c3RtZW50LmpzIGluZnJh
c3RydWN0dXJlIHRvIG1ha2UgaXQKKyAgICAgICAgc2ltcGxlciBhbmQgZWFzaWVyIHRvIHVzZS4g
IEFkZCBhIHRlc3QgZm9yIHRvdWNoLWFkanVzdG1lbnQgb2YKKyAgICAgICAgR2VzdHVyZVRhcERv
d24gZXZlbnRzIChiYXNlZCBvbiB0b3VjaC1saW5rcy1sb25ncHJlc3MpLgorCisgICAgICAgICog
dG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanM6CisgICAgICAgICh0
b3VjaFBvaW50LnJldHVybi5sZWZ0LngucmFkaXVzWC50b3AueS5yYWRpdXNZLndpZHRoLnJhZGl1
c1guMi5oZWlnaHQucmFkaXVzWS4yLmdldCB4KToKKyAgICAgICAgKHRvdWNoUG9pbnQucmV0dXJu
LmdldCB5KToKKyAgICAgICAgKHRvdWNoUG9pbnQpOgorICAgICAgICAob2Zmc2V0VG91Y2hQb2lu
dCk6CisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtzLWFjdGl2ZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3Rp
dmUuaHRtbDogQWRkZWQuCisKIDIwMTItMDktMTQgIE1pY2hlbGFuZ2VsbyBEZSBTaW1vbmUgIDxt
aWNoZWxhbmdlbG9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2UgYXJyYXlzIGluIHNoYWRlcnMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVy
ZS10YXAtYWN0aXZlLXN0YXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS10YXAtYWN0aXZlLXN0YXRlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOTk5ZWJjZDFkZmQxMzNhMDdiNDI2MzEyOGU5YjJhMzBhODMxYzM3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJl
LXRhcC1hY3RpdmUtc3RhdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dlc3R1cmVz
IGdvIGhlcmUKK1Rlc3RzIHRoYXQgdGFwIGdlc3R1cmUgZXZlbnRzIHNldCBhbmQgY2xlYXIgdGhl
IGFjdGl2ZSBzdGF0ZSBvZiBlbGVtZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1NlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwNjAgZm9y
IGRldGFpbHMKKworR2VzdHVyZVRhcERvd24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBsYXRm
b3JtCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJl
LXRhcC1hY3RpdmUtc3RhdGUtaWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS10YXAtYWN0aXZlLXN0YXRlLWlmcmFtZS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc3MmJlN2ZjNDVlZjc5MWYyMGU0OWM4NTBjMzUzYjJlMzJh
ODA2NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvZ2VzdHVyZS10YXAtYWN0aXZlLXN0YXRlLWlmcmFtZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMyBAQAorCitUZXN0cyB0aGF0IHRhcCBnZXN0dXJlIGV2ZW50cyBzZXQgYW5kIGNsZWFy
IHRoZSBhY3RpdmUgc3RhdGUgb2YgZWxlbWVudHMsIGV2ZW4gd2hlbiBpbnNpZGUgYW4gaWZyYW1l
IGFuZCB0aGUgZG9jdW1lbnQgaXMgc2Nyb2xsZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MDYw
IGZvciBkZXRhaWxzCisKK0dlc3R1cmVUYXBEb3duIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBw
bGF0Zm9ybQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2Vz
dHVyZS10YXAtYWN0aXZlLXN0YXRlLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUtaWZyYW1lLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmJlZmI0MmZiNDlkNzU0NWI0Mzk2ZTM1ODNmYzBlMjhiNzBiYzFlMgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVy
ZS10YXAtYWN0aXZlLXN0YXRlLWlmcmFtZS5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjZnJhbWUgewor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDMwMHB4OworICAgIGxlZnQ6IDQwMHB4
OworICAgIGhlaWdodDogMzAwMHB4OworfQorCis8L3N0eWxlPgorPGJvZHk+Cis8aWZyYW1lIHNy
Yz0ncmVzb3VyY2VzL2dlc3R1cmUtdGFwLWFjdGl2ZS1zdGF0ZS1pZnJhbWUtaW5uZXIuaHRtbCcg
aWQ9J2ZyYW1lJz4KKzwvaWZyYW1lPgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxwPlNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwNjAgZm9yIGRldGFp
bHM8L3A+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCitkZXNjcmlw
dGlvbigiVGVzdHMgdGhhdCB0YXAgZ2VzdHVyZSBldmVudHMgc2V0IGFuZCBjbGVhciB0aGUgYWN0
aXZlIHN0YXRlIG9mIGVsZW1lbnRzLCBldmVuIHdoZW4gaW5zaWRlIGFuIGlmcmFtZSBhbmQgdGhl
IGRvY3VtZW50IGlzIHNjcm9sbGVkLiIpOworCit2YXIgaXNCb3hBY3RpdmU7CitmdW5jdGlvbiBy
dW5UZXN0cyhiYSkKK3sKKyAgICBpc0JveEFjdGl2ZSA9IGJhOworCisgICAgaWYgKCF3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVidWcoJ1RoaXMgdGVzdCByZXF1aXJlcyBEUlQuJyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWV2ZW50U2VuZGVyLmdlc3R1cmVU
YXBEb3duKSB7CisgICAgICAgIGRlYnVnKCdHZXN0dXJlVGFwRG93biBpcyBub3Qgc3VwcG9ydGVk
IGJ5IHRoaXMgcGxhdGZvcm0nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAv
LyBTY3JvbGwgc28gdGhlIGJveCBpcyBhdCB0aGUgdG9wCisgICAgd2luZG93LnNjcm9sbFRvKDAs
IDQwMCk7CisKKyAgICBkZWJ1ZygiVmVyaWZ5IGFjdGl2ZSBpc24ndCBpbml0aWFsbHkgc2V0Iik7
CisgICAgc2hvdWxkQmVGYWxzZSgiaXNCb3hBY3RpdmUoKSIpOworCisgICAgZGVidWcoIlZlcmlm
eSB0YXBkb3duLHRhcCBzZXRzIGFuZCBjbGVhcnMgYWN0aXZlIik7CisgICAgZXZlbnRTZW5kZXIu
Z2VzdHVyZVRhcERvd24oNDUwLCA1MCk7CisgICAgc2hvdWxkQmVUcnVlKCJpc0JveEFjdGl2ZSgp
Iik7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVRhcCg0NTAsIDUwKTsKKyAgICBzaG91bGRCZUZh
bHNlKCJpc0JveEFjdGl2ZSgpIik7CisKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0
dXJlL2dlc3R1cmUtdGFwLWFjdGl2ZS1zdGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yODY1ZTlkZjQxZTY0MThhYzMzNWVkNzlmNzRjN2NlNmY1Mjc4MTUwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1h
Y3RpdmUtc3RhdGUuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyNib3ggeworICAgIGJhY2tncm91bmQt
Y29sb3I6IGJsdWU7CisgICAgd2lkdGg6IDMwMHB4OworICAgIGhlaWdodDogMTAwcHg7Cit9CisK
KyNib3g6YWN0aXZlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzwvc3R5bGU+
Cis8Ym9keT4KKzxkaXYgaWQ9ImJveCI+R2VzdHVyZXMgZ28gaGVyZTwvZGl2PgorCis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxwPlNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTYwNjAgZm9yIGRldGFpbHM8L3A+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorCis8c2NyaXB0PgordmFyIGNvbG9yOworZnVuY3Rpb24gaXNCb3hBY3RpdmUoKQoreworICAg
IC8vIFRoZXNlIG5lZWQgdG8gbWF0Y2ggdGhlIGJhY2tncm91bmQtY29sb3IgdXNlZCBhYm92ZSwg
YWZ0ZXIgcm91bmQtdHJpcHBpbmcuCisgICAgdmFyIGRlZmF1bHRDb2xvciA9ICJyZ2IoMCwgMCwg
MjU1KSI7CisgICAgdmFyIGFjdGl2ZUNvbG9yID0gInJnYigyNTUsIDAsIDApIjsKKworICAgIHZh
ciBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpOworICAgIGNvbG9yID0gd2luZG93
LmdldENvbXB1dGVkU3R5bGUoYikuYmFja2dyb3VuZENvbG9yOworICAgIGlmIChjb2xvciA9PSBh
Y3RpdmVDb2xvcikKKyAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChjb2xvciAhPSBkZWZhdWx0
Q29sb3IpCisgICAgICB0ZXN0RmFpbGVkKCdHb3QgdW5leHBlY3RlZCBiYWNrZ3JvdW5kQ29sb3I6
ICcgKyBjb2xvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkZXNjcmlwdGlvbigiVGVzdHMg
dGhhdCB0YXAgZ2VzdHVyZSBldmVudHMgc2V0IGFuZCBjbGVhciB0aGUgYWN0aXZlIHN0YXRlIG9m
IGVsZW1lbnRzLiIpOworCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgaWYgKCF3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVidWcoJ1RoaXMgdGVzdCByZXF1aXJlcyBEUlQuJyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWV2ZW50U2VuZGVyLmdlc3R1cmVU
YXBEb3duKSB7CisgICAgICAgIGRlYnVnKCdHZXN0dXJlVGFwRG93biBpcyBub3Qgc3VwcG9ydGVk
IGJ5IHRoaXMgcGxhdGZvcm0nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlYnVn
KCJWZXJpZnkgYWN0aXZlIGlzbid0IGluaXRpYWxseSBzZXQiKTsKKyAgICBzaG91bGRCZUZhbHNl
KCJpc0JveEFjdGl2ZSgpIik7CisKKyAgICBkZWJ1ZygiVmVyaWZ5IHRhcGRvd24sdGFwIHNldHMg
YW5kIGNsZWFycyBhY3RpdmUiKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwRG93big1MCwg
NTApOworICAgIHNob3VsZEJlVHJ1ZSgiaXNCb3hBY3RpdmUoKSIpOworICAgIGV2ZW50U2VuZGVy
Lmdlc3R1cmVUYXAoNTAsIDUwKTsKKyAgICBzaG91bGRCZUZhbHNlKCJpc0JveEFjdGl2ZSgpIik7
CisKKyAgICBkZWJ1ZygiVmVyaWZ5IHRhcGRvd24sdGFwY2FuY2VsIG9uIHRoZSBlbGVtZW50IHNl
dHMgYW5kIGNsZWFycyBhY3RpdmUiKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwRG93big1
MCwgNTApOworICAgIHNob3VsZEJlVHJ1ZSgiaXNCb3hBY3RpdmUoKSIpOworICAgIGV2ZW50U2Vu
ZGVyLmdlc3R1cmVUYXBDYW5jZWwoNTAsIDUwKTsKKyAgICBzaG91bGRCZUZhbHNlKCJpc0JveEFj
dGl2ZSgpIik7CisKKyAgICBkZWJ1ZygiVmVyaWZ5IHRhcCBlbHNld2hlcmUgc3RpbGwgY2xlYXJz
IGFjdGl2ZSIpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVUYXBEb3duKDUwLCA1MCk7CisgICAg
c2hvdWxkQmVUcnVlKCJpc0JveEFjdGl2ZSgpIik7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVRh
cCg0MDAsIDI1MCk7CisgICAgc2hvdWxkQmVGYWxzZSgiaXNCb3hBY3RpdmUoKSIpOworCisgICAg
ZGVidWcoIlZlcmlmeSB0YXBDYW5jZWwgZWxzZXdoZXJlIHN0aWxsIGNsZWFycyBhY3RpdmUiKTsK
KyAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwRG93big1MCwgNTApOworICAgIHNob3VsZEJlVHJ1
ZSgiaXNCb3hBY3RpdmUoKSIpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVUYXBDYW5jZWwoNDAw
LCAyNTApOworICAgIHNob3VsZEJlRmFsc2UoImlzQm94QWN0aXZlKCkiKTsKKworICAgIGRlYnVn
KCJWZXJpZnkgdGhhdCB0b3VjaHN0YXJ0IGRvZXNuJ3QgdHJpZ2dlciBhY3RpdmUgc3RhdGUiKTsK
KyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDUwLCA1MCk7CisgICAgZXZlbnRTZW5kZXIu
dG91Y2hTdGFydCgpOworICAgIHNob3VsZEJlRmFsc2UoImlzQm94QWN0aXZlKCkiKTsKKyAgICBl
dmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVu
ZCgpOworCisgICAgZGVidWcoIlZlcmlmeSB0aGF0IHRvdWNoc3RhcnQvdG91Y2hlbmQgZG9lc24n
dCBjYW5jZWwgYWN0aXZlIik7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVRhcERvd24oNTAsIDUw
KTsKKyAgICBzaG91bGRCZVRydWUoImlzQm94QWN0aXZlKCkiKTsKKyAgICBldmVudFNlbmRlci5h
ZGRUb3VjaFBvaW50KDUwLCA1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworICAg
IHNob3VsZEJlVHJ1ZSgiaXNCb3hBY3RpdmUoKSIpOworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VU
b3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7CisgICAgc2hvdWxkQmVU
cnVlKCJpc0JveEFjdGl2ZSgpIik7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVRhcCg1MCwgNTAp
OworICAgIHNob3VsZEJlRmFsc2UoImlzQm94QWN0aXZlKCkiKTsKK30KKworcnVuVGVzdHMoKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9yZXNvdXJjZXMvZ2VzdHVyZS10YXAtYWN0aXZl
LXN0YXRlLWlmcmFtZS1pbm5lci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS9yZXNvdXJjZXMvZ2VzdHVyZS10YXAtYWN0aXZlLXN0YXRlLWlmcmFtZS1pbm5lci5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgwMWY5ZGFmY2NmOGFiNTNlNjBhMjA0NjIxOTllMzk3MDQ3MDg1MTkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L3Jlc291cmNlcy9nZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUtaWZyYW1lLWlubmVyLmh0bWwKQEAg
LTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyI+CisjYm94IHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogYmx1ZTsKKyAgICB3aWR0aDogMzAwcHg7CisgICAgaGVpZ2h0OiAxMDBweDsKKyAgICB0
b3A6IDEwMHB4OworfQorCisjYm94OmFjdGl2ZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVk
OworfQorCis8L3N0eWxlPgorPHNjcmlwdD4KK3ZhciBjb2xvcjsKK2Z1bmN0aW9uIGlzQm94QWN0
aXZlKCkKK3sKKyAgICAvLyBUaGVzZSBuZWVkIHRvIG1hdGNoIHRoZSBiYWNrZ3JvdW5kLWNvbG9y
IHVzZWQgYWJvdmUsIGFmdGVyIHJvdW5kLXRyaXBwaW5nLgorICAgIHZhciBkZWZhdWx0Q29sb3Ig
PSAicmdiKDAsIDAsIDI1NSkiOworICAgIHZhciBhY3RpdmVDb2xvciA9ICJyZ2IoMjU1LCAwLCAw
KSI7CisKKyAgICB2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3gnKTsKKyAgICBj
b2xvciA9IGdldENvbXB1dGVkU3R5bGUoYikuYmFja2dyb3VuZENvbG9yOworICAgIGlmIChjb2xv
ciA9PSBhY3RpdmVDb2xvcikKKyAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChjb2xvciAhPSBk
ZWZhdWx0Q29sb3IpCisgICAgICB0aHJvdyAiR290IHVuZXhwZWN0ZWQgYmFja2dyb3VuZENvbG9y
OiAiICsgY29sb3I7CisgICAgcmV0dXJuIGZhbHNlOworfQorCis8L3NjcmlwdD4KKzxib2R5IG9u
bG9hZD0ncGFyZW50LnJ1blRlc3RzKGlzQm94QWN0aXZlKSc+Cis8ZGl2IGlkPSdib3gnPkdlc3R1
cmVzIGdvIGhlcmU8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLWFuZHJvaWQvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9n
ZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0tYW5kcm9pZC9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtdGFw
LWFjdGl2ZS1zdGF0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk5OWViY2QxZGZkMTMzYTA3
YjQyNjMxMjhlOWIyYTMwYTgzMWMzNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtLWFuZHJvaWQvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJl
LXRhcC1hY3RpdmUtc3RhdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dlc3R1cmVz
IGdvIGhlcmUKK1Rlc3RzIHRoYXQgdGFwIGdlc3R1cmUgZXZlbnRzIHNldCBhbmQgY2xlYXIgdGhl
IGFjdGl2ZSBzdGF0ZSBvZiBlbGVtZW50cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1NlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwNjAgZm9y
IGRldGFpbHMKKworR2VzdHVyZVRhcERvd24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBsYXRm
b3JtCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tYW5kcm9pZC9mYXN0L2V2
ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtdGFwLWFjdGl2ZS1zdGF0ZS1pZnJhbWUtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tYW5kcm9pZC9mYXN0L2V2ZW50
cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtdGFwLWFjdGl2ZS1zdGF0ZS1pZnJhbWUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM3NzJiZTdmYzQ1ZWY3OTFmMjBlNDljODUwYzM1M2IyZTMyYTgwNjcK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1hbmRyb2lk
L2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS10YXAtYWN0aXZlLXN0YXRlLWlmcmFt
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorCitUZXN0cyB0aGF0IHRhcCBnZXN0dXJl
IGV2ZW50cyBzZXQgYW5kIGNsZWFyIHRoZSBhY3RpdmUgc3RhdGUgb2YgZWxlbWVudHMsIGV2ZW4g
d2hlbiBpbnNpZGUgYW4gaWZyYW1lIGFuZCB0aGUgZG9jdW1lbnQgaXMgc2Nyb2xsZWQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk2MDYwIGZvciBkZXRhaWxzCisKK0dlc3R1cmVUYXBEb3duIGlzIG5v
dCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS10YXAtYWN0aXZlLXN0
YXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZl
bnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS10YXAtYWN0aXZlLXN0YXRlLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMzM5YzA4YmNhMzQzZWQ0NTkwMjhjYzhiNmRlNWEyMDUxYzJlMjc3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMv
dG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMzMgQEAKK0dlc3R1cmVzIGdvIGhlcmUKK1Rlc3RzIHRoYXQgdGFwIGdlc3R1cmUgZXZl
bnRzIHNldCBhbmQgY2xlYXIgdGhlIGFjdGl2ZSBzdGF0ZSBvZiBlbGVtZW50cy4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1NlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTYwNjAgZm9yIGRldGFpbHMKKworVmVyaWZ5IGFjdGl2ZSBpc24ndCBpbml0
aWFsbHkgc2V0CitQQVNTIGlzQm94QWN0aXZlKCkgaXMgZmFsc2UKK1ZlcmlmeSB0YXBkb3duLHRh
cCBzZXRzIGFuZCBjbGVhcnMgYWN0aXZlCitQQVNTIGlzQm94QWN0aXZlKCkgaXMgdHJ1ZQorUEFT
UyBpc0JveEFjdGl2ZSgpIGlzIGZhbHNlCitWZXJpZnkgdGFwZG93bix0YXBjYW5jZWwgb24gdGhl
IGVsZW1lbnQgc2V0cyBhbmQgY2xlYXJzIGFjdGl2ZQorUEFTUyBpc0JveEFjdGl2ZSgpIGlzIHRy
dWUKK1BBU1MgaXNCb3hBY3RpdmUoKSBpcyBmYWxzZQorVmVyaWZ5IHRhcCBlbHNld2hlcmUgc3Rp
bGwgY2xlYXJzIGFjdGl2ZQorUEFTUyBpc0JveEFjdGl2ZSgpIGlzIHRydWUKK1BBU1MgaXNCb3hB
Y3RpdmUoKSBpcyBmYWxzZQorVmVyaWZ5IHRhcENhbmNlbCBlbHNld2hlcmUgc3RpbGwgY2xlYXJz
IGFjdGl2ZQorUEFTUyBpc0JveEFjdGl2ZSgpIGlzIHRydWUKK1BBU1MgaXNCb3hBY3RpdmUoKSBp
cyBmYWxzZQorVmVyaWZ5IHRoYXQgdG91Y2hzdGFydCBkb2Vzbid0IHRyaWdnZXIgYWN0aXZlIHN0
YXRlCitQQVNTIGlzQm94QWN0aXZlKCkgaXMgZmFsc2UKK1ZlcmlmeSB0aGF0IHRvdWNoc3RhcnQv
dG91Y2hlbmQgZG9lc24ndCBjYW5jZWwgYWN0aXZlCitQQVNTIGlzQm94QWN0aXZlKCkgaXMgdHJ1
ZQorUEFTUyBpc0JveEFjdGl2ZSgpIGlzIHRydWUKK1BBU1MgaXNCb3hBY3RpdmUoKSBpcyB0cnVl
CitQQVNTIGlzQm94QWN0aXZlKCkgaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtdGFwLWFjdGl2ZS1z
dGF0ZS1pZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUtaWZyYW1l
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMDQ4MWUwNjc2NjJkMThiN2I0M2JiMWQ5ZmZjNDNm
OWE5MzBlMjBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXRhcC1hY3RpdmUtc3RhdGUtaWZy
YW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACisKK1Rlc3RzIHRoYXQgdGFwIGdlc3R1
cmUgZXZlbnRzIHNldCBhbmQgY2xlYXIgdGhlIGFjdGl2ZSBzdGF0ZSBvZiBlbGVtZW50cywgZXZl
biB3aGVuIGluc2lkZSBhbiBpZnJhbWUgYW5kIHRoZSBkb2N1bWVudCBpcyBzY3JvbGxlZC4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1NlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYwNjAgZm9yIGRldGFpbHMKKworVmVyaWZ5IGFjdGl2ZSBpc24n
dCBpbml0aWFsbHkgc2V0CitQQVNTIGlzQm94QWN0aXZlKCkgaXMgZmFsc2UKK1ZlcmlmeSB0YXBk
b3duLHRhcCBzZXRzIGFuZCBjbGVhcnMgYWN0aXZlCitQQVNTIGlzQm94QWN0aXZlKCkgaXMgdHJ1
ZQorUEFTUyBpc0JveEFjdGl2ZSgpIGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtYWN0aXZlLXN0YXRlLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3Rv
dWNoLWFjdGl2ZS1zdGF0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWM4ZjZhZjRhNWU5MzBl
MTlmOTczNzI1MWMxMDQ3OWMzM2M5NzA1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWFjdGl2ZS1zdGF0ZS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorRkFJTAorVGVzdCB0b3VjaGVzIHNldCB0aGUg
YWN0aXZlIHN0YXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCmluZGV4IGRlNWNmOTU3MjVlNTdmYzk1ODY1MGRlY2QxMjc3M2IzMWY1ZDNkYjQuLjlm
N2IyMDg5NDAzOTQzMDE2MjQyODExYzhmMzM2YmU5MDE3ZTdiMWMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZApAQCAtNDI0LDYgKzQyNCwxMCBAQCBmYXN0L211dGF0aW9uL3RyYW5zaWVudC1nYy1j
cmFzaC5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzA4
OAogZmFzdC9qcy9uYW1lcy5odG1sCiAKKyMgRG9uJ3QgaGF2ZSBHZXN0dXJlTG9uZ1ByZXNzLCBH
ZXN0dXJlVGFwQ2FuY2VsIGV2ZW50IHR5cGVzCit0b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3Mt
bG9uZ3ByZXNzLmh0bWwKK3RvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3RpdmUuaHRtbAor
CiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PSAjCiAjICAgICAgIEZlYXR1cmUgbm90IHlldCBzdXBwb3J0
ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAjID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PSAjCkBAIC0yNzQwLDkgKzI3NDQsNiBAQCBjc3MzL2ZsZXhib3gvZmxleC1y
b3VuZGluZy5odG1sCiAjIEVOQUJMRShXSURHRVRfUkVHSU9OKSBpcyBkaXNhYmxlZAogZmFzdC9j
c3Mvd2lkZ2V0LXJlZ2lvbi1wYXJzZXIuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MjkxNAotdG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtzLWxvbmdw
cmVzcy5odG1sCi0KICMgW1F0XVtHVEtdIFJFR1JFU1NJT04ocjEyNTI1MSk6IEl0IG1hZGUgc3Zn
L2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWFzLWV2ZW50LXRhcmdldC54aHRtbCBhc3NlcnQgYW5k
IGZsYWtleQogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM4MTIK
IHN2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQueGh0bWwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3Rt
ZW50LmpzIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVz
dG1lbnQuanMKaW5kZXggNTQ3NTQ2YzQxNDEwODkzMjNlY2IzMzQzNjhiMjIzY2JiNGM4ZmZmYy4u
NzM4YzQ5OGMzMWRkMGU4MmMwZTlmNjI4MDliNjVkMjJiOWY4ODIzYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanMKKysr
IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVzdG1lbnQu
anMKQEAgLTkxLDEyICs5MSwxNSBAQCBmdW5jdGlvbiB0b3VjaFBvaW50KHgsIHksIHJhZGl1c1gs
IHJhZGl1c1kpCiB7CiAgICAgaWYgKCFyYWRpdXNZKQogICAgICAgICByYWRpdXNZID0gcmFkaXVz
WDsKLSAgICB2YXIgdG91Y2hwb2ludCA9IG5ldyBPYmplY3QoKTsKLSAgICB0b3VjaHBvaW50Lmxl
ZnQgPSB4IC0gcmFkaXVzWDsKLSAgICB0b3VjaHBvaW50LnRvcCA9IHkgLSByYWRpdXNZOwotICAg
IHRvdWNocG9pbnQud2lkdGggPSByYWRpdXNYICogMjsKLSAgICB0b3VjaHBvaW50LmhlaWdodCA9
IHJhZGl1c1kgKiAyOwotICAgIHJldHVybiB0b3VjaHBvaW50OworCisgICAgcmV0dXJuIHsKKyAg
ICAgICAgbGVmdDogeCAtIHJhZGl1c1gsCisgICAgICAgIHRvcDogeSAtIHJhZGl1c1ksCisgICAg
ICAgIHdpZHRoOiByYWRpdXNYICogMiwKKyAgICAgICAgaGVpZ2h0OiByYWRpdXNZICogMiwKKyAg
ICAgICAgZ2V0IHgoKSB7IHJldHVybiB0aGlzLmxlZnQgKyB0aGlzLndpZHRoLzI7IH0sCisgICAg
ICAgIGdldCB5KCkgeyByZXR1cm4gdGhpcy50b3AgKyB0aGlzLmhlaWdodC8yOyB9CisgICAgfTsK
IH0KIAogZnVuY3Rpb24gb2Zmc2V0VG91Y2hQb2ludChib3VuZHMsIHJlbGF0aXZlUG9zaXRpb24s
IHRvdWNoT2Zmc2V0LCB0b3VjaFJhZGl1c1gsIHRvdWNoUmFkaXVzWSkKQEAgLTEwNCw5ICsxMDcs
MTAgQEAgZnVuY3Rpb24gb2Zmc2V0VG91Y2hQb2ludChib3VuZHMsIHJlbGF0aXZlUG9zaXRpb24s
IHRvdWNoT2Zmc2V0LCB0b3VjaFJhZGl1c1gsIHQKICAgICBpZiAoIXRvdWNoUmFkaXVzWSkKICAg
ICAgICAgdG91Y2hSYWRpdXNZID0gdG91Y2hSYWRpdXNYOwogCi0gICAgdmFyIHRvdWNocG9pbnQg
PSB7bGVmdCA6IGJvdW5kcy5sZWZ0LCB0b3A6IGJvdW5kcy50b3AgfTsKKyAgICAvLyBTdGFydCB3
aXRoIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGF0IHRoZSB0b3AtbGVmdCBvZiB0aGUgYm91bmRz
LgorICAgIHZhciB0b3VjaHBvaW50ID0gdG91Y2hQb2ludChib3VuZHMubGVmdCwgYm91bmRzLnRv
cCwgdG91Y2hSYWRpdXNYLCB0b3VjaFJhZGl1c1kpOwogIAotICAgIC8vIFNldCBjZW50ZXIgcG9p
bnQgZm9yIHRvdWNoLgorICAgIC8vIEFkanVzdCB0aGUgdG91Y2ggcG9pbnQgYWQgcmVxdWVzdGVk
LgogICAgIHN3aXRjaCAocmVsYXRpdmVQb3NpdGlvbikgewogICAgIGNhc2UgJ2NlbnRlcic6CiAg
ICAgICAgIHRvdWNocG9pbnQubGVmdCArPSBib3VuZHMud2lkdGggLyAyOwpAQCAtMTQ0LDEyICsx
NDgsNiBAQCBmdW5jdGlvbiBvZmZzZXRUb3VjaFBvaW50KGJvdW5kcywgcmVsYXRpdmVQb3NpdGlv
biwgdG91Y2hPZmZzZXQsIHRvdWNoUmFkaXVzWCwgdAogICAgICAgICB0b3VjaHBvaW50LmxlZnQg
Kz0gYm91bmRzLndpZHRoIC8gMjsKICAgICAgICAgdG91Y2hwb2ludC50b3AgKz0gYm91bmRzLmhl
aWdodCArIHRvdWNoT2Zmc2V0OwogICAgIH0KLSAgICAvLyBBZGp1c3QgZnJvbSB0b3VjaCBjZW50
ZXIgdG8gdG9wLWxlZnQgY29ybmVyLgotICAgIHRvdWNocG9pbnQubGVmdCAtPSB0b3VjaFJhZGl1
c1g7Ci0gICAgdG91Y2hwb2ludC50b3AgLT0gdG91Y2hSYWRpdXNZOwotCi0gICAgdG91Y2hwb2lu
dC53aWR0aCA9IDIgKiB0b3VjaFJhZGl1c1g7Ci0gICAgdG91Y2hwb2ludC5oZWlnaHQgPSAyICog
dG91Y2hSYWRpdXNZOwogCiAgICAgcmV0dXJuIHRvdWNocG9pbnQ7CiB9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3RpdmUtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRkNGZlZDIxNWQ5YWExOWY0OTE2MWI3MDEwNTNjNjgxOTUxZGVm
ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gt
bGlua3MtYWN0aXZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0cyB0aGF0IHRh
cERvd24gd2lsbCB0cmlnZ2VyIHRoZSBhY3RpdmUgc3RhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitUZXN0aW5nIGluZGlyZWN0IGhpdHMuCitQQVNTIGlzTGlua0FjdGl2ZSgp
IGlzIHRydWUKK1BBU1MgaXNMaW5rQWN0aXZlKCkgaXMgdHJ1ZQorUEFTUyBpc0xpbmtBY3RpdmUo
KSBpcyB0cnVlCitUZXN0aW5nIGRpcmVjdCBoaXRzLgorUEFTUyBpc0xpbmtBY3RpdmUoKSBpcyB0
cnVlCitQQVNTIGlzTGlua0FjdGl2ZSgpIGlzIHRydWUKK1BBU1MgaXNMaW5rQWN0aXZlKCkgaXMg
dHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3Rp
dmUuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3RpdmUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xM2M2MThlN2UyMzA4YTAxZDFhOGY0M2U3ZjVhOGM1MGY5ODkwODEx
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWxp
bmtzLWFjdGl2ZS5odG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+CisgICAgPHRpdGxlPlRvdWNoIEFkanVzdG1lbnQgOiBUZXN0aW5nIHRoYXQgYWN0
aXZlIHdpbGwgYmUgc2V0IG9uIGEgdGFwRG93biAtIGJ1ZyA5NjY3NzwvdGl0bGU+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5qcyI+PC9zY3JpcHQ+
CisgICAgPHN0eWxlPgorICAgICAgICAjc2FuZGJveCB7CisgICAgICAgICAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgICAgICB0b3A6IDEwMHB4
OworICAgICAgICB9CisgICAgICAgIGEgeworICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJn
YigyNTUsMjU1LDI1NSk7CisgICAgICAgIH0KKyAgICAgICAgYTphY3RpdmUgeworICAgICAgICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYigwLDAsMjU1KTsKKyAgICAgICAgfSAgICAgICAgCisgICAg
PC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9InNhbmRib3giPgorPHA+PGEg
aHJlZj0iIiBpZD0ibGluazEiPkk8L2E+IHByb3Bvc2UgdG8gY29uc2lkZXIgPGEgaHJlZj0iIiBp
ZD0ibGluazIiPnRoZSBxdWVzdGlvbjwvYT4sICJDYW4gbWFjaGluZXMgdGhpbms/Ijxicj5UaGlz
IHNob3VsZCBiZWdpbiB3aXRoIGRlZmluaXRpb25zIG9mIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJt
cyAibWFjaGluZSIgYW5kIDxhIGhyZWY9IiIgaWQ9ImxpbmszIj4idGhpbmsuIjwvYT48L3A+Cis8
L2Rpdj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rp
dj4KKworPHNjcmlwdD4KKyAgICB2YXIgZWxlbWVudDsKKyAgICB2YXIgYWRqdXN0ZWROb2RlOwor
ICAgIC8vIFNldCB1cCBzaG9ydGN1dCBhY2Nlc3MgdG8gZWxlbWVudHMKKyAgICB2YXIgZSA9IHt9
OworICAgIFsnc2FuZGJveCcsICdsaW5rMScsICdsaW5rMicsICdsaW5rMyddLmZvckVhY2goZnVu
Y3Rpb24oYSkgeworICAgICAgICBlW2FdID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7Cisg
ICAgfSk7CisgICAgCisgICAgdmFyIGN1ckVsZW1lbnQ7CisgICAgCisgICAgZnVuY3Rpb24gaXNM
aW5rQWN0aXZlKCkKKyAgICB7CisgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gbWF0Y2ggdGhlIGJh
Y2tncm91bmQtY29sb3IgdXNlZCBhYm92ZSwgYWZ0ZXIgcm91bmQtdHJpcHBpbmcuCisgICAgICAg
IHZhciBkZWZhdWx0Q29sb3IgPSAicmdiKDI1NSwgMjU1LCAyNTUpIjsKKyAgICAgICAgdmFyIGFj
dGl2ZUNvbG9yID0gInJnYigwLCAwLCAyNTUpIjsKKyAgICAKKyAgICAgICAgY29sb3IgPSB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZShjdXJFbGVtZW50KS5iYWNrZ3JvdW5kQ29sb3I7CisgICAgICAg
IGlmIChjb2xvciA9PSBhY3RpdmVDb2xvcikKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGNvbG9yICE9IGRlZmF1bHRDb2xvcikKKyAgICAgICAgICB0ZXN0RmFpbGVkKCdHb3Qg
dW5leHBlY3RlZCBiYWNrZ3JvdW5kQ29sb3I6ICcgKyBjb2xvcik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdFRhcERvd24odG91Y2hwb2ludCwg
ZWxlbWVudCkKKyAgICB7CisgICAgICAgIGN1ckVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICBp
ZiAoaXNMaW5rQWN0aXZlKCkpIHRlc3RGYWlsZWQoJ0xpbmsgdW5leHBlY3RlZGx5IGFjdGl2ZSBv
biBlbnRyeScpOworICAgICAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwRG93bih0b3VjaHBvaW50
LngsIHRvdWNocG9pbnQueSwgdG91Y2hwb2ludC53aWR0aCwgdG91Y2hwb2ludC5oZWlnaHQpOwor
ICAgICAgICBzaG91bGRCZVRydWUoImlzTGlua0FjdGl2ZSgpIik7CisgICAgICAgIGV2ZW50U2Vu
ZGVyLmdlc3R1cmVUYXBDYW5jZWwodG91Y2hwb2ludC54LCB0b3VjaHBvaW50LnkpOworICAgICAg
ICBpZiAoaXNMaW5rQWN0aXZlKCkpIHRlc3RGYWlsZWQoJ0xpbmsgdW5leHBlY3RlZGx5IGFjdGl2
ZSBvbiBleGl0Jyk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IHRoZSBhcHBy
b2FjaCBpbiBmaW5kQWJzb2x1dGVCb3VuZHMgd29yayBjb3JyZWN0bHkgaGVyZT8KKyAgICAvLyBJ
J2xsIGludmVzdGlnYXRlL2ZpeCBhbG9uZyB3aXRoIGh0dHA6Ly93a2IudWcvOTY4MTAKKyAgICBm
dW5jdGlvbiBnZXRCb3VuZHMobm9kZSkKKyAgICB7CisgICAgICB2YXIgYm91bmRzID0gbm9kZS5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgIHJldHVybiB7CisgICAgICAgIGxlZnQ6IGJv
dW5kcy5sZWZ0LAorICAgICAgICB0b3A6IGJvdW5kcy50b3AsCisgICAgICAgIHdpZHRoOiBib3Vu
ZHMucmlnaHQgLSBib3VuZHMubGVmdCwKKyAgICAgICAgaGVpZ2h0OiBib3VuZHMuYm90dG9tIC0g
Ym91bmRzLnRvcAorICAgICAgfTsgICAgCisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3RE
aXJlY3RUb3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgLy8gVG91Y2ggZGlyZWN0bHkgaW4g
dGhlIGNlbnRlciBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgdmFyIHRvdWNocG9pbnQgPSBvZmZz
ZXRUb3VjaFBvaW50KGdldEJvdW5kcyhlbGVtZW50KSwgJ2NlbnRlcicsIDAsIDIwLCAzMCk7Cisg
ICAgICAgIGlmIChkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNocG9pbnQueCwgdG91Y2hw
b2ludC55KSAhPSBlbGVtZW50KQorICAgICAgICAgIHRlc3RGYWlsZWQoJ0RpcmVjdCB0b3VjaCBl
bmRlZCB1cCBvbiBzb21lIG90aGVyIGVsZW1lbnQnKTsKKyAgICAgICAgdGVzdFRhcERvd24odG91
Y2hwb2ludCwgZWxlbWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZXNjZW5kYW50T2Yo
cGFyZW50LCBjaGlsZCkKKyAgICB7CisgICAgICAgIHZhciBuID0gY2hpbGQ7CisgICAgICAgIHdo
aWxlKG4pIHsKKyAgICAgICAgICAgIGlmKG49PXBhcmVudCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIG4gPSBuLnBhcmVudE5vZGU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiB0ZXN0SW5kaXJlY3RU
b3VjaChlbGVtZW50KQorICAgIHsKKyAgICAgICAgLy8gVG91Y2gganVzdCByaWdodCBvZiB0aGUg
ZWxlbWVudC4KKyAgICAgICAgdmFyIHRvdWNocG9pbnQgPSBvZmZzZXRUb3VjaFBvaW50KGdldEJv
dW5kcyhlbGVtZW50KSwgJ3JpZ2h0JywgMTAsIDMwLCAyMCk7CisgICAgICAgIGlmIChpc0Rlc2Nl
bmRhbnRPZihlbGVtZW50LCBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNocG9pbnQueCwg
dG91Y2hwb2ludC55KSkpCisgICAgICAgICAgdGVzdEZhaWxlZCgnSW5kaXJlY3QgdG91Y2ggZW5k
ZWQgdXAgc3RpbGwgb24gdG9wIG9mIHRoZSBlbGVtZW50Jyk7CisgICAgICAgIHRlc3RUYXBEb3du
KHRvdWNocG9pbnQsIGVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RU
b3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGRpcmVjdCBoaXRzLicpOwor
ICAgICAgICB0ZXN0RGlyZWN0VG91Y2goZS5saW5rMSk7CisgICAgICAgIHRlc3REaXJlY3RUb3Vj
aChlLmxpbmsyKTsKKyAgICAgICAgdGVzdERpcmVjdFRvdWNoKGUubGluazMpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgZGVidWco
J1Rlc3RpbmcgaW5kaXJlY3QgaGl0cy4nKTsKKyAgICAgICAgdGVzdEluZGlyZWN0VG91Y2goZS5s
aW5rMSk7CisgICAgICAgIHRlc3RJbmRpcmVjdFRvdWNoKGUubGluazIpOworICAgICAgICB0ZXN0
SW5kaXJlY3RUb3VjaChlLmxpbmszKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0cygp
CisgICAgeworICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICAgIGRl
YnVnKCdUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUnKTsKKyAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIuZ2VzdHVyZVRh
cERvd24pIHsKKyAgICAgICAgICBkZWJ1ZygnR2VzdHVyZVRhcERvd24gbm90IHN1cHBvcnRlZCBi
eSB0aGlzIHBsYXRmb3JtJyk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IAorICAgICAg
ICAgIAorICAgICAgICBkZXNjcmlwdGlvbignVGVzdHMgdGhhdCB0YXBEb3duIHdpbGwgdHJpZ2dl
ciB0aGUgYWN0aXZlIHN0YXRlLicpOworICAgICAgICB0ZXN0SW5kaXJlY3RUb3VjaGVzKCk7Cisg
ICAgICAgIHRlc3REaXJlY3RUb3VjaGVzKCk7CisgICAgICAgIGUuc2FuZGJveC5zdHlsZS5kaXNw
bGF5ID0gJ25vbmUnOworICAgIH0KKyAgICBydW5UZXN0cygpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164446</attachid>
            <date>2012-09-17 13:35:25 -0700</date>
            <delta_ts>2012-09-19 07:07:59 -0700</delta_ts>
            <desc>Merge with trunk</desc>
            <filename>bug-96677-20120917163452.patch</filename>
            <type>text/plain</type>
            <size>14801</size>
            <attacher name="Rick Byers">rbyers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI2NTM3ZGIwNjZlN2Iz
MDlhODFmMzVlZTUxMWJlMDNmYTEyODExNC4uNGE3NTkwMTY2YjFjMTZiMDhjNjA3Zjg2OTQ5YmZj
MmZiY2FiZmFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA5LTE0ICBSaWNr
IEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KKworICAgICAgICBEbyB0b3VjaCBhZGp1c3Rt
ZW50IG9uIEdlc3R1cmVUYXBEb3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NjY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIERvIHRvdWNoIGFkanVzdG1lbnQgb24gR2VzdHVyZVRhcERvd24gZXhhY3Rs
eSBhcyBmb3IgR2VzdHVyZVRhcCB0b2RheS4KKworICAgICAgICBUZXN0OiB0b3VjaGFkanVzdG1l
bnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YWRqdXN0R2VzdHVyZVBvc2l0aW9u
KToKKwogMjAxMi0wOS0xNyAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWxsb3cgZ2VzdHVyZSBldmVudHMgdG8gc2V0IGFjdGl2ZS9ob3ZlciBzdGF0ZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA5MTlmOGU0NWNjNDY4OGEzYTM5MzJl
OWU5ZTg5MTQ4ZjdiYWQ1MTY0Li4zMmQyMzhjZTM4ODZhMmE5MWFkOTg2MWRkOWQzODc2MGYyNzYz
Njk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yNDE0LDEwICsyNDE0
LDE1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUo
KSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kIHx8IGdlc3R1cmVFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZSkKICAgICAgICAgZXZlbnRU
YXJnZXQgPSBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05vZGUuZ2V0KCk7CiAKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CiAgICAgSGl0VGVzdFJl
cXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OlRvdWNo
RXZlbnQ7Ci0gICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZVRhcERvd24pCisgICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVRhcERvd24pIHsKKyNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKKyAgICAg
ICAgaWYgKCFnZXN0dXJlRXZlbnQuYXJlYSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFkanVz
dEdlc3R1cmVQb3NpdGlvbihnZXN0dXJlRXZlbnQsIGFkanVzdGVkUG9pbnQpOworI2VuZGlmCiAg
ICAgICAgIGhpdFR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKLSAgICBlbHNlIGlmIChn
ZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXAgfHwgZ2VzdHVy
ZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwRG93bkNhbmNlbCkKKyAg
ICB9IGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVy
ZVRhcCB8fCBnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBE
b3duQ2FuY2VsKQogICAgICAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWxlYXNlOwog
ICAgIGVsc2UKICAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0
VGVzdFJlcXVlc3Q6OlJlYWRPbmx5OwpAQCAtMjQyNiw3ICsyNDMxLDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2Vz
dHVyZUV2ZW50KQogICAgICAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seTsK
IAogICAgIGlmICghZXZlbnRUYXJnZXQgfHwgIShoaXRUeXBlICYgSGl0VGVzdFJlcXVlc3Q6OlJl
YWRPbmx5KSkgewotICAgICAgICBJbnRQb2ludCBoaXRUZXN0UG9pbnQgPSBtX2ZyYW1lLT52aWV3
KCktPndpbmRvd1RvQ29udGVudHMoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCkpOworICAgICAgICBJ
bnRQb2ludCBoaXRUZXN0UG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
YWRqdXN0ZWRQb2ludCk7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJl
c3VsdEF0UG9pbnQoaGl0VGVzdFBvaW50LCBmYWxzZSwgZmFsc2UsIERvbnRIaXRUZXN0U2Nyb2xs
YmFycywgaGl0VHlwZSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0ID0gcmVzdWx0LnRhcmdldE5vZGUo
KTsKICAgICB9CkBAIC0yNTc0LDYgKzI1NzksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6YWRqdXN0
R2VzdHVyZVBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbgog
ICAgIE5vZGUqIHRhcmdldE5vZGUgPSAwOwogICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUo
KSkgewogICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcDoKKyAgICBjYXNlIFBsYXRm
b3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3duOgogICAgICAgICBiZXN0Q2xpY2thYmxlTm9kZUZvclRv
dWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIEludFNpemUoZ2VzdHVyZUV2ZW50LmFy
ZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEoKS5oZWlnaHQoKSAvIDIpLCBhZGp1
c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQbGF0Zm9y
bUV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI0YjJiZjBlOTkwZjNkOGFmOTEwZDYzYWE3M2QxZWY0Mzgy
YjhiODYuLjlmZDdiYzZhZDAxYmQ3ZDJjMGM5MmY4MjllMWUwNTlkMWZiODYyYzMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0wOS0xNCAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgRG8gdG91Y2ggYWRqdXN0bWVudCBvbiBHZXN0dXJlVGFwRG93bgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2NzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyByYWRpdXMgdG8gYmUgc2V0IGZv
ciBHZXN0dXJlVGFwRG93biBldmVudHMuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5jcHA6CisgICAgICAgIChFdmVudFNlbmRlcjo6Z2Vz
dHVyZUV2ZW50KToKKwogMjAxMi0wOS0xNyAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgQWRkIGhhbmRsaW5nIG9mIG5ldyBHZXN0dXJlVGFwQ2FuY2VsIGluIERS
VApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9F
dmVudFNlbmRlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L0V2ZW50U2VuZGVyLmNwcAppbmRleCAyMzYwMTI4NjUxYzYwZjk5ZmYyNWM3ZGViZTYwNzc1Mjk1
MTY5MzdjLi4yM2I2NWQwNzE3YjVmM2U1OTMzNmUyZmM4ZDBhNWVmYjA1OTUxZTM0IDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0V2ZW50U2VuZGVy
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0V2ZW50
U2VuZGVyLmNwcApAQCAtMTE4OCw2ICsxMTg4LDEwIEBAIHZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1
cmVFdmVudChXZWJJbnB1dEV2ZW50OjpUeXBlIHR5cGUsIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYK
ICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duOgogICAgICAgICBldmVudC54
ID0gcG9pbnQueDsKICAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7CisgICAgICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID49IDQpIHsKKyAgICAgICAgICAgIGV2ZW50LmRhdGEudGFwRG93bi53aWR0
aCA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7CisgICAgICAg
ICAgICBldmVudC5kYXRhLnRhcERvd24uaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3Vt
ZW50c1szXS50b0RvdWJsZSgpKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNl
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWw6CiAgICAgICAgIGV2ZW50LnggPSBwb2lu
dC54OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDhmNzkyNWRhYThkOWI2MTQ5ZGYwYWEyN2IwZDAwY2IxNDI4ZmJlOWMuLjcz
ZDg4ZjgwNTRlZTZlODA5ODhmOGEzYmZlNWRmMTFiMTRkMjkxZWMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MiBAQAorMjAxMi0wOS0xNCAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgRG8gdG91Y2ggYWRqdXN0bWVudCBvbiBHZXN0dXJlVGFwRG93bgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2NzcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIGEgZmV3IHR3ZWFrcyB0byB0
aGUgdG91Y2hhZGp1c3RtZW50LmpzIGluZnJhc3RydWN0dXJlIHRvIG1ha2UgaXQKKyAgICAgICAg
c2ltcGxlciBhbmQgZWFzaWVyIHRvIHVzZS4gIEFkZCBhIHRlc3QgZm9yIHRvdWNoLWFkanVzdG1l
bnQgb2YKKyAgICAgICAgR2VzdHVyZVRhcERvd24gZXZlbnRzIChiYXNlZCBvbiB0b3VjaC1saW5r
cy1sb25ncHJlc3MpLgorCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3Vj
aGFkanVzdG1lbnQuanM6CisgICAgICAgICh0b3VjaFBvaW50LnJldHVybi5sZWZ0LngucmFkaXVz
WC50b3AueS5yYWRpdXNZLndpZHRoLnJhZGl1c1guMi5oZWlnaHQucmFkaXVzWS4yLmdldCB4KToK
KyAgICAgICAgKHRvdWNoUG9pbnQucmV0dXJuLmdldCB5KToKKyAgICAgICAgKHRvdWNoUG9pbnQp
OgorICAgICAgICAob2Zmc2V0VG91Y2hQb2ludCk6CisgICAgICAgICogdG91Y2hhZGp1c3RtZW50
L3RvdWNoLWxpbmtzLWFjdGl2ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRvdWNo
YWRqdXN0bWVudC90b3VjaC1saW5rcy1hY3RpdmUuaHRtbDogQWRkZWQuCisKIDIwMTItMDktMTcg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2OTQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBl
ZAppbmRleCA5OWUzNDdiOTZjNjdmYzVkMTg0YjQyN2RjMTlkM2I3Yjk3MjI2ZjQ3Li4wYmIzM2Ex
MGVjZTk2ZDQ1ZTBkMmRmZmI3NzM0MDY2YzgwODVlNWFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBw
ZWQKQEAgLTQyNCw2ICs0MjQsMTAgQEAgZmFzdC9tdXRhdGlvbi90cmFuc2llbnQtZ2MtY3Jhc2gu
aHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODcwODgKIGZh
c3QvanMvbmFtZXMuaHRtbAogCisjIERvbid0IGhhdmUgR2VzdHVyZUxvbmdQcmVzcywgR2VzdHVy
ZVRhcENhbmNlbCBldmVudCB0eXBlcwordG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtzLWxvbmdw
cmVzcy5odG1sCit0b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwKKwogIyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0gIwogIyAgICAgICBGZWF0dXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0gIwpAQCAtMjczOSw5ICsyNzQzLDYgQEAgY3NzMy9mbGV4Ym94L2ZsZXgtcm91bmRp
bmcuaHRtbAogIyBFTkFCTEUoV0lER0VUX1JFR0lPTikgaXMgZGlzYWJsZWQKIGZhc3QvY3NzL3dp
ZGdldC1yZWdpb24tcGFyc2VyLmh0bWwKIAotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTI5MTQKLXRvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1sb25ncHJlc3Mu
aHRtbAotCiAjIFtRdF1bR1RLXSBSRUdSRVNTSU9OKHIxMjUyNTEpOiBJdCBtYWRlIHN2Zy9jdXN0
b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQueGh0bWwgYXNzZXJ0IGFuZCBmbGFr
ZXkKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzODEyCiBzdmcv
Y3VzdG9tL3VzZS1pbnN0YW5jZVJvb3QtYXMtZXZlbnQtdGFyZ2V0LnhodG1sCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5q
cyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50
LmpzCmluZGV4IGY5YjdkOWRhYzI0ZTliNWE1MDYyODFkZDgyZmRkNWJiNzY2ZGIwNzEuLjJmNDFm
NjM4YmVlY2Q1NmZlMWMyZDA1ZmRhZjZiMDFhMTEwYzEzYjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzCisrKyBiL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzCkBA
IC05NiwxMiArOTYsMTUgQEAgZnVuY3Rpb24gdG91Y2hQb2ludCh4LCB5LCByYWRpdXNYLCByYWRp
dXNZKQogewogICAgIGlmICghcmFkaXVzWSkKICAgICAgICAgcmFkaXVzWSA9IHJhZGl1c1g7Ci0g
ICAgdmFyIHRvdWNocG9pbnQgPSBuZXcgT2JqZWN0KCk7Ci0gICAgdG91Y2hwb2ludC5sZWZ0ID0g
eCAtIHJhZGl1c1g7Ci0gICAgdG91Y2hwb2ludC50b3AgPSB5IC0gcmFkaXVzWTsKLSAgICB0b3Vj
aHBvaW50LndpZHRoID0gcmFkaXVzWCAqIDI7Ci0gICAgdG91Y2hwb2ludC5oZWlnaHQgPSByYWRp
dXNZICogMjsKLSAgICByZXR1cm4gdG91Y2hwb2ludDsKKworICAgIHJldHVybiB7CisgICAgICAg
IGxlZnQ6IHggLSByYWRpdXNYLAorICAgICAgICB0b3A6IHkgLSByYWRpdXNZLAorICAgICAgICB3
aWR0aDogcmFkaXVzWCAqIDIsCisgICAgICAgIGhlaWdodDogcmFkaXVzWSAqIDIsCisgICAgICAg
IGdldCB4KCkgeyByZXR1cm4gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aC8yOyB9LAorICAgICAgICBn
ZXQgeSgpIHsgcmV0dXJuIHRoaXMudG9wICsgdGhpcy5oZWlnaHQvMjsgfQorICAgIH07CiB9CiAK
IGZ1bmN0aW9uIG9mZnNldFRvdWNoUG9pbnQoYm91bmRzLCByZWxhdGl2ZVBvc2l0aW9uLCB0b3Vj
aE9mZnNldCwgdG91Y2hSYWRpdXNYLCB0b3VjaFJhZGl1c1kpCkBAIC0xMDksOSArMTEyLDEwIEBA
IGZ1bmN0aW9uIG9mZnNldFRvdWNoUG9pbnQoYm91bmRzLCByZWxhdGl2ZVBvc2l0aW9uLCB0b3Vj
aE9mZnNldCwgdG91Y2hSYWRpdXNYLCB0CiAgICAgaWYgKCF0b3VjaFJhZGl1c1kpCiAgICAgICAg
IHRvdWNoUmFkaXVzWSA9IHRvdWNoUmFkaXVzWDsKIAotICAgIHZhciB0b3VjaHBvaW50ID0ge2xl
ZnQgOiBib3VuZHMubGVmdCwgdG9wOiBib3VuZHMudG9wIH07CisgICAgLy8gU3RhcnQgd2l0aCB0
aGUgY2VudGVyIG9mIHRoZSB0b3VjaCBhdCB0aGUgdG9wLWxlZnQgb2YgdGhlIGJvdW5kcy4KKyAg
ICB2YXIgdG91Y2hwb2ludCA9IHRvdWNoUG9pbnQoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIHRv
dWNoUmFkaXVzWCwgdG91Y2hSYWRpdXNZKTsKICAKLSAgICAvLyBTZXQgY2VudGVyIHBvaW50IGZv
ciB0b3VjaC4KKyAgICAvLyBBZGp1c3QgdGhlIHRvdWNoIHBvaW50IGFzIHJlcXVlc3RlZC4KICAg
ICBzd2l0Y2ggKHJlbGF0aXZlUG9zaXRpb24pIHsKICAgICBjYXNlICdjZW50ZXInOgogICAgICAg
ICB0b3VjaHBvaW50LmxlZnQgKz0gYm91bmRzLndpZHRoIC8gMjsKQEAgLTE0OSwxMiArMTUzLDYg
QEAgZnVuY3Rpb24gb2Zmc2V0VG91Y2hQb2ludChib3VuZHMsIHJlbGF0aXZlUG9zaXRpb24sIHRv
dWNoT2Zmc2V0LCB0b3VjaFJhZGl1c1gsIHQKICAgICAgICAgdG91Y2hwb2ludC5sZWZ0ICs9IGJv
dW5kcy53aWR0aCAvIDI7CiAgICAgICAgIHRvdWNocG9pbnQudG9wICs9IGJvdW5kcy5oZWlnaHQg
KyB0b3VjaE9mZnNldDsKICAgICB9Ci0gICAgLy8gQWRqdXN0IGZyb20gdG91Y2ggY2VudGVyIHRv
IHRvcC1sZWZ0IGNvcm5lci4KLSAgICB0b3VjaHBvaW50LmxlZnQgLT0gdG91Y2hSYWRpdXNYOwot
ICAgIHRvdWNocG9pbnQudG9wIC09IHRvdWNoUmFkaXVzWTsKLQotICAgIHRvdWNocG9pbnQud2lk
dGggPSAyICogdG91Y2hSYWRpdXNYOwotICAgIHRvdWNocG9pbnQuaGVpZ2h0ID0gMiAqIHRvdWNo
UmFkaXVzWTsKIAogICAgIHJldHVybiB0b3VjaHBvaW50OwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtzLWFjdGl2ZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZDRmZWQyMTVkOWFhMTlmNDkxNjFiNzAxMDUzYzY4MTk1MWRlZmZkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3RvdWNoLWxpbmtz
LWFjdGl2ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgdGhhdCB0YXBEb3du
IHdpbGwgdHJpZ2dlciB0aGUgYWN0aXZlIHN0YXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworVGVzdGluZyBpbmRpcmVjdCBoaXRzLgorUEFTUyBpc0xpbmtBY3RpdmUoKSBpcyB0
cnVlCitQQVNTIGlzTGlua0FjdGl2ZSgpIGlzIHRydWUKK1BBU1MgaXNMaW5rQWN0aXZlKCkgaXMg
dHJ1ZQorVGVzdGluZyBkaXJlY3QgaGl0cy4KK1BBU1MgaXNMaW5rQWN0aXZlKCkgaXMgdHJ1ZQor
UEFTUyBpc0xpbmtBY3RpdmUoKSBpcyB0cnVlCitQQVNTIGlzTGlua0FjdGl2ZSgpIGlzIHRydWUK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0
bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvdG91Y2gtbGlua3MtYWN0aXZlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjQzZDY0MTA0MDc1ODQyNTMxNzhiMmYyNjQyNzlkZjBmNTIwMWI5NgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC90b3VjaC1saW5rcy1h
Y3RpdmUuaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorICAgIDx0aXRsZT5Ub3VjaCBBZGp1c3RtZW50IDogVGVzdGluZyB0aGF0IGFjdGl2ZSB3
aWxsIGJlIHNldCBvbiBhIHRhcERvd24gLSBidWcgOTY2Nzc8L3RpdGxlPgorICAgIDxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanMiPjwvc2NyaXB0PgorICAg
IDxzdHlsZT4KKyAgICAgICAgI3NhbmRib3ggeworICAgICAgICAgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgICAgICAgICAgbGVmdDogMHB4OworICAgICAgICAgICAgdG9wOiAxMDBweDsKKyAg
ICAgICAgfQorICAgICAgICBhIHsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigy
NTUsMjU1LDI1NSk7CisgICAgICAgIH0KKyAgICAgICAgYTphY3RpdmUgeworICAgICAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogcmdiKDAsMCwyNTUpOworICAgICAgICB9ICAgICAgICAKKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0ic2FuZGJveCI+Cis8cD48YSBo
cmVmPSIiIGlkPSJsaW5rMSI+STwvYT4gcHJvcG9zZSB0byBjb25zaWRlciA8YSBocmVmPSIiIGlk
PSJsaW5rMiI+dGhlIHF1ZXN0aW9uPC9hPiwgIkNhbiBtYWNoaW5lcyB0aGluaz8iPGJyPlRoaXMg
c2hvdWxkIGJlZ2luIHdpdGggZGVmaW5pdGlvbnMgb2YgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm1z
ICJtYWNoaW5lIiBhbmQgPGEgaHJlZj0iIiBpZD0ibGluazMiPiJ0aGluay4iPC9hPjwvcD4KKzwv
ZGl2PgorCis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2
PgorCis8c2NyaXB0PgorICAgIHZhciBlbGVtZW50OworICAgIHZhciBhZGp1c3RlZE5vZGU7Cisg
ICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFjY2VzcyB0byBlbGVtZW50cworICAgIHZhciBlID0ge307
CisgICAgWydzYW5kYm94JywgJ2xpbmsxJywgJ2xpbmsyJywgJ2xpbmszJ10uZm9yRWFjaChmdW5j
dGlvbihhKSB7CisgICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTsKKyAg
ICB9KTsKKyAgICAKKyAgICB2YXIgY3VyRWxlbWVudDsKKyAgICAKKyAgICBmdW5jdGlvbiBpc0xp
bmtBY3RpdmUoKQorICAgIHsKKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBtYXRjaCB0aGUgYmFj
a2dyb3VuZC1jb2xvciB1c2VkIGFib3ZlLCBhZnRlciByb3VuZC10cmlwcGluZy4KKyAgICAgICAg
dmFyIGRlZmF1bHRDb2xvciA9ICJyZ2IoMjU1LCAyNTUsIDI1NSkiOworICAgICAgICB2YXIgYWN0
aXZlQ29sb3IgPSAicmdiKDAsIDAsIDI1NSkiOworICAgIAorICAgICAgICBjb2xvciA9IHdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKGN1ckVsZW1lbnQpLmJhY2tncm91bmRDb2xvcjsKKyAgICAgICAg
aWYgKGNvbG9yID09IGFjdGl2ZUNvbG9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChjb2xvciAhPSBkZWZhdWx0Q29sb3IpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCdH
b3QgdW5leHBlY3RlZCBiYWNrZ3JvdW5kQ29sb3I6ICcgKyBjb2xvcik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gdGVzdFRhcERvd24odG91Y2hwb2lu
dCwgZWxlbWVudCkKKyAgICB7CisgICAgICAgIGN1ckVsZW1lbnQgPSBlbGVtZW50OworICAgICAg
ICBpZiAoaXNMaW5rQWN0aXZlKCkpIHRlc3RGYWlsZWQoJ0xpbmsgdW5leHBlY3RlZGx5IGFjdGl2
ZSBvbiBlbnRyeScpOworICAgICAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwRG93bih0b3VjaHBv
aW50LngsIHRvdWNocG9pbnQueSwgdG91Y2hwb2ludC53aWR0aCwgdG91Y2hwb2ludC5oZWlnaHQp
OworICAgICAgICBzaG91bGRCZVRydWUoImlzTGlua0FjdGl2ZSgpIik7CisgICAgICAgIGV2ZW50
U2VuZGVyLmdlc3R1cmVUYXBDYW5jZWwodG91Y2hwb2ludC54LCB0b3VjaHBvaW50LnkpOworICAg
ICAgICBpZiAoaXNMaW5rQWN0aXZlKCkpIHRlc3RGYWlsZWQoJ0xpbmsgdW5leHBlY3RlZGx5IGFj
dGl2ZSBvbiBleGl0Jyk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IHRoZSBh
cHByb2FjaCBpbiBmaW5kQWJzb2x1dGVCb3VuZHMgd29yayBjb3JyZWN0bHkgaGVyZT8KKyAgICAv
LyBJJ2xsIGludmVzdGlnYXRlL2ZpeCBhbG9uZyB3aXRoIGh0dHA6Ly93a2IudWcvOTY4MTAKKyAg
ICBmdW5jdGlvbiBnZXRCb3VuZHMobm9kZSkKKyAgICB7CisgICAgICB2YXIgYm91bmRzID0gbm9k
ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgIHJldHVybiB7CisgICAgICAgICAgbGVm
dDogYm91bmRzLmxlZnQsCisgICAgICAgICAgdG9wOiBib3VuZHMudG9wLAorICAgICAgICAgIHdp
ZHRoOiBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdCwKKyAgICAgICAgICBoZWlnaHQ6IGJvdW5k
cy5ib3R0b20gLSBib3VuZHMudG9wCisgICAgICB9OyAgICAKKyAgICB9CisgICAgCisgICAgZnVu
Y3Rpb24gdGVzdERpcmVjdFRvdWNoKGVsZW1lbnQpCisgICAgeworICAgICAgICAvLyBUb3VjaCBk
aXJlY3RseSBpbiB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50LgorICAgICAgICB2YXIgdG91Y2hw
b2ludCA9IG9mZnNldFRvdWNoUG9pbnQoZ2V0Qm91bmRzKGVsZW1lbnQpLCAnY2VudGVyJywgMCwg
MjAsIDMwKTsKKyAgICAgICAgaWYgKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2hwb2lu
dC54LCB0b3VjaHBvaW50LnkpICE9IGVsZW1lbnQpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCdE
aXJlY3QgdG91Y2ggZW5kZWQgdXAgb24gc29tZSBvdGhlciBlbGVtZW50Jyk7CisgICAgICAgIHRl
c3RUYXBEb3duKHRvdWNocG9pbnQsIGVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlz
RGVzY2VuZGFudE9mKHBhcmVudCwgY2hpbGQpCisgICAgeworICAgICAgICB2YXIgbiA9IGNoaWxk
OworICAgICAgICB3aGlsZShuKSB7CisgICAgICAgICAgICBpZihuPT1wYXJlbnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBuID0gbi5wYXJlbnROb2RlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24g
dGVzdEluZGlyZWN0VG91Y2goZWxlbWVudCkKKyAgICB7CisgICAgICAgIC8vIFRvdWNoIGp1c3Qg
cmlnaHQgb2YgdGhlIGVsZW1lbnQuCisgICAgICAgIHZhciB0b3VjaHBvaW50ID0gb2Zmc2V0VG91
Y2hQb2ludChnZXRCb3VuZHMoZWxlbWVudCksICdyaWdodCcsIDEwLCAzMCwgMjApOworICAgICAg
ICBpZiAoaXNEZXNjZW5kYW50T2YoZWxlbWVudCwgZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0
b3VjaHBvaW50LngsIHRvdWNocG9pbnQueSkpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgnSW5k
aXJlY3QgdG91Y2ggZW5kZWQgdXAgc3RpbGwgb24gdG9wIG9mIHRoZSBlbGVtZW50Jyk7CisgICAg
ICAgIHRlc3RUYXBEb3duKHRvdWNocG9pbnQsIGVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHRlc3REaXJlY3RUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIGRp
cmVjdCBoaXRzLicpOworICAgICAgICB0ZXN0RGlyZWN0VG91Y2goZS5saW5rMSk7CisgICAgICAg
IHRlc3REaXJlY3RUb3VjaChlLmxpbmsyKTsKKyAgICAgICAgdGVzdERpcmVjdFRvdWNoKGUubGlu
azMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RJbmRpcmVjdFRvdWNoZXMoKQorICAgIHsK
KyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgaW5kaXJlY3QgaGl0cy4nKTsKKyAgICAgICAgdGVzdElu
ZGlyZWN0VG91Y2goZS5saW5rMSk7CisgICAgICAgIHRlc3RJbmRpcmVjdFRvdWNoKGUubGluazIp
OworICAgICAgICB0ZXN0SW5kaXJlY3RUb3VjaChlLmxpbmszKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBydW5UZXN0cygpCisgICAgeworICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgICAgICAgICAgZGVidWcoJ1RoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZScp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghd2luZG93LmV2
ZW50U2VuZGVyLmdlc3R1cmVUYXBEb3duKSB7CisgICAgICAgICAgICBkZWJ1ZygnR2VzdHVyZVRh
cERvd24gbm90IHN1cHBvcnRlZCBieSB0aGlzIHBsYXRmb3JtJyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gCisgICAgICAgICAgCisgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0cyB0
aGF0IHRhcERvd24gd2lsbCB0cmlnZ2VyIHRoZSBhY3RpdmUgc3RhdGUuJyk7CisgICAgICAgIHRl
c3RJbmRpcmVjdFRvdWNoZXMoKTsKKyAgICAgICAgdGVzdERpcmVjdFRvdWNoZXMoKTsKKyAgICAg
ICAgZS5zYW5kYm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgfQorICAgIHJ1blRlc3Rz
KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>