<?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>40197</bug_id>
          
          <creation_ts>2010-06-04 18:15:27 -0700</creation_ts>
          <short_desc>Enhance the hit testing to take a rectangle instead of a point</short_desc>
          <delta_ts>2010-09-23 17:08:52 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41081</dependson>
          <blocked>36111</blocked>
    
    <blocked>40477</blocked>
    
    <blocked>44089</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Grace Kloba">klobag</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>barbieri</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gmak</cc>
    
    <cc>hausmann</cc>
    
    <cc>hyatt</cc>
    
    <cc>kenneth</cc>
    
    <cc>koivisto</cc>
    
    <cc>manyoso</cc>
    
    <cc>mitz</cc>
    
    <cc>rjkroege</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>skyul</cc>
    
    <cc>steveblock</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>234454</commentid>
    <comment_count>0</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-04 18:15:27 -0700</bug_when>
    <thetext>As discussed in the following thread, there is a need, especially on the mobile browsers, to support hit testing with a rectangle instead of just a point.

https://lists.webkit.org/pipermail/webkit-dev/2010-June/013055.html

We would like to explore in this area. The idea is to modify the HitTestResult to take a padding. If it is 0, it is the current point based hit testing. If it is non-zero, hit test logic will continue searching when it finds a candidate unless the rectangle is fully enclosed by the candidate. The result will be a list of Node in the z-order they are hit-tested. The caller will decide how to process them.

We have some working in progress code. We can provide a patch for easy discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234584</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-06-05 02:48:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/7244301&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234670</commentid>
    <comment_count>2</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-06 10:14:26 -0700</bug_when>
    <thetext>I would like to modify hitTestResultAtPoint() with an extra parameter. How do I re-generate WebCore.base.exp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234671</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-06-06 10:17:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I would like to modify hitTestResultAtPoint() with an extra parameter. How do I re-generate WebCore.base.exp?

That file is not generated. After you change the method prototype, when you try to build you will get link errors including the mangled names for the old, and then for the new method prototypes . You then need to add the new name to the exports file, remove the old name, and sort the file in ASCII order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234677</commentid>
    <comment_count>4</comment_count>
      <attachid>57979</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-06 12:37:53 -0700</bug_when>
    <thetext>Created attachment 57979
first in-progress patch

This is an in-progress patch. The goal is to get the feedback from the broader audience.

The key change is EventHandler::hitTestResultAtPoint(). If the pointPadding is (0, 0), the functionality should be identical as before. If pointPadding is not empty, we will do a region test. Inside the returned HitTestResult, besides innerNode() you can also get a list of Node overlapped with the &quot;fat&quot; point by calling rawNodeList(). The Nodes are ordered based on z-order.

There are couple of open issues.
1. currently all the Nodes are in the same widget/frame as the innerNode(), do we need to support Nodes from different frames? (See code in EventHandler.cpp)

2. currently it doesn&apos;t extend isPointInOverflowControl() for the region test, is it needed? (See RenderBlock.cpp)

3. currently it doesn&apos;t support SVG. (See RenderSVGRoot.cpp)

4. currently there is no special treatment for transform3D as I don&apos;t know what to do. (See RenderLayer.cpp)

5. need suggestion on writing layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234678</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-06 12:39:53 -0700</bug_when>
    <thetext>Attachment 57979 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/HitTestResult.cpp:381:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234679</commentid>
    <comment_count>6</comment_count>
      <attachid>57980</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-06 12:44:19 -0700</bug_when>
    <thetext>Created attachment 57980
remove the tab</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236139</commentid>
    <comment_count>7</comment_count>
      <attachid>58324</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-09 20:31:56 -0700</bug_when>
    <thetext>Created attachment 58324
rect-based hitTest prototype patch

Hi Grace. Since I also starting to look at the same problem (last Monday), I ended up with a similar patch/prototype, but whose approach is different enough that I think it might be good to upload it so we could compare the differences and decide the way to go.

Summary of my prototype patch: main idea is to really have a rect-based HitTest system. So all revelant XXXAtPoint methods were modified to receive a Rect as parameter, instead of pointer, and renamed accordingly to XXXAtArea.

Details:
- EventHandler::hitTestResultAtPoint was also the codepath start point for my approach.

- EventHandler::hitTestResultAtArea method was added, and the previosly existing hitTestResultAtPoint just falls back to it.

- nodeAtPoint methods throughout the rendering code were renamed to nodeAtArea,
and changed to take a rect (&quot;hitTestArea&quot;) as parameter, instead of a point (&quot;x&quot; and &quot;y&quot;). Method bodies were also adapted accordingly where needed.
    
- Base rendering classes like RenderObject and InlineBox still have nodeAtPoint
methods, but falling back to nodeAtArea, and of course, passing something like IntRect(x, y, 1, 1) as the hit area to it.
    
- The various updateHitTestResult methods were changed so that each Node whose render bounds intersects the hit test area are added into a Vector in the HitTestResult class.
    
- A new constructor was added HitTestResult class, receiving a IntRect as parameter.Previous existing constructors that receive a IntPoint now fallback to the new one passing IntRect(point, IntSize(1, 1)).
    
Limitations:
- SVG classes were not modified yet.

I ran layout tests on a Mac with the patch applied and there was no regressions. However, I have not had time to think of a good testing infrastructure for it, so no new tests were added so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236142</commentid>
    <comment_count>8</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-09 20:47:32 -0700</bug_when>
    <thetext>Although I strongly believe that both approaches here end up in the same results (even as-are), I will try to summarize the basic difference between grace&apos;s (attachment 57980) and mine (attachment 58324).

From my understanding, the former makes the HitTest system &quot;rect-aware&quot; in the sense that it keeps the core logic of nodeAtPoint methods as point-based, but adjusts them to take a rect (a point + a padding area) into consideration.

On the other hand, the later makes the HitTest really rect-based in the sense that it changes all nodeAtPoint existent methods to be nodeAtArea ones, and of course their method so their method bodies where needed. 

The difference is silly, but exists. We have just to decide how to proceed from that point on. Whatever direction is decided, I am up to join efforts with Grace to fix it.

Please, comments needed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236427</commentid>
    <comment_count>9</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-10 10:40:01 -0700</bug_when>
    <thetext>Thanks Antonio to provide another patch. Here is what I thought.

The difference between the point with a padding or rectangle is just name difference. We should be easily to reach agreement with which direction we want to take. I don&apos;t have the strong preference. The reason I chose to use point with a padding is that it preserves the old code. So less changes to make. And I think it matches what happened on a mobile device. When user touches the screen, it is a point with a fuzzy size.

The big difference I see is as following.

In the first patch I provided, the traversing for nodeAtPoint is not stopped when the &quot;fat&quot; point intersects with the node bounds. The traversing only stops when the &quot;fat&quot; point is fully enclosed by the node bounds. In the latter patch Antonio provided, if I understand correctly, the traversing breaks when the rectangle intersects with the node bounds.

Here is an example,

&lt;div id=&quot;a&quot;&gt;
  &lt;div id=&quot;b&quot;&gt;
    &lt;div id=&quot;c&quot;&gt; one &lt;/div&gt;
    &lt;div id=&quot;d&quot;&gt; two &lt;/div&gt;
  &lt;/div&gt;
  &lt;div id=&quot;e&quot;&gt; three
  &lt;/div&gt;
&lt;/div&gt;

assuming the point is in-between &quot;one&quot; and &quot;two&quot;, and the rectangle covers half &quot;one&quot; and half &quot;two&quot;.

With the first patch, the returned node list will contain the nodes in this order, &quot;d&quot; &quot;c&quot; &quot;b&quot;. When we detect the &quot;fat&quot; point intersects with &quot;d&quot;, we continue the search as the &quot;fat&quot; point is not fully contained by &quot;d&quot;. We found &quot;c&quot;, and then go back to hit test &quot;b&quot;&apos;s background. Now the &quot;fat&quot; point is fully contained. The search stops.

If I read the latter patch correctly, the nodes returned will be in this order, &quot;d&quot; &quot;b&quot; &quot;a&quot;. When the rectangle intersects with &quot;d&quot;, it returned. Its parent &quot;b&quot; and &quot;a&quot; are added into the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236506</commentid>
    <comment_count>10</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-10 13:27:49 -0700</bug_when>
    <thetext>I have no preference, since both fit well for the needs, Grace.

&gt; The big difference I see is as following.
&gt; In the first patch I provided, the traversing for nodeAtPoint is not stopped when the &quot;fat&quot; point intersects with the node bounds. The traversing only stops when the &quot;fat&quot; point is fully enclosed by the node bounds. In the latter patch Antonio provided, if I understand correctly, the traversing breaks when the rectangle intersects with the node bounds.

If it does way, yes it should be fix{ed,able}. I will re-check now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236532</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-10 14:23:50 -0700</bug_when>
    <thetext>I like the point padding approach (Grace&apos;s patch), mainly because it&apos;s very minimally intrusive, and it lets the code read in such a way that someone just looking at point-based hit testing doesn&apos;t get confused by the &quot;area&apos; terminology.

Both patches seem to be using Vector node lists to collect the nodes.  It seems like a HashSet would be better to avoid crawling the list looking for the Node before adding it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236534</commentid>
    <comment_count>12</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-10 14:27:12 -0700</bug_when>
    <thetext>By the way, one caveat with collecting multiple nodes is that you may need to distinguish between hit test layers (e.g., background of one element vs. foreground of another).  If I&apos;m understanding this right, the patches just collect the nodes and don&apos;t really distinguish between a foreground hit and a background hit.  I suspect that information may end up being needed but am not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236560</commentid>
    <comment_count>13</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-10 15:19:23 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; By the way, one caveat with collecting multiple nodes is that you may need to distinguish between hit test layers (e.g., background of one element vs. foreground of another).  If I&apos;m understanding this right, the patches just collect the nodes and don&apos;t really distinguish between a foreground hit and a background hit.  I suspect that information may end up being needed but am not sure.

That is an interesting point. The hit test layer info may be useful when processing the nodes. But I don&apos;t know yet. 

The current traversing honors when the node is hit. So the foreground will be added first. And if background is also hit, it will be ignored.

BTW, I think the early comment of HashSet vs. Vector is valid. I will change the code in the next path.

I would like to get more feedback before providing the next path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236816</commentid>
    <comment_count>14</comment_count>
      <attachid>57980</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-11 07:24:22 -0700</bug_when>
    <thetext>Comment on attachment 57980
remove the tab

patch looks promissing, as I mentioned earlier. Some comments and questions below.

&gt; +        if (result.isRegionTest()) {
&gt; +            ASSERT(renderer()-&gt;node() || renderer()-&gt;isAnonymous());
&gt; +            result.addRawNode(renderer()-&gt;node());
&gt; +            if (!result.containedBy(x, y, boundsRect))
&gt; +                return false;
&gt; +        }

You seem to been doing this in 6 or 7 other places. Code looks exactly the same. Why not put this code in updateHitTestResult? Even less code modified in the end.

&gt; +bool HitTestResult::intersects(int x, int y, const IntRect&amp; other) const
&gt; +{
&gt; +    IntRect pointRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; +    return other.intersects(pointRect);
&gt; +}
&gt; +
&gt; +bool HitTestResult::containedBy(int x, int y, const IntRect&amp; other) const
&gt; +{
&gt; +    IntRect pointRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; +    return other.contains(pointRect);
&gt; +}
&gt; +

I would make an inline or a static method for this line:
IntRect pointRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);

&gt; +void HitTestResult::merge(const HitTestResult&amp; other)
&gt; +{
&gt; +    if (!m_innerNode &amp;&amp; other.innerNode()) {
&gt; +        m_innerNode = other.innerNode();
&gt; +        m_innerNonSharedNode = other.innerNonSharedNode();
&gt; +        m_localPoint = other.localPoint();
&gt; +        m_innerURLElement = other.URLElement();
&gt; +        m_scrollbar = other.scrollbar();
&gt; +         m_isOverWidget = other.isOverWidget();
&gt; +    }

as far as I could see, merge is only used on Region test, right? If so, i would bail out earlier here if not region test or ASSERT for safety.

Also, HitTestResult overwrites the &quot;=&quot; operator. Why not just do use it? Is it because you do not want other&apos;s m_rawNodeList to be assigned to it?

&gt; +    const Vector&lt;RefPtr&lt;Node&gt; &gt;&amp; list = other.rawNodeList();
&gt; +    Vector&lt;RefPtr&lt;Node&gt; &gt;::const_iterator last = list.end();
&gt; +    for (Vector&lt;RefPtr&lt;Node&gt; &gt;::const_iterator it = list.begin(); it != last; ++it)
&gt; +        addRawNode(it-&gt;get());
&gt; +}
&gt; +
&gt; +void HitTestResult::addRawNode(Node* node)
&gt; +{
&gt; +    if (!node)
&gt; +        return;

bail out here to if not region test?

Also, current logic only needs height and width of the padding rect . Why not use a IntSize instead of a IntRect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236865</commentid>
    <comment_count>15</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-11 09:23:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I like the point padding approach (Grace&apos;s patch), mainly because it&apos;s very minimally intrusive, and it lets the code read in such a way that someone just looking at point-based hit testing doesn&apos;t get confused by the &quot;area&apos; terminology.
&gt; 
&gt; Both patches seem to be using Vector node lists to collect the nodes.  It seems like a HashSet would be better to avoid crawling the list looking for the Node before adding it.

&gt; By the way, one caveat with collecting multiple nodes is that you may need to distinguish between hit test layers (e.g., background of one element vs. foreground of another).  If I&apos;m understanding this right, the patches just collect the nodes and don&apos;t really distinguish between a foreground hit and a background hit.  I suspect that information may end up being needed but am not sure.

About hyatt&apos;s suggestion, I have one concern: by using a Vector we
have for free the z-order (background elements are hittest&apos;ed before foreground nes- see RenderLayer::hitTestLayer). With a hash we would gain performance on adding a new node to the rawNodeList, since we would not need to traverse it to verify if it has been already added, but lose the order.

@hyatt, please correct if I am wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236870</commentid>
    <comment_count>16</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-11 09:33:25 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #11)
&gt; &gt; I like the point padding approach (Grace&apos;s patch), mainly because it&apos;s very minimally intrusive, and it lets the code read in such a way that someone just looking at point-based hit testing doesn&apos;t get confused by the &quot;area&apos; terminology.
&gt; &gt; 
&gt; &gt; Both patches seem to be using Vector node lists to collect the nodes.  It seems like a HashSet would be better to avoid crawling the list looking for the Node before adding it.
&gt; 
&gt; &gt; By the way, one caveat with collecting multiple nodes is that you may need to distinguish between hit test layers (e.g., background of one element vs. foreground of another).  If I&apos;m understanding this right, the patches just collect the nodes and don&apos;t really distinguish between a foreground hit and a background hit.  I suspect that information may end up being needed but am not sure.
&gt; 
&gt; About hyatt&apos;s suggestion, I have one concern: by using a Vector we
&gt; have for free the z-order (background elements are hittest&apos;ed before foreground nes- see RenderLayer::hitTestLayer). With a hash we would gain performance on adding a new node to the rawNodeList, since we would not need to traverse it to verify if it has been already added, but lose the order.
&gt; 
&gt; @hyatt, please correct if I am wrong.

I agree with Antonio. In my original checkin comment, I mentioned that all the Nodes are ordered based on z-order. This is important for the caller to filter through them to find the final Node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236872</commentid>
    <comment_count>17</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-11 09:42:06 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 57980 [details])
&gt; patch looks promissing, as I mentioned earlier. Some comments and questions below.
&gt; 
&gt; &gt; +        if (result.isRegionTest()) {
&gt; &gt; +            ASSERT(renderer()-&gt;node() || renderer()-&gt;isAnonymous());
&gt; &gt; +            result.addRawNode(renderer()-&gt;node());
&gt; &gt; +            if (!result.containedBy(x, y, boundsRect))
&gt; &gt; +                return false;
&gt; &gt; +        }
&gt; 
&gt; You seem to been doing this in 6 or 7 other places. Code looks exactly the same. Why not put this code in updateHitTestResult? Even less code modified in the end.
&gt; 

This is only done when we test two rectangle intersection. If updateHitTestResult is called as a result of nodeAtPoint() return true or similar, we won&apos;t do this.

Also we need to do rectangle containedBy test to decide whether it will continue the traverse or break. The rect is not available in all the cases.

&gt; &gt; +bool HitTestResult::containedBy(int x, int y, const IntRect&amp; other) const
&gt; &gt; +{
&gt; &gt; +    IntRect pointRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; &gt; +    return other.contains(pointRect);
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; I would make an inline or a static method for this line:
&gt; IntRect pointRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; 

Sure, inline private method is fine.

&gt; &gt; +void HitTestResult::merge(const HitTestResult&amp; other)
&gt; &gt; +{
&gt; &gt; +    if (!m_innerNode &amp;&amp; other.innerNode()) {
&gt; &gt; +        m_innerNode = other.innerNode();
&gt; &gt; +        m_innerNonSharedNode = other.innerNonSharedNode();
&gt; &gt; +        m_localPoint = other.localPoint();
&gt; &gt; +        m_innerURLElement = other.URLElement();
&gt; &gt; +        m_scrollbar = other.scrollbar();
&gt; &gt; +         m_isOverWidget = other.isOverWidget();
&gt; &gt; +    }
&gt; 
&gt; as far as I could see, merge is only used on Region test, right? If so, i would bail out earlier here if not region test or ASSERT for safety.
&gt; 

Done.

&gt; Also, HitTestResult overwrites the &quot;=&quot; operator. Why not just do use it? Is it because you do not want other&apos;s m_rawNodeList to be assigned to it?
&gt; 

Merge is combination while &quot;=&quot; is replacement.

&gt; &gt; +void HitTestResult::addRawNode(Node* node)
&gt; &gt; +{
&gt; &gt; +    if (!node)
&gt; &gt; +        return;
&gt; 
&gt; bail out here to if not region test?
&gt; 

Done.

&gt; Also, current logic only needs height and width of the padding rect . Why not use a IntSize instead of a IntRect?

Which IntRect do you refer to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236920</commentid>
    <comment_count>18</comment_count>
      <attachid>57980</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-11 11:10:07 -0700</bug_when>
    <thetext>Comment on attachment 57980
remove the tab

&gt; +bool HitTestResult::intersects(int x, int y, const IntRect&amp; other) const
&gt; +{
&gt; +    IntRect pointRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; +    return other.intersects(pointRect);
&gt; +}

Do you really need pass &apos;x&apos; and &apos;y&apos; for intersects? The are the same as the original hit test point it seems.

maybe:

bool HitTestResult::intersects(const IntRect&amp; other) const
{
    IntRect pointRect(m_point.x() - m_pointPadding.width(), m_point.y() - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
    return other.intersects(pointRect);
}

with call sites changed to pass just the &apos;other&apos; rect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237005</commentid>
    <comment_count>19</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-11 13:31:51 -0700</bug_when>
    <thetext>ListHashSet lets you preserve ordering while still having hash lookups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237389</commentid>
    <comment_count>20</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-12 18:15:36 -0700</bug_when>
    <thetext>
&gt; Do you really need pass &apos;x&apos; and &apos;y&apos; for intersects? The are the same as the original hit test point it seems.
&gt; 

I believe I do. Most of the time, &quot;x&quot; and &quot;y&quot; are passed into nodeAtPoint as they have been translated to local. Otherwise, the original code can always get x/y from HitTestResult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237390</commentid>
    <comment_count>21</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-12 18:16:13 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; ListHashSet lets you preserve ordering while still having hash lookups.

Sounds good. I will use it in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237677</commentid>
    <comment_count>22</comment_count>
      <attachid>58617</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-13 20:08:04 -0700</bug_when>
    <thetext>Created attachment 58617
updated patch based on the comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237678</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-13 20:11:08 -0700</bug_when>
    <thetext>Attachment 58617 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/HitTestResult.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237835</commentid>
    <comment_count>24</comment_count>
      <attachid>58617</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-14 08:27:51 -0700</bug_when>
    <thetext>Comment on attachment 58617
updated patch based on the comment

Good progresses! Please see some more questions and comments below.

&gt; +bool HitTestResult::addRawNodeForRegionTest(Node* node, int x, int y, const IntRect&amp; rect)
&gt; +{
&gt; +    if (!isRegionTest() || !node)
&gt; +        return false;
&gt; +
&gt; +    m_rawNodeList.add(node);
&gt; +
&gt; +    return !rect.contains(pointRect(x, y));
&gt; +}

I&apos;d add a comment here explaning why it is important to return true only if rect encloses pointRect(x,y): because call side can stop hittest in such cases.

&gt; +    IntSize pointPadding() const { return m_pointPadding; }

maybe just padding()?

&gt; +    IntRect pointRect(int x, int y) const;
&gt; +    IntRect pointRect(const IntPoint&amp;) const;

maybe rename these to hit{Area,Region}FromPoint ? pointRect is kinda meaningless.

&gt; +inline IntRect HitTestResult::pointRect(int x, int y) const
&gt; +{
&gt; +    return IntRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; +}

hum, I missed the point on why +1 here. Could you explain? If that for cases when padding is IntSize(0,0)

if that is the case, just set it to IntSize(1,1) in the point-only constructor.

HitTestResult::HitTestResult(const IntPoint&amp; point)
    : m_point(point)
    , m_padding(1, 1)
    , m_isOverWidget(false)
{
}


I will work on tests on top of this one for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237843</commentid>
    <comment_count>25</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-14 08:41:50 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 58617 [details])
&gt; Good progresses! Please see some more questions and comments below.
&gt; 
&gt; &gt; +bool HitTestResult::addRawNodeForRegionTest(Node* node, int x, int y, const IntRect&amp; rect)
&gt; &gt; +{
&gt; &gt; +    if (!isRegionTest() || !node)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    m_rawNodeList.add(node);
&gt; &gt; +
&gt; &gt; +    return !rect.contains(pointRect(x, y));
&gt; &gt; +}
&gt; 
&gt; I&apos;d add a comment here explaning why it is important to return true only if rect encloses pointRect(x,y): because call side can stop hittest in such cases.
&gt; 

I was thinking of adding a comment in the header file. But I noticed that most of the WebKit methods do not have comments. Not sure whether it is style or not. Anyway, I will add one in the header file for this. 

&gt; &gt; +    IntSize pointPadding() const { return m_pointPadding; }
&gt; 
&gt; maybe just padding()?
&gt; 

I assume you meant both variable and method name. Sure I can change it if it makes more sense.

&gt; &gt; +    IntRect pointRect(int x, int y) const;
&gt; &gt; +    IntRect pointRect(const IntPoint&amp;) const;
&gt; 
&gt; maybe rename these to hit{Area,Region}FromPoint ? pointRect is kinda meaningless.
&gt; 

Done.

&gt; &gt; +inline IntRect HitTestResult::pointRect(int x, int y) const
&gt; &gt; +{
&gt; &gt; +    return IntRect(x - m_pointPadding.width(), y - m_pointPadding.height(), 2 * m_pointPadding.width() + 1, 2 * m_pointPadding.height() + 1);
&gt; &gt; +}
&gt; 
&gt; hum, I missed the point on why +1 here. Could you explain? If that for cases when padding is IntSize(0,0)
&gt; 

As IntRect is left inclusive and right exclusive, seeing IntRect::contains(x, y), I think we should do (2 * padding + 1).

&gt; if that is the case, just set it to IntSize(1,1) in the point-only constructor.
&gt; 
&gt; HitTestResult::HitTestResult(const IntPoint&amp; point)
&gt;     : m_point(point)
&gt;     , m_padding(1, 1)
&gt;     , m_isOverWidget(false)
&gt; {
&gt; }
&gt; 
&gt; 
&gt; I will work on tests on top of this one for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237858</commentid>
    <comment_count>26</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-14 09:31:04 -0700</bug_when>
    <thetext>Off topic question. I try to run &quot;check-webkit-style&quot; myself. But I get the following error. Anyone know how to fix it? Thanks in advance.

$ WebKitTools/Scripts/check-webkit-style 
Traceback (most recent call last):
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 51, in ?
    from webkitpy.style_references import detect_checkout
  File &quot;/Development/appleWebKit/WebKitTools/Scripts/webkitpy/style_references.py&quot;, line 56
    return None if scm is None else WebKitCheckout(scm)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237859</commentid>
    <comment_count>27</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-06-14 09:33:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Off topic question. I try to run &quot;check-webkit-style&quot; myself. But I get the following error. Anyone know how to fix it? Thanks in advance.
&gt; 
&gt; $ WebKitTools/Scripts/check-webkit-style 
&gt; Traceback (most recent call last):
&gt;   File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 51, in ?
&gt;     from webkitpy.style_references import detect_checkout
&gt;   File &quot;/Development/appleWebKit/WebKitTools/Scripts/webkitpy/style_references.py&quot;, line 56
&gt;     return None if scm is None else WebKitCheckout(scm)

It looks like you&apos;re not in (the top directory of) the WebKit source when you&apos;re running the command.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237863</commentid>
    <comment_count>28</comment_count>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-14 09:36:23 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; It looks like you&apos;re not in (the top directory of) the WebKit source when you&apos;re running the command.

Thanks for the prompt reply. I am at the directory where I call the other script, like &quot;WebKitTools/Scripts/build-webkit&quot;. Any other thing I should try?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237873</commentid>
    <comment_count>29</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-06-14 09:47:54 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; It looks like you&apos;re not in (the top directory of) the WebKit source when you&apos;re running the command.
&gt; 
&gt; Thanks for the prompt reply. I am at the directory where I call the other script, like &quot;WebKitTools/Scripts/build-webkit&quot;. Any other thing I should try?

Ping David Levin on IRC?  Are you passing any paths on the command line?  Review &quot;check-webkit-style -h&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237879</commentid>
    <comment_count>30</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-14 10:00:56 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I was thinking of adding a comment in the header file. But I noticed that most of the WebKit methods do not have comments. Not sure whether it is style or not. Anyway, I will add one in the header file for this. 

This is not a good convention to follow. Please add comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237902</commentid>
    <comment_count>31</comment_count>
      <attachid>58669</attachid>
    <who name="Grace Kloba">klobag</who>
    <bug_when>2010-06-14 10:42:31 -0700</bug_when>
    <thetext>Created attachment 58669
updated patch based on the comment

I still have trouble running check-webkit-style script. Still wait for answer from IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243163</commentid>
    <comment_count>32</comment_count>
      <attachid>59789</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-25 13:15:22 -0700</bug_when>
    <thetext>Created attachment 59789
patch v1 - feature + tests

This new patch (named &apos;v1&apos;) comprises previous work done by Grace (see obsolete patches), as well as a testing infrastructure for the rect-based hit test feature.

As ways to expose the functionality, the patch:

- adds a nodesFromRect method to the Document class, exposing the funcionality to the DOM. Method returns a NodeList with all nodes that intersect the given hit-tested area.
- extends hitTestResultAtPoint method of the EventHandler with an extra &apos;padding&apos; parameter, defaulting to IntSize(0,0). The rect-based hit test is performed when a non-zero padding is passed in.

If padding is IntSize(0,0) or omitted, point based HitTest is performed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243173</commentid>
    <comment_count>33</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-06-25 13:32:32 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=59789) [details]
&gt; patch v1 - feature + tests

Things yet to be done (probably in follow up work):

- Adds more test coverage for:
* transformed content case;
* &lt;iframe&gt; hit test case;
* etc.

- refine our DOM API for this. It is currently Document::nodesFromRect(int x, int y, int horizontalPadding, int verticalPaddin), taking vertical and horizontal padding values.

fwiw, firefox&apos; is similarly padding-based, but takes padding for each of the four directions, and looks like:

nsIDOMNodeList nodesFromRect(in float aX, in float aY, in float aTopSize,  in float aRightSize, in float aBottomSize, in float aLeftSize, ...);

On IRC, there was a brief discussion between Hyatt and I about what would be the ideal API. Maybe rect coordinates (i.e. x, y, width and height).

Again I think these could come in follow up bugs, as the feature gets more mature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243220</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-25 15:12:28 -0700</bug_when>
    <thetext>Attachment 59789 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3339708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247327</commentid>
    <comment_count>35</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-06 22:55:59 -0700</bug_when>
    <thetext>So I have one pending issue before uploading a newer version of the patch.

The point is: in the current hit test implementation (point based) the logic is that it performs the hit test in a top-down recursive way (from higher to lower layers), and &quot;stops&quot; when the hit test point is contained by a RenderXXX area. 

For example, @nodeAtPoint from RenderBox.cpp: 

...
// Check our bounds next. For this purpose always assume that we can only be hit in the
// foreground phase (which is true for replaced elements like images).
if ( ... &amp;&amp; IntRect(tx, ty, width(), height()).contains(xPos, yPos)) {
    updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty));
    return true;
}
...

Note the use of &quot;contains&quot;. If the hit point is is contained by the current node boundary, hit test stops (returns &apos;true&apos;), it is a success and the current node() is the hit one!

However for the rect based hit test, we can not just return true if hit test rect intersects the boundary of the current node being tested. Reason: we have to continue hit testing to see if it intersecs other nodes. So we return  normally false. (the exception is when the hit test rect is fully enclosed by
the node being tested, when then true is returned and the hit test stops).

The problem is that in RenderLayer::hitTestContests we have

bool RenderLayer::hitTestContents(...)
{
  if (!renderer()-&gt;hitTest(request, result, hitTestPoint,
                          layerBounds.x() - renderBoxX(),
                          layerBounds.y() - renderBoxY(), 
                          hitTestFilter)) {
      // It&apos;s wrong to set innerNode, but then claim that you didn&apos;t hit anything.
      ASSERT(!result.innerNode());
      return false;
  }
  ...
}

this ASSERT controverses the rect-based hit test, once we in such mode,  returning &apos;false&apos; does not necesseraly mean that nothing was hit.

Would it make sense to modify the assert condition, so we do not hit that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247610</commentid>
    <comment_count>36</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-07 09:56:37 -0700</bug_when>
    <thetext>(In reply to comment #35)

&gt; The problem is that in RenderLayer::hitTestContests we have
&gt; 
&gt; bool RenderLayer::hitTestContents(...)
&gt; {
&gt;   if (!renderer()-&gt;hitTest(request, result, hitTestPoint,
&gt;                           layerBounds.x() - renderBoxX(),
&gt;                           layerBounds.y() - renderBoxY(), 
&gt;                           hitTestFilter)) {
&gt;       // It&apos;s wrong to set innerNode, but then claim that you didn&apos;t hit anything.
&gt;       ASSERT(!result.innerNode());
&gt;       return false;
&gt;   }
&gt;   ...
&gt; }
&gt; 
&gt; this ASSERT controverses the rect-based hit test, once we in such mode,  returning &apos;false&apos; does not necesseraly mean that nothing was hit.
&gt; 
&gt; Would it make sense to modify the assert condition, so we do not hit that?

Well, the question is what does result.innerNode() mean when doing area hit testing? Since you&apos;re returning a list of nodes, I don&apos;t see why you&apos;d bother with result.innerNode() at all.

So you may need more conditional behavior inside the hit testing code when doing area hit testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247725</commentid>
    <comment_count>37</comment_count>
      <attachid>60772</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-07 13:34:59 -0700</bug_when>
    <thetext>Created attachment 60772
patch v2 - feature + tests

Patch improves v1 in:

- stability - fix an ASSERT condition leding tests to fail in debug bug.
- quality - better comments in the code, and more detailed ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247746</commentid>
    <comment_count>38</comment_count>
      <attachid>60772</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-07-07 14:10:20 -0700</bug_when>
    <thetext>Comment on attachment 60772
patch v2 - feature + tests

How much are HitTestResults copied?  I think we try to avoid copying them, but we&apos;ll definitely get more expensive with having to copy m_rawNodeList now.&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248161</commentid>
    <comment_count>39</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-08 06:22:50 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 60772 [details])
&gt; How much are HitTestResults copied?  I think we try to avoid copying them, but we&apos;ll definitely get more expensive with having to copy m_rawNodeList now.&apos;

In the common case (current point based hit test) there is no behavior change at all. So it will be copied as much as it&apos;s being copied now (so same cost plus the cost of copying an empty ListHashSet). Is that empty object your concern? If so, I&apos;d be glad to measure any possible perf regression on it.

For the rect based hit test case we are adding, we are not copying HitTestResult objects, but using an operation we called &apos;append&apos;. e.g. in x.append(y) the listhashset of y is appended to x&apos;s. O(n) cost.

Let me know if I misunderstood your concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253525</commentid>
    <comment_count>40</comment_count>
      <attachid>62029</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-19 19:17:13 -0700</bug_when>
    <thetext>Created attachment 62029
patch v3 - feature + tests

Difference from patch v2 (attachment 60772):

- Fixed a bug where input elements were not being hit at all: HitTestResult::addRawNodeForRegionTest is no-op if null&apos;ed Node is passed as parameter, however it was returning &apos;false&apos;, which means that hit test should stop. Now it is returning the proper value (i.e. true) and subsequent hit test processing keeps happenning.

- Fixed an unconditional behavior change in EventHandler::hitTestResultAtPoint: receiving a zero-padding (IntSize(0,0)) still performs a rect-based hit test. The logic was then adapted to consider negative paddings as invalid for rect hit testing purposes.

- Better changeLog entry: it is now more descriptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253533</commentid>
    <comment_count>41</comment_count>
      <attachid>62029</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-07-19 20:06:30 -0700</bug_when>
    <thetext>Comment on attachment 62029
patch v3 - feature + tests

LayoutTests/fast/dom/resources/nodesFromRect.js:15
 +    var nodes = document.nodesFromRect(x, y, hPadding, vPadding, true /* ignoreClipping */);
isn&apos;t this centerX and centerY? 

WebCore/dom/Document.cpp:1038
 +  // * make it receive a real Rect, i.e. nodesFromRect(x, y, w, h);
why Rect with uppercase?

WebCore/dom/Document.cpp:1039
 +  // * make it receive the expading size of each direction separatedly,
a d too much in separately

WebCore/dom/Document.cpp:1055
 +      float zoomFactor = frameView-&gt;pageZoomFactor();
What about scale? The QGraphicsWebView can have a scale set which will be applied to the QPainter - will that work?

WebCore/dom/Document.cpp:1056
 +      IntPoint point = roundedIntPoint(FloatPoint(x * zoomFactor  + view()-&gt;scrollX(), y * zoomFactor + view()-&gt;scrollY()));
Is there any need to specify that it is an int point?

WebCore/dom/Document.cpp:1059
 +      if (!ignoreClipping &amp;&amp; !frameView-&gt;visibleContentRect().intersects(IntRect(point, padding)))
Maybe a simple comment over complex if&apos;s like this would make the code a bit easily understandable

WebCore/dom/Document.h:305
 +      PassRefPtr&lt;NodeList&gt; nodesFromRect(int x, int y, int hPadding, int vPadding, bool ignoreClipping) const;
centerX, centerY?

WebCore/page/EventHandler.h:108
 +      HitTestResult hitTestResultAtPoint(const IntPoint&amp;, bool allowShadowContent, bool ignoreClipping = false, HitTestScrollbars scrollbars = DontHitTestScrollbars, const IntSize&amp; padding = IntSize(-1, -1));
I believe that we have something like IntPoint::zero() or zeroPoint or so, maybe we want a special constructor for this? Darin?

WebCore/rendering/HitTestResult.cpp:56
 +  HitTestResult::HitTestResult(const IntPoint&amp; point, const IntSize&amp; padding)
centerPoint?

WebCore/rendering/HitTestResult.h:45
 +      // hit test.
Just write that on one line

WebCore/rendering/HitTestResult.h:59
 +      bool isRegionTest() const { return m_isRegionTest &amp;&amp; hasValidPadding(); }
You talk about rect based hit testing, and here you call it region? Is it region or is it rect?

WebCore/rendering/HitTestResult.h:97
 +      inline bool hasValidPadding() const { return m_padding.width() &gt;= 0 &amp;&amp; m_padding.height() &gt;= 0; }
wouldn&apos;t hasPadding be sufficient? Padding, region, rect... it is a bit confusing

WebCore/rendering/RenderBlock.cpp:3756
 +          // TODO: isPointInOverflowControl() doesn&apos;t handle region test yet.
I think we only allow FIXME:

WebCore/rendering/RenderBlock.cpp:3847
 +                  hitTestContents(request, result, x, y, finalX, finalY, hitTestAction);
no return needed here? 

WebCore/rendering/RenderLineBoxList.cpp:256
 +          if (y + result.padding().height() &gt;= ty + curr-&gt;root()-&gt;topVisibleOverflow() &amp;&amp; y - result.padding().height() &lt; ty + curr-&gt;root()-&gt;bottomVisibleOverflow()) {
there lines are quite long

WebCore/rendering/RenderSVGRoot.cpp:323
 +              // TODO: nodeAtFloatPoint() doesn&apos;t handle region test yet.
I believe we only use FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254252</commentid>
    <comment_count>42</comment_count>
      <attachid>62175</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-21 06:31:06 -0700</bug_when>
    <thetext>Created attachment 62175
patch v4 - feature + tests

Adressing Kenneth&apos;s comments.

&gt; WebCore/dom/Document.cpp:1055
&gt;  +      float zoomFactor = frameView-&gt;pageZoomFactor();
&gt; What about scale? The QGraphicsWebView can have a scale set which will be applied to the QPainter - will that work?

I do not know we have to scale the padding area based on the current zoom factor. The centerPoint has to consider scale, not the padding (since our thumb and index finger do not enlarge :)
 
&gt; WebCore/dom/Document.cpp:1056
&gt;  +      IntPoint point = roundedIntPoint(FloatPoint(x * zoomFactor  + view()-&gt;scrollX(), y * zoomFactor + view()-&gt;scrollY()));
&gt; Is there any need to specify that it is an int point?

All hit testing system is based on int value, so we cast back it from FroatPoint to IntPoint.

&gt; WebCore/page/EventHandler.h:108
&gt;  +      HitTestResult hitTestResultAtPoint(const IntPoint&amp;, bool allowShadowContent, bool ignoreClipping = false, HitTestScrollbars scrollbars = DontHitTestScrollbars, const IntSize&amp; padding = IntSize(-1, -1));
&gt; I believe that we have something like IntPoint::zero() or zeroPoint or so, maybe we want a special constructor for this? Darin?

I tried to convince Darin Adler about the usage of a static IntSize::invalid { return IntSize(-1, -1); } and IntSize::isValid() const { return m_width &gt;= 0 &amp;&amp; m_height &gt;= 0; } without success. See bug 42653.

I left it as it was.
 
&gt; WebCore/rendering/HitTestResult.h:59
&gt;  +      bool isRegionTest() const { return m_isRegionTest &amp;&amp; hasValidPadding(); }
&gt; You talk about rect based hit testing, and here you call it region? Is it region or is it rect?

You are right. I change any reference to region to rectBased. For example: isRegionTest became isRectBasedTest
 
&gt; WebCore/rendering/HitTestResult.h:97
&gt;  +      inline bool hasValidPadding() const { return m_padding.width() &gt;= 0 &amp;&amp; m_padding.height() &gt;= 0; }
&gt; wouldn&apos;t hasPadding be sufficient? Padding, region, rect... it is a bit confusing

This method has gone.

&gt; WebCore/rendering/RenderBlock.cpp:3847
&gt;  +                  hitTestContents(request, result, x, y, finalX, finalY, hitTestAction);
&gt; no return needed here? 

No return needed here, since the caller site handles it.

Furthers changes:

1) Renamed HitTestResult::addRawNodeForRegionTest to addNodeToRectBasedTestResult
2) Renamed HitTestResult::isRegionTest to isRectBasedTest
3) Renamed HitTestResult::rawNodeList to rectBasedTestResult
4) Renamed HitTestResult::regionFromPoint to rectFromPoint
5) Made addRawNodeForRegionTest no-op in case of non rect-based hit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254459</commentid>
    <comment_count>43</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-21 12:41:08 -0700</bug_when>
    <thetext>Guys, ping review?

Bots failed to apply attachment 62175 due to ChangeLog problems, but as the previous one it is building cross-port locally.

By the way, to keep working progressing, I&apos;ve started the follow up work of this patch, while it sits waiting for review. Find it in [1].

[1] http://gitorious.org/~tonikitoo/qtwebkit/tonikitoos-clone/commits/smartTap

It includes a prototype of QtWebKit making use of this feature. See TouchFixer commit. It is simple and pretty functional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254873</commentid>
    <comment_count>44</comment_count>
      <attachid>62313</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-22 10:43:38 -0700</bug_when>
    <thetext>Created attachment 62313
patch v5 - feature + tests

- Fixed 3 failing layout tests with v4 (attachment 62175): Assigning HitTest::padding to IntSize(-1, -1) - invalid - for non rect-based hit tests.
* editing/pasteboard/files-during-page-drags.html
* fast/css/nested-layers-with-hover.html
* fast/events/onclick-list-marker.html

No regression on Mac on the layout test suite!

- update to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255500</commentid>
    <comment_count>45</comment_count>
      <attachid>62453</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-23 12:11:17 -0700</bug_when>
    <thetext>Created attachment 62453
patch v6 - feature + tests

Changes from v5:

1) it avoids copying unnecessery class members by not using the copy constructor when applicable. It uses constructions like:

HitTestResult tempResult(result.point(), result.padding());
instead of:
HitTestResult tempResult(result); &lt;- copy constructor

2) On assignment and copy constructor, the ListHashSet only gets copied if it is a rect based hit test, for performance reasons.

It specially matches the concern expressed in comment #38.

Again for the comon case of non</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255510</commentid>
    <comment_count>46</comment_count>
      <attachid>62453</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-07-23 12:25:24 -0700</bug_when>
    <thetext>Comment on attachment 62453
patch v6 - feature + tests

&quot;void static dumpHitTestResult(const HitTestResult&amp; result)&quot;

I really don&apos;t like this function sitting in Document.  It has nothing to do with Document.  I&apos;d prefer it either be removed or put in more of a debugging file (if it&apos;s a bit like render tree dumping especially).  It really seems to me like it should just be removed, especially if nodesFromRect is testable via layout tests.

Let&apos;s use 0,0 as the default value for padding instead of -1,-1 and make rect-based hit testing be activated if either value of padding is &gt; 0 (rather than &gt;= 0).  We don&apos;t want to fall into rect-based hit testing because somebody passed 0 values for padding in to these functions.

Everything else looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255512</commentid>
    <comment_count>47</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-07-23 12:29:22 -0700</bug_when>
    <thetext>And to clarify, I still think padding of 0 should work with nodesForRect, which means you have to special case the 0 padding case (or just hack it so you force rect based testing on for that hit test by setting the boolean explicitly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255513</commentid>
    <comment_count>48</comment_count>
      <attachid>62453</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-07-23 12:31:32 -0700</bug_when>
    <thetext>Comment on attachment 62453
patch v6 - feature + tests

Another question... shouldn&apos;t the padding be unsigned?  It seems like you shouldn&apos;t allow negative padding values at the IDL level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256032</commentid>
    <comment_count>49</comment_count>
      <attachid>62569</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-26 07:16:25 -0700</bug_when>
    <thetext>Created attachment 62569
patch v7 - feature + tests

(In reply to comment #46)
&gt; (From update of attachment 62453 [details])
&gt; &quot;void static dumpHitTestResult(const HitTestResult&amp; result)&quot;
&gt; I really don&apos;t like this function sitting in Document.  It has nothing to do with Document.  I&apos;d prefer it either be removed or ...

Removed. It was useful for debuggind, and does not need to get checked in.

&gt; Let&apos;s use 0,0 as the default value for padding instead of -1,-1 and make rect-based hit testing be activated if either value of padding is &gt; 0 (rather than &gt;= 0).  We don&apos;t want to fall into rect-based hit testing because somebody passed 0 values for padding in to these functions.

Done: default 0,0 padding wont trigger a rect-based hit test anymore.

&gt; And to clarify, I still think padding of 0 should work with nodesForRect, which means you have to special case the 0 padding case (or just hack it so you force rect based testing on for that hit test by setting the boolean explicitly).

Added a special &quot;handler&quot; for nodesFromRect(x, y, 0, 0) as suggested: handleZeroPadding as a private method to Document class.

(In reply to comment #48)
&gt; Another question... shouldn&apos;t the padding be unsigned?  It seems like you shouldn&apos;t allow negative padding values at the IDL level.

Done.

&gt; Everything else looks good to me.

Thank you, Dave.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256912</commentid>
    <comment_count>50</comment_count>
      <attachid>62761</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-27 15:53:45 -0700</bug_when>
    <thetext>Created attachment 62761
(commit=r64272, r=hyatt )patch v7.1 - feature + tests

Same as patch v2 (attachment 62569) but fixed a typo in a comment.

see comment $49 for summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257274</commentid>
    <comment_count>51</comment_count>
      <attachid>62761</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-07-28 11:46:37 -0700</bug_when>
    <thetext>Comment on attachment 62761
(commit=r64272, r=hyatt )patch v7.1 - feature + tests

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257658</commentid>
    <comment_count>52</comment_count>
      <attachid>62761</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-07-29 06:57:37 -0700</bug_when>
    <thetext>Comment on attachment 62761
(commit=r64272, r=hyatt )patch v7.1 - feature + tests

Clearing flags on attachment: 62761

Committed r64272: &lt;http://trac.webkit.org/changeset/64272&gt;

$ git svn dcommit 
Committing to http://svn.webkit.org/repository/webkit/trunk ...


	M	LayoutTests/ChangeLog
	M	LayoutTests/fast/dom/Window/window-properties-expected.txt
	A	LayoutTests/fast/dom/nodesFromRect-basic-expected.txt
	A	LayoutTests/fast/dom/nodesFromRect-basic.html
	A	LayoutTests/fast/dom/resources/nodesFromRect.css
	A	LayoutTests/fast/dom/resources/nodesFromRect.js
	M	LayoutTests/platform/qt/fast/dom/Window/window-properties-expected.txt
	M	WebCore/ChangeLog
	M	WebCore/WebCore.exp.in
	M	WebCore/config.h
	M	WebCore/dom/Document.cpp
	M	WebCore/dom/Document.h
	M	WebCore/dom/Document.idl
	M	WebCore/page/EventHandler.cpp
	M	WebCore/page/EventHandler.h
	M	WebCore/rendering/EllipsisBox.cpp
	M	WebCore/rendering/HitTestResult.cpp
	M	WebCore/rendering/HitTestResult.h
	M	WebCore/rendering/InlineFlowBox.cpp
	M	WebCore/rendering/InlineTextBox.cpp
	M	WebCore/rendering/RenderBlock.cpp
	M	WebCore/rendering/RenderBox.cpp
	M	WebCore/rendering/RenderImage.cpp
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderLineBoxList.cpp
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderTable.cpp
	M	WebCore/rendering/RenderTableSection.cpp
	M	WebCore/rendering/RenderWidget.cpp
Committed r64272</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259946</commentid>
    <comment_count>53</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-04 03:09:49 -0700</bug_when>
    <thetext>Revision r64272 cherry-picked into qtwebkit-2.1 with commit bcfea5aad4658f9f84af4459cda7989ca45f6ebc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260069</commentid>
    <comment_count>54</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-04 09:59:00 -0700</bug_when>
    <thetext>I&apos;m in the process of merging this with the Android hit-testing and noticed the checks for &gt;= 0 in HitTestResult::paddingWidth() and HitTestResult::paddingHeight(). It looks to me like these checks are superfluous, as in the HitTestResult constructor, m_padding is not set if either the width or height of the supplied padding is &lt; 0. If not set, the width and height default to 0. So these checks will always be true.

Am I missing something?

Thanks,
Steve</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260085</commentid>
    <comment_count>55</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-08-04 10:19:17 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; I&apos;m in the process of merging this with the Android hit-testing and noticed the checks for &gt;= 0 in HitTestResult::paddingWidth() and HitTestResult::paddingHeight(). It looks to me like these checks are superfluous, as in the HitTestResult constructor, m_padding is not set if either the width or height of the supplied padding is &lt; 0. If not set, the width and height default to 0. So these checks will always be true.
&gt; 
&gt; Am I missing something?

Hi Steve.

I think you are right. This bits of code might likely missing to be updated after the last suggestion I addressed from Hyatt. I will check more carefully now, and fix that in a follow up bug, if it turns our unneeded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260349</commentid>
    <comment_count>56</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-08-04 19:51:10 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #54)
&gt; &gt; I&apos;m in the process of merging this with the Android hit-testing and noticed the checks for &gt;= 0 in HitTestResult::paddingWidth() and HitTestResult::paddingHeight(). It looks to me like these checks are superfluous, as in the HitTestResult constructor, m_padding is not set if either the width or height of the supplied padding is &lt; 0. If not set, the width and height default to 0. So these checks will always be true.
&gt; &gt; 
&gt; &gt; Am I missing something?
&gt; 
&gt; Hi Steve.
&gt; 
&gt; I think you are right. This bits of code might likely missing to be updated after the last suggestion I addressed from Hyatt. I will check more carefully now, and fix that in a follow up bug, if it turns our unneeded.

Filed bug 43534.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284121</commentid>
    <comment_count>57</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-09-23 17:08:52 -0700</bug_when>
    <thetext>Just a heads up here: bug 46336 is about to change the Document::nodesFromRect API to be more flexible: instead of receiving a IntSize as &apos;padding&apos;, one will be able to specify the padding for each four directions (top, right, bottom and left).

HitTestResult will also be adjusted accordingly.

 See also the thread https://lists.webkit.org/pipermail/webkit-dev/2010-September/014457.html in webkit-dev.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57979</attachid>
            <date>2010-06-06 12:37:53 -0700</date>
            <delta_ts>2010-06-06 12:44:19 -0700</delta_ts>
            <desc>first in-progress patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29682</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMDYgIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhh
bmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcK
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuYmFz
ZS5leHA6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjppbnRlcnNlY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmNvbnRhaW5lZEJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmFkZFJhd05vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpwb2ludFBhZGRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNSZWdpb25UZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OnJhd05vZGVMaXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0TGlzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQp
OgorCiAyMDEwLTA2LTA2ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNp
b24gNjA3NjEpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNCw3ICsyMTQsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZs
CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9sbEV2ZW50RXYKIF9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJOU18xOFBsYXRmb3JtV2hlZWxF
dmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoYW5kbGVUZXh0SW5wdXRFdmVudEVS
S05TXzZTdHJpbmdFUE5TXzVFdmVudEViYgotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhp
dFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFy
c0UKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05T
XzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFUktOU183SW50U2l6ZUUKIF9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRm
b3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJl
bGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVu
dEhhbmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODU4LDkgKzg1OCw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjph
bGxvd0RIVE1MRHJhZyhib29sJiAKIH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQog
ICAgIAotSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzKQorSGl0VGVzdFJlc3Vs
dCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RT
Y3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzLCBjb25zdCBJbnRTaXplJiBwb2ludFBhZGRpbmcpCiB7
Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOworICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0KHBvaW50LCBwb2ludFBhZGRpbmcpOwogICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaW50IGhpdFR5cGUgPSBIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwpAQCAtODgyLDcgKzg4
Miw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWwKICAgICAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsKICAgICAg
ICAgSW50UG9pbnQgd2lkZ2V0UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKS54KCkgKyB2aWV3LT5z
Y3JvbGxYKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlckxlZnQoKSAtIHJlbmRlcldpZGdldC0+cGFk
ZGluZ0xlZnQoKSwgCiAgICAgICAgICAgICByZXN1bHQubG9jYWxQb2ludCgpLnkoKSArIHZpZXct
PnNjcm9sbFkoKSAtIHJlbmRlcldpZGdldC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJXaWRnZXQtPnBh
ZGRpbmdUb3AoKSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCwgcG9pbnRQYWRkaW5nKTsKICAgICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpLT5sYXllcigpLT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KGhpdFR5cGUpLCB3aWRnZXRIaXRU
ZXN0UmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gd2lkZ2V0SGl0VGVzdFJlc3VsdDsKIApAQCAt
OTA0LDcgKzkwNCw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWwK
ICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAgICAg
ICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSByZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93KHJl
c3VsdC5wb2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9
IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2lu
dChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVz
dFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3Jl
Q2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzLCBwb2ludFBhZGRpbmcpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gNjA3NjEpCisr
KyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29v
bkluUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJl
c3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9v
bCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLCBIaXRUZXN0U2Nyb2xsYmFycyBzY3JvbGxiYXJzID0g
RG9udEhpdFRlc3RTY3JvbGxiYXJzKTsKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRB
dFBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRI
aXRUZXN0U2Nyb2xsYmFycywgY29uc3QgSW50U2l6ZSYgcG9pbnRQYWRkaW5nID0gSW50U2l6ZSgp
KTsKIAogICAgIGJvb2wgbW91c2VQcmVzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9tb3VzZVByZXNz
ZWQ7IH0KICAgICB2b2lkIHNldE1vdXNlUHJlc3NlZChib29sIHByZXNzZWQpIHsgbV9tb3VzZVBy
ZXNzZWQgPSBwcmVzc2VkOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZp
c2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDggKzExMywxNSBAQCBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVz
dGluZygpICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCkuY29udGFpbnMoeCwg
eSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgbV93aWR0aCwg
bV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVzdWx0LmludGVy
c2VjdHMoeCwgeSwgYm91bmRzUmVjdCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlm
IChyZXN1bHQuaXNSZWdpb25UZXN0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJlcigp
LT5ub2RlKCkgfHwgcmVuZGVyZXIoKS0+aXNBbm9ueW1vdXMoKSk7CisgICAgICAgICAgICByZXN1
bHQuYWRkUmF3Tm9kZShyZW5kZXJlcigpLT5ub2RlKCkpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQuY29udGFpbmVkQnkoeCwgeSwgYm91bmRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDYwNzYxKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUy
LDEzIEBAIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG8KIHsKIH0KIAor
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0
IEludFNpemUmIHBvaW50UGFkZGluZykKKyAgICA6IG1fcG9pbnQocG9pbnQpCisgICAgLCBtX3Bv
aW50UGFkZGluZyhwb2ludFBhZGRpbmcpCisgICAgLCBtX2lzT3ZlcldpZGdldChmYWxzZSkKK3sK
K30KKwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBv
dGhlcikKICAgICA6IG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgpKQogICAgICwgbV9pbm5l
ck5vblNoYXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkpCkBAIC01OSw2ICs2Niw4
IEBAIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGUKICAgICAsIG1fbG9j
YWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCiAgICAgLCBtX2lubmVyVVJMRWxlbWVudChvdGhl
ci5VUkxFbGVtZW50KCkpCiAgICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3JvbGxiYXIoKSkKKyAg
ICAsIG1fcG9pbnRQYWRkaW5nKG90aGVyLnBvaW50UGFkZGluZygpKQorICAgICwgbV9yYXdOb2Rl
TGlzdChvdGhlci5yYXdOb2RlTGlzdCgpKQogICAgICwgbV9pc092ZXJXaWRnZXQob3RoZXIuaXNP
dmVyV2lkZ2V0KCkpCiB7CiB9CkBAIC03NSw2ICs4NCw4IEBAIEhpdFRlc3RSZXN1bHQmIEhpdFRl
c3RSZXN1bHQ6Om9wZXJhdG9yPSgKICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50
KCk7CiAgICAgbV9pbm5lclVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7CiAgICAgbV9z
Y3JvbGxiYXIgPSBvdGhlci5zY3JvbGxiYXIoKTsKKyAgICBtX3BvaW50UGFkZGluZyA9IG90aGVy
LnBvaW50UGFkZGluZygpOworICAgIG1fcmF3Tm9kZUxpc3QgPSBvdGhlci5yYXdOb2RlTGlzdCgp
OwogICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQpAQCAtMzYyLDQgKzM3Myw0NiBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29u
dGVudEVkaXRhYmxlKCkgCiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCitib29sIEhpdFRlc3RSZXN1bHQ6OmludGVyc2VjdHMoaW50IHgs
IGludCB5LCBjb25zdCBJbnRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICBJbnRSZWN0IHBvaW50
UmVjdCh4IC0gbV9wb2ludFBhZGRpbmcud2lkdGgoKSwgeSAtIG1fcG9pbnRQYWRkaW5nLmhlaWdo
dCgpLCAyICogbV9wb2ludFBhZGRpbmcud2lkdGgoKSArIDEsIDIgKiBtX3BvaW50UGFkZGluZy5o
ZWlnaHQoKSArIDEpOworICAgIHJldHVybiBvdGhlci5pbnRlcnNlY3RzKHBvaW50UmVjdCk7Cit9
CisJCitib29sIEhpdFRlc3RSZXN1bHQ6OmNvbnRhaW5lZEJ5KGludCB4LCBpbnQgeSwgY29uc3Qg
SW50UmVjdCYgb3RoZXIpIGNvbnN0Cit7CisgICAgSW50UmVjdCBwb2ludFJlY3QoeCAtIG1fcG9p
bnRQYWRkaW5nLndpZHRoKCksIHkgLSBtX3BvaW50UGFkZGluZy5oZWlnaHQoKSwgMiAqIG1fcG9p
bnRQYWRkaW5nLndpZHRoKCkgKyAxLCAyICogbV9wb2ludFBhZGRpbmcuaGVpZ2h0KCkgKyAxKTsK
KyAgICByZXR1cm4gb3RoZXIuY29udGFpbnMocG9pbnRSZWN0KTsKK30KKwordm9pZCBIaXRUZXN0
UmVzdWx0OjptZXJnZShjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKK3sKKyAgICBpZiAoIW1f
aW5uZXJOb2RlICYmIG90aGVyLmlubmVyTm9kZSgpKSB7CisgICAgICAgIG1faW5uZXJOb2RlID0g
b3RoZXIuaW5uZXJOb2RlKCk7CisgICAgICAgIG1faW5uZXJOb25TaGFyZWROb2RlID0gb3RoZXIu
aW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgICAgIG1fbG9jYWxQb2ludCA9IG90aGVyLmxvY2Fs
UG9pbnQoKTsKKyAgICAgICAgbV9pbm5lclVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7
CisgICAgICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CisgICAgICAgICBtX2lz
T3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgpOworICAgIH0KKworICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IG90aGVyLnJhd05vZGVMaXN0KCk7CisgICAgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBsYXN0ID0gbGlzdC5lbmQoKTsKKyAg
ICBmb3IgKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJl
Z2luKCk7IGl0ICE9IGxhc3Q7ICsraXQpCisgICAgICAgIGFkZFJhd05vZGUoaXQtPmdldCgpKTsK
K30KKwordm9pZCBIaXRUZXN0UmVzdWx0OjphZGRSYXdOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID46
OmNvbnN0X2l0ZXJhdG9yIGxhc3QgPSBtX3Jhd05vZGVMaXN0LmVuZCgpOworICAgIGZvciAoVmVj
dG9yPFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmF3Tm9kZUxpc3QuYmVn
aW4oKTsgaXQgIT0gbGFzdDsgKytpdCkKKyAgICAgICAgaWYgKCgqaXQpID09IG5vZGUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICBtX3Jhd05vZGVMaXN0LmFwcGVuZChub2RlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAko
cmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDEwIEBACiAjZGVmaW5lIEhpdFRlc3RSZXN1bHRfaAog
CiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNiArNDAsNyBAQCBjbGFz
cyBTdHJpbmc7CiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsKIHB1YmxpYzoKICAgICBIaXRUZXN0UmVz
dWx0KGNvbnN0IEludFBvaW50Jik7CisgICAgSGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFNpemUmKTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQm
KTsKICAgICB+SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShj
b25zdCBIaXRUZXN0UmVzdWx0Jik7CkBAIC00OSw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICBFbGVt
ZW50KiBVUkxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbm5lclVSTEVsZW1lbnQuZ2V0KCk7
IH0KICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFy
LmdldCgpOyB9CiAgICAgYm9vbCBpc092ZXJXaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX2lzT3Zl
cldpZGdldDsgfQorICAgIEludFNpemUgcG9pbnRQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
b2ludFBhZGRpbmc7IH0KKyAgICBib29sIGlzUmVnaW9uVGVzdCgpIGNvbnN0IHsgcmV0dXJuICFt
X3BvaW50UGFkZGluZy5pc0VtcHR5KCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mIHJhd05vZGVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yYXdOb2RlTGlzdDsgfQogCiAgICAg
dm9pZCBzZXRUb05vblNoYWRvd0FuY2VzdG9yKCk7CiAKQEAgLTc2LDYgKzgyLDExIEBAIHB1Ymxp
YzoKICAgICBib29sIGlzTGl2ZUxpbmsoKSBjb25zdDsKICAgICBib29sIGlzQ29udGVudEVkaXRh
YmxlKCkgY29uc3Q7CiAKKyAgICBib29sIGludGVyc2VjdHMoaW50LCBpbnQsIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5lZEJ5KGludCwgaW50LCBjb25zdCBJbnRSZWN0
JikgY29uc3Q7CisgICAgdm9pZCBtZXJnZShjb25zdCBIaXRUZXN0UmVzdWx0Jik7CisgICAgdm9p
ZCBhZGRSYXdOb2RlKE5vZGUqKTsKKwogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5l
ck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb25TaGFyZWROb2RlOwpAQCAtODQsNiAr
OTUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5l
IHdoZXJlIGluc2lkZSB0aGUgcmVuZGVyZXIgd2UgaGl0IG9uIHN1YnNlcXVlbnQgb3BlcmF0aW9u
cy4KICAgICBSZWZQdHI8RWxlbWVudD4gbV9pbm5lclVSTEVsZW1lbnQ7CiAgICAgUmVmUHRyPFNj
cm9sbGJhcj4gbV9zY3JvbGxiYXI7CisgICAgSW50U2l6ZSBtX3BvaW50UGFkZGluZzsKKyAgICBW
ZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9yYXdOb2RlTGlzdDsKICAgICBib29sIG1faXNPdmVyV2lk
Z2V0OyAvLyBSZXR1cm5zIHRydWUgaWYgd2UgYXJlIG92ZXIgYSB3aWRnZXQgKGFuZCBub3QgaW4g
dGhlIGJvcmRlci9wYWRkaW5nIGFyZWEgb2YgYSBSZW5kZXJXaWRnZXQgZm9yIGV4YW1wbGUpLgog
fTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDYwNzYx
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxMSw3ICs2MTEsNyBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0
IEhpCiB7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzaWJsZU92ZXJmbG93UmVjdCgpKTsK
ICAgICBvdmVyZmxvd1JlY3QubW92ZSh0eCwgdHkpOwotICAgIGlmICghb3ZlcmZsb3dSZWN0LmNv
bnRhaW5zKHgsIHkpKQorICAgIGlmICghcmVzdWx0LmludGVyc2VjdHMoeCwgeSwgb3ZlcmZsb3dS
ZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgY2hpbGRyZW4gZmly
c3QuCkBAIC02MjQsOCArNjI0LDE0IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGkKIAogICAgIC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMuCiAgICAgSW50UmVjdCByZWN0
KHR4ICsgbV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmICh2aXNpYmxl
VG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlmICh2aXNpYmxl
VG9IaXRUZXN0aW5nKCkgJiYgcmVzdWx0LmludGVyc2VjdHMoeCwgeSwgcmVjdCkpIHsKICAgICAg
ICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0
eCwgeSAtIHR5KSk7IC8vIERvbid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29v
cmRzIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgc3BhY2UuCisgICAgICAgIGlmIChyZXN1bHQu
aXNSZWdpb25UZXN0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJlcigpLT5ub2RlKCkg
fHwgcmVuZGVyZXIoKS0+aXNBbm9ueW1vdXMoKSk7CisgICAgICAgICAgICByZXN1bHQuYWRkUmF3
Tm9kZShyZW5kZXJlcigpLT5ub2RlKCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuY29udGFp
bmVkQnkoeCwgeSwgcmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsOCArMjY2LDE0IEBAIGJv
b2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVp
Z2h0KCkpOwotICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgaWYgKG1fdHJ1
bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJl
c3VsdC5pbnRlcnNlY3RzKHgsIHksIHJlY3QpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAg
ICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKSB7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVy
ZXIoKS0+bm9kZSgpIHx8IHJlbmRlcmVyKCktPmlzQW5vbnltb3VzKCkpOworICAgICAgICAgICAg
cmVzdWx0LmFkZFJhd05vZGUocmVuZGVyZXIoKS0+bm9kZSgpKTsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0LmNvbnRhaW5lZEJ5KHgsIHksIHJlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjA3NjEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3MzYsMTkgKzM3MzYsMjMgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VAogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4K
ICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IHZpc2libGVPdmVyZmxvd1JlY3QoKTsKICAg
ICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOwotICAgICAgICBpZiAoIW92ZXJmbG93Qm94
LmNvbnRhaW5zKF94LCBfeSkpCisgICAgICAgIGlmICghcmVzdWx0LmludGVyc2VjdHMoX3gsIF95
LCBvdmVyZmxvd0JveCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
aWYgKChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFj
dGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93
Q29udHJvbChyZXN1bHQsIF94LCBfeSwgdHgsIHR5KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgLy8gVE9ETzogaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKCkgZG9l
c24ndCBoYW5kbGUgcmVnaW9uIHRlc3QgeWV0LgorICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9u
VGVzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFkZFJhd05vZGUobm9kZSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZl
IGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgogICAgIGJvb2wgdXNl
T3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVy
KCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dD
bGlwKTsKLSAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENs
aXAoKSA/IGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKF94LCBfeSkgOiBvdmVyZmxv
d0NsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95KSk7CisgICAgYm9vbCBjaGVja0NoaWxk
cmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRyb2xDbGlwKCkgPyByZXN1bHQuaW50ZXJzZWN0cyhf
eCwgX3ksIGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkpKSA6IHJlc3VsdC5pbnRlcnNlY3RzKF94LCBf
eSwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsK
ICAgICAgICAgLy8gSGl0IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIGludCBzY3Jv
bGxlZFggPSB0eDsKQEAgLTM3OTYsOCArMzgwMCwxNCBAQCBib29sIFJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUCiAgICAgLy8gTm93IGhpdCB0ZXN0IG91ciBiYWNrZ3JvdW5kCiAg
ICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0
QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgewogICAgICAgICBJbnRSZWN0
IGJvdW5kc1JlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5jb250YWlucyhfeCwgX3kpKSB7CisgICAg
ICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVzdWx0LmludGVyc2VjdHMoX3gsIF95
LCBib3VuZHNSZWN0KSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNS
ZWdpb25UZXN0KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSgpIHx8IGlzQW5vbnlt
b3VzKCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRSYXdOb2RlKG5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuY29udGFpbmVkQnkoX3gsIF95LCBib3VuZHNSZWN0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODIzLDEzICszODMzLDE2
IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEgKICAgICAgICAgY3Vy
cllPZmZzZXQgKz0gY29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0
eSk7CiAgICAgICAgIAotICAgICAgICBpZiAoY29sUmVjdC5jb250YWlucyh4LCB5KSkgeworICAg
ICAgICBpZiAocmVzdWx0LmludGVyc2VjdHMoeCwgeSwgY29sUmVjdCkpIHsKICAgICAgICAgICAg
IC8vIFRoZSBwb2ludCBpcyBpbnNpZGUgdGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAvLyBBZGp1
c3QgdHggYW5kIHR5IHRvIGNoYW5nZSB3aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAgCiAgICAg
ICAgICAgICBpbnQgZmluYWxYID0gdHggKyBjdXJyWE9mZnNldDsKICAgICAgICAgICAgIGludCBm
aW5hbFkgPSB0eSArIGN1cnJZT2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250
ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9u
KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkgJiYgIXJlc3VsdC5jb250
YWluZWRCeSh4LCB5LCBjb2xSZWN0KSkKKyAgICAgICAgICAgICAgICBoaXRUZXN0Q29udGVudHMo
cmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwgaGl0VGVzdEFjdGlvbik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKICAg
ICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2
MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01NTIsOCArNTUzLDE1IEBAIGJvb2wgUmVu
ZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKIAogICAgIC8vIENoZWNrIG91ciBib3Vu
ZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkg
YmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9y
IHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICBpZiAodmlzaWJsZVRvSGl0VGVz
dGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0eSwg
d2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgSW50UmVjdCBi
b3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBpZiAo
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBy
ZXN1bHQuaW50ZXJzZWN0cyh4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkgewogICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsK
KyAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkgeworICAgICAgICAgICAgQVNTRVJU
KG5vZGUoKSB8fCBpc0Fub255bW91cygpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hZGRSYXdOb2Rl
KG5vZGUoKSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5jb250YWluZWRCeSh4UG9zLCB5UG9z
LCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDEwICs1MDMsMTAgQEAgSFRNTE1hcEVsZW1lbnQq
IFJlbmRlckltYWdlOjppbWFnZU1hcCgpIAogCiBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CiB7Ci0gICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICBI
aXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wb2ludFBhZGRp
bmcoKSk7CiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVx
dWVzdCwgdGVtcFJlc3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKIAotICAgIGlm
IChpbnNpZGUgJiYgbm9kZSgpKSB7CisgICAgaWYgKHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYg
bm9kZSgpKSB7CiAgICAgICAgIGlmIChIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkg
ewogICAgICAgICAgICAgSW50UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAg
ICAgICAgICAgIGZsb2F0IHpvb20gPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CkBAIC01MTcs
NiArNTE3LDggQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAg
ICAgICB9CiAgICAgfQogCisgICAgaWYgKCFpbnNpZGUgJiYgcmVzdWx0LmlzUmVnaW9uVGVzdCgp
KQorICAgICAgICByZXN1bHQubWVyZ2UodGVtcFJlc3VsdCk7CiAgICAgaWYgKGluc2lkZSkKICAg
ICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICByZXR1cm4gaW5zaWRlOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsNyArMjczNyw3IEBA
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgaWYgKHBh
cmVudCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBS
ZWN0KHJvb3RMYXllciwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICAgICAgICAgIC8vIEdv
IGFoZWFkIGFuZCB0ZXN0IHRoZSBlbmNsb3NpbmcgY2xpcCBub3cuCi0gICAgICAgICAgICBpZiAo
IWNsaXBSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkpCisgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludC54KCksIGhpdFRlc3RQb2ludC55KCksIGNsaXBSZWN0
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCkBAIC0yODUwLDE3ICsy
ODUwLDIxIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICB9
CiAKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRl
IHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4KLSAgICBpZiAoZmdSZWN0LmNv
bnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgaWYg
KHJlc3VsdC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludC54KCksIGhpdFRlc3RQb2ludC55KCksIGZn
UmVjdCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IHdp
dGggYSB0ZW1wb3JhcnkgSGl0VGVzdFJlc3VsdCwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gY29t
bWl0IHRvICdyZXN1bHQnIGlmIHdlIGtub3cgd2UncmUgZnJvbnRtb3N0LgotICAgICAgICBIaXRU
ZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgICAgICBIaXRUZXN0UmVz
dWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wb2ludFBhZGRpbmcoKSk7CiAg
ICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3Vu
ZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdERlc2NlbmRhbnRzKSAmJgogICAgICAgICAgICAgaXNI
aXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVu
ZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1
bHQ7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh0ZW1wUmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYgKCFkZXB0aFNvcnRE
ZXNjZW5kYW50cykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIC8v
IEZvcmVncm91bmQgY2FuIGRlcHRoLXNvcnQgd2l0aCBkZXNjZW5kYW50IGxheWVycywgc28ga2Vl
cCB0aGlzIGFzIGEgY2FuZGlkYXRlLgogICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlz
OwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQor
ICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIC8vIE5v
dyBjaGVjayBvdXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KQEAgLTI4NzYsMTMgKzI4ODAs
MTcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIGlmIChj
YW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwogCi0gICAgaWYg
KGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
ewotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAg
IGlmIChyZXN1bHQuaW50ZXJzZWN0cyhoaXRUZXN0UG9pbnQueCgpLCBoaXRUZXN0UG9pbnQueSgp
LCBiZ1JlY3QpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgICAgICBIaXRUZXN0UmVz
dWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wb2ludFBhZGRpbmcoKSk7CiAg
ICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3Vu
ZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdFNlbGYpICYmCiAgICAgICAgICAgICBpc0hpdENhbmRp
ZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5z
Zm9ybVN0YXRlLmdldCgpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICAgICAgcmVz
dWx0Lm1lcmdlKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAg
IHJlc3VsdC5tZXJnZSh0ZW1wUmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CkBA
IC0yOTI5LDE0ICsyOTM3LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExp
c3QoVmUKICAgICBmb3IgKGludCBpID0gbGlzdC0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
ICAgICAgICAgUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAg
UmVuZGVyTGF5ZXIqIGhpdExheWVyID0gMDsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVz
dWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJl
c3VsdC5wb2ludCgpLCByZXN1bHQucG9pbnRQYWRkaW5nKCkpOwogICAgICAgICBpZiAoY2hpbGRM
YXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGhpdExheWVyID0gaGl0VGVzdFBhZ2lu
YXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgcm9vdExheWVyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRl
c2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExh
eWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBo
aXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRG
b3JEZXNjZW5kYW50cyk7CisgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAg
ICAgICAgICByZXN1bHQubWVyZ2UodGVtcFJlc3VsdCk7CiAgICAgICAgIGlmIChpc0hpdENhbmRp
ZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVuZmxhdHRlbmVk
VHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgICAgICByZXN1bHRMYXllciA9IGhpdExheWVyOwot
ICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAg
ICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3Qu
Y3BwCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCiAKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckFy
ZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yNDUsMTQgKzI0NiwxNCBAQCBi
b29sIFJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KFJlbmRlckJvCiAgICAgLy8gY29udGFpbiB0
aGUgcG9pbnQuICBUaGlzIGlzIGEgcXVpY2sgc2hvcnQtY2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtl
IHRvIGF2b2lkIHdhbGtpbmcgYW55IGxpbmVzLgogICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlz
IGZsYXdlZCBpbiB0aGUgZm9sbG93aW5nIGV4dHJlbWVseSBvYnNjdXJlIHdheToKICAgICAvLyBp
ZiBzb21lIGxpbmUgaW4gdGhlIG1pZGRsZSBoYXMgYSBodWdlIG92ZXJmbG93LCBpdCBtaWdodCBh
Y3R1YWxseSBleHRlbmQgYmVsb3cgdGhlIGxhc3QgbGluZS4KLSAgICBpZiAoKHkgPj0gdHkgKyBs
YXN0TGluZUJveCgpLT5yb290KCktPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKSB8fCAoeSA8IHR5
ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93KCkpKQorICAgIGlm
ICgoeSAtIHJlc3VsdC5wb2ludFBhZGRpbmcoKS5oZWlnaHQoKSA+PSB0eSArIGxhc3RMaW5lQm94
KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHx8ICh5ICsgcmVzdWx0LnBvaW50
UGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BWaXNp
YmxlT3ZlcmZsb3coKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSBpZiBv
dXIgcm9vdCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4gIElmIHNvLCB0aGVuIHdlIGhpdCB0ZXN0
CiAgICAgLy8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0IGJveGVzIGNhbiBlYXNpbHkgb3Zlcmxh
cCwgc28gd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMKICAgICAvLyBiYXNlZCBvZmYgcG9z
aXRpb25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIgbGFzdCBsaW5lIGJveC4KICAgICBm
b3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cHJldkxpbmVCb3goKSkgewotICAgICAgICBpZiAoeSA+PSB0eSArIGN1cnItPnJvb3QoKS0+
dG9wVmlzaWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNp
YmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoeSArIHJlc3VsdC5wb2ludFBhZGRpbmcoKS5o
ZWlnaHQoKSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgJiYgeSAt
IHJlc3VsdC5wb2ludFBhZGRpbmcoKS5oZWlnaHQoKSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0
b21WaXNpYmxlT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSk7CiAgICAgICAgICAgICBp
ZiAoaW5zaWRlKSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDYwNzYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJTVkdSb290LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzEz
LDYgKzMxNCw5IEBAIGJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAg
ICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQ
b2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDU1MvSFRNTCBh
c3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJveCwgcmln
aHQ/CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRl
ckJveCk7CisgICAgICAgICAgICAvLyBUT0RPOiBub2RlQXRGbG9hdFBvaW50KCkgZG9lc24ndCBo
YW5kbGUgcmVnaW9uIHRlc3QgeWV0LgorICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRl
c3QoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkUmF3Tm9kZShjaGlsZC0+bm9kZSgpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKQEAgLTExMzUsNyArMTEzNiw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFQKICAgICB0eSArPSB5KCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0
LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkp
LmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBy
ZXN1bHQuaW50ZXJzZWN0cyh4UG9zLCB5UG9zLCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkpKSB7
CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGls
ZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
ICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pICYmCiAg
ICAgICAgICAgICAgICAgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywg
eVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7CkBAIC0xMTQ2LDggKzExNDcsMTUgQEAgYm9vbCBSZW5k
ZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIH0KIAogICAgIC8vIENoZWNrIG91
ciBib3VuZHMgbmV4dC4KLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24g
PT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tC
YWNrZ3JvdW5kKSAmJiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5z
KHhQb3MsIHlQb3MpKSB7CisgICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHks
IHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChh
Y3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxk
QmxvY2tCYWNrZ3JvdW5kKSAmJiByZXN1bHQuaW50ZXJzZWN0cyh4UG9zLCB5UG9zLCBib3VuZHNS
ZWN0KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBv
cyAtIHR4LCB5UG9zIC0gdHkpKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkg
eworICAgICAgICAgICAgQVNTRVJUKG5vZGUoKSB8fCBpc0Fub255bW91cygpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5hZGRSYXdOb2RlKG5vZGUoKSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5j
b250YWluZWRCeSh4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDYwNzYx
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNvbC5oIgpAQCAtMTE1Miw3ICsxMTUzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rp
b246Om5vZGVBdFBvaW50KGNvbgogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKLSAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250
YWlucyh4UG9zLCB5UG9zKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3VsdC5p
bnRlcnNlY3RzKHhQb3MsIHlQb3MsIG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNyArMzc5LDcg
QEAgYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdAogICAgIGJvb2wgaW5z
aWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwg
dHgsIHR5LCBhY3Rpb24pOwogICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmVh
bGx5IG92ZXIgdGhlIHdpZGdldCBpdHNlbGYgKGFuZCBub3QganVzdCBpbiB0aGUgYm9yZGVyL3Bh
ZGRpbmcgYXJlYSkuCi0gICAgaWYgKGluc2lkZSAmJiAhaGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5l
ck5vZGUoKSA9PSBub2RlKCkpCisgICAgaWYgKChpbnNpZGUgfHwgcmVzdWx0LmlzUmVnaW9uVGVz
dCgpKSAmJiAhaGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkpCiAgICAg
ICAgIHJlc3VsdC5zZXRJc092ZXJXaWRnZXQoY29udGVudEJveFJlY3QoKS5jb250YWlucyhyZXN1
bHQubG9jYWxQb2ludCgpKSk7CiAgICAgcmV0dXJuIGluc2lkZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57980</attachid>
            <date>2010-06-06 12:44:19 -0700</date>
            <delta_ts>2010-06-13 20:08:04 -0700</delta_ts>
            <desc>remove the tab</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29681</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMDYgIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhh
bmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcK
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuYmFz
ZS5leHA6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjppbnRlcnNlY3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmNvbnRhaW5lZEJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmFkZFJhd05vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpwb2ludFBhZGRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNSZWdpb25UZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OnJhd05vZGVMaXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0TGlzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQp
OgorCiAyMDEwLTA2LTA2ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNp
b24gNjA3NjEpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNCw3ICsyMTQsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZs
CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9sbEV2ZW50RXYKIF9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJOU18xOFBsYXRmb3JtV2hlZWxF
dmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoYW5kbGVUZXh0SW5wdXRFdmVudEVS
S05TXzZTdHJpbmdFUE5TXzVFdmVudEViYgotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhp
dFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFy
c0UKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05T
XzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFUktOU183SW50U2l6ZUUKIF9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRm
b3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJl
bGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVu
dEhhbmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODU4LDkgKzg1OCw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjph
bGxvd0RIVE1MRHJhZyhib29sJiAKIH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQog
ICAgIAotSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzKQorSGl0VGVzdFJlc3Vs
dCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RT
Y3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzLCBjb25zdCBJbnRTaXplJiBwb2ludFBhZGRpbmcpCiB7
Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOworICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0KHBvaW50LCBwb2ludFBhZGRpbmcpOwogICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaW50IGhpdFR5cGUgPSBIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwpAQCAtODgyLDcgKzg4
Miw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWwKICAgICAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsKICAgICAg
ICAgSW50UG9pbnQgd2lkZ2V0UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKS54KCkgKyB2aWV3LT5z
Y3JvbGxYKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlckxlZnQoKSAtIHJlbmRlcldpZGdldC0+cGFk
ZGluZ0xlZnQoKSwgCiAgICAgICAgICAgICByZXN1bHQubG9jYWxQb2ludCgpLnkoKSArIHZpZXct
PnNjcm9sbFkoKSAtIHJlbmRlcldpZGdldC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJXaWRnZXQtPnBh
ZGRpbmdUb3AoKSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCwgcG9pbnRQYWRkaW5nKTsKICAgICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpLT5sYXllcigpLT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KGhpdFR5cGUpLCB3aWRnZXRIaXRU
ZXN0UmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gd2lkZ2V0SGl0VGVzdFJlc3VsdDsKIApAQCAt
OTA0LDcgKzkwNCw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWwK
ICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAgICAg
ICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSByZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93KHJl
c3VsdC5wb2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9
IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2lu
dChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVz
dFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3Jl
Q2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzLCBwb2ludFBhZGRpbmcpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gNjA3NjEpCisr
KyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29v
bkluUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJl
c3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9v
bCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLCBIaXRUZXN0U2Nyb2xsYmFycyBzY3JvbGxiYXJzID0g
RG9udEhpdFRlc3RTY3JvbGxiYXJzKTsKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRB
dFBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRI
aXRUZXN0U2Nyb2xsYmFycywgY29uc3QgSW50U2l6ZSYgcG9pbnRQYWRkaW5nID0gSW50U2l6ZSgp
KTsKIAogICAgIGJvb2wgbW91c2VQcmVzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9tb3VzZVByZXNz
ZWQ7IH0KICAgICB2b2lkIHNldE1vdXNlUHJlc3NlZChib29sIHByZXNzZWQpIHsgbV9tb3VzZVBy
ZXNzZWQgPSBwcmVzc2VkOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZp
c2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDggKzExMywxNSBAQCBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVz
dGluZygpICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCkuY29udGFpbnMoeCwg
eSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgbV93aWR0aCwg
bV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVzdWx0LmludGVy
c2VjdHMoeCwgeSwgYm91bmRzUmVjdCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlm
IChyZXN1bHQuaXNSZWdpb25UZXN0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJlcigp
LT5ub2RlKCkgfHwgcmVuZGVyZXIoKS0+aXNBbm9ueW1vdXMoKSk7CisgICAgICAgICAgICByZXN1
bHQuYWRkUmF3Tm9kZShyZW5kZXJlcigpLT5ub2RlKCkpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQuY29udGFpbmVkQnkoeCwgeSwgYm91bmRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDYwNzYxKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUy
LDEzIEBAIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG8KIHsKIH0KIAor
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0
IEludFNpemUmIHBvaW50UGFkZGluZykKKyAgICA6IG1fcG9pbnQocG9pbnQpCisgICAgLCBtX3Bv
aW50UGFkZGluZyhwb2ludFBhZGRpbmcpCisgICAgLCBtX2lzT3ZlcldpZGdldChmYWxzZSkKK3sK
K30KKwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBv
dGhlcikKICAgICA6IG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgpKQogICAgICwgbV9pbm5l
ck5vblNoYXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkpCkBAIC01OSw2ICs2Niw4
IEBAIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGUKICAgICAsIG1fbG9j
YWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCiAgICAgLCBtX2lubmVyVVJMRWxlbWVudChvdGhl
ci5VUkxFbGVtZW50KCkpCiAgICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3JvbGxiYXIoKSkKKyAg
ICAsIG1fcG9pbnRQYWRkaW5nKG90aGVyLnBvaW50UGFkZGluZygpKQorICAgICwgbV9yYXdOb2Rl
TGlzdChvdGhlci5yYXdOb2RlTGlzdCgpKQogICAgICwgbV9pc092ZXJXaWRnZXQob3RoZXIuaXNP
dmVyV2lkZ2V0KCkpCiB7CiB9CkBAIC03NSw2ICs4NCw4IEBAIEhpdFRlc3RSZXN1bHQmIEhpdFRl
c3RSZXN1bHQ6Om9wZXJhdG9yPSgKICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50
KCk7CiAgICAgbV9pbm5lclVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7CiAgICAgbV9z
Y3JvbGxiYXIgPSBvdGhlci5zY3JvbGxiYXIoKTsKKyAgICBtX3BvaW50UGFkZGluZyA9IG90aGVy
LnBvaW50UGFkZGluZygpOworICAgIG1fcmF3Tm9kZUxpc3QgPSBvdGhlci5yYXdOb2RlTGlzdCgp
OwogICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQpAQCAtMzYyLDQgKzM3Myw0NiBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29u
dGVudEVkaXRhYmxlKCkgCiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCitib29sIEhpdFRlc3RSZXN1bHQ6OmludGVyc2VjdHMoaW50IHgs
IGludCB5LCBjb25zdCBJbnRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICBJbnRSZWN0IHBvaW50
UmVjdCh4IC0gbV9wb2ludFBhZGRpbmcud2lkdGgoKSwgeSAtIG1fcG9pbnRQYWRkaW5nLmhlaWdo
dCgpLCAyICogbV9wb2ludFBhZGRpbmcud2lkdGgoKSArIDEsIDIgKiBtX3BvaW50UGFkZGluZy5o
ZWlnaHQoKSArIDEpOworICAgIHJldHVybiBvdGhlci5pbnRlcnNlY3RzKHBvaW50UmVjdCk7Cit9
CisKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6Y29udGFpbmVkQnkoaW50IHgsIGludCB5LCBjb25zdCBJ
bnRSZWN0JiBvdGhlcikgY29uc3QKK3sKKyAgICBJbnRSZWN0IHBvaW50UmVjdCh4IC0gbV9wb2lu
dFBhZGRpbmcud2lkdGgoKSwgeSAtIG1fcG9pbnRQYWRkaW5nLmhlaWdodCgpLCAyICogbV9wb2lu
dFBhZGRpbmcud2lkdGgoKSArIDEsIDIgKiBtX3BvaW50UGFkZGluZy5oZWlnaHQoKSArIDEpOwor
ICAgIHJldHVybiBvdGhlci5jb250YWlucyhwb2ludFJlY3QpOworfQorCit2b2lkIEhpdFRlc3RS
ZXN1bHQ6Om1lcmdlKGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQoreworICAgIGlmICghbV9p
bm5lck5vZGUgJiYgb3RoZXIuaW5uZXJOb2RlKCkpIHsKKyAgICAgICAgbV9pbm5lck5vZGUgPSBv
dGhlci5pbm5lck5vZGUoKTsKKyAgICAgICAgbV9pbm5lck5vblNoYXJlZE5vZGUgPSBvdGhlci5p
bm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICAgICAgbV9sb2NhbFBvaW50ID0gb3RoZXIubG9jYWxQ
b2ludCgpOworICAgICAgICBtX2lubmVyVVJMRWxlbWVudCA9IG90aGVyLlVSTEVsZW1lbnQoKTsK
KyAgICAgICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3JvbGxiYXIoKTsKKyAgICAgICAgIG1faXNP
dmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CisgICAgfQorCisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBsaXN0ID0gb3RoZXIucmF3Tm9kZUxpc3QoKTsKKyAgICBWZWN0
b3I8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGxhc3QgPSBsaXN0LmVuZCgpOworICAg
IGZvciAoVmVjdG9yPFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVn
aW4oKTsgaXQgIT0gbGFzdDsgKytpdCkKKyAgICAgICAgYWRkUmF3Tm9kZShpdC0+Z2V0KCkpOwor
fQorCit2b2lkIEhpdFRlc3RSZXN1bHQ6OmFkZFJhd05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPjo6
Y29uc3RfaXRlcmF0b3IgbGFzdCA9IG1fcmF3Tm9kZUxpc3QuZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYXdOb2RlTGlzdC5iZWdp
bigpOyBpdCAhPSBsYXN0OyArK2l0KQorICAgICAgICBpZiAoKCppdCkgPT0gbm9kZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgIG1fcmF3Tm9kZUxpc3QuYXBwZW5kKG5vZGUpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShy
ZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsOCArMjEsMTAgQEAKICNkZWZpbmUgSGl0VGVzdFJlc3VsdF9oCiAK
ICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJU
ZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw2ICs0MCw3IEBAIGNsYXNz
IFN0cmluZzsKIGNsYXNzIEhpdFRlc3RSZXN1bHQgewogcHVibGljOgogICAgIEhpdFRlc3RSZXN1
bHQoY29uc3QgSW50UG9pbnQmKTsKKyAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50U2l6ZSYpOwogICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYp
OwogICAgIH5IaXRUZXN0UmVzdWx0KCk7CiAgICAgSGl0VGVzdFJlc3VsdCYgb3BlcmF0b3I9KGNv
bnN0IEhpdFRlc3RSZXN1bHQmKTsKQEAgLTQ5LDYgKzUyLDkgQEAgcHVibGljOgogICAgIEVsZW1l
bnQqIFVSTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lubmVyVVJMRWxlbWVudC5nZXQoKTsg
fQogICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIu
Z2V0KCk7IH0KICAgICBib29sIGlzT3ZlcldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVy
V2lkZ2V0OyB9CisgICAgSW50U2l6ZSBwb2ludFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3Bv
aW50UGFkZGluZzsgfQorICAgIGJvb2wgaXNSZWdpb25UZXN0KCkgY29uc3QgeyByZXR1cm4gIW1f
cG9pbnRQYWRkaW5nLmlzRW1wdHkoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiYgcmF3Tm9kZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3Jhd05vZGVMaXN0OyB9CiAKICAgICB2
b2lkIHNldFRvTm9uU2hhZG93QW5jZXN0b3IoKTsKIApAQCAtNzYsNiArODIsMTEgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNMaXZlTGluaygpIGNvbnN0OwogICAgIGJvb2wgaXNDb250ZW50RWRpdGFi
bGUoKSBjb25zdDsKIAorICAgIGJvb2wgaW50ZXJzZWN0cyhpbnQsIGludCwgY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbmVkQnkoaW50LCBpbnQsIGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKKyAgICB2b2lkIG1lcmdlKGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKKyAgICB2b2lk
IGFkZFJhd05vZGUoTm9kZSopOworCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX2lubmVy
Tm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5lck5vblNoYXJlZE5vZGU7CkBAIC04NCw2ICs5
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUg
d2hlcmUgaW5zaWRlIHRoZSByZW5kZXJlciB3ZSBoaXQgb24gc3Vic2VxdWVudCBvcGVyYXRpb25z
LgogICAgIFJlZlB0cjxFbGVtZW50PiBtX2lubmVyVVJMRWxlbWVudDsKICAgICBSZWZQdHI8U2Ny
b2xsYmFyPiBtX3Njcm9sbGJhcjsKKyAgICBJbnRTaXplIG1fcG9pbnRQYWRkaW5nOworICAgIFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3Jhd05vZGVMaXN0OwogICAgIGJvb2wgbV9pc092ZXJXaWRn
ZXQ7IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgb3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0
aGUgYm9yZGVyL3BhZGRpbmcgYXJlYSBvZiBhIFJlbmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCiB9
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNjA3NjEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3Qg
SGkKIHsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXNpYmxlT3ZlcmZsb3dSZWN0KCkpOwog
ICAgIG92ZXJmbG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFvdmVyZmxvd1JlY3QuY29u
dGFpbnMoeCwgeSkpCisgICAgaWYgKCFyZXN1bHQuaW50ZXJzZWN0cyh4LCB5LCBvdmVyZmxvd1Jl
Y3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJz
dC4KQEAgLTYyNCw4ICs2MjQsMTQgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChj
b25zdCBIaQogCiAgICAgLy8gTm93IGNoZWNrIG91cnNlbHZlcy4KICAgICBJbnRSZWN0IHJlY3Qo
dHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiByZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiByZXN1bHQuaW50ZXJzZWN0cyh4LCB5LCByZWN0KSkgewogICAgICAg
ICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4
LCB5IC0gdHkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29y
ZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KKyAgICAgICAgaWYgKHJlc3VsdC5p
c1JlZ2lvblRlc3QoKSkgeworICAgICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKCktPm5vZGUoKSB8
fCByZW5kZXJlcigpLT5pc0Fub255bW91cygpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hZGRSYXdO
b2RlKHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5jb250YWlu
ZWRCeSh4LCB5LCByZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDYwNzYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw4ICsyNjYsMTQgQEAgYm9v
bCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBJbnRSZWN0IHJlY3QodHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWln
aHQoKSk7Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJs
ZVRvSGl0VGVzdGluZygpICYmIHJlY3QuY29udGFpbnMoeCwgeSkpIHsKKyAgICBpZiAobV90cnVu
Y2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVz
dWx0LmludGVyc2VjdHMoeCwgeSwgcmVjdCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAg
IGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJl
cigpLT5ub2RlKCkgfHwgcmVuZGVyZXIoKS0+aXNBbm9ueW1vdXMoKSk7CisgICAgICAgICAgICBy
ZXN1bHQuYWRkUmF3Tm9kZShyZW5kZXJlcigpLT5ub2RlKCkpOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuY29udGFpbmVkQnkoeCwgeSwgcmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA2MDc2MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzczNiwxOSArMzczNiwyMyBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBI
aXRUCiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgog
ICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzaWJsZU92ZXJmbG93UmVjdCgpOwogICAg
ICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dCb3gu
Y29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFyZXN1bHQuaW50ZXJzZWN0cyhfeCwgX3ks
IG92ZXJmbG93Qm94KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBp
ZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0
aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNQb2ludEluT3ZlcmZsb3dD
b250cm9sKHJlc3VsdCwgX3gsIF95LCB0eCwgdHkpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAvLyBUT0RPOiBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woKSBkb2Vz
bid0IGhhbmRsZSByZWdpb24gdGVzdCB5ZXQuCisgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25U
ZXN0KCkpCisgICAgICAgICAgICByZXN1bHQuYWRkUmF3Tm9kZShub2RlKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUg
Y2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VP
dmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIo
KTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0Ns
aXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xp
cCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95KSA6IG92ZXJmbG93
Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRy
ZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IHJlc3VsdC5pbnRlcnNlY3RzKF94
LCBfeSwgY29udHJvbENsaXBSZWN0KHR4LCB0eSkpIDogcmVzdWx0LmludGVyc2VjdHMoX3gsIF95
LCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikgewog
ICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAgaW50IHNjcm9s
bGVkWCA9IHR4OwpAQCAtMzc5Niw4ICszODAwLDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFQKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAg
ICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RB
Y3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIEludFJlY3Qg
Ym91bmRzUmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94LCBfeSkpIHsKKyAgICAg
ICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZXN1bHQuaW50ZXJzZWN0cyhfeCwgX3ks
IGJvdW5kc1JlY3QpKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
SW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1Jl
Z2lvblRlc3QoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlKCkgfHwgaXNBbm9ueW1v
dXMoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFJhd05vZGUobm9kZSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5jb250YWluZWRCeShfeCwgX3ksIGJvdW5kc1JlY3QpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTM4MjMsMTMgKzM4MzMsMTYg
QEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSAogICAgICAgICBjdXJy
WU9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChjb2xSZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAg
ICAgIGlmIChyZXN1bHQuaW50ZXJzZWN0cyh4LCB5LCBjb2xSZWN0KSkgewogICAgICAgICAgICAg
Ly8gVGhlIHBvaW50IGlzIGluc2lkZSB0aGlzIGNvbHVtbi4KICAgICAgICAgICAgIC8vIEFkanVz
dCB0eCBhbmQgdHkgdG8gY2hhbmdlIHdoZXJlIHdlIGhpdCB0ZXN0LgogICAgICAgICAKICAgICAg
ICAgICAgIGludCBmaW5hbFggPSB0eCArIGN1cnJYT2Zmc2V0OwogICAgICAgICAgICAgaW50IGZp
bmFsWSA9IHR5ICsgY3VycllPZmZzZXQ7Ci0gICAgICAgICAgICByZXR1cm4gaGl0VGVzdENvbnRl
bnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24p
OworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSAmJiAhcmVzdWx0LmNvbnRh
aW5lZEJ5KHgsIHksIGNvbFJlY3QpKQorICAgICAgICAgICAgICAgIGhpdFRlc3RDb250ZW50cyhy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJl
cXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24pOwogICAg
ICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDYw
NzYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTU1Miw4ICs1NTMsMTUgQEAgYm9vbCBSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlcwogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5k
cyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBi
ZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3Ig
cmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMpLgotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIEludFJlY3QodHgsIHR5LCB3
aWR0aCgpLCBoZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJv
dW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2
aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIHJl
c3VsdC5pbnRlcnNlY3RzKHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwor
ICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZSgpIHx8IGlzQW5vbnltb3VzKCkpOworICAgICAgICAgICAgcmVzdWx0LmFkZFJhd05vZGUo
bm9kZSgpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmNvbnRhaW5lZEJ5KHhQb3MsIHlQb3Ms
IGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHJldmlzaW9uIDYwNzYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsMTAgKzUwMywxMCBAQCBIVE1MTWFwRWxlbWVudCog
UmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgCiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
IHsKLSAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgIEhp
dFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBvaW50UGFkZGlu
ZygpKTsKICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1
ZXN0LCB0ZW1wUmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogCi0gICAgaWYg
KGluc2lkZSAmJiBub2RlKCkpIHsKKyAgICBpZiAodGVtcFJlc3VsdC5pbm5lck5vZGUoKSAmJiBu
b2RlKCkpIHsKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAgPSBpbWFnZU1hcCgpKSB7
CiAgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50Qm94UmVjdCgpOwogICAg
ICAgICAgICAgZmxvYXQgem9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKQEAgLTUxNyw2
ICs1MTcsOCBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWluc2lkZSAmJiByZXN1bHQuaXNSZWdpb25UZXN0KCkp
CisgICAgICAgIHJlc3VsdC5tZXJnZSh0ZW1wUmVzdWx0KTsKICAgICBpZiAoaW5zaWRlKQogICAg
ICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgIHJldHVybiBpbnNpZGU7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczNyw3ICsyNzM3LDcgQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgICAgICBpZiAocGFy
ZW50KCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJl
Y3Qocm9vdExheWVyLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgICAgICAgICAgLy8gR28g
YWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KLSAgICAgICAgICAgIGlmICgh
Y2xpcFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LmludGVyc2VjdHMoaGl0VGVzdFBvaW50LngoKSwgaGl0VGVzdFBvaW50LnkoKSwgY2xpcFJlY3Qp
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKQEAgLTI4NTAsMTcgKzI4
NTAsMjEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIH0K
IAogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUg
dGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuY29u
dGFpbnMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAo
cmVzdWx0LmludGVyc2VjdHMoaGl0VGVzdFBvaW50LngoKSwgaGl0VGVzdFBvaW50LnkoKSwgZmdS
ZWN0KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0
aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVzdWx0LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21t
aXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBmcm9udG1vc3QuCi0gICAgICAgIEhpdFRl
c3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBvaW50UGFkZGluZygpKTsKICAg
ICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5k
cywgaGl0VGVzdFBvaW50LCBIaXRUZXN0RGVzY2VuZGFudHMpICYmCiAgICAgICAgICAgICBpc0hp
dENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5l
ZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3Vs
dDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1lcmdlKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRoU29ydERl
c2NlbmRhbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgLy8g
Rm9yZWdyb3VuZCBjYW4gZGVwdGgtc29ydCB3aXRoIGRlc2NlbmRhbnQgbGF5ZXJzLCBzbyBrZWVw
IHRoaXMgYXMgYSBjYW5kaWRhdGUuCiAgICAgICAgICAgICBjYW5kaWRhdGVMYXllciA9IHRoaXM7
Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisg
ICAgICAgICAgICByZXN1bHQubWVyZ2UodGVtcFJlc3VsdCk7CiAgICAgfQogCiAgICAgLy8gTm93
IGNoZWNrIG91ciBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLgpAQCAtMjg3NiwxMyArMjg4MCwx
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgaWYgKGNh
bmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAo
YmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAg
aWYgKHJlc3VsdC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludC54KCksIGhpdFRlc3RQb2ludC55KCks
IGJnUmVjdCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBvaW50UGFkZGluZygpKTsKICAg
ICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5k
cywgaGl0VGVzdFBvaW50LCBIaXRUZXN0U2VsZikgJiYKICAgICAgICAgICAgIGlzSGl0Q2FuZGlk
YXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNm
b3JtU3RhdGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAg
cmVzdWx0Lm1lcmdlKHRlbXBSZXN1bHQpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gMDsKQEAg
LTI5MjksMTQgKzI5MzcsMTcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGlz
dChWZQogICAgIGZvciAoaW50IGkgPSBsaXN0LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewog
ICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwogICAgICAgICBS
ZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1
bHQocmVzdWx0LnBvaW50KCkpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVz
dWx0LnBvaW50KCksIHJlc3VsdC5wb2ludFBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChjaGlsZExh
eWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFnaW5h
dGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5
ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhp
dFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZv
ckRlc2NlbmRhbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh0ZW1wUmVzdWx0KTsKICAgICAgICAgaWYgKGlzSGl0Q2FuZGlk
YXRlKGhpdExheWVyLCBkZXB0aFNvcnREZXNjZW5kYW50cywgek9mZnNldCwgdW5mbGF0dGVuZWRU
cmFuc2Zvcm1TdGF0ZSkpIHsKICAgICAgICAgICAgIHJlc3VsdExheWVyID0gaGl0TGF5ZXI7Ci0g
ICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAg
ICAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5j
cHAJKHJldmlzaW9uIDYwNzYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJveExpc3QuaCIKIAorI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJl
bmEuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKQEAgLTI0NSwxNCArMjQ2LDE0IEBAIGJv
b2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm8KICAgICAvLyBjb250YWluIHRo
ZSBwb2ludC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQgd2UgY2FuIHRha2Ug
dG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMg
Zmxhd2VkIGluIHRoZSBmb2xsb3dpbmcgZXh0cmVtZWx5IG9ic2N1cmUgd2F5OgogICAgIC8vIGlm
IHNvbWUgbGluZSBpbiB0aGUgbWlkZGxlIGhhcyBhIGh1Z2Ugb3ZlcmZsb3csIGl0IG1pZ2h0IGFj
dHVhbGx5IGV4dGVuZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgotICAgIGlmICgoeSA+PSB0eSArIGxh
c3RMaW5lQm94KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHx8ICh5IDwgdHkg
KyBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkpCisgICAgaWYg
KCh5IC0gcmVzdWx0LnBvaW50UGFkZGluZygpLmhlaWdodCgpID49IHR5ICsgbGFzdExpbmVCb3go
KS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgfHwgKHkgKyByZXN1bHQucG9pbnRQ
YWRkaW5nKCkuaGVpZ2h0KCkgPCB0eSArIGZpcnN0TGluZUJveCgpLT5yb290KCktPnRvcFZpc2li
bGVPdmVyZmxvdygpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU2VlIGlmIG91
ciByb290IGxpbmVzIGNvbnRhaW4gdGhlIHBvaW50LiAgSWYgc28sIHRoZW4gd2UgaGl0IHRlc3QK
ICAgICAvLyB0aGVtIGZ1cnRoZXIuICBOb3RlIHRoYXQgYm94ZXMgY2FuIGVhc2lseSBvdmVybGFw
LCBzbyB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucwogICAgIC8vIGJhc2VkIG9mZiBwb3Np
dGlvbnMgb2Ygb3VyIGZpcnN0IGxpbmUgYm94IG9yIG91ciBsYXN0IGxpbmUgYm94LgogICAgIGZv
ciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5wcmV2TGluZUJveCgpKSB7Ci0gICAgICAgIGlmICh5ID49IHR5ICsgY3Vyci0+cm9vdCgpLT50
b3BWaXNpYmxlT3ZlcmZsb3coKSAmJiB5IDwgdHkgKyBjdXJyLT5yb290KCktPmJvdHRvbVZpc2li
bGVPdmVyZmxvdygpKSB7CisgICAgICAgIGlmICh5ICsgcmVzdWx0LnBvaW50UGFkZGluZygpLmhl
aWdodCgpID49IHR5ICsgY3Vyci0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSAmJiB5IC0g
cmVzdWx0LnBvaW50UGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBjdXJyLT5yb290KCktPmJvdHRv
bVZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsKICAgICAgICAgICAgIGlm
IChpbnNpZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgIlJlbmRlclNWR1Jvb3QuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0zMTMs
NiArMzE0LDkgQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAg
ICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBv
aW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENTUy9IVE1MIGFz
c3VtZXMgdGhlIGxvY2FsIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSBib3JkZXIgYm94LCByaWdo
dD8KICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVy
Qm94KTsKKyAgICAgICAgICAgIC8vIFRPRE86IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhh
bmRsZSByZWdpb24gdGVzdCB5ZXQuCisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVz
dCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRSYXdOb2RlKGNoaWxkLT5ub2RlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91dC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgpAQCAtMTEzNSw3ICsxMTM2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VAogICAgIHR5ICs9IHkoKTsKIAogICAgIC8vIENoZWNrIGtpZHMgZmlyc3Qu
Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSku
Y29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IHJl
c3VsdC5pbnRlcnNlY3RzKHhQb3MsIHlQb3MsIG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KSkpIHsK
ICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkg
JiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikgJiYKICAg
ICAgICAgICAgICAgICBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5
UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKQEAgLTExNDYsOCArMTE0NywxNSBAQCBib29sIFJlbmRl
clRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3Vy
IGJvdW5kcyBuZXh0LgotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9
PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0Jh
Y2tncm91bmQpICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkuY29udGFpbnMo
eFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFj
dGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRC
bG9ja0JhY2tncm91bmQpICYmIHJlc3VsdC5pbnRlcnNlY3RzKHhQb3MsIHlQb3MsIGJvdW5kc1Jl
Y3QpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9z
IC0gdHgsIHlQb3MgLSB0eSkpOworICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQobm9kZSgpIHx8IGlzQW5vbnltb3VzKCkpOworICAgICAgICAg
ICAgcmVzdWx0LmFkZFJhd05vZGUobm9kZSgpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmNv
bnRhaW5lZEJ5KHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gNjA3NjEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlQ29sLmgiCkBAIC0xMTUyLDcgKzExNTMsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQoY29uCiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHkoKTsKIAotICAg
IGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRh
aW5zKHhQb3MsIHlQb3MpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdWx0Lmlu
dGVyc2VjdHMoeFBvcywgeVBvcywgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksNyBA
QCBib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0CiAgICAgYm9vbCBpbnNp
ZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0
eCwgdHksIGFjdGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFs
bHkgb3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFk
ZGluZyBhcmVhKS4KLSAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVy
Tm9kZSgpID09IG5vZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWdpb25UZXN0
KCkpICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKICAgICAg
ICAgcmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJlc3Vs
dC5sb2NhbFBvaW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58324</attachid>
            <date>2010-06-09 20:31:56 -0700</date>
            <delta_ts>2010-06-11 05:54:10 -0700</delta_ts>
            <desc>rect-based hitTest prototype patch</desc>
            <filename>0001-2010-06-09-Antonio-Gomes-tonikitoo-webkit.org.patch</filename>
            <type>text/plain</type>
            <size>96448</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBiMTg1YTZiYzUwYzI2YzYzZTcxNDFhYzI0ZjlkNjMxN2Q3NzY0NjI3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogV2VkLCA5IEp1biAyMDEwIDE3OjA2OjQ3IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gMjAx
MC0wNi0wOSAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgoKICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgRW5oYW5jZSB0aGUgaGl0IHRlc3Rp
bmcgdG8gdGFrZSBhIHJlY3RhbmdsZSBpbnN0ZWFkIG9mIGEgcG9pbnQKICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcKCiAgICAgICAgUGF0Y2ggY2hh
bmdlcyB0aGUgSGl0VGVzdCBzeXN0ZW0gdG8gYmUgcmVjdC1iYXNlZC4KCiAgICAgICAgSW4gc3Vt
bWFyeToKICAgICAgICAgICAgLSBub2RlQXRQb2ludCBtZXRob2RzIHRocm91Z2hvdXQgdGhlIHJl
bmRlcmluZyBjb2RlIHdlcmUgcmVuYW1lZCB0byBub2RlQXRBcmVhLAogICAgICAgICAgICAgIGFu
ZCB0YWtlIGEgcmVjdCAoImhpdFRlc3RBcmVhIikgYXMgcGFyYW1ldGVyLCBpbnN0ZWFkIG9mIGEg
cG9pbnQgKCJ4IiBhbmQgInkiKS4KICAgICAgICAgICAgICBNZXRob2QgYm9kaWVzIHdlcmUgYWxz
byBhZGFwdGVkIGFjY29yZGluZ2x5LgoKICAgICAgICAgICAgLSBCYXNlIHJlbmRlcmluZyBjbGFz
c2VzIGxpa2UgUmVuZGVyT2JqZWN0IGFuZCBJbmxpbmVCb3ggc3RpbGwgaGF2ZSBub2RlQXRQb2lu
dAogICAgICAgICAgICAgIG1ldGhvZHMsIGJ1dCBmYWxsaW5nIGJhY2sgdG8gbm9kZUF0QXJlYSBi
eSBwYXNzaW5nIEludFJlY3QoeCwgeSwgMSwgMSkgYXMgdGhlIGhpdCBhcmVhLgoKICAgICAgICAg
ICAgLSBUaGUgdmFyaW91cyB1cGRhdGVIaXRUZXN0UmVzdWx0IG1ldGhvZHMgd2VyZSBjaGFuZ2Vk
IHNvIHRoYXQgZWFjaCBOb2RlIHdob3NlIHJlbmRlcgogICAgICAgICAgICAgIGJvdW5kcyBpbnRl
cnNlY3RzIHRoZSBoaXQgdGVzdCBhcmVhIGFyZSBhZGRlZCBpbnRvIGEgVmVjdG9yIGluIHRoZSBI
aXRUZXN0UmVzdWx0IGNsYXNzLgoKICAgICAgICAgICAgLSBBIG5ldyBjb25zdHJ1Y3RvciB3YXMg
YWRkZWQgSGl0VGVzdFJlc3VsdCBjbGFzcywgcmVjZWl2aW5nIGEgSW50UmVjdCBhcyBwYXJhbWV0
ZXIuCiAgICAgICAgICAgICAgUHJldmlvdXMgZXhpc3RpbmcgY29uc3RydWN0b3JzIHRoYXQgcmVj
ZWl2ZSBhIEludFBvaW50IG5vdyBmYWxsYmFjayB0byB0aGUgbmV3IG9uZQogICAgICAgICAgICAg
IHBhc3NpbmcgSW50UmVjdChwb2ludCwgSW50U2l6ZSgxLCAxKSkuCgogICAgICAgICAgICAtIEV2
ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0QXJlYSBtZXRob2Qgd2FzIGFkZGVkLCBhbmQgdGhl
IHByZXZpb3NseSBleGlzdGluZyBoaXRUZXN0UmVzdWx0QXRQb2ludAogICAgICAgICAgICAgIGZh
bGxiYWNrIHRvIGl0LgoKICAgICAgICAgICAgLSBTVkcgY2xhc3NlcyB3ZXJlIG5vdCBub2RpZmll
ZCB5ZXQuCgogICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgogICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KToKICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRBcmVhKToKICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmg6CiAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsYmFyQXRBcmVhKToKICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6c2Nyb2xsYmFyQXRQb2ludCk6CiAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3
Lmg6CiAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgogICAgICAgIChXZWJDb3Jl
OjpFbGxpcHNpc0JveDo6bm9kZUF0QXJlYSk6CiAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNC
b3guaDoKICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCk6CiAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6
OmlzU2VsZWN0ZWQpOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzcGVsbGluZ1Rv
b2xUaXApOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpyZXBsYWNlZFN0cmluZyk6
CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb0xpc3RJZk5lZWRlZCk6
CiAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgogICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0OjphcmVhKToKICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6cG9p
bnQpOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc1JlY3RCYXNlZCk6CiAgICAg
ICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om5vZGVMaXN0KToKICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVCb3guY3BwOgogICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6Om5vZGVBdFBvaW50
KToKICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpub2RlQXRBcmVhKToKICAgICAgICAqIHJl
bmRlcmluZy9JbmxpbmVCb3guaDoKICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0QXJlYSk6CiAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oOgogICAgICAgICogcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwOgogICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRBcmVhKToK
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CiAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0QXJl
YSk6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6CiAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMpOgogICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJlc3VsdCk6CiAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suaDoKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgogICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdEFyZWEpOgogICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5oOgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdEFyZWEpOgogICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZyYW1lU2V0Lmg6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0QXJlYSk6CiAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om5vZGVBdEFyZWEpOgogICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOgogICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgogICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZSk6CiAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgogICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmhpdFRlc3RMaXN0KToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRl
c3RQYWdpbmF0ZWRDaGlsZExheWVyKToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhp
dFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aDoKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaW5lQm94TGlzdC5oOgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpub2RlQXRBcmVhKToKICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoaXRUZXN0KToKICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KToKICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludCk6CiAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6bm9kZUF0QXJlYSk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgogICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6bm9kZUF0QXJlYSk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaDoKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlUm93Ojpub2RlQXRBcmVhKToKICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5oOgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0QXJlYSk6CiAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CiAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dC5oOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpub2RlQXRBcmVh
KToKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRBcmVhKToK
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgogICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0QXJlYSk6CiAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CiAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnVwZGF0
ZUhpdFRlc3RSZXN1bHQpOgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6bm9kZUF0QXJlYSk6CiAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0Lmg6CiAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6Om5vZGVBdEFyZWEpOgogICAgICAg
ICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bElubmVyQmxvY2s6Om5vZGVBdFBvaW50KToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xJbm5lckJsb2NrOjpub2RlQXRBcmVhKToKLS0tCiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcCAgICAgICAgICAgICAgICAgICAgIHwgICAxOSArKystLQogV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcCAgICAgICAgICAgICAgICAgICB8ICAgMTMgKysrLQogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmggICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwICAgICAgICAgICAgICAgICB8ICAgMTQgKysr
LS0KIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmggICAgICAgICAgICAgICAgICAgfCAg
ICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCAgICAgICAgICAgICAg
IHwgICAzMSArKysrKysrLS0KIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCAgICAg
ICAgICAgICAgICAgfCAgIDEzICsrKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAg
ICAgICAgICAgICAgICAgICAgfCAgICA3ICsrLQogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmggICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAgICAgICAgICAgICAgICB8ICAgMTUgKysrLS0KIFdlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaCAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcCAgICAgICAgICAgICAgIHwgICAgOCArKy0KIFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaCAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgICAgICAgICAgICAgICAgIHwgICA2OCArKysr
KysrKysrKystLS0tLS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggICAgICAgICAg
ICAgICAgICAgfCAgICA0ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwICAgICAg
ICAgICAgICAgICAgIHwgICAxMyArKy0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCAg
ICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmggICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAgICAgICAgICAgICAgICAgIHwgICAgOCArKy0KIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmggICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwICAgICAgICAgICAgICAgIHwgICAxMCArKy0KIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgICAgICAgICAgICAgICAgIHwgICA3NyAr
KysrKysrKysrKy0tLS0tLS0tLS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggICAg
ICAgICAgICAgICAgICAgfCAgIDEyICsrLS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
b3hMaXN0LmNwcCAgICAgICAgICAgfCAgIDE1ICsrKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmggICAgICAgICAgICAgfCAgICAxICsKIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwICAgICAgICAgICAgICAgfCAgIDEyICsrLQogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgICAgICAgICAgICAgICAgfCAgIDI1ICsrKysrLS0KIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oICAgICAgICAgICAgICAgICAgfCAgICAyICsK
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCAgICAgICAgICAgICAgICAgfCAgIDE1
ICsrKy0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oICAgICAgICAgICAgICAgICAg
IHwgICAgMiArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwICAgICAgICAg
ICAgICB8ICAgIDggKystCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oICAgICAg
ICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcCAgICAgICAgICB8ICAgMTEgKystCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uaCAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICB8ICAgIDggKystCiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICAgIHwgICAgMiArLQogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCB8ICAgIDcgKystCiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAgIHwgICAgMiArLQogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0K
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgICAgICAgICAgICAgICAgfCAgICA0
ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaCAgICAgICAgICAgICAgICAgIHwg
ICAgMiArLQogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgICAgICAgICAgICAg
ICB8ICAgMTEgKystCiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggICAgICAgICAg
ICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcCAgICB8ICAgIDkgKystCiA0OSBmaWxlcyBjaGFuZ2VkLCAzMjQgaW5zZXJ0aW9ucygr
KSwgMTcwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZGVmNjJjYy4uNzEx
ZGViYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTg1NywxMCArODU3LDE2IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjphbGxvd0RIVE1MRHJhZyhib29sJiBmbGFnREhUTUwsIGJvb2wmIGZsYWdVQSkg
Y29uc3QKICAgICBmbGFnVUEgPSAoKG1hc2sgJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UpIHx8ICht
YXNrICYgRHJhZ1NvdXJjZUFjdGlvbkxpbmspIHx8IChtYXNrICYgRHJhZ1NvdXJjZUFjdGlvblNl
bGVjdGlvbikpOwogfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAgCisKIEhp
dFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5n
LCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Nyb2xsYmFycykKIHsKLSAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdChwb2ludCk7CisgICAgSW50UmVjdCBhcmVhKEludFJlY3QocG9pbnQsIEludFNpemUo
MSwgMSkpKTsKKyAgICByZXR1cm4gaGl0VGVzdFJlc3VsdEF0QXJlYShhcmVhLCBhbGxvd1NoYWRv
d0NvbnRlbnQsIGlnbm9yZUNsaXBwaW5nLCB0ZXN0U2Nyb2xsYmFycyk7Cit9CisKK0hpdFRlc3RS
ZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRBcmVhKGNvbnN0IEludFJlY3QmIGFy
ZWEsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nLCBIaXRUZXN0
U2Nyb2xsYmFycyB0ZXN0U2Nyb2xsYmFycykKK3sKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChh
cmVhKTsKICAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIGludCBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwg
SGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKQEAgLTg4Nyw3ICs4OTMsNyBAQCBIaXRUZXN0UmVzdWx0
IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
LCBib29sIGFsbAogICAgICAgICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVzdWx0OwogCiAgICAg
ICAgIGlmICh0ZXN0U2Nyb2xsYmFycyA9PSBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycykgewotICAg
ICAgICAgICAgU2Nyb2xsYmFyKiBldmVudFNjcm9sbGJhciA9IHZpZXctPnNjcm9sbGJhckF0UG9p
bnQocG9pbnQpOworICAgICAgICAgICAgU2Nyb2xsYmFyKiBldmVudFNjcm9sbGJhciA9IHZpZXct
PnNjcm9sbGJhckF0QXJlYShhcmVhKTsKICAgICAgICAgICAgIGlmIChldmVudFNjcm9sbGJhcikK
ICAgICAgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKGV2ZW50U2Nyb2xsYmFyKTsKICAg
ICAgICAgfQpAQCAtOTAyLDkgKzkwOCw5IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpo
aXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsCiAgICAg
ICAgICAgICBGcmFtZVZpZXcqIHJlc3VsdFZpZXcgPSByZXN1bHRGcmFtZS0+dmlldygpOwogICAg
ICAgICAgICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IG1haW5GcmFtZS0+dmlldygpOwogICAgICAg
ICAgICAgaWYgKHJlc3VsdFZpZXcgJiYgbWFpblZpZXcpIHsKLSAgICAgICAgICAgICAgICBJbnRQ
b2ludCB3aW5kb3dQb2ludCA9IHJlc3VsdFZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVzdWx0LnBv
aW50KCkpOwotICAgICAgICAgICAgICAgIEludFBvaW50IG1haW5GcmFtZVBvaW50ID0gbWFpblZp
ZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5G
cmFtZVBvaW50LCBhbGxvd1NoYWRvd0NvbnRlbnQsIGlnbm9yZUNsaXBwaW5nKTsKKyAgICAgICAg
ICAgICAgICBJbnRSZWN0IHdpbmRvd0FyZWEgPSByZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93
KHJlc3VsdC5hcmVhKCkpOworICAgICAgICAgICAgICAgIEludFJlY3QgbWFpbkZyYW1lQXJlYSA9
IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd0FyZWEpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdEFyZWEo
bWFpbkZyYW1lQXJlYSwgYWxsb3dTaGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05MTUsNyArOTIxLDYgQEAgSGl0VGVzdFJl
c3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBw
b2ludCwgYm9vbCBhbGwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KIHZvaWQgRXZlbnRIYW5k
bGVyOjpzdGFydEF1dG9zY3JvbGxUaW1lcigpCiB7CiAgICAgbV9hdXRvc2Nyb2xsVGltZXIuc3Rh
cnRSZXBlYXRpbmcoYXV0b3Njcm9sbEludGVydmFsKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCAyZjk3
MmZjLi4wMDRkODQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysr
IGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEV2
ZW50VGFyZ2V0OwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIEZy
YW1lOworY2xhc3MgSW50UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVz
dFJlc3VsdDsKIGNsYXNzIEhUTUxGcmFtZVNldEVsZW1lbnQ7CkBAIC0xMDYsNiArMTA3LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNv
bnN0IEZsb2F0UXVhZCYpOwogCiAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0QXRQb2lu
dChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNs
aXBwaW5nID0gZmFsc2UsIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250SGl0VGVz
dFNjcm9sbGJhcnMpOworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdEF0QXJlYShjb25z
dCBJbnRSZWN0JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcg
PSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRIaXRUZXN0U2Nyb2xs
YmFycyk7CiAKICAgICBib29sIG1vdXNlUHJlc3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW91c2VQ
cmVzc2VkOyB9CiAgICAgdm9pZCBzZXRNb3VzZVByZXNzZWQoYm9vbCBwcmVzc2VkKSB7IG1fbW91
c2VQcmVzc2VkID0gcHJlc3NlZDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKaW5kZXggY2M1Nzdi
NC4uNjNiY2E5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCkBAIC02MjYsMTkgKzYyNiwyNCBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKGJvb2wgc3VwcHJlc3Nl
ZCwgYm9vbCByZXBhaW50T25VbnN1cHByZQogICAgIH0KIH0KIAotU2Nyb2xsYmFyKiBTY3JvbGxW
aWV3OjpzY3JvbGxiYXJBdFBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK1Njcm9s
bGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyQXRBcmVhKGNvbnN0IEludFJlY3QmIHdpbmRvd0Fy
ZWEpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRv
d1BvaW50KTsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnModmlld1BvaW50KSkKKyAgICBJbnRSZWN0IHZp
ZXdBcmVhID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd0FyZWEpOworICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKS5pbnRlcnNlY3RzKHZpZXdBcmVhKSkKICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbGJhci5nZXQoKTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQorICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyICYmIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmludGVy
c2VjdHModmlld0FyZWEpKQogICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQo
KTsKICAgICByZXR1cm4gMDsKIH0KIAorU2Nyb2xsYmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJB
dFBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK3sKKyAgICByZXR1cm4gc2Nyb2xs
YmFyQXRBcmVhKEludFJlY3Qod2luZG93UG9pbnQsIEludFNpemUoMSwgMSkpKTsKK30KKwogdm9p
ZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKIHsKICAgICAv
LyBXZSBkb24ndCBhbGxvdyBtb3VzZSB3aGVlbGluZyB0byBoYXBwZW4gaW4gYSBTY3JvbGxWaWV3
IHRoYXQgaGFzIGhhZCBpdHMgc2Nyb2xsYmFycyBleHBsaWNpdGx5IGRpc2FibGVkLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAppbmRleCAxYjM4YzBiLi45MDI5NzYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaApA
QCAtMTk0LDYgKzE5NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZvciBwbGF0Zm9ybXMgdGhhdCBu
ZWVkIHRvIGhpdCB0ZXN0IHNjcm9sbGJhcnMgZnJvbSB3aXRoaW4gdGhlIGVuZ2luZSdzIGV2ZW50
IGhhbmRsZXJzIChsaWtlIFdpbjMyKS4KICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhckF0UG9pbnQo
Y29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhckF0
QXJlYShjb25zdCBJbnRSZWN0JiB3aW5kb3dBcmVhKTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZXhpc3RzIGZvciBzY3JvbGx2aWV3cyB0aGF0IG5lZWQgdG8gaGFuZGxlIHdoZWVsIGV2ZW50cyBt
YW51YWxseS4KICAgICAvLyBPbiBNYWMgdGhlIHVuZGVybHlpbmcgTlNTY3JvbGxWaWV3IGp1c3Qg
ZG9lcyB0aGUgc2Nyb2xsaW5nLCBidXQgb24gb3RoZXIgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9FbGxp
cHNpc0JveC5jcHAKaW5kZXggNmNiOTA2My4uMWEzNTkxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcApAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZQogICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKIH0KIAotYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSkKK2Jvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdEFyZWEoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SW50UmVjdCYgaGl0VGVzdEFyZWEsIGludCB0eCwgaW50IHR5KQogewogICAgIHR4ICs9IG1feDsK
ICAgICB0eSArPSBtX3k7CkBAIC0xMDcsMTQgKzEwNywxOCBAQCBib29sIEVsbGlwc2lzQm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdQogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZShtX2Zp
cnN0TGluZSk7CiAgICAgICAgIGludCBtdHggPSB0eCArIG1fd2lkdGggLSBtX21hcmt1cEJveC0+
eCgpOwogICAgICAgICBpbnQgbXR5ID0gdHkgKyBzdHlsZS0+Zm9udCgpLmFzY2VudCgpIC0gKG1f
bWFya3VwQm94LT55KCkgKyBtX21hcmt1cEJveC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExp
bmUpLT5mb250KCkuYXNjZW50KCkpOwotICAgICAgICBpZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgbXR4LCBtdHkpKSB7Ci0gICAgICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIG10eCwgeSAt
IG10eSkpOworICAgICAgICBpZiAobV9tYXJrdXBCb3gtPm5vZGVBdEFyZWEocmVxdWVzdCwgcmVz
dWx0LCBoaXRUZXN0QXJlYSwgbXR4LCBtdHkpKSB7CisgICAgICAgICAgICBJbnRQb2ludCByZW5k
ZXJQb2ludCA9IGhpdFRlc3RBcmVhLmNlbnRlcigpOworICAgICAgICAgICAgcmVuZGVyUG9pbnQu
bW92ZSgtbXR4LCAtbXR5KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCByZW5kZXJQb2ludCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgSW50UmVj
dCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0KS5jb250YWlucyh4LCB5KSkgewotICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5
IC0gdHkpKTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIEludFJlY3QodHgsIHR5
LCBtX3dpZHRoLCBtX2hlaWdodCkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpIHsKKyAgICAgICAg
SW50UG9pbnQgcmVuZGVyUG9pbnQgPSBoaXRUZXN0QXJlYS5jZW50ZXIoKTsKKyAgICAgICAgcmVu
ZGVyUG9pbnQubW92ZSgtdHgsIC10eSk7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCByZW5kZXJQb2ludCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBiL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKaW5kZXggMDg3ZmM3Mi4uMzdhYzQ3ZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFJlY3QmIGFyZWEsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHNldFNl
bGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlv
blN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgdHgsIGludCB0eSk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNTA5MzNjNi4uYmNiNjlmYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTQ3LDcgKzQ3LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhpdFRlc3RSZXN1
bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIHBvaW50KQotICAgIDogbV9wb2ludChw
b2ludCkKKyAgICA6IG1fYXJlYShwb2ludCwgSW50U2l6ZSgxLCAxKSkKKyAgICAsIG1faXNPdmVy
V2lkZ2V0KGZhbHNlKQoreworfQorCitIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0
IEludFJlY3QmIGFyZWEpCisgICAgOiBtX2FyZWEoYXJlYSkKICAgICAsIG1faXNPdmVyV2lkZ2V0
KGZhbHNlKQogewogfQpAQCAtNTUsNyArNjEsNyBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVz
dWx0KGNvbnN0IEludFBvaW50JiBwb2ludCkKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgOiBtX2lubmVyTm9kZShvdGhlci5pbm5l
ck5vZGUoKSkKICAgICAsIG1faW5uZXJOb25TaGFyZWROb2RlKG90aGVyLmlubmVyTm9uU2hhcmVk
Tm9kZSgpKQotICAgICwgbV9wb2ludChvdGhlci5wb2ludCgpKQorICAgICwgbV9hcmVhKG90aGVy
LmFyZWEoKSkKICAgICAsIG1fbG9jYWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCiAgICAgLCBt
X2lubmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCiAgICAgLCBtX3Njcm9sbGJhcihv
dGhlci5zY3JvbGxiYXIoKSkKQEAgLTcxLDcgKzc3LDcgQEAgSGl0VGVzdFJlc3VsdCYgSGl0VGVz
dFJlc3VsdDo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQogewogICAgIG1f
aW5uZXJOb2RlID0gb3RoZXIuaW5uZXJOb2RlKCk7CiAgICAgbV9pbm5lck5vblNoYXJlZE5vZGUg
PSBvdGhlci5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBtX3BvaW50ID0gb3RoZXIucG9pbnQo
KTsKKyAgICBtX2FyZWEgPSBvdGhlci5hcmVhKCk7CiAgICAgbV9sb2NhbFBvaW50ID0gb3RoZXIu
bG9jYWxQb2ludCgpOwogICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgp
OwogICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CkBAIC0xMzIsNyArMTM4LDcg
QEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc1NlbGVjdGVkKCkgY29uc3QKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigp
LT5jb250YWlucyhtX3BvaW50KTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5jb250
YWlucyhtX2FyZWEuY2VudGVyKCkpOwogfQogCiBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxp
bmdUb29sVGlwKFRleHREaXJlY3Rpb24mIGRpcikgY29uc3QKQEAgLTE0Myw3ICsxNDksNyBAQCBT
dHJpbmcgSGl0VGVzdFJlc3VsdDo6c3BlbGxpbmdUb29sVGlwKFRleHREaXJlY3Rpb24mIGRpcikg
Y29uc3QKICAgICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgCi0gICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1faW5uZXJOb25TaGFy
ZWROb2RlLT5kb2N1bWVudCgpLT5tYXJrZXJDb250YWluaW5nUG9pbnQobV9wb2ludCwgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIpOworICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtX2lubmVy
Tm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VyQ29udGFpbmluZ1BvaW50KG1fYXJlYS5j
ZW50ZXIoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgIGlmICghbWFya2VyKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTE1OSw3ICsxNjUsNyBAQCBTdHJpbmcgSGl0VGVz
dFJlc3VsdDo6cmVwbGFjZWRTdHJpbmcoKSBjb25zdAogICAgIGlmICghbV9pbm5lck5vblNoYXJl
ZE5vZGUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKLSAgICBEb2N1bWVudE1hcmtl
ciogbWFya2VyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50KCktPm1hcmtlckNvbnRh
aW5pbmdQb2ludChtX3BvaW50LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIERv
Y3VtZW50TWFya2VyKiBtYXJrZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS0+
bWFya2VyQ29udGFpbmluZ1BvaW50KG1fYXJlYS5jZW50ZXIoKSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KTsKICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIApAQCAtMzYyLDQgKzM2OCwxNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVk
aXRhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCk7CiB9CiAKK3ZvaWQgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdElmTmVl
ZGVkKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlIHx8ICFpc1JlY3RCYXNlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9y
IGxhc3QgPSBtX25vZGVMaXN0LmVuZCgpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxOb2RlPiA+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZUxpc3QuYmVnaW4oKTsgaXQgIT0gbGFzdDsgKytp
dCkKKyAgICAgICAgaWYgKCgqaXQpID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICBtX25vZGVMaXN0LmFwcGVuZChub2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IGQxOTA2YmEuLmFlMDNlYWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTIxLDggKzIxLDEwIEBACiAjZGVmaW5lIEhpdFRlc3RS
ZXN1bHRfaAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsNiArMzks
NyBAQCBjbGFzcyBTdHJpbmc7CiAKIGNsYXNzIEhpdFRlc3RSZXN1bHQgewogcHVibGljOgorICAg
IEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UmVjdCYpOwogICAgIEhpdFRlc3RSZXN1bHQoY29uc3Qg
SW50UG9pbnQmKTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAg
ICB+SGl0VGVzdFJlc3VsdCgpOwpAQCAtNDQsNyArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBOb2Rl
KiBpbm5lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX2lubmVyTm9kZS5nZXQoKTsgfQogICAgIE5v
ZGUqIGlubmVyTm9uU2hhcmVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXJOb25TaGFyZWRO
b2RlLmdldCgpOyB9Ci0gICAgSW50UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50
OyB9CisgICAgSW50UmVjdCBhcmVhKCkgY29uc3QgeyByZXR1cm4gbV9hcmVhOyB9CisgICAgSW50
UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FyZWEuY2VudGVyKCk7IH0KICAgICBJbnRQ
b2ludCBsb2NhbFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFBvaW50OyB9CiAgICAgRWxl
bWVudCogVVJMRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXJVUkxFbGVtZW50LmdldCgp
OyB9CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJh
ci5nZXQoKTsgfQpAQCAtNTQsNyArNTgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldElubmVy
Tm9kZShOb2RlKik7CiAgICAgdm9pZCBzZXRJbm5lck5vblNoYXJlZE5vZGUoTm9kZSopOwotICAg
IHZvaWQgc2V0UG9pbnQoY29uc3QgSW50UG9pbnQmIHApIHsgbV9wb2ludCA9IHA7IH0KICAgICB2
b2lkIHNldExvY2FsUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIHsgbV9sb2NhbFBvaW50ID0gcDsg
fQogICAgIHZvaWQgc2V0VVJMRWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCBzZXRTY3JvbGxi
YXIoU2Nyb2xsYmFyKik7CkBAIC03NSwxMSArNzgsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyB0
ZXh0Q29udGVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNMaXZlTGluaygpIGNvbnN0OwogICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKKyAgICBib29sIGlzUmVjdEJhc2VkKCkgY29u
c3QgeyByZXR1cm4gbV9hcmVhLnNpemUoKSAhPSBJbnRTaXplKDEsIDEpOyB9CisgICAgdm9pZCBh
ZGROb2RlVG9MaXN0SWZOZWVkZWQoTm9kZSogbm9kZSk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBub2RlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3Q7IH0KIAogcHJp
dmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5lck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1f
aW5uZXJOb25TaGFyZWROb2RlOwotICAgIEludFBvaW50IG1fcG9pbnQ7CisgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG1fbm9kZUxpc3Q7CisgICAgSW50UmVjdCBtX2FyZWE7CiAgICAgSW50UG9p
bnQgbV9sb2NhbFBvaW50OyAvLyBBIHBvaW50IGluIHRoZSBsb2NhbCBjb29yZGluYXRlIHNwYWNl
IG9mIG1faW5uZXJOb25TaGFyZWROb2RlJ3MgcmVuZGVyZXIuICBBbGxvd3MgdXMgdG8gZWZmaWNp
ZW50bHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSB3aGVyZSBpbnNp
ZGUgdGhlIHJlbmRlcmVyIHdlIGhpdCBvbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCiAgICAgUmVm
UHRyPEVsZW1lbnQ+IG1faW5uZXJVUkxFbGVtZW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKaW5k
ZXggMjEzNzM3Yy4uMjFiYjQwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCkBAIC0xODUsMTAg
KzE4NSwxNSBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAKIGJvb2wgSW5saW5lQm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KQogeworICAgIHJldHVybiBub2RlQXRBcmVhKHJl
cXVlc3QsIHJlc3VsdCwgSW50UmVjdCh4LCB5LCAxLCAxKSwgdHgsIHR5KTsKK30KKworYm9vbCBJ
bmxpbmVCb3g6Om5vZGVBdEFyZWEoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UmVjdCYgaGl0VGVzdEFyZWEsIGludCB0eCwgaW50
IHR5KQorewogICAgIC8vIEhpdCB0ZXN0IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQgZWxlbWVudHMg
YXRvbWljYWxseSwgYXMgdGhvdWdoIHRoZSByZXBsYWNlZCBlbGVtZW50IGVzdGFibGlzaGVkIGl0
cwogICAgIC8vIG93biBzdGFja2luZyBjb250ZXh0LiAgKFNlZSBBcHBlbmRpeCBFLjIsIHNlY3Rp
b24gNi40IG9uIGlubGluZSBibG9jay90YWJsZSBlbGVtZW50cyBpbiB0aGUgQ1NTMi4xCiAgICAg
Ly8gc3BlY2lmaWNhdGlvbi4pCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVz
dCwgcmVzdWx0LCBJbnRQb2ludCh4LCB5KSwgdHgsIHR5KTsKKyAgICByZXR1cm4gcmVuZGVyZXIo
KS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB0eCwgdHkpOwogfQogCiBj
b25zdCBSb290SW5saW5lQm94KiBJbmxpbmVCb3g6OnJvb3QoKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guaAppbmRleCBlMTY1ZjBjLi4wOWNlOGZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaApAQCAtMTE0
LDYgKzExNCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5
LCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEFyZWEoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UmVjdCYgaGl0VGVzdEFyZWEs
IGludCB0eCwgaW50IHR5KTsKIAogICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLgogICAg
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIFJlbmRlckFyZW5hKikgdGhyb3coKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggNmZkZWVhMy4uMzMxOGZhMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTYwNywyNSArNjA3LDI4IEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6Y29tcHV0ZVZlcnRpY2FsT3ZlcmZsb3coaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tLCBib29sIHN0CiAgICAgc2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyh0b3BMYXlvdXRP
dmVyZmxvdywgYm90dG9tTGF5b3V0T3ZlcmZsb3csIHRvcFZpc3VhbE92ZXJmbG93LCBib3R0b21W
aXN1YWxPdmVyZmxvdywgYm94SGVpZ2h0KTsKIH0KIAotYm9vbCBJbmxpbmVGbG93Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KQorYm9vbCBJbmxpbmVGbG93Qm94Ojpu
b2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSkKIHsKICAg
ICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXNpYmxlT3ZlcmZsb3dSZWN0KCkpOwogICAgIG92ZXJm
bG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFvdmVyZmxvd1JlY3QuY29udGFpbnMoeCwg
eSkpCisgICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIEludFBvaW50IHJlbmRlclBvaW50ID0gaGl0VGVzdEFy
ZWEuY2VudGVyKCk7CisgICAgcmVuZGVyUG9pbnQubW92ZSgtdHgsIC10eSk7CisKICAgICAvLyBD
aGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGxhc3RDaGls
ZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vy
ci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
eCwgeSwgdHgsIHR5KSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CisgICAgICAgIGlmICgoY3Vy
ci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdEFyZWEocmVxdWVzdCwgcmVzdWx0LCBo
aXRUZXN0QXJlYSwgdHgsIHR5KSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHJlbmRlclBvaW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91cnNlbHZlcy4KICAgICBJ
bnRSZWN0IHJlY3QodHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAg
aWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmNvbnRhaW5zKHgsIHkpKSB7Ci0gICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0g
dHgsIHkgLSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNv
b3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgorICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSkgeworICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcmVuZGVyUG9pbnQpOyAvLyBE
b24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFp
bmluZyBibG9jaydzIHNwYWNlLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmgKaW5kZXggZTkzOWZiNC4uZmRmNzg2YyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guaApAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
YWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFNoYWRvd1N0eWxl
LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
ZXh0RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwg
Ym9vbCBwYWludGVkQ2hpbGRyZW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0QXJlYShj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRSZWN0JiBoaXRU
ZXN0QXJlYSwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmlydHVhbCBSZW5kZXJMaW5lQm94TGlz
dCogcmVuZGVyZXJMaW5lQm94ZXMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAppbmRleCBmOTRiYTk0Li41NWM2OGE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcApAQCAtMjYwLDE0ICsyNjAsMTYgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVh
aygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+
c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRSZW5kZXJl
cigpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwogfQogCi1ib29sIElubGluZVRleHRCb3g6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2Rl
QXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKGlzTGlu
ZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCAr
IG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAobV90cnVuY2F0aW9u
ICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250
YWlucyh4LCB5KSkgewotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKKyAgICBpZiAobV90cnVuY2F0aW9uICE9
IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNl
Y3RzKGhpdFRlc3RBcmVhKSkgeworICAgICAgICBJbnRQb2ludCByZW5kZXJQb2ludCA9IGhpdFRl
c3RBcmVhLmNlbnRlcigpOworICAgICAgICByZW5kZXJQb2ludC5tb3ZlKC10eCwgLXR5KTsKKyAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJlbmRlclBvaW50
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAppbmRleCBkMDNkZTg1Li44NWU2NGM3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFJlY3QmLCBpbnQgdHgsIGludCB0eSk7CiAKIHB1YmxpYzoKICAgICBSZW5k
ZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApp
bmRleCBmMjNmODkwLi40ZGM3MmI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0z
NzI3LDI4ICszNzI3LDM0IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29u
dHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95CiAgICAgcmV0dXJuIGxh
eWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgSW50UG9pbnQoX3ggLSBfdHgs
IF95IC0gX3R5KSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50
IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29s
IFJlbmRlckJsb2NrOjpub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIGludCB0eCA9IF90
eCArIHgoKTsKLSAgICBpbnQgdHkgPSBfdHkgKyB5KCk7CisgICAgaW50IHR4ID0gdHggKyB4KCk7
CisgICAgaW50IHR5ID0gdHkgKyB5KCk7CisKKyAgICBJbnRQb2ludCByZW5kZXJQb2ludCA9IGhp
dFRlc3RBcmVhLmNlbnRlcigpOworICAgIHJlbmRlclBvaW50Lm1vdmUoLXR4LCAtdHkpOwogCiAg
ICAgaWYgKCFpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRv
IGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IHZpc2li
bGVPdmVyZmxvd1JlY3QoKTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOwotICAg
ICAgICBpZiAoIW92ZXJmbG93Qm94LmNvbnRhaW5zKF94LCBfeSkpCisgICAgICAgIGlmICghb3Zl
cmZsb3dCb3guaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tn
cm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYm
IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94LCBfeSwgdHgsIHR5KSkgewotICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0
eSkpOworICAgIC8vIFhYWHRvbmlraXRvbworICAgIGludCB4ID0gaGl0VGVzdEFyZWEuY2VudGVy
KCkueCgpOworICAgIGludCB5ID0gaGl0VGVzdEFyZWEuY2VudGVyKCkueSgpOworICAgIGlmICgo
aGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24g
PT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1BvaW50SW5PdmVyZmxvd0NvbnRy
b2wocmVzdWx0LCB4LCB5LCB0eCwgdHkpKSB7CisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCByZW5kZXJQb2ludCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAg
IC8vIElmIHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQu
CiAgICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8
fCB1c2VPdmVyZmxvd0NsaXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8
IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gs
IF95KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBi
b29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRy
b2xDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpIDogb3ZlcmZsb3dDbGlw
UmVjdCh0eCwgdHkpLmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKTsKICAgICBpZiAoY2hlY2tDaGls
ZHJlbikgewogICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAg
aW50IHNjcm9sbGVkWCA9IHR4OwpAQCAtMzc2MCwxNCArMzc2NiwxNCBAQCBib29sIFJlbmRlckJs
b2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdQogICAgICAgICB9CiAKICAgICAgICAgLy8gSGl0IHRlc3QgY29udGVudHMgaWYg
d2UgZG9uJ3QgaGF2ZSBjb2x1bW5zLgotICAgICAgICBpZiAoIWhhc0NvbHVtbnMoKSAmJiBoaXRU
ZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBfeCwgX3ksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZ
LCBoaXRUZXN0QWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKKyAgICAgICAgaWYgKCFoYXNDb2x1bW5z
KCkgJiYgaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIHNjcm9s
bGVkWCwgc2Nyb2xsZWRZLCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHJlbmRlclBvaW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gSGl0IHRlc3Qgb3VyIGNvbHVtbnMgaWYgd2UgZG8g
aGF2ZSB0aGVtLgotICAgICAgICBpZiAoaGFzQ29sdW1ucygpICYmIGhpdFRlc3RDb2x1bW5zKHJl
cXVlc3QsIHJlc3VsdCwgX3gsIF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgaGl0VGVzdEFjdGlv
bikpIHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChf
eCAtIHR4LCBfeSAtIHR5KSk7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkgJiYgaGl0VGVzdENv
bHVtbnMocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgc2Nyb2xsZWRYLCBzY3JvbGxlZFks
IGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgcmVuZGVyUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApA
QCAtMzc4NCw4ICszNzkwLDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgICAg
ICAgICAgaWYgKG8tPm1fc2hvdWxkUGFpbnQgJiYgIW8tPm1fcmVuZGVyZXItPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHhvZmZzZXQgPSBzY3JvbGxl
ZFggKyBvLT5tX2xlZnQgKyBvLT5tX3JlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLSBvLT5tX3JlbmRl
cmVyLT54KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCB5b2Zmc2V0ID0gIHNjcm9sbGVkWSAr
IG8tPm1fdG9wICsgby0+bV9yZW5kZXJlci0+bWFyZ2luVG9wKCkgLSBvLT5tX3JlbmRlcmVyLT55
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvLT5tX3JlbmRlcmVyLT5oaXRUZXN0KHJlcXVl
c3QsIHJlc3VsdCwgSW50UG9pbnQoX3gsIF95KSwgeG9mZnNldCwgeW9mZnNldCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChf
eCAtIHhvZmZzZXQsIF95IC0geW9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoby0+
bV9yZW5kZXJlci0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB4b2Zmc2V0
LCB5b2Zmc2V0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQgcmVuZGVyUG9p
bnQgPSBoaXRUZXN0QXJlYS5jZW50ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRl
clBvaW50Lm1vdmUoLXhvZmZzZXQsIC15b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByZW5kZXJQb2ludCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTM3OTYsOCArMzgwNCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAg
ICAgLy8gTm93IGhpdCB0ZXN0IG91ciBiYWNrZ3JvdW5kCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24g
PT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGls
ZEJsb2NrQmFja2dyb3VuZCkgewogICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QodHgsIHR5LCB3
aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYg
Ym91bmRzUmVjdC5jb250YWlucyhfeCwgX3kpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOworICAgICAgICBpZiAo
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0QXJl
YSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByZW5kZXJQb2lu
dCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTM4MDcs
NiArMzgxNSwxMSBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogCiBib29sIFJlbmRlckJsb2Nr
OjpoaXRUZXN0Q29sdW1ucyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCiB7CisgICAgcmV0dXJuIGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJl
c3VsdCwgSW50UmVjdCh4LCB5LCAxLCAxKSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKK30KKwor
Ym9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UmVjdCYgaGl0VGVzdEFyZWEs
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CiAgICAgLy8g
V2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGlu
ZyBpbnRvIHN0cmlwcy4KICAgICBWZWN0b3I8SW50UmVjdD4qIGNvbFJlY3RzID0gY29sdW1uUmVj
dHMoKTsKICAgICBpbnQgY29sQ291bnQgPSBjb2xSZWN0cy0+c2l6ZSgpOwpAQCAtMzgyMywxMyAr
MzgzNiwxMyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcgogICAgICAgICBjdXJyWU9mZnNldCAr
PSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5KTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChjb2xSZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgICAgIGlmIChj
b2xSZWN0LmludGVyc2VjdHMoaGl0VGVzdEFyZWEpKSB7CiAgICAgICAgICAgICAvLyBUaGUgcG9p
bnQgaXMgaW5zaWRlIHRoaXMgY29sdW1uLgogICAgICAgICAgICAgLy8gQWRqdXN0IHR4IGFuZCB0
eSB0byBjaGFuZ2Ugd2hlcmUgd2UgaGl0IHRlc3QuCiAgICAgICAgIAogICAgICAgICAgICAgaW50
IGZpbmFsWCA9IHR4ICsgY3VyclhPZmZzZXQ7CiAgICAgICAgICAgICBpbnQgZmluYWxZID0gdHkg
KyBjdXJyWU9mZnNldDsKLSAgICAgICAgICAgIHJldHVybiBoaXRUZXN0Q29udGVudHMocmVxdWVz
dCwgcmVzdWx0LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwgaGl0VGVzdEFjdGlvbik7CisgICAgICAg
ICAgICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEs
IGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MzgzOCw5ICszODUxLDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAKIGJvb2wgUmVuZGVy
QmxvY2s6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CisgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1
ZXN0LCByZXN1bHQsIEludFJlY3QoeCwgeSwgMSwgMSksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbik7
Cit9CisKK2Jvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRSZWN0JiBoaXRU
ZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK3sK
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSAmJiAhaXNUYWJsZSgpKSB7CiAgICAgICAgIC8vIFdl
IGhhdmUgdG8gaGl0LXRlc3Qgb3VyIGxpbmUgYm94ZXMuCi0gICAgICAgIGlmIChtX2xpbmVCb3hl
cy5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0
aW9uKSkKKyAgICAgICAgaWYgKG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVz
dWx0LCBoaXRUZXN0QXJlYSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IG91ciBjaGlsZHJl
bi4KQEAgLTM4NDgsNyArMzg2Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50
cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYKICAgICAgICAg
aWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcykKICAgICAg
ICAgICAgIGNoaWxkSGl0VGVzdCA9IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZDsKICAgICAg
ICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbGFzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5wcmV2aW91c1NpYmxpbmdCb3goKSkgewotICAgICAgICAgICAgaWYgKCFjaGlsZC0+
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGNoaWxkSGl0VGVzdCkp
CisgICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGls
ZC0+aXNGbG9hdGluZygpICYmIGNoaWxkLT5ub2RlQXRBcmVhKHJlcXVlc3QsIHJlc3VsdCwgaGl0
VGVzdEFyZWEsIHR4LCB0eSwgY2hpbGRIaXRUZXN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTU0MzQsMTcgKzU0NTIsMjEgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0KikKIAogdm9pZCBSZW5k
ZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBOb2RlKiBuID0gbm9kZSgpOwotICAgIGlmIChpc0Fub255bW91c0Js
b2NrQ29udGludWF0aW9uKCkpCisgICAgaWYgKGlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24o
KSkgewogICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIG1hcmdpbnMgb2YgYmxvY2sgZWxlbWVudHMg
dGhhdCBhcmUgcGFydCBvZiBhIGNvbnRpbnVhdGlvbi4gIEluCiAgICAgICAgIC8vIHRoaXMgY2Fz
ZSB3ZSdyZSBhY3R1YWxseSBzdGlsbCBpbnNpZGUgdGhlIGVuY2xvc2luZyBlbGVtZW50IHRoYXQg
d2FzCiAgICAgICAgIC8vIHNwbGl0LiAgR28gYWhlYWQgYW5kIHNldCBvdXIgaW5uZXIgbm9kZSBh
Y2NvcmRpbmdseS4KICAgICAgICAgbiA9IGNvbnRpbnVhdGlvbigpLT5ub2RlKCk7CisgICAgfQog
CiAgICAgaWYgKG4pIHsKKworICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdElmTmVlZGVkKG4p
OworCisgICAgICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkpCisgICAgICAgICAgICByZXR1cm47
CisKICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShuKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFy
ZWROb2RlKG4pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggOGM2MWUyYy4uMjM4M2ZkYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yMDMsNyArMjAzLDcgQEAgcHJvdGVjdGVkOgog
ICAgIGludCByaWdodFJlbE9mZnNldChpbnQgeSwgaW50IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5
VGV4dEluZGVudCA9IHRydWUsIGludCogaGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CiAgICAg
aW50IGxlZnRSZWxPZmZzZXQoaW50IHksIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJ
bmRlbnQgPSB0cnVlLCBpbnQqIGhlaWdodFJlbWFpbmluZyA9IDApIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0
QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCkBAIC0zNDAs
NyArMzQwLDkgQEAgcHJpdmF0ZToKICAgICBpbnQgcmlnaHRPZmZzZXQoKSBjb25zdDsKICAgICBp
bnQgbGVmdE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoaXRUZXN0Q29sdW1ucyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdENvbHVt
bnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UmVjdCYg
aGl0VGVzdEFyZWEsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFs
IGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZp
cnR1YWwgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UmVjdCYgaGl0VGVzdEFyZWEsIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wo
SGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAppbmRleCBjY2RiYmM3Li42MTMyM2JmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTUzNywyMyArNTM3LDI2IEBAIGludCBSZW5kZXJCb3g6OmNhbGNDb250ZW50Qm94
SGVpZ2h0KGludCBoZWlnaHQpIGNvbnN0CiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRl
ckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0QXJlYShjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRSZWN0JiBo
aXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAg
IHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKKyAgICBJbnRQb2ludCByZW5kZXJQb2ludCA9
IGhpdFRlc3RBcmVhLmNlbnRlcigpOworICAgIHJlbmRlclBvaW50Lm1vdmUoLXR4LCAtdHkpOwor
CiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7
Ci0gICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7Ci0gICAgICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0g
dHkpKTsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0QXJl
YShyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByZW5kZXJQb2ludCk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIENoZWNrIG91ciBi
b3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9u
bHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUg
Zm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICBpZiAodmlzaWJsZVRvSGl0
VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0
eSwgd2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7Ci0gICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkp
OworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3Jl
Z3JvdW5kICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkuaW50ZXJzZWN0cyho
aXRUZXN0QXJlYSkpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJlbmRl
clBvaW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CmluZGV4IDNkNGMxZTYuLmJmMmM2YTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0xNjIsNyAr
MTYyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFJlY3QmIGFyZWEsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNw
cAppbmRleCA1MmM0Y2RkLi5mZDBjMDRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCkBAIC0xNTYsMTMgKzE1NiwxMiBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgfQogfQogCi1ib29sIFJlbmRl
ckZyYW1lU2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJGcmFtZVNldDo6bm9kZUF0QXJlYShjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewogICAgIGlmIChhY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyQm94Ojpub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKQorICAgIGJvb2wgaW5zaWRlID0gUmVu
ZGVyQm94Ojpub2RlQXRBcmVhKHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIHR4LCB0eSwg
YWN0aW9uKQogICAgICAgICB8fCBtX2lzUmVzaXppbmc7CiAKICAgICBpZiAoaW5zaWRlICYmIGZy
YW1lU2V0KCktPm5vUmVzaXplKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCmluZGV4IGQw
YWIzNDYuLmYxYTg1MTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1l
U2V0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaApAQCAtOTIsNyAr
OTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAg
ICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCBjNDI1MDdhLi4wZGIw
NTRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC01MDEsMTAgKzUwMSwxNCBAQCBI
VE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKICAgICByZXR1cm4g
aSA/IGktPmRvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFw
QXR0cikpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5k
ZXJJbWFnZTo6bm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBIaXRUZXN0UmVzdWx0IHRl
bXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOwotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFj
ZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRlbXBSZXN1bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVz
dEFjdGlvbik7CisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0QXJlYShy
ZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0QXJlYSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsK
KworICAgIC8vIFhYWHRvbmlraXRvbworICAgIGludCB4ID0gaGl0VGVzdEFyZWEuY2VudGVyKCku
eCgpOworICAgIGludCB5ID0gaGl0VGVzdEFyZWEuY2VudGVyKCkueSgpOwogCiAgICAgaWYgKGlu
c2lkZSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAgPSBpbWFn
ZU1hcCgpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAppbmRleCBiODlhNjUyLi4xZjI2NmJjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmgKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAg
ICAgdmlydHVhbCBpbnQgY2FsY1JlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0
cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IDM1ZmMzMjQuLjUxZmJlMjkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtNDkyLDEwICs0OTIsMTAgQEAgY29uc3QgY2hh
ciogUmVuZGVySW5saW5lOjpyZW5kZXJOYW1lKCkgY29uc3QKICAgICByZXR1cm4gIlJlbmRlcklu
bGluZSI7CiB9CiAKLWJvb2wgUmVuZGVySW5saW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlcklubGluZTo6bm9kZUF0QXJlYShjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIHJldHVybiBtX2xp
bmVCb3hlcy5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRU
ZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogfQogCiBWaXNp
YmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkKQEAgLTgwOSwxMCArODA5LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjpjaGlsZEJl
Y2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqIGNoaWxkKQogCiB2b2lkIFJlbmRlcklubGluZTo6
dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkKIHsKKyAgICBOb2RlKiBuID0gbm9kZSgpOworICAgIHJlc3VsdC5hZGROb2RlVG9M
aXN0SWZOZWVkZWQobik7CisKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBOb2RlKiBuID0gbm9kZSgpOwogICAgIEludFBvaW50IGxvY2FsUG9pbnQo
cG9pbnQpOwogICAgIGlmIChuKSB7CiAgICAgICAgIGlmIChpc0lubGluZUVsZW1lbnRDb250aW51
YXRpb24oKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCBhNzE5YTUwLi5hZDg5OGE1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygp
OyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA0MWY0YWNhLi4xNGE5NmU5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yNjA2LDcgKzI2MDYsNyBAQCBib29sIFJl
bmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQpCiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAg
ICAgIGJvdW5kc1JlY3QuaW50ZXJzZWN0KGZyYW1lVmlzaWJsZVJlY3QocmVuZGVyZXIoKSkpOwog
Ci0gICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIDAsIHJl
cXVlc3QsIHJlc3VsdCwgYm91bmRzUmVjdCwgcmVzdWx0LnBvaW50KCksIGZhbHNlKTsKKyAgICBS
ZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgMCwgcmVxdWVzdCwg
cmVzdWx0LCBib3VuZHNSZWN0LCByZXN1bHQuYXJlYSgpLCBmYWxzZSk7CiAgICAgaWYgKCFpbnNp
ZGVMYXllcikgewogICAgICAgICAvLyBXZSBkaWRuJ3QgaGl0IGFueSBsYXllci4gSWYgd2UgYXJl
IHRoZSByb290IGxheWVyIGFuZCB0aGUgbW91c2UgaXMgLS0gb3IganVzdCB3YXMgLS0gZG93biwg
CiAgICAgICAgIC8vIHJldHVybiBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgc28gbW91c2UgZXZlbnRz
IGNvbnRpbnVlIGdldHRpbmcgZGVsaXZlcmVkIGFmdGVyIGEgZHJhZyBoYXMgCkBAIC0yNjU4LDcg
KzI2NTgsNyBAQCBzdGF0aWMgZG91YmxlIGNvbXB1dGVaT2Zmc2V0KGNvbnN0IEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpCiB9CiAKIFBhc3NSZWZQdHI8SGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlPiBSZW5kZXJMYXllcjo6Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgaGl0VGVz
dFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgaGl0VGVzdEJvdW5kaW5nUmVjdCwg
Y29uc3QgSW50UmVjdCYgaGl0VGVzdEFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiBjb250YWluZXJUcmFu
c2Zvcm1TdGF0ZSkgY29uc3QKIHsKICAgICBSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
PiB0cmFuc2Zvcm1TdGF0ZTsKQEAgLTI2NjksOSArMjY2OSwxMCBAQCBQYXNzUmVmUHRyPEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3Rh
dGUoUmVuZAogICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZTo6Y3JlYXRlKCpjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSk7CiAgICAgICAgIGNvbnZlcnRUb0xh
eWVyQ29vcmRzKGNvbnRhaW5lckxheWVyLCBvZmZzZXRYLCBvZmZzZXRZKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFrZSB0
cmFuc2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFBvaW50LAorICAgICAg
ICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFrZSB0cmFuc2Zvcm0g
c3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdEFyZWEsCiAgICAgICAgIC8vIHdoaWNo
IGlzIHJlbGF0aXZlIHRvIHJvb3RMYXllci4KLSAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRU
ZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZShoaXRUZXN0UG9pbnQsIEZsb2F0UXVhZChoaXRU
ZXN0UmVjdCkpOworICAgICAgICAvLyBYWFh0b25pa2l0b286IG5lZWRzIHJlY3QtYmFzZWQgZml4
ZWQgaGVyZSEKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGU6OmNyZWF0ZShoaXRUZXN0QXJlYS5jZW50ZXIoKSwgRmxvYXRRdWFkKGhpdFRlc3RCb3VuZGlu
Z1JlY3QpKTsKICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXRY
LCBvZmZzZXRZKTsKICAgICB9CiAgICAgCkBAIC0yNzEyLDE2ICsyNzEzLDE2IEBAIHN0YXRpYyBi
b29sIGlzSGl0Q2FuZGlkYXRlKGNvbnN0IFJlbmRlckxheWVyKiBoaXRMYXllciwgYm9vbCBjYW5E
ZXB0aFNvcnQsIGRvdWJsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIGhpdFRlc3RQb2ludCBh
bmQgaGl0VGVzdFJlY3QgYXJlIHJlbGF0aXZlIHRvIHJvb3RMYXllci4KKy8vIGhpdFRlc3RBcmVh
IGFuZCBoaXRUZXN0Qm91bmRpbmdSZWN0IGFyZSByZWxhdGl2ZSB0byByb290TGF5ZXIuCiAvLyBB
ICdmbGF0dGVuaW5nJyBsYXllciBpcyBvbmUgcHJlc2VydmVzM0QoKSA9PSBmYWxzZS4KIC8vIHRy
YW5zZm9ybVN0YXRlLm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0gaG9sZHMgdGhlIHRyYW5zZm9ybSBm
cm9tIHRoZSBjb250YWluaW5nIGZsYXR0ZW5pbmcgbGF5ZXIuCi0vLyB0cmFuc2Zvcm1TdGF0ZS5t
X2xhc3RQbGFuYXJQb2ludCBpcyB0aGUgaGl0VGVzdFBvaW50IGluIHRoZSBwbGFuZSBvZiB0aGUg
Y29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgotLy8gdHJhbnNmb3JtU3RhdGUubV9sYXN0UGxh
bmFyUXVhZCBpcyB0aGUgaGl0VGVzdFJlY3QgYXMgYSBxdWFkIGluIHRoZSBwbGFuZSBvZiB0aGUg
Y29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgorLy8gdHJhbnNmb3JtU3RhdGUubV9sYXN0UGxh
bmFyUG9pbnQgaXMgdGhlIGhpdFRlc3RBcmVhIGluIHRoZSBwbGFuZSBvZiB0aGUgY29udGFpbmlu
ZyBmbGF0dGVuaW5nIGxheWVyLgorLy8gdHJhbnNmb3JtU3RhdGUubV9sYXN0UGxhbmFyUXVhZCBp
cyB0aGUgaGl0VGVzdEJvdW5kaW5nUmVjdCBhcyBhIHF1YWQgaW4gdGhlIHBsYW5lIG9mIHRoZSBj
b250YWluaW5nIGZsYXR0ZW5pbmcgbGF5ZXIuCiAvLyAKIC8vIElmIHpPZmZzZXQgaXMgbm9uLW51
bGwgKHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsZXIgd2FudHMgeiBvZmZzZXQgaW5mb3Jt
YXRpb24pLCAKIC8vICAqek9mZnNldCBvbiByZXR1cm4gaXMgdGhlIHogb2Zmc2V0IG9mIHRoZSBo
aXQgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBsYXllci4KIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBJbnRQb2ludCYg
aGl0VGVzdFBvaW50LCBib29sIGFwcGxpZWRUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRUZXN0Qm91bmRpbmdSZWN0LCBj
b25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewogICAgIC8vIFRoZSBu
YXR1cmFsIHRoaW5nIHdvdWxkIGJlIHRvIGtlZXAgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlIG9u
IHRoZSBzdGFjaywgYnV0IGl0J3MgYmlnLCBzbyB3ZSBoZWFwLWFsbG9jYXRlLgpAQCAtMjczNywx
MiArMjczOCwxMiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBpZiAocGFyZW50
KCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qo
cm9vdExheWVyLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgICAgICAgICAgLy8gR28gYWhl
YWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KLSAgICAgICAgICAgIGlmICghY2xp
cFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkKKyAgICAgICAgICAgIGlmICghY2xpcFJlY3Qu
aW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0
ZSB0aGlzIHRyYW5zZm9ybS4KLSAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXll
ciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0
YXRlKTsKKyAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNm
b3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVy
TGF5ZXIsIGhpdFRlc3RCb3VuZGluZ1JlY3QsIGhpdFRlc3RBcmVhLCB0cmFuc2Zvcm1TdGF0ZSk7
CiAKICAgICAgICAgLy8gSWYgdGhlIHRyYW5zZm9ybSBjYW4ndCBiZSBpbnZlcnRlZCwgdGhlbiBk
b24ndCBoaXQgdGVzdCB0aGlzIGxheWVyIGF0IGFsbC4KICAgICAgICAgaWYgKCFuZXdUcmFuc2Zv
cm1TdGF0ZS0+bV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKQEAgLTI3NTIs
MjAgKzI3NTMsMjEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgLy8gZnJvbSB0
aGUgdHJhbnNmb3JtU3RhdGUsIHdoaWNoIHN0b3JlIHRoZSBwb2ludCBhbmQgcXVhZCBpbiB0aGUg
Y29vcmRzIG9mIHRoZSBsYXN0IGZsYXR0ZW5lZAogICAgICAgICAvLyBsYXllciwgYW5kIHRoZSBh
Y2N1bXVsYXRlZCB0cmFuc2Zvcm0gd2hpY2ggbGV0cyB1cCBtYXAgdGhyb3VnaCBwcmVzZXJ2ZS0z
ZCBsYXllcnMuCiAgICAgICAgIC8vCi0gICAgICAgIC8vIFdlIGNhbid0IGp1c3QgbWFwIGhpdFRl
c3RQb2ludCBhbmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGJlZW4gZmxhdHRl
bmVkIChsb3NpbmcgeikKKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBtYXAgaGl0VGVzdEFyZWEg
YW5kIGhpdFRlc3RCb3VuZGluZ1JlY3QgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGJlZW4gZmxhdHRl
bmVkIChsb3NpbmcgeikKICAgICAgICAgLy8gYnkgb3VyIGNvbnRhaW5lci4KICAgICAgICAgSW50
UG9pbnQgbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChuZXdUcmFuc2Zvcm1TdGF0ZS0+bWFw
cGVkUG9pbnQoKSk7CiAgICAgICAgIEludFJlY3QgbG9jYWxIaXRUZXN0UmVjdDsKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewot
ICAgICAgICAgICAgLy8gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHByb2plY3QgaGl0VGVzdFJl
Y3QgaW50byB0aGUgcGxhbmUgb2YgdGhpcyBsYXllciwgc28gdXNlIHRoZSBzYW1lIGJvdW5kcyB3
ZSB1c2UgZm9yIHBhaW50aW5nLgorICAgICAgICAgICAgLy8gSXQgZG9lc24ndCBtYWtlIHNlbnNl
IHRvIHByb2plY3QgaGl0VGVzdEJvdW5kaW5nUmVjdCBpbnRvIHRoZSBwbGFuZSBvZiB0aGlzIGxh
eWVyLCBzbyB1c2UgdGhlIHNhbWUgYm91bmRzIHdlIHVzZSBmb3IgcGFpbnRpbmcuCiAgICAgICAg
ICAgICBsb2NhbEhpdFRlc3RSZWN0ID0gYmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCk7CiAg
ICAgICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBsb2NhbEhpdFRlc3RSZWN0ID0gbmV3
VHJhbnNmb3JtU3RhdGUtPm1hcHBlZFF1YWQoKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogCiAg
ICAgICAgIC8vIE5vdyBkbyBhIGhpdCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0
byBiZSB1cy4KLSAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXllcih0aGlzLCBjb250YWluZXJMYXll
ciwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0LCBsb2NhbFBvaW50LCB0cnVlLCBu
ZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldCk7CisgICAgICAgIC8vIFhYWHRvbmlraXRv
bworICAgICAgICByZXR1cm4gaGl0VGVzdExheWVyKHRoaXMsIGNvbnRhaW5lckxheWVyLCByZXF1
ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJlY3QsIEludFJlY3QobG9jYWxQb2ludCwgSW50U2l6
ZSgxLCAxKSksIHRydWUsIG5ld1RyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0KTsKICAgICB9
CiAKICAgICAvLyBFbnN1cmUgb3VyIGxpc3RzIGFuZCAzZCBzdGF0dXMgYXJlIHVwLXRvLWRhdGUu
CkBAIC0yNzc5LDcgKzI3ODEsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBs
b2NhbFRyYW5zZm9ybVN0YXRlID0gY29uc3RfY2FzdDxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUq
Pih0cmFuc2Zvcm1TdGF0ZSk7CiAgICAgfSBlbHNlIGlmICh0cmFuc2Zvcm1TdGF0ZSB8fCBtX2hh
czNEVHJhbnNmb3JtZWREZXNjZW5kYW50IHx8IHByZXNlcnZlczNEKCkpIHsKICAgICAgICAgLy8g
V2UgbmVlZCB0cmFuc2Zvcm0gc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBvciB0byBvZmZzZXQg
dGhlIGNvbnRhaW5lciBzdGF0ZSwgc28gY3JlYXRlIGl0IGhlcmUuCi0gICAgICAgIGxvY2FsVHJh
bnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFp
bmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlKTsKKyAg
ICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZSA9IGNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUocm9v
dExheWVyLCBjb250YWluZXJMYXllciwgaGl0VGVzdEJvdW5kaW5nUmVjdCwgaGl0VGVzdEFyZWEs
IHRyYW5zZm9ybVN0YXRlKTsKICAgICB9CiAKICAgICAvLyBDaGVjayBmb3IgaGl0IHRlc3Qgb24g
YmFja2ZhY2UgaWYgYmFja2ZhY2UtdmlzaWJpbGl0eSBpcyAnaGlkZGVuJwpAQCAtMjgwMyw3ICsy
ODA1LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICBJbnRSZWN0IGJnUmVjdDsKICAg
ICBJbnRSZWN0IGZnUmVjdDsKICAgICBJbnRSZWN0IG91dGxpbmVSZWN0OwotICAgIGNhbGN1bGF0
ZVJlY3RzKHJvb3RMYXllciwgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVj
dCwgb3V0bGluZVJlY3QsIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyk7CisgICAgY2FsY3VsYXRlUmVj
dHMocm9vdExheWVyLCBoaXRUZXN0Qm91bmRpbmdSZWN0LCBsYXllckJvdW5kcywgYmdSZWN0LCBm
Z1JlY3QsIG91dGxpbmVSZWN0LCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIAogICAgIC8v
IFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHotZGVwdGgg
b2YgdGhlIGhpdCBwb2ludCBvZiAzZC10cmFuc2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRzLgpA
QCAtMjgzMiw3ICsyODM0LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5
ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICBSZW5kZXJM
YXllciogY2FuZGlkYXRlTGF5ZXIgPSAwOwogCiAgICAgLy8gQmVnaW4gYnkgd2Fsa2luZyBvdXIg
bGlzdCBvZiBwb3NpdGl2ZSBsYXllcnMgZnJvbSBoaWdoZXN0IHotaW5kZXggZG93biB0byB0aGUg
bG93ZXN0IHotaW5kZXguCi0gICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gaGl0VGVzdExpc3Qo
bV9wb3NaT3JkZXJMaXN0LCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3Qs
IGhpdFRlc3RQb2ludCwKKyAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdCht
X3Bvc1pPcmRlckxpc3QsIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0Qm91bmRp
bmdSZWN0LCBoaXRUZXN0QXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIs
IHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2Nl
bmRhbnRzKTsKICAgICBpZiAoaGl0TGF5ZXIpIHsKICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNj
ZW5kYW50cykKQEAgLTI4NDEsNyArMjg0Myw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAg
ICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91ciBvdmVyZmxvdyBvYmplY3RzLgotICAgIGhpdExh
eWVyID0gaGl0VGVzdExpc3QobV9ub3JtYWxGbG93TGlzdCwgcm9vdExheWVyLCByZXF1ZXN0LCBy
ZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsCisgICAgaGl0TGF5ZXIgPSBoaXRUZXN0
TGlzdChtX25vcm1hbEZsb3dMaXN0LCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVz
dEJvdW5kaW5nUmVjdCwgaGl0VGVzdEFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZz
ZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRz
KTsKICAgICBpZiAoaGl0TGF5ZXIpIHsKICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50
cykKQEAgLTI4NTAsMTEgKzI4NTIsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRU
ZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICB9
CiAKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRl
IHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4KLSAgICBpZiAoZmdSZWN0LmNv
bnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgaWYg
KGZnUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkp
IHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVzdWx0LCBi
ZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3ZSdy
ZSBmcm9udG1vc3QuCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9p
bnQoKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwg
bGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdERlc2NlbmRhbnRzKSAmJgotICAgICAg
ICAgICAgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwg
dW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKGhpdFRlc3RD
b250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdEFyZWEsIEhp
dFRlc3REZXNjZW5kYW50cykKKyAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNl
LCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkp
KSB7CiAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYgKCFk
ZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKQEAgLTI4
NjQsNyArMjg2Niw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJl
bmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgfQogCiAgICAgLy8g
Tm93IGNoZWNrIG91ciBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLgotICAgIGhpdExheWVyID0g
aGl0VGVzdExpc3QobV9uZWdaT3JkZXJMaXN0LCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwg
aGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwKKyAgICBoaXRMYXllciA9IGhpdFRlc3RMaXN0KG1f
bmVnWk9yZGVyTGlzdCwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RCb3VuZGlu
Z1JlY3QsIGhpdFRlc3RBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwg
ek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2Vu
ZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERlc2Nl
bmRhbnRzKQpAQCAtMjg3NiwxMCArMjg3OCwxMCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAog
ICAgIGlmIChjYW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwog
Ci0gICAgaWYgKGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgeworICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkgJiYgaXNT
ZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChy
ZXN1bHQucG9pbnQoKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVt
cFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdFNlbGYpICYmCi0gICAg
ICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRy
LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgeworICAgICAgICBpZiAoaGl0VGVz
dENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0QXJlYSwg
SGl0VGVzdFNlbGYpCisgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9m
ZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewog
ICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0aGlz
OwogICAgICAgICB9CkBAIC0yODg4LDkgKzI4OTAsOSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dAogICAgIHJldHVybiAwOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsIEhp
dFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSW50UmVjdCYgaGl0VGVz
dEFyZWEsIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKIHsKLSAgICBpZiAoIXJl
bmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UG9pbnQsCisgICAgaWYg
KCFyZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVyQm94WCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAtIHJlbmRlckJveFko
KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0VGVzdEZpbHRlcikpIHsKQEAgLTI5
MTYsNyArMjkxOCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYKIAogUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgaGl0VGVz
dFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RCb3VuZGluZ1JlY3QsIGNv
bnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKiB6T2Zmc2V0Rm9y
RGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRy
YW5zZm9ybVN0YXRlLApAQCAtMjkzMSw5ICsyOTMzLDkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIq
IHIKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gMDsKICAgICAgICAgSGl0VGVzdFJl
c3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAgaWYgKGNoaWxkTGF5ZXIt
PmlzUGFnaW5hdGVkKCkpCi0gICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRD
aGlsZExheWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0
VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5k
YW50cyk7CisgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVy
KGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdEJvdW5k
aW5nUmVjdCwgaGl0VGVzdEFyZWEsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFu
dHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhp
dFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2Nl
bmRhbnRzKTsKKyAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0VGVzdExheWVy
KHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdEJvdW5kaW5nUmVj
dCwgaGl0VGVzdEFyZWEsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRh
bnRzKTsKICAgICAgICAgaWYgKGlzSGl0Q2FuZGlkYXRlKGhpdExheWVyLCBkZXB0aFNvcnREZXNj
ZW5kYW50cywgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSkpIHsKICAgICAgICAg
ICAgIHJlc3VsdExheWVyID0gaGl0TGF5ZXI7CiAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVz
dWx0OwpAQCAtMjk0Niw3ICsyOTQ4LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRU
ZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHIKIH0KIAog
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5k
ZXJMYXllciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsIGNvbnN0IEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgaGl0VGVzdEJvdW5kaW5nUmVjdCwgY29uc3QgSW50UmVjdCYgaGl0VGVzdEFyZWEsIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNl
dCkKIHsKICAgICBBU1NFUlQoIXJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpKTsKICAgICBWZWN0
b3I8UmVuZGVyTGF5ZXIqPiBjb2x1bW5MYXllcnM7CkBAIC0yOTU5LDEyICsyOTYxLDEyIEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVy
TGF5ZXIqIGNoaWxkTGF5ZXIsIFJlCiAgICAgfQogCiAgICAgQVNTRVJUKGNvbHVtbkxheWVycy5z
aXplKCkpOwotICAgIHJldHVybiBoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMoY2hpbGRMYXllciwg
cm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRy
YW5zZm9ybVN0YXRlLCB6T2Zmc2V0LAorICAgIHJldHVybiBoaXRUZXN0Q2hpbGRMYXllckNvbHVt
bnMoY2hpbGRMYXllciwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RCb3VuZGlu
Z1JlY3QsIGhpdFRlc3RBcmVhLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheWVycywgY29sdW1uTGF5ZXJzLnNpemUo
KSAtIDEpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVy
Q29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBJbnRQb2ludCYgaGl0VGVzdFBvaW50LCBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRSZWN0JiBoaXRUZXN0Qm91bmRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJl
YSwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91Ymxl
KiB6T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNv
bHVtbkluZGV4KQogewogICAgIFJlbmRlckJsb2NrKiBjb2x1bW5CbG9jayA9IHRvUmVuZGVyQmxv
Y2soY29sdW1uTGF5ZXJzW2NvbHVtbkluZGV4XS0+cmVuZGVyZXIoKSk7CkBAIC0yOTkzLDEwICsy
OTk1LDEwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1
bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9
IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7
CiAKLSAgICAgICAgSW50UmVjdCBsb2NhbENsaXBSZWN0KGhpdFRlc3RSZWN0KTsKKyAgICAgICAg
SW50UmVjdCBsb2NhbENsaXBSZWN0KGhpdFRlc3RCb3VuZGluZ1JlY3QpOwogICAgICAgICBsb2Nh
bENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAgICAgCi0gICAgICAgIGlmICghbG9j
YWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9p
bnQpKSB7CisgICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlw
UmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIq
IGhpdExheWVyID0gMDsKICAgICAgICAgICAgIGlmICghY29sdW1uSW5kZXgpIHsKICAgICAgICAg
ICAgICAgICAvLyBBcHBseSBhIHRyYW5zbGF0aW9uIHRyYW5zZm9ybSB0byBjaGFuZ2Ugd2hlcmUg
dGhlIGxheWVyIHBhaW50cy4KQEAgLTMwMDgsNyArMzAxMCw3IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVy
LCBSZW5kCiAgICAgICAgICAgICAgICAgbmV3VHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGN1cnJY
T2Zmc2V0LCBjdXJyWU9mZnNldCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2hpbGRMYXllci0+bV90cmFuc2Zvcm0uc2V0KG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJpeChuZXdU
cmFuc2Zvcm0pKTsKLSAgICAgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRl
c3RMYXllcihyb290TGF5ZXIsIGNvbHVtbkxheWVyc1swXSwgcmVxdWVzdCwgcmVzdWx0LCBsb2Nh
bENsaXBSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCk7
CisgICAgICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9v
dExheWVyLCBjb2x1bW5MYXllcnNbMF0sIHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxDbGlwUmVjdCwg
aGl0VGVzdEFyZWEsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCk7CiAgICAgICAgICAg
ICAgICAgaWYgKG9sZEhhc1RyYW5zZm9ybSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGRMYXll
ci0+bV90cmFuc2Zvcm0uc2V0KG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJpeChvbGRUcmFuc2Zvcm0p
KTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0zMDE3LDEzICszMDE5LDE0IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBj
aGlsZExheWVyLCBSZW5kCiAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSB0cmFuc2Zvcm0g
c3VjaCB0aGF0IHRoZSByZW5kZXJlcidzIHVwcGVyIGxlZnQgY29ybmVyIHdpbGwgYmUgYXQgKDAs
MCkgaW4gdXNlciBzcGFjZS4KICAgICAgICAgICAgICAgICAvLyBUaGlzIGludm9sdmVzIHN1YnRy
YWN0aW5nIG91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50IGNvb3Jk
aW5hdGUgc3BhY2UuCiAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIG5leHRMYXllciA9IGNv
bHVtbkxheWVyc1tjb2x1bW5JbmRleCAtIDFdOwotICAgICAgICAgICAgICAgIFJlZlB0cjxIaXRU
ZXN0aW5nVHJhbnNmb3JtU3RhdGU+IG5ld1RyYW5zZm9ybVN0YXRlID0gbmV4dExheWVyLT5jcmVh
dGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgbmV4dExheWVyLCBsb2NhbENsaXBSZWN0
LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBuZXdUcmFuc2Zvcm1TdGF0ZSA9IG5leHRMYXllci0+
Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShyb290TGF5ZXIsIG5leHRMYXllciwgbG9jYWxDbGlw
UmVjdCwgaGl0VGVzdEFyZWEsIHRyYW5zZm9ybVN0YXRlKTsKICAgICAgICAgICAgICAgICBuZXdU
cmFuc2Zvcm1TdGF0ZS0+dHJhbnNsYXRlKGN1cnJYT2Zmc2V0LCBjdXJyWU9mZnNldCwgSGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICAgICAgICAgICAg
ICBJbnRQb2ludCBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG5ld1RyYW5zZm9ybVN0YXRl
LT5tYXBwZWRQb2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2FsSGl0VGVzdFJl
Y3QgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+bWFwcGVkUXVhZCgpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CiAgICAgICAgICAgICAgICAgbmV3VHJhbnNmb3JtU3RhdGUtPmZsYXR0ZW4oKTsKIAotICAg
ICAgICAgICAgICAgIGhpdExheWVyID0gaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5
ZXIsIGNvbHVtbkxheWVyc1tjb2x1bW5JbmRleCAtIDFdLCByZXF1ZXN0LCByZXN1bHQsIGxvY2Fs
SGl0VGVzdFJlY3QsIGxvY2FsUG9pbnQsCisgICAgICAgICAgICAgICAgLy8gWFhYdG9uaWtpdG9v
CisgICAgICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMoY2hp
bGRMYXllciwgY29sdW1uTGF5ZXJzW2NvbHVtbkluZGV4IC0gMV0sIHJlcXVlc3QsIHJlc3VsdCwg
bG9jYWxIaXRUZXN0UmVjdCwgSW50UmVjdChsb2NhbFBvaW50LCBJbnRTaXplKDEsIDEpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUcmFu
c2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldCwgY29sdW1uTGF5ZXJzLCBjb2x1bW5JbmRleCAtIDEp
OwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA0ZDg3ZWQ4Li44
NzIwZDc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTQ5NCwyNSArNDk0LDI1IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWludExheWVyRmxh
Z3MsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1
bW5JbmRleCk7CiAKICAgICBSZW5kZXJMYXllciogaGl0VGVzdExheWVyKFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBJbnRQb2ludCYgaGl0
VGVzdFBvaW50LCBib29sIGFwcGxpZWRUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRUZXN0Qm91bmRpbmdSZWN0LCBjb25zdCBJbnRSZWN0
JiBoaXRUZXN0QXJlYSwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0
ZSA9IDAsIGRvdWJsZSogek9mZnNldCA9IDApOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGlz
dChWZWN0b3I8UmVuZGVyTGF5ZXIqPiosIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBJbnRQ
b2ludCYgaGl0VGVzdFBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiBoaXRUZXN0Qm91bmRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJs
ZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29y
dERlc2NlbmRhbnRzKTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5
ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBJbnRQb2ludCYgaGl0VGVzdFBvaW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRUZXN0Qm91bmRpbmdS
ZWN0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFu
c2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdENo
aWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcm9v
dExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBoaXRUZXN0
Qm91bmRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5M
YXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRl
TG9jYWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciog
Y29udGFpbmVyTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgaGl0VGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBoaXRUZXN0UG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgaGl0VGVzdEJvdW5kaW5nUmVjdCwgY29u
c3QgSW50UmVjdCYgaGl0VGVzdEFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiBjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgY29u
c3Q7CiAgICAgCi0gICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEludFBv
aW50JiBoaXRUZXN0UG9pbnQsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OworICAgIGJvb2wgaGl0VGVz
dENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgSGl0VGVzdEZp
bHRlcikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyhib29s
KiBuZWVkSEJhciA9IDAsIGJvb2wqIG5lZWRWQmFyID0gMCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAppbmRleCAzMzRhMzgyLi4yN2M0YjgyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCkBAIC0yMjksOSArMjI5LDE0IEBAIHZvaWQgUmVu
ZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgUmVu
ZGVyT2JqZWN0OjpQYWluCiAgICAgfQogfQogCi0KIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6Omhp
dFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pIGNvbnN0CiB7CisgICAgcmV0dXJu
IGhpdFRlc3QocmVuZGVyZXIsIHJlcXVlc3QsIHJlc3VsdCwgSW50UmVjdCh4LCB5LCAxLCAxKSwg
dHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKK30KKworYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0
VGVzdChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKSBjb25zdAorewogICAgIGlmIChoaXRUZXN0QWN0aW9u
ICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0MSwx
MCArMjQ2LDE0IEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxCiAgICAgaWYgKCFmaXJzdExpbmVC
b3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgSW50UG9pbnQgcmVuZGVyUG9pbnQg
PSBoaXRUZXN0QXJlYS5jZW50ZXIoKTsKKyAgICByZW5kZXJQb2ludC5tb3ZlKC10eCwgLXR5KTsK
KwogICAgIC8vIFdlIGNhbiBjaGVjayB0aGUgZmlyc3QgYm94IGFuZCBsYXN0IGJveCBhbmQgYXZv
aWQgaGl0IHRlc3RpbmcgaWYgd2UgZG9uJ3QKICAgICAvLyBjb250YWluIHRoZSBwb2ludC4gIFRo
aXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQgd2UgY2FuIHRha2UgdG8gYXZvaWQgd2Fs
a2luZyBhbnkgbGluZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMgZmxhd2VkIGluIHRo
ZSBmb2xsb3dpbmcgZXh0cmVtZWx5IG9ic2N1cmUgd2F5OgogICAgIC8vIGlmIHNvbWUgbGluZSBp
biB0aGUgbWlkZGxlIGhhcyBhIGh1Z2Ugb3ZlcmZsb3csIGl0IG1pZ2h0IGFjdHVhbGx5IGV4dGVu
ZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgorICAgIGludCB5ID0gaGl0VGVzdEFyZWEuY2VudGVyKCku
eSgpOwogICAgIGlmICgoeSA+PSB0eSArIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+Ym90dG9tVmlz
aWJsZU92ZXJmbG93KCkpIHx8ICh5IDwgdHkgKyBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BW
aXNpYmxlT3ZlcmZsb3coKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjUzLDkgKzI2
Miw5IEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxCiAgICAgLy8gYmFzZWQgb2ZmIHBvc2l0aW9u
cyBvZiBvdXIgZmlyc3QgbGluZSBib3ggb3Igb3VyIGxhc3QgbGluZSBib3guCiAgICAgZm9yIChJ
bmxpbmVGbG93Qm94KiBjdXJyID0gbGFzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnBy
ZXZMaW5lQm94KCkpIHsKICAgICAgICAgaWYgKHkgPj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZp
c2libGVPdmVyZmxvdygpICYmIHkgPCB0eSArIGN1cnItPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92
ZXJmbG93KCkpIHsKLSAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHkpOworICAgICAgICAgICAgYm9vbCBpbnNpZGUg
PSBjdXJyLT5ub2RlQXRBcmVhKHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIHR4LCB0eSk7
CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXItPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAg
ICAgICAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcmVuZGVy
UG9pbnQpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAppbmRleCA1MmQ3NTQyLi43
NDZhODVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKQEAgLTY1LDYgKzY1
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCosIFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHgsIGludCB5KSBjb25zdDsKICAgICBib29sIGhp
dFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKSBj
b25zdDsKKyAgICBib29sIGhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAg
ICAvLyBGb3IgYmxvY2sgZmxvd3MsIGVhY2ggYm94IHJlcHJlc2VudHMgdGhlIHJvb3QgaW5saW5l
IGJveCBmb3IgYSBsaW5lIGluIHRoZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRl
eCAyZWNjMmQwLi41Zjc3YjE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAt
NTgxLDIxICs1ODEsMjUgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCkKICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCk7CiB9CiAKLWJvb2wgUmVuZGVy
TGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRBcmVhKGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IElu
dFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlckJsb2Nr
Ojpub2RlQXRBcmVhKHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIHR4LCB0eSwgaGl0VGVz
dEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFBvaW50IHJlbmRlclBv
aW50ID0gaGl0VGVzdEFyZWEuY2VudGVyKCk7CisgICAgcmVuZGVyUG9pbnQubW92ZSgtdHgsIC10
eSk7CisKICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5saXN0SXRlbXMoKTsKICAgICBp
bnQgc2l6ZSA9IG51bUl0ZW1zKCk7CiAgICAgdHggKz0gdGhpcy0+eCgpOwogICAgIHR5ICs9IHRo
aXMtPnkoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBp
ZiAoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwgdHksIGkpLmNvbnRhaW5zKHgsIHkpKSB7CisgICAg
ICAgIGlmIChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgaSkuaW50ZXJzZWN0cyhoaXRUZXN0
QXJlYSkpIHsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBub2RlID0gbGlzdEl0ZW1zW2ldKSB7
CiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKICAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuc2V0TG9jYWxQb2ludChJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHJlbmRlclBvaW50KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5oCmluZGV4IGFhZmI4N2UuLmM3ZWQ1MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgK
QEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVm
dChpbnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKIAotICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24pOwogCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKaW5kZXggMjY0NmIzZi4uZDhlMTFjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0yMDI4LDMzICsyMDI4LDQxIEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3Rh
dGUoYm9vbCBkcmFnT24pCiAKIGJvb2wgUmVuZGVyT2JqZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBwb2ludCwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKIHsK
KyAgICBJbnRSZWN0IGFyZWEocG9pbnQsIEludFNpemUoMSwgMSkpOworICAgIHJldHVybiBoaXRU
ZXN0KHJlcXVlc3QsIHJlc3VsdCwgYXJlYSwgdHgsIHR5LCBoaXRUZXN0RmlsdGVyKTsKK30KKwor
Ym9vbCBSZW5kZXJPYmplY3Q6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UmVjdCYgYXJlYSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKK3sKICAgICBib29sIGluc2lkZSA9IGZh
bHNlOwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRlc3RTZWxmKSB7CiAgICAgICAgIC8v
IEZpcnN0IHRlc3QgdGhlIGZvcmVncm91bmQgbGF5ZXIgKGxpbmVzIGFuZCBpbmxpbmVzKS4KLSAg
ICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludC54KCksIHBv
aW50LnkoKSwgdHgsIHR5LCBIaXRUZXN0Rm9yZWdyb3VuZCk7CisgICAgICAgIGluc2lkZSA9IG5v
ZGVBdEFyZWEocmVxdWVzdCwgcmVzdWx0LCBhcmVhLCB0eCwgdHksIEhpdFRlc3RGb3JlZ3JvdW5k
KTsKIAogICAgICAgICAvLyBUZXN0IGZsb2F0cyBuZXh0LgogICAgICAgICBpZiAoIWluc2lkZSkK
LSAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnQu
eCgpLCBwb2ludC55KCksIHR4LCB0eSwgSGl0VGVzdEZsb2F0KTsKKyAgICAgICAgICAgIGluc2lk
ZSA9IG5vZGVBdEFyZWEocmVxdWVzdCwgcmVzdWx0LCBhcmVhLCB0eCwgdHksIEhpdFRlc3RGbG9h
dCk7CiAKICAgICAgICAgLy8gRmluYWxseSB0ZXN0IHRvIHNlZSBpZiB0aGUgbW91c2UgaXMgaW4g
dGhlIGJhY2tncm91bmQgKHdpdGhpbiBhIGNoaWxkIGJsb2NrJ3MgYmFja2dyb3VuZCkuCiAgICAg
ICAgIGlmICghaW5zaWRlKQotICAgICAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBwb2ludC54KCksIHBvaW50LnkoKSwgdHgsIHR5LCBIaXRUZXN0Q2hpbGRCbG9j
a0JhY2tncm91bmRzKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdEFyZWEocmVxdWVzdCwg
cmVzdWx0LCBhcmVhLCB0eCwgdHksIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOwogICAg
IH0KIAogICAgIC8vIFNlZSBpZiB0aGUgbW91c2UgaXMgaW5zaWRlIHVzIGJ1dCBub3QgYW55IG9m
IG91ciBkZXNjZW5kYW50cwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRlc3REZXNjZW5k
YW50cyAmJiAhaW5zaWRlKQotICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50LngoKSwgcG9pbnQueSgpLCB0eCwgdHksIEhpdFRlc3RCbG9ja0JhY2tncm91
bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRBcmVhKHJlcXVlc3QsIHJlc3VsdCwgYXJlYSwg
dHgsIHR5LCBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kKTsKIAogICAgIHJldHVybiBpbnNpZGU7CiB9
CiAKIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogeworICAgIE5vZGUqIG4gPSBub2RlKCk7
CisgICAgcmVzdWx0LmFkZE5vZGVUb0xpc3RJZk5lZWRlZChuKTsKKwogICAgIGlmIChyZXN1bHQu
aW5uZXJOb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUqIG4gPSBub2RlKCk7CiAg
ICAgaWYgKG4pIHsKICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShuKTsKICAgICAgICAgaWYg
KCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCkBAIC0yMDYzLDcgKzIwNzEsMTIgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgcG8KICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgLyp4Ki8s
IGludCAvKnkqLywgaW50IC8qdHgqLywgaW50IC8qdHkqLywgSGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0QWN0aW9uIGFjdGlvbikKK3sKKyAgICByZXR1cm4gbm9kZUF0QXJlYShyZXF1ZXN0LCByZXN1
bHQsIEludFJlY3QoeCwgeSwgMSwgMSksIHR4LCB0eSwgYWN0aW9uKTsKK30KKworYm9vbCBSZW5k
ZXJPYmplY3Q6Om5vZGVBdEFyZWEoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UmVjdCYsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQogewogICAgIHJldHVy
biBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZjJiMzEzOS4uOTY4NmE4
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTU1Miw3ICs1NTIsOSBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0RmlsdGVy
ID0gSGl0VGVzdEFsbCk7CisgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFJlY3QmLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEZp
bHRlciA9IEhpdFRlc3RBbGwpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0QXJlYShjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRSZWN0JiBhcmVhLCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRl
c3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCmluZGV4IDdkNTUzZWEuLmZiMThlNGEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKQEAgLTExMjksMjUgKzExMjksMjggQEAgSW50UmVjdCBSZW5kZXJUYWJsZTo6
b3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgsIGludCB0eSkKICAgICByZXR1cm4gcmVjdDsKIH0KIAot
Ym9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlOjpub2RlQXRBcmVh
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBh
Y3Rpb24pCiB7CiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHkoKTsKIAorICAgIEludFBvaW50
IHJlbmRlclBvaW50ID0gaGl0VGVzdEFyZWEuY2VudGVyKCk7CisgICAgcmVuZGVyUG9pbnQubW92
ZSgtdHgsIC10eSk7CisKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3Zl
cmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQ
b3MpKSB7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4
LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1Np
YmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJv
eChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlv
bigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikgJiYKLSAgICAgICAgICAgICAgICBjaGlsZC0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsK
LSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBv
cyAtIHR4LCB5UG9zIC0gdHkpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+bm9kZUF0QXJlYShy
ZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcmVuZGVyUG9pbnQpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LgotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBo
ZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5KSk7CisgICAgaWYgKHZp
c2libGVUb0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQg
fHwgYWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgSW50UmVjdCh0eCwg
dHksIHdpZHRoKCksIGhlaWdodCgpKS5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSkgeworICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcmVuZGVyUG9pbnQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCmluZGV4IGVhMDg2NzMuLjY2
MDA3YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBpbnQgdHgsIGludCB0
eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJl
ZldpZHRocygpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0QXJlYShjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogICAgIAogICAgIHZpcnR1YWwgaW50IGZp
cnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAppbmRleCBhMTFhMTRiLi42MDEyZjk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgSW50UmVjdCBSZW5kZXJUYWJsZVJvdzo6Y2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGEKIH0KIAog
Ly8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQg
eSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJs
ZVJvdzo6bm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIC8vIFRhYmxlIHJvd3MgY2Fubm90IGV2ZXIg
YmUgaGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1
c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4gYWx3YXlzLgpAQCAtMTcwLDggKzE3MCwxMCBAQCBi
b29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcgogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90
ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAg
ICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQg
ZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBj
YW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSAm
JiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIGNoaWxkLT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKSkgewotICAg
ICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAt
IHR5KSk7CisgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSAmJiAhdG9SZW5kZXJCb3go
Y2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIGNoaWxkLT5ub2RlQXRBcmVhKHJlcXVl
c3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIHR4LCB0eSwgYWN0aW9uKSkgeworICAgICAgICAgICAg
SW50UG9pbnQgcmVuZGVyUG9pbnQgPSBoaXRUZXN0QXJlYS5jZW50ZXIoKTsKKyAgICAgICAgICAg
IHJlbmRlclBvaW50Lm1vdmUoLXR4LCAtdHkpOworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHJlbmRlclBvaW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKaW5kZXggNTg4MjUyYi4u
N2ZmMmRiNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCkBAIC01Myw3ICs1Myw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sLCBib29sKSBjb25zdCB7
IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgSW50
UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRBcmVhKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVh
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICAvLyBUaGUgb25seSB0aW1l
IHJvd3MgZ2V0IGEgbGF5ZXIgaXMgd2hlbiB0aGV5IGhhdmUgdHJhbnNwYXJlbmN5LgogICAgIHZp
cnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgp
IHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc01hc2soKTsgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggYWRkZGRmOS4uMDk0
OTcwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xMTQ1
LDE0ICsxMTQ1LDE3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihpbnQg
cG9zLCBpbnQgbmV3U2l6ZSkKIH0KIAogLy8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVT
ZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRBcmVhKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBhY3Rp
b24pCiB7CiAgICAgLy8gVGFibGUgc2VjdGlvbnMgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4g
IEVmZmVjdGl2ZWx5IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBv
dXIgY2hpbGRyZW4gYWx3YXlzLgogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKLSAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250
YWlucyh4UG9zLCB5UG9zKSkKKyAgICBJbnRQb2ludCByZW5kZXJQb2ludCA9IGhpdFRlc3RBcmVh
LmNlbnRlcigpOworICAgIHJlbmRlclBvaW50Lm1vdmUoLXR4LCAtdHkpOworCisgICAgaWYgKGhh
c092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyho
aXRUZXN0QXJlYSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKQEAgLTExNjAsOCArMTE2Myw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9u
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
CiAgICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+IGZvciBl
eGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQgYQogICAgICAgICAvLyB0YWJsZS1zcGVjaWZp
YyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVh
c29ucyBhbnl3YXkpLAogICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4K
LSAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
eFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKKyAgICAgICAg
aWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkgJiYgY2hpbGQtPm5vZGVBdEFyZWEocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJl
YSwgdHgsIHR5LCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcmVuZGVyUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IDlmNmQ1ZWEu
LjUzNmE5YTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xMjUs
NyArMTI1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3Jh
cHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCi0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAg
ICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDkyYzgyZTEuLjU5YWRmNWYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgKQEAgLTE0Myw3ICsxNDMsMTYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBpbnQsIGludCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGlu
dCwgSGl0VGVzdEFjdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRBcmVh
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFJlY3QmLCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgdm9pZCBkZWxldGVUZXh0
Qm94ZXMoKTsKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmNwcAppbmRleCBmODljYjNmLi4wY2QwMTRjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCkBAIC01OCwxMSAr
NTgsMTUgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZUhhc0NoYW5n
ZWQoKQogICAgICAgICBmcmFtZS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEodGV4dEFyZWEpOwog
fQogCi1ib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RB
cmVhLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAg
IGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwg
eSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpu
b2RlQXRBcmVhKHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIHR4LCB0eSwgaGl0VGVzdEFj
dGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIC8vIFhYWHRvbmlraXRvbworICAg
IGludCB4ID0gaGl0VGVzdEFyZWEuY2VudGVyKCkueCgpOworICAgIGludCB5ID0gaGl0VGVzdEFy
ZWEuY2VudGVyKCkueSgpOworCiAgICAgYm9vbCByZXN1bHRJc1RleHRWYWx1ZU9yUGxhY2Vob2xk
ZXIKICAgICAgICAgPSAoIW1fcGxhY2Vob2xkZXJWaXNpYmxlICYmIHJlc3VsdC5pbm5lck5vZGUo
KSA9PSBpbm5lclRleHRFbGVtZW50KCkpCiAgICAgICAgIHx8IChtX3BsYWNlaG9sZGVyVmlzaWJs
ZSAmJiByZXN1bHQuaW5uZXJOb2RlKCktPmlzRGVzY2VuZGFudE9mKGlubmVyVGV4dEVsZW1lbnQo
KSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgK
aW5kZXggZmJjYTMwOC4uOGMyNGI1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5oCkBAIC0zOCw3ICszOCw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRS
ZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAg
dmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAg
dmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAppbmRleCBiMDA1MDNlLi5jYzU5NWRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTI2Nyw3ICsyNjcsNyBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKICAgICB9CiB9CiAKLWJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeFBvcywgaW50IHlQb3MsIGlu
dCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRSZWN0JiBoaXRUZXN0QXJlYSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBJ
ZiB3ZSdyZSB3aXRoaW4gdGhlIHRleHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2Un
dmUgaGl0IHRoZSBpbm5lciB0ZXh0IGJsb2NrIGVsZW1lbnQsIGluIGNhc2UgdGhlIHBvaW50CiAg
ICAgLy8gd2FzIG9uIHRoZSBjb250cm9sIGJ1dCBub3Qgb24gdGhlIGlubmVyIGVsZW1lbnQgKHNl
ZSBSYWRhciA0NjE3ODQxKS4KQEAgLTI3NSwxMiArMjc1LDE1IEBAIGJvb2wgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0CiAgICAgLy8gSW4gYSBzZWFyY2ggZmllbGQsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdl
J3ZlIGhpdCB0aGUgcmVzdWx0cyBibG9jayBpZiB3ZSdyZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5u
ZXIgdGV4dCBibG9jaywKICAgICAvLyBhbmQgYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgY2xvc2Ug
YmxvY2sgaWYgd2UncmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLgogCi0g
ICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4
UG9zLCB5UG9zLCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENv
bnRyb2w6Om5vZGVBdEFyZWEocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgdHgsIHR5LCBo
aXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYgd2UgaGl0
IGEgbm9kZSBpbnNpZGUgdGhlIGlubmVyIHRleHQgZWxlbWVudCwgc2F5IHRoYXQgd2UgaGl0IHRo
YXQgZWxlbWVudCwKICAgICAvLyBhbmQgaWYgd2UgaGl0IG91ciBub2RlIChlLmcuIHdlJ3JlIG92
ZXIgdGhlIGJvcmRlciBvciBwYWRkaW5nKSwgYWxzbyBzYXkgdGhhdCB3ZSBoaXQgdGhlCiAgICAg
Ly8gaW5uZXIgdGV4dCBlbGVtZW50IHNvIHRoYXQgaXQgZ2FpbnMgZm9jdXMuCisgICAgLy8gWFhY
dG9uaWtpdG9vCisgICAgaW50IHhQb3MgPSBoaXRUZXN0QXJlYS54KCk7CisgICAgaW50IHlQb3Mg
PSBoaXRUZXN0QXJlYS55KCk7CiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKS0+aXNEZXNjZW5k
YW50T2YoaW5uZXJUZXh0RWxlbWVudCgpKSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgp
KQogICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50KHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5
KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
aAppbmRleCBkZmY5ZTVmLi4wMzhkNTMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
CmluZGV4IDEyMDQ0OGUuLmJhNDUwYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC02
OTQsMTAgKzY5NCwxMiBAQCBib29sIFJlbmRlclZpZXc6OnNob3VsZERpc2FibGVMYXlvdXRTdGF0
ZUZvclN1YnRyZWUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29ucwogCiB2b2lkIFJlbmRlclZp
ZXc6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCiB7CisgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpOworICAgIHJlc3VsdC5hZGROb2RlVG9MaXN0SWZOZWVkZWQobm9kZSk7CisKICAgICBp
ZiAocmVzdWx0LmlubmVyTm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlKiBub2Rl
ID0gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKG5vZGUpIHsKICAgICAg
ICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA5MjViN2Q5
Li43ZjU1NDA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTM3MywxMCArMzcz
LDEwIEBAIFJlbmRlcldpZGdldCogUmVuZGVyV2lkZ2V0OjpmaW5kKGNvbnN0IFdpZGdldCogd2lk
Z2V0KQogICAgIHJldHVybiB3aWRnZXRSZW5kZXJlck1hcCgpLmdldCh3aWRnZXQpOwogfQogCi1i
b29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlcldpZGdldDo6bm9kZUF0QXJlYShjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRSZWN0JiBoaXRUZXN0QXJlYSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewogICAgIGJvb2wgaGFkUmVzdWx0ID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgIGJvb2wg
aW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwg
eSwgdHgsIHR5LCBhY3Rpb24pOworICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5v
ZGVBdEFyZWEocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgdHgsIHR5LCBhY3Rpb24pOwog
ICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmVhbGx5IG92ZXIgdGhlIHdpZGdl
dCBpdHNlbGYgKGFuZCBub3QganVzdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcgYXJlYSkuCiAgICAg
aWYgKGluc2lkZSAmJiAhaGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCmluZGV4IGI4NWI5NTEuLmM2NzJlZjYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5oCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShT
ZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRBcmVhKGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFJlY3QmIGFyZWEsIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcmxhcFRlc3RS
ZXN1bHQoYm9vbCk7CiAKICAgICBib29sIHNldFdpZGdldEdlb21ldHJ5KGNvbnN0IEludFJlY3Qm
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggMjRlNDljNi4uYjQyZjE3MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTE3MiwxNSArMTcyLDE4IEBAIHZv
aWQgUm9vdElubGluZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCiAjZW5kaWYKIH0KIAotYm9vbCBSb290SW5saW5lQm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KQorYm9vbCBSb290SW5saW5lQm94Ojpu
b2RlQXRBcmVhKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEludFJlY3QmIGhpdFRlc3RBcmVhLCBpbnQgdHgsIGludCB0eSkKIHsKKyAg
ICBJbnRQb2ludCByZW5kZXJQb2ludCA9IGhpdFRlc3RBcmVhLmNlbnRlcigpOworICAgIHJlbmRl
clBvaW50Lm1vdmUoLXR4LCAtdHkpOworCiAgICAgaWYgKG1faGFzRWxsaXBzaXNCb3ggJiYgdmlz
aWJsZVRvSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSkpIHsKLSAgICAgICAgICAgIHJlbmRl
cmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0
eSkpOworICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0QXJlYShyZXF1ZXN0LCByZXN1
bHQsIGhpdFRlc3RBcmVhLCB0eCwgdHkpKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcmVuZGVyUG9pbnQpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsKKyAgICByZXR1cm4gSW5saW5l
Rmxvd0JveDo6bm9kZUF0QXJlYShyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB0eCwgdHkp
OwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGludCBkeCwgaW50IGR5
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCmluZGV4IGNmYTU1MGIuLmRhM2IzOTYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGlu
dCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRSZWN0JiwgaW50LCBpbnQpOwogCiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxkcmVuOyB9CiAgICAgdm9pZCBz
ZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggZWQxMjYxMS4uNzk5MmMzOSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBAIC00OCw2ICs0
OCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEFyZWEo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UmVjdCYgaGl0
VGVzdEFyZWEsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CiAKICAgICBi
b29sIG1fbXVsdGlMaW5lOwpAQCAtNTUsMTMgKzU2LDE5IEBAIHByaXZhdGU6CiAKIGJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CisgICAgcmV0dXJuIG5vZGVB
dEFyZWEocmVxdWVzdCwgcmVzdWx0LCBJbnRSZWN0KHgsIHksIDEsIDEpLCB0eCwgdHksIGhpdFRl
c3RBY3Rpb24pOworfQorCitib29sIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jazo6bm9kZUF0
QXJlYShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgaGl0VGVzdEFyZWEsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCit7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUoKS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCktPnJlbmRlcmVyKCk7CiAKICAgICBib29sIHBsYWNlaG9sZGVySXNWaXNpYmxl
ID0gZmFsc2U7CiAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHRGaWVsZCgpKQogICAgICAgICBwbGFj
ZWhvbGRlcklzVmlzaWJsZSA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVy
KS0+cGxhY2Vob2xkZXJJc1Zpc2libGUoKTsKIAotICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIHBsYWNlaG9sZGVySXNWaXNp
YmxlID8gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCA6IGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bm9kZUF0QXJlYShyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCB0
eCwgdHksIHBsYWNlaG9sZGVySXNWaXNpYmxlID8gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCA6IGhp
dFRlc3RBY3Rpb24pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5l
ckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKLS0gCjEuNy4w
LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58617</attachid>
            <date>2010-06-13 20:08:04 -0700</date>
            <delta_ts>2010-06-14 10:42:31 -0700</delta_ts>
            <desc>updated patch based on the comment</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29516</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTEwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMTMgIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhh
bmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcK
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuYmFz
ZS5leHA6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphcHBlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0Ojpwb2ludFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6aXNSZWdpb25UZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnJhd05v
ZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnBvaW50UmVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpoaXRUZXN0Q29sdW1ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0
OjpoaXRUZXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcldpZGdldDo6bm9kZUF0UG9pbnQpOgorCiAyMDEwLTA2LTEzICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAkocmV2aXNpb24gNjExMDApCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjE0c2Nyb2xsT3ZlcmZsCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9s
bEV2ZW50RXYKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJO
U18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoYW5k
bGVUZXh0SW5wdXRFdmVudEVSS05TXzZTdHJpbmdFUE5TXzVFdmVudEViYgotX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNf
MTdIaXRUZXN0U2Nyb2xsYmFyc0UKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0
UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFUktO
U183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNz
RXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMjNoYW5kbGVNb3VzZVJlbGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNjExMDApCisrKyBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDkgKzg1OSw5IEBAIHZv
aWQgRXZlbnRIYW5kbGVyOjphbGxvd0RIVE1MRHJhZyhib29sJiAKIH0KICNlbmRpZiAvLyBFTkFC
TEUoRFJBR19TVVBQT1JUKQogICAgIAotSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRl
c3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxvd1NoYWRvd0Nv
bnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRlc3RTY3JvbGxi
YXJzKQorSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzLCBjb25zdCBJbnRTaXpl
JiBwb2ludFBhZGRpbmcpCiB7Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOworICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50LCBwb2ludFBhZGRpbmcpOwogICAgIGlmICghbV9m
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaW50
IGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlOwpAQCAtODgzLDcgKzg4Myw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRU
ZXN0UmVzdWwKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4od2lkZ2V0KTsKICAgICAgICAgSW50UG9pbnQgd2lkZ2V0UG9pbnQocmVzdWx0LmxvY2FsUG9p
bnQoKS54KCkgKyB2aWV3LT5zY3JvbGxYKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlckxlZnQoKSAt
IHJlbmRlcldpZGdldC0+cGFkZGluZ0xlZnQoKSwgCiAgICAgICAgICAgICByZXN1bHQubG9jYWxQ
b2ludCgpLnkoKSArIHZpZXctPnNjcm9sbFkoKSAtIHJlbmRlcldpZGdldC0+Ym9yZGVyVG9wKCkg
LSByZW5kZXJXaWRnZXQtPnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgd2lk
Z2V0SGl0VGVzdFJlc3VsdCh3aWRnZXRQb2ludCk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgd2lk
Z2V0SGl0VGVzdFJlc3VsdCh3aWRnZXRQb2ludCwgcG9pbnRQYWRkaW5nKTsKICAgICAgICAgZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KEhpdFRlc3RSZXF1ZXN0KGhp
dFR5cGUpLCB3aWRnZXRIaXRUZXN0UmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gd2lkZ2V0SGl0
VGVzdFJlc3VsdDsKIApAQCAtOTA1LDcgKzkwNSw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5k
bGVyOjpoaXRUZXN0UmVzdWwKICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3ICYmIG1haW5WaWV3
KSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSByZXN1bHRWaWV3LT5j
b250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRQb2lu
dCBtYWluRnJhbWVQb2ludCA9IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50
KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
aXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50LCBp
Z25vcmVDbGlwcGluZyk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hh
ZG93Q29udGVudCwgaWdub3JlQ2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzLCBwb2ludFBhZGRpbmcp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAko
cmV2aXNpb24gNjExMDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoRmFr
ZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIEhpdFRl
c3RSZXN1bHQgaGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFsbG93
U2hhZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLCBIaXRUZXN0U2Nyb2xs
YmFycyBzY3JvbGxiYXJzID0gRG9udEhpdFRlc3RTY3JvbGxiYXJzKTsKKyAgICBIaXRUZXN0UmVz
dWx0IGhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRv
d0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMg
c2Nyb2xsYmFycyA9IERvbnRIaXRUZXN0U2Nyb2xsYmFycywgY29uc3QgSW50U2l6ZSYgcG9pbnRQ
YWRkaW5nID0gSW50U2l6ZSgpKTsKIAogICAgIGJvb2wgbW91c2VQcmVzc2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb3VzZVByZXNzZWQ7IH0KICAgICB2b2lkIHNldE1vdXNlUHJlc3NlZChib29sIHBy
ZXNzZWQpIHsgbV9tb3VzZVByZXNzZWQgPSBwcmVzc2VkOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwCShyZXZpc2lvbiA2MTEwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMywxMSBAQCBib29sIEVsbGlw
c2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hl
aWdodCkuY29udGFpbnMoeCwgeSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0
KHR4LCB0eSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5n
KCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5wb2ludFJlY3QoeCwgeSkpKSB7CiAg
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1
bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCBib3Vu
ZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiA2MTEw
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1MiwxMyBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IElu
dFBvCiB7CiB9CiAKK0hpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQm
IHBvaW50LCBjb25zdCBJbnRTaXplJiBwb2ludFBhZGRpbmcpCisgICAgOiBtX3BvaW50KHBvaW50
KQorICAgICwgbV9wb2ludFBhZGRpbmcocG9pbnRQYWRkaW5nKQorICAgICwgbV9pc092ZXJXaWRn
ZXQoZmFsc2UpCit7Cit9CisKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0
VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgOiBtX2lubmVyTm9kZShvdGhlci5pbm5lck5vZGUoKSkK
ICAgICAsIG1faW5uZXJOb25TaGFyZWROb2RlKG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpKQpA
QCAtNTksNiArNjYsOCBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRl
CiAgICAgLCBtX2xvY2FsUG9pbnQob3RoZXIubG9jYWxQb2ludCgpKQogICAgICwgbV9pbm5lclVS
TEVsZW1lbnQob3RoZXIuVVJMRWxlbWVudCgpKQogICAgICwgbV9zY3JvbGxiYXIob3RoZXIuc2Ny
b2xsYmFyKCkpCisgICAgLCBtX3BvaW50UGFkZGluZyhvdGhlci5wb2ludFBhZGRpbmcoKSkKKyAg
ICAsIG1fcmF3Tm9kZUxpc3Qob3RoZXIucmF3Tm9kZUxpc3QoKSkKICAgICAsIG1faXNPdmVyV2lk
Z2V0KG90aGVyLmlzT3ZlcldpZGdldCgpKQogewogfQpAQCAtNzUsNiArODQsOCBAQCBIaXRUZXN0
UmVzdWx0JiBIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0oCiAgICAgbV9sb2NhbFBvaW50ID0gb3Ro
ZXIubG9jYWxQb2ludCgpOwogICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVu
dCgpOwogICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CisgICAgbV9wb2ludFBh
ZGRpbmcgPSBvdGhlci5wb2ludFBhZGRpbmcoKTsKKyAgICBtX3Jhd05vZGVMaXN0ID0gb3RoZXIu
cmF3Tm9kZUxpc3QoKTsKICAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgp
OwogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTM2Miw0ICszNzMsMzMgQEAgYm9vbCBIaXRUZXN0
UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVk
Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAordm9pZCBIaXRUZXN0UmVzdWx0OjphcHBl
bmQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCit7CisgICAgQVNTRVJUKGlzUmVnaW9uVGVz
dCgpKTsKKworICAgIGlmICghbV9pbm5lck5vZGUgJiYgb3RoZXIuaW5uZXJOb2RlKCkpIHsKKyAg
ICAgICAgbV9pbm5lck5vZGUgPSBvdGhlci5pbm5lck5vZGUoKTsKKyAgICAgICAgbV9pbm5lck5v
blNoYXJlZE5vZGUgPSBvdGhlci5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICAgICAgbV9sb2Nh
bFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOworICAgICAgICBtX2lubmVyVVJMRWxlbWVudCA9
IG90aGVyLlVSTEVsZW1lbnQoKTsKKyAgICAgICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3JvbGxi
YXIoKTsKKyAgICAgICAgbV9pc092ZXJXaWRnZXQgPSBvdGhlci5pc092ZXJXaWRnZXQoKTsKKyAg
ICB9CisKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IG90aGVy
LnJhd05vZGVMaXN0KCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0
ZXJhdG9yIGxhc3QgPSBsaXN0LmVuZCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPE5v
ZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBsYXN0OyArK2l0
KQorICAgICAgICBtX3Jhd05vZGVMaXN0LmFkZChpdC0+Z2V0KCkpOworfQorCitib29sIEhpdFRl
c3RSZXN1bHQ6OmFkZFJhd05vZGVGb3JSZWdpb25UZXN0KE5vZGUqIG5vZGUsIGludCB4LCBpbnQg
eSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWlzUmVnaW9uVGVzdCgpIHx8ICFu
b2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3Jhd05vZGVMaXN0LmFkZChub2Rl
KTsKKworICAgIHJldHVybiAhcmVjdC5jb250YWlucyhwb2ludFJlY3QoeCwgeSkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShy
ZXZpc2lvbiA2MTEwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsOCArMjEsMTEgQEAKICNkZWZpbmUgSGl0VGVzdFJlc3VsdF9oCiAK
ICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zOCw2ICs0MSw3IEBAIGNsYXNzIFN0cmluZzsKIGNsYXNzIEhpdFRlc3RSZXN1bHQg
ewogcHVibGljOgogICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmKTsKKyAgICBIaXRU
ZXN0UmVzdWx0KGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50U2l6ZSYpOwogICAgIEhpdFRlc3RS
ZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwogICAgIH5IaXRUZXN0UmVzdWx0KCk7CiAgICAg
SGl0VGVzdFJlc3VsdCYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKQEAgLTQ5LDYg
KzUzLDExIEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBVUkxFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbm5lclVSTEVsZW1lbnQuZ2V0KCk7IH0KICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9CiAgICAgYm9vbCBpc092ZXJXaWRn
ZXQoKSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcldpZGdldDsgfQorICAgIEludFNpemUgcG9pbnRQ
YWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludFBhZGRpbmc7IH0KKyAgICBib29sIGlzUmVn
aW9uVGVzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3BvaW50UGFkZGluZy5pc0VtcHR5KCk7IH0KKyAg
ICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgcmF3Tm9kZUxpc3QoKSBjb25zdCB7
IHJldHVybiBtX3Jhd05vZGVMaXN0OyB9CisgICAgSW50UmVjdCBwb2ludFJlY3QoaW50IHgsIGlu
dCB5KSBjb25zdDsKKyAgICBJbnRSZWN0IHBvaW50UmVjdChjb25zdCBJbnRQb2ludCYpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXRUb05vblNoYWRvd0FuY2VzdG9yKCk7CiAKQEAgLTc2LDYgKzg1LDkg
QEAgcHVibGljOgogICAgIGJvb2wgaXNMaXZlTGluaygpIGNvbnN0OwogICAgIGJvb2wgaXNDb250
ZW50RWRpdGFibGUoKSBjb25zdDsKIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1
bHQmKTsKKyAgICBib29sIGFkZFJhd05vZGVGb3JSZWdpb25UZXN0KE5vZGUqLCBpbnQgeCwgaW50
IHksIGNvbnN0IEludFJlY3QmIHJlY3QgPSBJbnRSZWN0KCkpOworCiBwcml2YXRlOgogICAgIFJl
ZlB0cjxOb2RlPiBtX2lubmVyTm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5lck5vblNoYXJl
ZE5vZGU7CkBAIC04NCw5ICs5NiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZGV0ZXJtaW5lIHdoZXJlIGluc2lkZSB0aGUgcmVuZGVyZXIgd2UgaGl0IG9uIHN1
YnNlcXVlbnQgb3BlcmF0aW9ucy4KICAgICBSZWZQdHI8RWxlbWVudD4gbV9pbm5lclVSTEVsZW1l
bnQ7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7CisgICAgSW50U2l6ZSBtX3Bv
aW50UGFkZGluZzsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3Jhd05vZGVMaXN0
OwogICAgIGJvb2wgbV9pc092ZXJXaWRnZXQ7IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgb3Zl
ciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcgYXJlYSBvZiBhIFJlbmRl
cldpZGdldCBmb3IgZXhhbXBsZSkuCiB9OwogCitpbmxpbmUgSW50UmVjdCBIaXRUZXN0UmVzdWx0
Ojpwb2ludFJlY3QoaW50IHgsIGludCB5KSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KHgg
LSBtX3BvaW50UGFkZGluZy53aWR0aCgpLCB5IC0gbV9wb2ludFBhZGRpbmcuaGVpZ2h0KCksIDIg
KiBtX3BvaW50UGFkZGluZy53aWR0aCgpICsgMSwgMiAqIG1fcG9pbnRQYWRkaW5nLmhlaWdodCgp
ICsgMSk7Cit9CisKK2lubGluZSBJbnRSZWN0IEhpdFRlc3RSZXN1bHQ6OnBvaW50UmVjdChjb25z
dCBJbnRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChwLngoKSAtIG1fcG9p
bnRQYWRkaW5nLndpZHRoKCksIHAueSgpIC0gbV9wb2ludFBhZGRpbmcuaGVpZ2h0KCksIDIgKiBt
X3BvaW50UGFkZGluZy53aWR0aCgpICsgMSwgMiAqIG1fcG9pbnRQYWRkaW5nLmhlaWdodCgpICsg
MSk7Cit9CisKIFN0cmluZyBkaXNwbGF5U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE5vZGUq
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDYxMTAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMSw3ICs2MTEsNyBAQCBib29sIElubGluZUZs
b3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiB7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3Qo
dmlzaWJsZU92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxvd1JlY3QubW92ZSh0eCwgdHkpOwot
ICAgIGlmICghb3ZlcmZsb3dSZWN0LmNvbnRhaW5zKHgsIHkpKQorICAgIGlmICghb3ZlcmZsb3dS
ZWN0LmludGVyc2VjdHMocmVzdWx0LnBvaW50UmVjdCh4LCB5KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIENoZWNrIGNoaWxkcmVuIGZpcnN0LgpAQCAtNjI0LDkgKzYyNCwxMCBA
QCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAKICAgICAvLyBOb3cg
Y2hlY2sgb3Vyc2VsdmVzLgogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1f
d2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3Qu
Y29udGFpbnMoeCwgeSkpIHsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3Qu
aW50ZXJzZWN0cyhyZXN1bHQucG9pbnRSZWN0KHgsIHkpKSkgewogICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsg
Ly8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNv
bnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghcmVzdWx0LmFkZFJhd05vZGVGb3JSZWdpb25UZXN0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwg
eSwgcmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9u
IDYxMTAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2Niw5ICsyNjYsMTAgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRSZWN0IHJlY3QodHgg
KyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAgaWYgKG1fdHJ1bmNhdGlv
biAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuY29u
dGFpbnMoeCwgeSkpIHsKKyAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAm
JiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5wb2ludFJl
Y3QoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QocmVuZGVyZXIoKS0+bm9k
ZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lv
biA2MTEwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzc0NywxOSArMzc0NywyMSBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUCiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcg
YXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzaWJsZU92ZXJmbG93UmVj
dCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIGlmICghb3Zl
cmZsb3dCb3guY29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRl
cnNlY3RzKHJlc3VsdC5wb2ludFJlY3QoX3gsIF95KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgaWYgKChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tn
cm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYm
IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94LCBfeSwgdHgsIHR5KSkgewogICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0
eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gVE9ETzogaXNQb2ludEluT3Zl
cmZsb3dDb250cm9sKCkgZG9lc24ndCBoYW5kbGUgcmVnaW9uIHRlc3QgeWV0LgorICAgICAgICBp
ZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChub2RlKCksIF94LCBfeSkpCisgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUgY2xpcHBpbmcs
IHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VPdmVyZmxvd0Ns
aXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICBi
b29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0NsaXApOwotICAg
IGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29u
dHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95KSA6IG92ZXJmbG93Q2xpcFJlY3Qo
dHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNl
Q2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkpLmludGVy
c2VjdHMocmVzdWx0LnBvaW50UmVjdChfeCwgX3kpKSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5
KS5pbnRlcnNlY3RzKHJlc3VsdC5wb2ludFJlY3QoX3gsIF95KSkpOwogICAgIGlmIChjaGVja0No
aWxkcmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAg
ICBpbnQgc2Nyb2xsZWRYID0gdHg7CkBAIC0zODA3LDkgKzM4MDksMTAgQEAgYm9vbCBSZW5kZXJC
bG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFj
a2dyb3VuZAogICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQg
fHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAg
ICAgSW50UmVjdCBib3VuZHNSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgICAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuY29udGFpbnMoX3gsIF95
KSkgeworICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucG9pbnRSZWN0KF94LCBfeSkpKSB7CiAgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9y
UmVnaW9uVGVzdChub2RlKCksIF94LCBfeSwgYm91bmRzUmVjdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM4MzQsMTMgKzM4MzcsMTYgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSAogICAgICAgICBjdXJyWU9m
ZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5KTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChjb2xSZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgICAg
IGlmIChjb2xSZWN0LmludGVyc2VjdHMocmVzdWx0LnBvaW50UmVjdCh4LCB5KSkpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNpZGUgdGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAv
LyBBZGp1c3QgdHggYW5kIHR5IHRvIGNoYW5nZSB3aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAg
CiAgICAgICAgICAgICBpbnQgZmluYWxYID0gdHggKyBjdXJyWE9mZnNldDsKICAgICAgICAgICAg
IGludCBmaW5hbFkgPSB0eSArIGN1cnJZT2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIGhpdFRl
c3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0
QWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkgJiYgIWNvbFJl
Y3QuY29udGFpbnMocmVzdWx0LnBvaW50UmVjdCh4LCB5KSkpCisgICAgICAgICAgICAgICAgaGl0
VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRl
c3RBY3Rpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBoaXRU
ZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwgaGl0VGVz
dEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkocmV2aXNpb24gNjExMDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTUyLDkgKzU1Mywx
MSBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAKICAgICAvLyBD
aGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0
IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGlj
aCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgaWYgKHZp
c2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgSW50
UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgewor
ICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQo
KSk7CisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZv
cmVncm91bmQgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5wb2ludFJlY3QoeFBvcywg
eVBvcykpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3Qobm9kZSgpLCB4UG9zLCB5UG9zLCBib3Vu
ZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDYxMTAwKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDQsMTAgKzUwNCwxMCBAQCBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkg
CiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHRl
bXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChy
ZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBvaW50UGFkZGluZygpKTsKICAgICBib29sIGluc2lkZSA9
IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCB4LCB5LCB0
eCwgdHksIGhpdFRlc3RBY3Rpb24pOwogCi0gICAgaWYgKGluc2lkZSAmJiBub2RlKCkpIHsKKyAg
ICBpZiAodGVtcFJlc3VsdC5pbm5lck5vZGUoKSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhU
TUxNYXBFbGVtZW50KiBtYXAgPSBpbWFnZU1hcCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNv
bnRlbnRCb3ggPSBjb250ZW50Qm94UmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgem9vbSA9IHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKQEAgLTUxOCw2ICs1MTgsOCBAQCBib29sIFJlbmRlcklt
YWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAo
IWluc2lkZSAmJiByZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
dGVtcFJlc3VsdCk7CiAgICAgaWYgKGluc2lkZSkKICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3Vs
dDsKICAgICByZXR1cm4gaW5zaWRlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
cmV2aXNpb24gNjExMDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3MzcsNyArMjczNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6aGl0VGVzdExheWVyKFIKICAgICAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgICAgICBJ
bnRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwgdXNlVGVtcG9y
YXJ5Q2xpcFJlY3RzKTsKICAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0ZXN0IHRoZSBlbmNs
b3NpbmcgY2xpcCBub3cuCi0gICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmNvbnRhaW5zKGhpdFRl
c3RQb2ludCkpCisgICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMocmVzdWx0LnBv
aW50UmVjdChoaXRUZXN0UG9pbnQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQogCkBAIC0yODUwLDE3ICsyODUwLDIxIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKFIKICAgICB9CiAKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRo
ZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXll
ci4KLSAgICBpZiAoZmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRp
bmdMYXllcigpKSB7CisgICAgaWYgKGZnUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5wb2ludFJlY3Qo
aGl0VGVzdFBvaW50KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgIC8vIEhp
dCB0ZXN0IHdpdGggYSB0ZW1wb3JhcnkgSGl0VGVzdFJlc3VsdCwgYmVjYXVzZSB3ZSBvbmx5IHdh
bnQgdG8gY29tbWl0IHRvICdyZXN1bHQnIGlmIHdlIGtub3cgd2UncmUgZnJvbnRtb3N0LgotICAg
ICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgICAgICBI
aXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wb2ludFBhZGRp
bmcoKSk7CiAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwg
bGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdERlc2NlbmRhbnRzKSAmJgogICAgICAg
ICAgICAgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwg
dW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIGlmICgh
ZGVwdGhTb3J0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgICAgICAvLyBGb3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXll
cnMsIHNvIGtlZXAgdGhpcyBhcyBhIGNhbmRpZGF0ZS4KICAgICAgICAgICAgIGNhbmRpZGF0ZUxh
eWVyID0gdGhpczsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlZ2lv
blRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQog
CiAgICAgLy8gTm93IGNoZWNrIG91ciBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLgpAQCAtMjg3
NiwxMyArMjg4MCwxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
CiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7
CiAKLSAgICBpZiAoYmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRp
bmdMYXllcigpKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9p
bnQoKSk7CisgICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5wb2ludFJlY3QoaGl0VGVz
dFBvaW50KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBvaW50UGFkZGluZygpKTsKICAg
ICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5k
cywgaGl0VGVzdFBvaW50LCBIaXRUZXN0U2VsZikgJiYKICAgICAgICAgICAgIGlzSGl0Q2FuZGlk
YXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNm
b3JtU3RhdGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiAwOwpA
QCAtMjkyOSwxNCArMjkzNywxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
aXN0KFZlCiAgICAgZm9yIChpbnQgaSA9IGxpc3QtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
CiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7CiAgICAgICAg
IFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJl
c3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChy
ZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBvaW50UGFkZGluZygpKTsKICAgICAgICAgaWYgKGNoaWxk
TGF5ZXItPmlzUGFnaW5hdGVkKCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdp
bmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3Vs
dCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JE
ZXNjZW5kYW50cyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRM
YXllci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwg
aGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0
Rm9yRGVzY2VuZGFudHMpOworICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICAgICAgaWYgKGlzSGl0Q2Fu
ZGlkYXRlKGhpdExheWVyLCBkZXB0aFNvcnREZXNjZW5kYW50cywgek9mZnNldCwgdW5mbGF0dGVu
ZWRUcmFuc2Zvcm1TdGF0ZSkpIHsKICAgICAgICAgICAgIHJlc3VsdExheWVyID0gaGl0TGF5ZXI7
Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1
bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsK
ICAgICAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTI5OTYsNyArMzAwNyw3IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAgICAgICAgSW50UmVjdCBsb2NhbENsaXBSZWN0KGhp
dFRlc3RSZWN0KTsKICAgICAgICAgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAoIWxvY2FsQ2xpcFJlY3QuaXNFbXB0eSgpICYmIGxvY2FsQ2xp
cFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkgeworICAgICAgICBpZiAoIWxvY2FsQ2xpcFJl
Y3QuaXNFbXB0eSgpICYmIGxvY2FsQ2xpcFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucG9pbnRSZWN0
KGhpdFRlc3RQb2ludCkpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAw
OwogICAgICAgICAgICAgaWYgKCFjb2x1bW5JbmRleCkgewogICAgICAgICAgICAgICAgIC8vIEFw
cGx5IGEgdHJhbnNsYXRpb24gdHJhbnNmb3JtIHRvIGNoYW5nZSB3aGVyZSB0aGUgbGF5ZXIgcGFp
bnRzLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNp
b24gNjExMDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgpAQCAtMjQ1LDE0ICsyNDYsMTQgQEAgYm9vbCBSZW5kZXJM
aW5lQm94TGlzdDo6aGl0VGVzdChSZW5kZXJCbwogICAgIC8vIGNvbnRhaW4gdGhlIHBvaW50LiAg
VGhpcyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3
YWxraW5nIGFueSBsaW5lcy4KICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBmbGF3ZWQgaW4g
dGhlIGZvbGxvd2luZyBleHRyZW1lbHkgb2JzY3VyZSB3YXk6CiAgICAgLy8gaWYgc29tZSBsaW5l
IGluIHRoZSBtaWRkbGUgaGFzIGEgaHVnZSBvdmVyZmxvdywgaXQgbWlnaHQgYWN0dWFsbHkgZXh0
ZW5kIGJlbG93IHRoZSBsYXN0IGxpbmUuCi0gICAgaWYgKCh5ID49IHR5ICsgbGFzdExpbmVCb3go
KS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgfHwgKHkgPCB0eSArIGZpcnN0TGlu
ZUJveCgpLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpKSkKKyAgICBpZiAoKHkgLSByZXN1
bHQucG9pbnRQYWRkaW5nKCkuaGVpZ2h0KCkgPj0gdHkgKyBsYXN0TGluZUJveCgpLT5yb290KCkt
PmJvdHRvbVZpc2libGVPdmVyZmxvdygpKSB8fCAoeSArIHJlc3VsdC5wb2ludFBhZGRpbmcoKS5o
ZWlnaHQoKSA8IHR5ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTZWUgaWYgb3VyIHJvb3QgbGlu
ZXMgY29udGFpbiB0aGUgcG9pbnQuICBJZiBzbywgdGhlbiB3ZSBoaXQgdGVzdAogICAgIC8vIHRo
ZW0gZnVydGhlci4gIE5vdGUgdGhhdCBib3hlcyBjYW4gZWFzaWx5IG92ZXJsYXAsIHNvIHdlIGNh
bid0IG1ha2UgYW55IGFzc3VtcHRpb25zCiAgICAgLy8gYmFzZWQgb2ZmIHBvc2l0aW9ucyBvZiBv
dXIgZmlyc3QgbGluZSBib3ggb3Igb3VyIGxhc3QgbGluZSBib3guCiAgICAgZm9yIChJbmxpbmVG
bG93Qm94KiBjdXJyID0gbGFzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5l
Qm94KCkpIHsKLSAgICAgICAgaWYgKHkgPj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVP
dmVyZmxvdygpICYmIHkgPCB0eSArIGN1cnItPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93
KCkpIHsKKyAgICAgICAgaWYgKHkgKyByZXN1bHQucG9pbnRQYWRkaW5nKCkuaGVpZ2h0KCkgPj0g
dHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpICYmIHkgLSByZXN1bHQucG9p
bnRQYWRkaW5nKCkuaGVpZ2h0KCkgPCB0eSArIGN1cnItPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92
ZXJmbG93KCkpIHsKICAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHkpOwogICAgICAgICAgICAgaWYgKGluc2lkZSkg
ewogICAgICAgICAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
SW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuY3BwCShyZXZpc2lvbiA2MTEwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUm9vdC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKQEAgLTMxMyw2ICszMTQsOCBA
QCBib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgICAgIGlmIChj
aGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRl
c3RBY3Rpb24pKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUg
bG9jYWwgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwogICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOworICAg
ICAgICAgICAgLy8gVE9ETzogbm9kZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlZ2lv
biB0ZXN0IHlldC4KKyAgICAgICAgICAgIHJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChj
aGlsZC0+bm9kZSgpLCBfeCwgX3kpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA2MTEw
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRml4ZWRU
YWJsZUxheW91dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMTEzNSw3ICsxMTM2LDcgQEAgYm9v
bCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIHR5ICs9IHkoKTsKIAog
ICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCi0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBv
dmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3Rz
KHJlc3VsdC5wb2ludFJlY3QoeFBvcywgeVBvcykpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJC
b3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rp
b24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pICYmCiAgICAgICAgICAgICAgICAgY2hpbGQtPm5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24pKSB7
CkBAIC0xMTQ2LDkgKzExNDcsMTEgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VAogICAgIH0KIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4KLSAgICBpZiAo
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3Vu
ZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBJbnRSZWN0KHR4
LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgSW50
UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFj
a2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3Vu
ZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnBvaW50UmVjdCh4UG9zLCB5UG9zKSkpIHsKICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAt
IHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdO
b2RlRm9yUmVnaW9uVGVzdChub2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA2MTEwMCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDb2wuaCIKQEAgLTExNTIsNyArMTE1Myw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpu
b2RlQXRQb2ludChjb24KICAgICB0eCArPSB4KCk7CiAgICAgdHkgKz0geSgpOwogCi0gICAgaWYg
KGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMo
eFBvcywgeVBvcykpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBS
ZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1bHQucG9pbnRSZWN0KHhQb3MsIHlQb3MpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiA2MTEwMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3ICsz
ODAsNyBAQCBib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0CiAgICAgYm9v
bCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4
LCB5LCB0eCwgdHksIGFjdGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFy
ZSByZWFsbHkgb3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3Jk
ZXIvcGFkZGluZyBhcmVhKS4KLSAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0
LmlubmVyTm9kZSgpID09IG5vZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWdp
b25UZXN0KCkpICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkK
ICAgICAgICAgcmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5z
KHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58669</attachid>
            <date>2010-06-14 10:42:31 -0700</date>
            <delta_ts>2010-06-25 13:15:22 -0700</delta_ts>
            <desc>updated patch based on the comment</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29632</size>
            <attacher name="Grace Kloba">klobag</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTEyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTAtMDYtMTQgIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhh
bmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2lu
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcK
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuYmFz
ZS5leHA6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphcHBlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjpwYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Omlz
UmVnaW9uVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpyYXdOb2RlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpyZWdpb25Gcm9tUG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6aGl0VGVzdENvbHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlz
dDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KToKKwogMjAxMC0wNi0xNCAgQ2hhbmcgU2h1ICA8Y2hh
bmcuc2h1QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDYxMTI5KQorKysgV2ViQ29yZS9X
ZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbAogX19aTjdXZWJDb3JlMTJFdmVudEhh
bmRsZXIxNXNlbmRTY3JvbGxFdmVudEV2CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE2aGFu
ZGxlV2hlZWxFdmVudEVSTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjIwaGFuZGxlVGV4dElucHV0RXZlbnRFUktOU182U3RyaW5nRVBOU181RXZlbnRF
YmIKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05T
XzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFCitfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU184SW50UG9pbnRFYmJOU18xN0hpdFRl
c3RTY3JvbGxiYXJzRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIx
aGFuZGxlTW91c2VQcmVzc0V2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dl
YkNvcmUxMkV2ZW50SGFuZGxlcjIzaGFuZGxlTW91c2VSZWxlYXNlRXZlbnRFUktOU18xOFBsYXRm
b3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjdjYXBzTG9ja1N0YXRl
TWF5SGF2ZUNoYW5nZWRFdgpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDYxMTI5
KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
OSw5ICs4NTksOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6YWxsb3dESFRNTERyYWcoYm9vbCYgCiB9
CiAjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICAKLUhpdFRlc3RSZXN1bHQgRXZl
bnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJv
b2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nLCBIaXRUZXN0U2Nyb2xs
YmFycyB0ZXN0U2Nyb2xsYmFycykKK0hpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0
UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFkb3dDb250
ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nLCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Nyb2xsYmFy
cywgY29uc3QgSW50U2l6ZSYgcGFkZGluZykKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChw
b2ludCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOwogICAgIGlm
ICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgaW50IGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVz
dDo6QWN0aXZlOwpAQCAtODgzLDcgKzg4Myw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVy
OjpoaXRUZXN0UmVzdWwKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4od2lkZ2V0KTsKICAgICAgICAgSW50UG9pbnQgd2lkZ2V0UG9pbnQocmVzdWx0Lmxv
Y2FsUG9pbnQoKS54KCkgKyB2aWV3LT5zY3JvbGxYKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlckxl
ZnQoKSAtIHJlbmRlcldpZGdldC0+cGFkZGluZ0xlZnQoKSwgCiAgICAgICAgICAgICByZXN1bHQu
bG9jYWxQb2ludCgpLnkoKSArIHZpZXctPnNjcm9sbFkoKSAtIHJlbmRlcldpZGdldC0+Ym9yZGVy
VG9wKCkgLSByZW5kZXJXaWRnZXQtPnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1
bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3aWRnZXRQb2ludCk7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3aWRnZXRQb2ludCwgcGFkZGluZyk7CiAgICAgICAgIGZy
YW1lLT5jb250ZW50UmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdCho
aXRUeXBlKSwgd2lkZ2V0SGl0VGVzdFJlc3VsdCk7CiAgICAgICAgIHJlc3VsdCA9IHdpZGdldEhp
dFRlc3RSZXN1bHQ7CiAKQEAgLTkwNSw3ICs5MDUsNyBAQCBIaXRUZXN0UmVzdWx0IEV2ZW50SGFu
ZGxlcjo6aGl0VGVzdFJlc3VsCiAgICAgICAgICAgICBpZiAocmVzdWx0VmlldyAmJiBtYWluVmll
dykgewogICAgICAgICAgICAgICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcmVzdWx0Vmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZXN1bHQucG9pbnQoKSk7CiAgICAgICAgICAgICAgICAgSW50UG9p
bnQgbWFpbkZyYW1lUG9pbnQgPSBtYWluVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2lu
dCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwg
aWdub3JlQ2xpcHBpbmcpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1haW5GcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5GcmFtZVBvaW50LCBhbGxvd1No
YWRvd0NvbnRlbnQsIGlnbm9yZUNsaXBwaW5nLCB0ZXN0U2Nyb2xsYmFycywgcGFkZGluZyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZp
c2lvbiA2MTEyOSkKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91
c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgSGl0VGVzdFJl
c3VsdCBoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFk
b3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2UsIEhpdFRlc3RTY3JvbGxiYXJz
IHNjcm9sbGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMpOworICAgIEhpdFRlc3RSZXN1bHQg
aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFsbG93U2hhZG93Q29u
dGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLCBIaXRUZXN0U2Nyb2xsYmFycyBzY3Jv
bGxiYXJzID0gRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBjb25zdCBJbnRTaXplJiBwYWRkaW5nID0g
SW50U2l6ZSgpKTsKIAogICAgIGJvb2wgbW91c2VQcmVzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9t
b3VzZVByZXNzZWQ7IH0KICAgICB2b2lkIHNldE1vdXNlUHJlc3NlZChib29sIHByZXNzZWQpIHsg
bV9tb3VzZVByZXNzZWQgPSBwcmVzc2VkOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxp
cHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwCShyZXZpc2lvbiA2MTEyOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMywxMSBAQCBib29sIEVsbGlwc2lzQm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodmlzaWJs
ZVRvSGl0VGVzdGluZygpICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCkuY29u
dGFpbnMoeCwgeSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwg
bV93aWR0aCwgbV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91
bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0g
dHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQu
YWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCBib3VuZHNS
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiA2MTEyOSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw2ICs1MiwxMyBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBv
CiB7CiB9CiAKK0hpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIHBv
aW50LCBjb25zdCBJbnRTaXplJiBwYWRkaW5nKQorICAgIDogbV9wb2ludChwb2ludCkKKyAgICAs
IG1fcGFkZGluZyhwYWRkaW5nKQorICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCit7Cit9CisK
IEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIp
CiAgICAgOiBtX2lubmVyTm9kZShvdGhlci5pbm5lck5vZGUoKSkKICAgICAsIG1faW5uZXJOb25T
aGFyZWROb2RlKG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpKQpAQCAtNTksNiArNjYsOCBAQCBI
aXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlCiAgICAgLCBtX2xvY2FsUG9p
bnQob3RoZXIubG9jYWxQb2ludCgpKQogICAgICwgbV9pbm5lclVSTEVsZW1lbnQob3RoZXIuVVJM
RWxlbWVudCgpKQogICAgICwgbV9zY3JvbGxiYXIob3RoZXIuc2Nyb2xsYmFyKCkpCisgICAgLCBt
X3BhZGRpbmcob3RoZXIucGFkZGluZygpKQorICAgICwgbV9yYXdOb2RlTGlzdChvdGhlci5yYXdO
b2RlTGlzdCgpKQogICAgICwgbV9pc092ZXJXaWRnZXQob3RoZXIuaXNPdmVyV2lkZ2V0KCkpCiB7
CiB9CkBAIC03NSw2ICs4NCw4IEBAIEhpdFRlc3RSZXN1bHQmIEhpdFRlc3RSZXN1bHQ6Om9wZXJh
dG9yPSgKICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7CiAgICAgbV9pbm5l
clVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7CiAgICAgbV9zY3JvbGxiYXIgPSBvdGhl
ci5zY3JvbGxiYXIoKTsKKyAgICBtX3BhZGRpbmcgPSBvdGhlci5wYWRkaW5nKCk7CisgICAgbV9y
YXdOb2RlTGlzdCA9IG90aGVyLnJhd05vZGVMaXN0KCk7CiAgICAgbV9pc092ZXJXaWRnZXQgPSBv
dGhlci5pc092ZXJXaWRnZXQoKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0zNjIsNCArMzcz
LDMzIEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSAKICAgICByZXR1
cm4gbV9pbm5lck5vblNoYXJlZE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKK3ZvaWQg
SGl0VGVzdFJlc3VsdDo6YXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQoreworICAg
IEFTU0VSVChpc1JlZ2lvblRlc3QoKSk7CisKKyAgICBpZiAoIW1faW5uZXJOb2RlICYmIG90aGVy
LmlubmVyTm9kZSgpKSB7CisgICAgICAgIG1faW5uZXJOb2RlID0gb3RoZXIuaW5uZXJOb2RlKCk7
CisgICAgICAgIG1faW5uZXJOb25TaGFyZWROb2RlID0gb3RoZXIuaW5uZXJOb25TaGFyZWROb2Rl
KCk7CisgICAgICAgIG1fbG9jYWxQb2ludCA9IG90aGVyLmxvY2FsUG9pbnQoKTsKKyAgICAgICAg
bV9pbm5lclVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7CisgICAgICAgIG1fc2Nyb2xs
YmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CisgICAgICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIu
aXNPdmVyV2lkZ2V0KCk7CisgICAgfQorCisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5v
ZGU+ID4mIGxpc3QgPSBvdGhlci5yYXdOb2RlTGlzdCgpOworICAgIExpc3RIYXNoU2V0PFJlZlB0
cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBsYXN0ID0gbGlzdC5lbmQoKTsKKyAgICBmb3IgKExp
c3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4o
KTsgaXQgIT0gbGFzdDsgKytpdCkKKyAgICAgICAgbV9yYXdOb2RlTGlzdC5hZGQoaXQtPmdldCgp
KTsKK30KKworYm9vbCBIaXRUZXN0UmVzdWx0OjphZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChOb2Rl
KiBub2RlLCBpbnQgeCwgaW50IHksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFp
c1JlZ2lvblRlc3QoKSB8fCAhbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9y
YXdOb2RlTGlzdC5hZGQobm9kZSk7CisKKyAgICByZXR1cm4gIXJlY3QuY29udGFpbnMocmVnaW9u
RnJvbVBvaW50KHgsIHkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gNjExMjkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDEwIEBACiAj
ZGVmaW5lIEhpdFRlc3RSZXN1bHRfaAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rp
b24uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzQxLDcgQEAgY2xhc3MgU3RyaW5n
OwogY2xhc3MgSGl0VGVzdFJlc3VsdCB7CiBwdWJsaWM6CiAgICAgSGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYpOworICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmLCBjb25zdCBJ
bnRTaXplJik7CiAgICAgSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAgICAg
fkhpdFRlc3RSZXN1bHQoKTsKICAgICBIaXRUZXN0UmVzdWx0JiBvcGVyYXRvcj0oY29uc3QgSGl0
VGVzdFJlc3VsdCYpOwpAQCAtNDksNiArNTMsMTEgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIFVS
TEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lubmVyVVJMRWxlbWVudC5nZXQoKTsgfQogICAg
IFNjcm9sbGJhciogc2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7
IH0KICAgICBib29sIGlzT3ZlcldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVyV2lkZ2V0
OyB9CisgICAgSW50U2l6ZSBwYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9Cisg
ICAgYm9vbCBpc1JlZ2lvblRlc3QoKSBjb25zdCB7IHJldHVybiAhbV9wYWRkaW5nLmlzRW1wdHko
KTsgfQorICAgIEludFJlY3QgcmVnaW9uRnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7Cisg
ICAgSW50UmVjdCByZWdpb25Gcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBj
b25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgcmF3Tm9kZUxpc3QoKSBjb25zdCB7IHJl
dHVybiBtX3Jhd05vZGVMaXN0OyB9CiAKICAgICB2b2lkIHNldFRvTm9uU2hhZG93QW5jZXN0b3Io
KTsKIApAQCAtNzYsNiArODUsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNMaXZlTGluaygpIGNv
bnN0OwogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKIAorICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBy
ZWdpb24gdGVzdCBhbmQgdGhlIGhpdCB0ZXN0IG5lZWRzIHRvIGNvbnRpbnVlIGFzIHRoZSByZWdp
b24gaXMgbm90IGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHJlY3QKKyAgICBib29sIGFkZFJhd05vZGVG
b3JSZWdpb25UZXN0KE5vZGUqLCBpbnQgeCwgaW50IHksIGNvbnN0IEludFJlY3QmIHJlY3QgPSBJ
bnRSZWN0KCkpOworCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX2lubmVyTm9kZTsKICAg
ICBSZWZQdHI8Tm9kZT4gbV9pbm5lck5vblNoYXJlZE5vZGU7CkBAIC04NCw5ICs5NywyMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXJlIGlu
c2lkZSB0aGUgcmVuZGVyZXIgd2UgaGl0IG9uIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4KICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9pbm5lclVSTEVsZW1lbnQ7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4g
bV9zY3JvbGxiYXI7CisgICAgSW50U2l6ZSBtX3BhZGRpbmc7CisgICAgTGlzdEhhc2hTZXQ8UmVm
UHRyPE5vZGU+ID4gbV9yYXdOb2RlTGlzdDsKICAgICBib29sIG1faXNPdmVyV2lkZ2V0OyAvLyBS
ZXR1cm5zIHRydWUgaWYgd2UgYXJlIG92ZXIgYSB3aWRnZXQgKGFuZCBub3QgaW4gdGhlIGJvcmRl
ci9wYWRkaW5nIGFyZWEgb2YgYSBSZW5kZXJXaWRnZXQgZm9yIGV4YW1wbGUpLgogfTsKIAoraW5s
aW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVnaW9uRnJvbVBvaW50KGludCB4LCBpbnQgeSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdCh4IC0gbV9wYWRkaW5nLndpZHRoKCksIHkgLSBt
X3BhZGRpbmcuaGVpZ2h0KCksIDIgKiBtX3BhZGRpbmcud2lkdGgoKSArIDEsIDIgKiBtX3BhZGRp
bmcuaGVpZ2h0KCkgKyAxKTsKK30KKworaW5saW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVn
aW9uRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBwKSBjb25zdAoreworICAgIHJldHVybiBJbnRS
ZWN0KHAueCgpIC0gbV9wYWRkaW5nLndpZHRoKCksIHAueSgpIC0gbV9wYWRkaW5nLmhlaWdodCgp
LCAyICogbV9wYWRkaW5nLndpZHRoKCkgKyAxLCAyICogbV9wYWRkaW5nLmhlaWdodCgpICsgMSk7
Cit9CisKIFN0cmluZyBkaXNwbGF5U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE5vZGUqKTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAJKHJldmlzaW9uIDYxMTI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMSw3ICs2MTEsNyBAQCBib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiB7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3Qodmlz
aWJsZU92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxvd1JlY3QubW92ZSh0eCwgdHkpOwotICAg
IGlmICghb3ZlcmZsb3dSZWN0LmNvbnRhaW5zKHgsIHkpKQorICAgIGlmICghb3ZlcmZsb3dSZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4LCB5KSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIENoZWNrIGNoaWxkcmVuIGZpcnN0LgpAQCAtNjI0LDkgKzYyNCwx
MCBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAKICAgICAvLyBO
b3cgY2hlY2sgb3Vyc2VsdmVzLgogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ks
IG1fd2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJl
Y3QuY29udGFpbnMoeCwgeSkpIHsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJl
Y3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHgsIHkpKSkgewogICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5
IC0gdHkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMg
aW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghcmVzdWx0LmFkZFJhd05vZGVGb3JSZWdpb25UZXN0KHJlbmRlcmVyKCktPm5v
ZGUoKSwgeCwgeSwgcmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHJldmlzaW9uIDYxMTI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2Niw5ICsyNjYsMTAgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRSZWN0
IHJlY3QodHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IHJlY3QuY29udGFpbnMoeCwgeSkpIHsKKyAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1
bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWdpb25Gcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3Qo
cmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiA2MTEyOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc0NywxOSArMzc0NywyMSBAQCBib29sIFJlbmRlckJs
b2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQg
dG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlz
aWJsZU92ZXJmbG93UmVjdCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0g
ICAgICAgIGlmICghb3ZlcmZsb3dCb3guY29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFv
dmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoX3gsIF95KSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hp
bGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94
LCBfeSwgdHgsIHR5KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Ly8gVE9ETzogaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKCkgZG9lc24ndCBoYW5kbGUgcmVnaW9u
IHRlc3QgeWV0LgorICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChu
b2RlKCksIF94LCBfeSkpCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8v
IElmIHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAg
ICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1
c2VPdmVyZmxvd0NsaXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8ICho
YXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95
KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBib29s
IGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xD
bGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludChfeCwgX3kp
KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9t
UG9pbnQoX3gsIF95KSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAgIC8vIEhp
dCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBpbnQgc2Nyb2xsZWRYID0gdHg7CkBA
IC0zODA3LDkgKzM4MDksMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VAogICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFja2dyb3VuZAogICAgIGlmIChoaXRUZXN0
QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRU
ZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAgICAgSW50UmVjdCBib3VuZHNSZWN0KHR4
LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIGJvdW5kc1JlY3QuY29udGFpbnMoX3gsIF95KSkgeworICAgICAgICBpZiAodmlzaWJs
ZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJv
bVBvaW50KF94LCBfeSkpKSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChub2RlKCks
IF94LCBfeSwgYm91bmRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTM4MzQsMTMgKzM4MzcsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6
aGl0VGVzdENvbHVtbnMoY29uc3QgSAogICAgICAgICBjdXJyWU9mZnNldCArPSBjb2xSZWN0Lmhl
aWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5KTsKICAgICAgICAgCi0gICAgICAg
IGlmIChjb2xSZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgICAgIGlmIChjb2xSZWN0LmludGVy
c2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgICAgIC8vIFRo
ZSBwb2ludCBpcyBpbnNpZGUgdGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAvLyBBZGp1c3QgdHgg
YW5kIHR5IHRvIGNoYW5nZSB3aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAgCiAgICAgICAgICAg
ICBpbnQgZmluYWxYID0gdHggKyBjdXJyWE9mZnNldDsKICAgICAgICAgICAgIGludCBmaW5hbFkg
PSB0eSArIGN1cnJZT2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkgJiYgIWNvbFJlY3QuY29udGFpbnMo
cmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4LCB5KSkpCisgICAgICAgICAgICAgICAgaGl0VGVzdENv
bnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rp
b24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBoaXRUZXN0Q29u
dGVudHMocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwgaGl0VGVzdEFjdGlv
bik7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2
aXNpb24gNjExMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTUyLDkgKzU1MywxMSBAQCBi
b29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAKICAgICAvLyBDaGVjayBv
dXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNh
biBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0
cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVjdCh0
eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIElu
dFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7Cisg
ICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91
bmQgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoeFBvcywg
eVBvcykpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3Qobm9kZSgpLCB4UG9zLCB5UG9zLCBib3Vu
ZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDYxMTI5KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDQsMTAgKzUwNCwxMCBAQCBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkg
CiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHRl
bXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChy
ZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgYm9vbCBpbnNpZGUgPSBSZW5k
ZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJlc3VsdCwgeCwgeSwgdHgsIHR5
LCBoaXRUZXN0QWN0aW9uKTsKIAotICAgIGlmIChpbnNpZGUgJiYgbm9kZSgpKSB7CisgICAgaWYg
KHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAgICAgICAgIGlmIChIVE1MTWFw
RWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAgICAgSW50UmVjdCBjb250ZW50
Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IHpvb20gPSBzdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7CkBAIC01MTgsNiArNTE4LDggQEAgYm9vbCBSZW5kZXJJbWFnZTo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFpbnNp
ZGUgJiYgcmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBS
ZXN1bHQpOwogICAgIGlmIChpbnNpZGUpCiAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAg
ICAgcmV0dXJuIGluc2lkZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDYxMTI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzM3LDcgKzI3MzcsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6Omhp
dFRlc3RMYXllcihSCiAgICAgICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAgICAgSW50UmVj
dCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHVzZVRlbXBvcmFyeUNs
aXBSZWN0cyk7CiAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5n
IGNsaXAgbm93LgotICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9p
bnQpKQorICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25G
cm9tUG9pbnQoaGl0VGVzdFBvaW50KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KIApAQCAtMjg1MCwxNyArMjg1MCwyMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSCiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0
aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5
ZXIuCi0gICAgaWYgKGZnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgeworICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJv
bVBvaW50KGhpdFRlc3RQb2ludCkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAg
ICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ug
b25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9z
dC4KLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAg
ICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFk
ZGluZygpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBsYXllckJvdW5kcywgaGl0VGVzdFBvaW50LCBIaXRUZXN0RGVzY2VuZGFudHMpICYmCiAgICAg
ICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRy
LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewotICAgICAgICAgICAgcmVzdWx0
ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYg
KCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICAgICAgIC8vIEZvcmVncm91bmQgY2FuIGRlcHRoLXNvcnQgd2l0aCBkZXNjZW5kYW50IGxh
eWVycywgc28ga2VlcCB0aGlzIGFzIGEgY2FuZGlkYXRlLgogICAgICAgICAgICAgY2FuZGlkYXRl
TGF5ZXIgPSB0aGlzOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVn
aW9uVGVzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9
CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCkBAIC0y
ODc2LDEzICsyODgwLDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFIKICAgICBpZiAoY2FuZGlkYXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMYXll
cjsKIAotICAgIGlmIChiZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5w
b2ludCgpKTsKKyAgICBpZiAoYmdSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2lu
dChoaXRUZXN0UG9pbnQpKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgSGl0
VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFkZGluZygpKTsK
ICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJv
dW5kcywgaGl0VGVzdFBvaW50LCBIaXRUZXN0U2VsZikgJiYKICAgICAgICAgICAgIGlzSGl0Q2Fu
ZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJh
bnNmb3JtU3RhdGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0Owor
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiAw
OwpAQCAtMjkyOSwxNCArMjkzNywxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RMaXN0KFZlCiAgICAgZm9yIChpbnQgaSA9IGxpc3QtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7CiAgICAg
ICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVt
cFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3Vs
dChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChjaGlsZExh
eWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFnaW5h
dGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVz
Y2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5
ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhp
dFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZv
ckRlc2NlbmRhbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgICAgIGlmIChpc0hpdENhbmRp
ZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVuZmxhdHRlbmVk
VHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgICAgICByZXN1bHRMYXllciA9IGhpdExheWVyOwot
ICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAg
ICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0yOTk2LDcgKzMwMDcsNyBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RDaGlsZExhCiAgICAgICAgIEludFJlY3QgbG9jYWxDbGlwUmVjdChoaXRU
ZXN0UmVjdCk7CiAgICAgICAgIGxvY2FsQ2xpcFJlY3QuaW50ZXJzZWN0KGNvbFJlY3QpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKCFsb2NhbENsaXBSZWN0LmlzRW1wdHkoKSAmJiBsb2NhbENsaXBS
ZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkpIHsKKyAgICAgICAgaWYgKCFsb2NhbENsaXBSZWN0
LmlzRW1wdHkoKSAmJiBsb2NhbENsaXBSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Q
b2ludChoaXRUZXN0UG9pbnQpKSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVy
ID0gMDsKICAgICAgICAgICAgIGlmICghY29sdW1uSW5kZXgpIHsKICAgICAgICAgICAgICAgICAv
LyBBcHBseSBhIHRyYW5zbGF0aW9uIHRyYW5zZm9ybSB0byBjaGFuZ2Ugd2hlcmUgdGhlIGxheWVy
IHBhaW50cy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJl
dmlzaW9uIDYxMTI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGluZUJveExpc3QuaCIKIAorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKQEAgLTI0NSwxNCArMjQ2LDE0IEBAIGJvb2wgUmVu
ZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm8KICAgICAvLyBjb250YWluIHRoZSBwb2lu
dC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQgd2UgY2FuIHRha2UgdG8gYXZv
aWQgd2Fsa2luZyBhbnkgbGluZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMgZmxhd2Vk
IGluIHRoZSBmb2xsb3dpbmcgZXh0cmVtZWx5IG9ic2N1cmUgd2F5OgogICAgIC8vIGlmIHNvbWUg
bGluZSBpbiB0aGUgbWlkZGxlIGhhcyBhIGh1Z2Ugb3ZlcmZsb3csIGl0IG1pZ2h0IGFjdHVhbGx5
IGV4dGVuZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgotICAgIGlmICgoeSA+PSB0eSArIGxhc3RMaW5l
Qm94KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHx8ICh5IDwgdHkgKyBmaXJz
dExpbmVCb3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkpCisgICAgaWYgKCh5IC0g
cmVzdWx0LnBhZGRpbmcoKS5oZWlnaHQoKSA+PSB0eSArIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+
Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHx8ICh5ICsgcmVzdWx0LnBhZGRpbmcoKS5oZWlnaHQo
KSA8IHR5ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93KCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTZWUgaWYgb3VyIHJvb3QgbGluZXMgY29u
dGFpbiB0aGUgcG9pbnQuICBJZiBzbywgdGhlbiB3ZSBoaXQgdGVzdAogICAgIC8vIHRoZW0gZnVy
dGhlci4gIE5vdGUgdGhhdCBib3hlcyBjYW4gZWFzaWx5IG92ZXJsYXAsIHNvIHdlIGNhbid0IG1h
a2UgYW55IGFzc3VtcHRpb25zCiAgICAgLy8gYmFzZWQgb2ZmIHBvc2l0aW9ucyBvZiBvdXIgZmly
c3QgbGluZSBib3ggb3Igb3VyIGxhc3QgbGluZSBib3guCiAgICAgZm9yIChJbmxpbmVGbG93Qm94
KiBjdXJyID0gbGFzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkp
IHsKLSAgICAgICAgaWYgKHkgPj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxv
dygpICYmIHkgPCB0eSArIGN1cnItPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHsK
KyAgICAgICAgaWYgKHkgKyByZXN1bHQucGFkZGluZygpLmhlaWdodCgpID49IHR5ICsgY3Vyci0+
cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSAmJiB5IC0gcmVzdWx0LnBhZGRpbmcoKS5oZWln
aHQoKSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgewogICAg
ICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHgsIHksIHR4LCB0eSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7CiAgICAgICAgICAgICAg
ICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgs
IHkgLSB0eSkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9u
IDYxMTI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMzEzLDYgKzMxNCw4IEBAIGJvb2wgUmVuZGVyU1ZH
Um9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9h
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDU1MvSFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyBy
ZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJveCwgcmlnaHQ/CiAgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7CisgICAgICAgICAgICAvLyBUT0RP
OiBub2RlQXRGbG9hdFBvaW50KCkgZG9lc24ndCBoYW5kbGUgcmVnaW9uIHRlc3QgeWV0LgorICAg
ICAgICAgICAgcmVzdWx0LmFkZFJhd05vZGVGb3JSZWdpb25UZXN0KGNoaWxkLT5ub2RlKCksIF94
LCBfeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDYxMTI5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGaXhlZFRhYmxlTGF5b3V0LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCkBAIC0xMTM1LDcgKzExMzYsNyBAQCBib29sIFJlbmRlclRhYmxlOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgdHkgKz0geSgpOwogCiAgICAgLy8gQ2hlY2sga2lk
cyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3Qo
dHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZy
b21Qb2ludCh4UG9zLCB5UG9zKSkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkg
ewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCkt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNo
aWxkID09IG1fY2FwdGlvbikgJiYKICAgICAgICAgICAgICAgICBjaGlsZC0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKQEAgLTExNDYs
OSArMTE0NywxMSBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAg
ICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LgotICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlv
biA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIEludFJlY3QodHgsIHR5LCB3aWR0
aCgpLCBoZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJvdW5k
c1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8
IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZFJhd05vZGVG
b3JSZWdpb25UZXN0KG5vZGUoKSwgeFBvcywgeVBvcywgYm91bmRzUmVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDYxMTI5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNv
bC5oIgpAQCAtMTE1Miw3ICsxMTUzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVB
dFBvaW50KGNvbgogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKLSAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9z
LCB5UG9zKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3Qo
dHgsIHR5KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoeFBvcywgeVBvcykpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBs
YXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDYxMTI5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDcg
KzM4MCw3IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXQKICAgICBi
b29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHgsIHksIHR4LCB0eSwgYWN0aW9uKTsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2Ug
YXJlIHJlYWxseSBvdmVyIHRoZSB3aWRnZXQgaXRzZWxmIChhbmQgbm90IGp1c3QgaW4gdGhlIGJv
cmRlci9wYWRkaW5nIGFyZWEpLgotICAgIGlmIChpbnNpZGUgJiYgIWhhZFJlc3VsdCAmJiByZXN1
bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpKQorICAgIGlmICgoaW5zaWRlIHx8IHJlc3VsdC5pc1Jl
Z2lvblRlc3QoKSkgJiYgIWhhZFJlc3VsdCAmJiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgp
KQogICAgICAgICByZXN1bHQuc2V0SXNPdmVyV2lkZ2V0KGNvbnRlbnRCb3hSZWN0KCkuY29udGFp
bnMocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgIHJldHVybiBpbnNpZGU7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59789</attachid>
            <date>2010-06-25 13:15:22 -0700</date>
            <delta_ts>2010-07-07 13:34:59 -0700</delta_ts>
            <desc>patch v1 - feature + tests</desc>
            <filename>0001-2010-06-22-Grace-Kloba--Antonio-Gomes.patch</filename>
            <type>text/plain</type>
            <size>49465</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBkNDJiYWY4YTExOTZkYmM4YjM4ZWJlYjhmODM2ZDg2ODAwOTZkYjU5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDYtMjIgR3JhY2UgS2xvYmEgPGtsb2JhZ0BnbWFpbC5jb20+ICwgQW50b25pbyBHb21lcyA8
dG9uaWtpdG9vQHdlYmtpdC5vcmc+CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgoKICAgICAgICBFbmhhbmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGlu
c3RlYWQgb2YgYSBwb2ludAogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MDE5NwoKICAgICAgICBQYXRjaCBleHRlbmRzIHRoZSBoaXQgdGVzdGluZyBzeXN0
ZW0gdG8gd29yayBjb25zaWRlcmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKICAgICAgICBhcyBpbnB1
dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIHdoZW4gYXBwbGljYWJsZS4gVGhlIHByaW1hcnkgZ29hbCBv
ZiB0aGlzIGNoYW5nZQogICAgICAgIGlzIHRvIHByb3ZpZGUgbWVjaGFuaXNtcyB0byBtb3JlIHBy
ZWNpc2UgdGFwIGFjdGlvbnMgYnkgdGhlIHVzZXJzLgoKICAgICAgICBUaGUgbWFpbiBpZGVhIGlz
IHRvIG1vZGlmeSB0aGUgSGl0VGVzdFJlc3VsdCB0byB0YWtlIGEgcGFkZGluZy4gVGhlIHBhZGRp
bmcKICAgICAgICB0ZWxscyBob3cgbXVjaCB0byBleHBhbmQgdGhlIHNlYXJjaCByZWN0IGFyb3Vu
ZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50LiBJZiBpdAogICAgICAgIGlzIDAsIGl0IHdvcmtzIGFz
IHRoZSBjdXJyZW50IHBvaW50IGJhc2VkIGhpdCB0ZXN0aW5nLiBJZiBpdCBpcyBub24temVybywg
aGl0IHRlc3QKICAgICAgICB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbCBub2RlcyB0aGF0IGludGVy
c2VjdCB0aGUgcHJvdmlkZWQgdGVzdCBhcmVhLiBUaGUgbG9naWMKICAgICAgICB3aWxsIGNvbnRp
bnVlIHNlYXJjaGluZyB3aGVuIGl0IGZpbmRzIGEgY2FuZGlkYXRlIHVubGVzcyB0aGUgcmVjdGFu
Z2xlIGlzIGZ1bGx5CiAgICAgICAgZW5jbG9zZWQgYnkgdGhlIGNhbmRpZGF0ZS4gVGhlIHJlc3Vs
dCB3aWxsIGJlIGEgbGlzdCBvZiBOb2RlIGluIHRoZSB6LW9yZGVyIHRoZXkKICAgICAgICBhcmUg
aGl0LXRlc3RlZC4gVGhlIGNhbGxlciB3aWxsIGRlY2lkZSBob3cgdG8gcHJvY2VzcyB0aGVtLgoK
ICAgICAgICBBcyB3YXlzIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoOgoK
ICAgICAgICAtIGFkZHMgYSBub2Rlc0Zyb21SZWN0IG1ldGhvZCB0byB0aGUgRG9jdW1lbnQgY2xh
c3MsIGV4cG9zaW5nIHRoZSBmdW5jaW9uYWxpdHkKICAgICAgICB0byB0aGUgRE9NLiBNZXRob2Qg
cmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBnaXZl
bgogICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KICAgICAgICAtIGV4dGVuZHMgaGl0VGVzdFJlc3Vs
dEF0UG9pbnQgbWV0aG9kIG9mIHRoZSBFdmVudEhhbmRsZXIgd2l0aCBhbiBleHRyYSAncGFkZGlu
ZycKICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgwLDApLiBUaGUgcmVj
dC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCiAgICAgICAgbm9uLXplcm8gcGFk
ZGluZyBpcyBwYXNzZWQgaW4uCgogICAgICAgIFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3Qt
YmFzaWMuaHRtbAoKICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CiAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgogICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9kZXNGcm9tUmVjdCk6CiAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6CiAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgogICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KToKICAg
ICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCk6CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6Om9wZXJhdG9yPSk6CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6
CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFkZFJhd05vZGVGb3JSZWdpb25UZXN0
KToKICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CiAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ6OnBhZGRpbmcpOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
Ojppc1JlZ2lvblRlc3QpOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpyYXdOb2Rl
TGlzdCk6CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnJlZ2lvbkZyb21Qb2ludCk6
CiAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CiAgICAgICAgKFdlYkNvcmU6
OklubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KToKICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQp
OgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmhpdFRlc3RDb2x1bW5zKToKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgogICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQ
b2ludCk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgogICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmhpdFRlc3RMaXN0KToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRl
c3RDaGlsZExheWVyQ29sdW1ucyk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExp
c3QuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CiAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KToKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6CiAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2lu
dCk6Ci0tLQogLi4uL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50
eHQgfCAgICAxICsKIC4uLi9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4
dCAgICAgIHwgICAyNiArKysrKysKIExheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3Qt
YmFzaWMuaHRtbCAgICAgIHwgICA4OCArKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzICAgfCAgIDQ0ICsrKysrKysrKysK
IExheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzICAgIHwgICA0
MyArKysrKysrKysrCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgNzUgKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU3ICsrKysrKysrKysrKysKIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSAr
CiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA4ICstCiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCAgICAgICAg
ICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAg
ICAgICAgICAgICAgICAgfCAgIDQxICsrKysrKysrKwogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5oICAgICAgICAgICAgICAgICAgfCAgIDI1ICsrKysrKwogV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgICAgICAgICAgICAgICAgfCAgICA3ICstCiBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCAgICAgICAgICAgICAgICAgIHwgICAyMCArKyst
LQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCAgICAgICAgICAgICAgICAgICAgfCAg
ICA3ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgICAgICAgICAgICAgICAg
ICB8ICAgIDYgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCAgICAgICAgICAg
ICAgICAgIHwgICAzNSArKysrKy0tLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExp
c3QuY3BwICAgICAgICAgICAgfCAgICA1ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
b290LmNwcCAgICAgICAgICAgICAgICB8ICAgIDMgKwogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwICAgICAgICAgICAgICAgICAgfCAgICA5ICsrLQogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcCAgICAgICAgICAgfCAgICAzICstCiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIDI2IGZpbGVz
IGNoYW5nZWQsIDQ4NCBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVk
LnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJl
Y3QtYmFzaWMuaHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL3Jl
c291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3Rz
L2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzCgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQK
aW5kZXggYzBjZmNhNS4uZDBmZWY3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC02MjIsNiAr
NjIyLDcgQEAgd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pc1NhbWVOb2RlIFtmdW5jdGlvbl0K
IHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTdXBwb3J0ZWQgW2Z1bmN0aW9uXQogd2luZG93
LkRvY3VtZW50LnByb3RvdHlwZS5sb29rdXBOYW1lc3BhY2VVUkkgW2Z1bmN0aW9uXQogd2luZG93
LkRvY3VtZW50LnByb3RvdHlwZS5sb29rdXBQcmVmaXggW2Z1bmN0aW9uXQord2luZG93LkRvY3Vt
ZW50LnByb3RvdHlwZS5ub2Rlc0Zyb21SZWN0IFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUubm9ybWFsaXplIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUu
cXVlcnlDb21tYW5kRW5hYmxlZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBl
LnF1ZXJ5Q29tbWFuZEluZGV0ZXJtIFtmdW5jdGlvbl0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMWVhMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjYgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
UEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMsNzFdLCBbMCwwXQorUEFT
UyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMsNzFdLCBbMTAsMF0KK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzAsMTBdCitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1Myw3MV0sIFsxMCwxMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1MiwxMDVdLCBbMCwxMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1MiwxMDVdLCBbMTAsMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1MiwxMDVdLCBbMTAsMTBdCitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzAsMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1MywxOTNdLCBbMjAsMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1MywxOTNdLCBbMCwyMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwxODNdLCBbMCwwXQorUEFTUyBBbGwg
Y29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4M10sIFswLDFdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzEsMF0KK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwxODNdLCBbMSwxXQorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFsxMCwwXQorUEFTUyBBbGwgY29ycmVj
dCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzAsMTBdCitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBbMTAsMTBdCitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMCwwXQorUEFTUyBBbGwgY29ycmVjdCBu
b2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzAsMTBdCitQQVNTIEFsbCBjb3JyZWN0IG5v
ZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMTAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9k
ZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFsxMCwxMF0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmFkNjlhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4OCBAQAorPGh0bWw+Cis8aGVh
ZD4KKyAgPHRpdGxlPkRvY3VtZW50Ojpub2Rlc0Zyb21SZWN0IHRlc3QgLSBidWcgNDAxOTc8L3Rp
dGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPiBAaW1wb3J0ICJyZXNvdXJjZXMvbm9kZXNG
cm9tUmVjdC5jc3MiOyA8L3N0eWxlPgorICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9ub2Rlc0Zy
b21SZWN0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2Ny
aXB0Ij4KKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgfQorCisgICAgICB2YXIgZSA9IHt9OworCisgICAgICAvLyBTZXQgdXAgc2hvcnRjdXQg
YWNjZXNzIHRvIGVsZW1lbnRzCisgICAgICBlWydodG1sJ10gPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaHRtbCIpWzBdOworICAgICAgWydoMScsICdkMScsICdkMicsICdwMScsICdw
MicsICdwMycsICdwNCcsICdwNScsICdzcGFuJywgJ2JvZHknXS5mb3JFYWNoKGZ1bmN0aW9uKGEp
IHsKKyAgICAgICAgZVthXSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpOworICAgICAgfSk7
CisKKyAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKworICAgICAgY2hlY2soNTMsIDcxLCAw
LCAwLCBbZS5ib2R5XSk7CisgICAgICBjaGVjayg1MywgNzEsIDEwLCAwLCBbZS5wMywgZS5ib2R5
XSk7CisgICAgICBjaGVjayg1MywgNzEsIDAsIDEwLCBbZS5kMSwgZS5oMSwgZS5ib2R5XSk7Cisg
ICAgICBjaGVjayg1MywgNzEsIDEwLCAxMCwgW2UucDMsIGUuZDEsIGUuaDEsIGUuYm9keV0pOwor
CisgICAgICBjaGVjaygxNTIsIDEwNSwgMCwgMTAsIFtlLnAzLCBlLmJvZHldKTsKKyAgICAgIGNo
ZWNrKDE1MiwgMTA1LCAxMCwgMCwgW2UucDQsIGUuZDEsIGUuYm9keV0pOworICAgICAgY2hlY2so
MTUyLCAxMDUsIDEwLCAxMCwgW2UucDQsIGUucDMsIGUuZDEsIGUuYm9keV0pOworCisgICAgICAv
LyBlLnAxIGlzIGludmlzaWJsZSBhbmQgc2hvdWxkbid0IGFwcGVhcjoKKyAgICAgIGNoZWNrKDE1
MywxOTMsMCwwLFtlLnA1XSk7CisgICAgICBjaGVjaygxNTMsMTkzLDIwLDAsIFtlLnA1XSk7Cisg
ICAgICAvL2NoZWNrKDE1MywxOTMsMjAsMCwgW2UucDUsIGUuZDJdKTsgIDwtLS0KKyAgICAgIGNo
ZWNrKDE1MywxOTMsMCwyMCwgW2UucDUsIGUuYm9keV0pOworCisgICAgICAvLyBQcmVjaXNlIHBp
eGVsIGNoZWNrczoKKyAgICAgIGNoZWNrKDE0NCwgMTgzLCAwLCAwLCBbZS5ib2R5XSk7CisgICAg
ICBjaGVjaygxNDQsIDE4MywgMCwgMSwgW2UucDUsIGUuYm9keV0pOworICAgICAgY2hlY2soMTQ0
LCAxODMsIDEsIDAsIFtlLmQyLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE0NCwgMTgzLCAxLCAx
LCBbZS5wNSwgZS5kMiwgZS5ib2R5XSk7CisgICAgICBjaGVjayg3NywgMjQwLCAwLCAwLCBbZS5w
Ml0pOworICAgICAgY2hlY2soNzcsIDI0MCwgMTAsIDAsIFtlLnAyXSk7CisgICAgICBjaGVjayg3
NywgMjQwLCAwLCAxMCwgW2UucDUsIGUuc3BhbiwgZS5wMl0pOworICAgICAgY2hlY2soNzcsIDI0
MCwgMTAsIDEwLCBbZS5wNSwgZS5zcGFuLCBlLnAyXSk7CisKKyAgICAgIC8vIEV4cGFuZGluZyBh
cmVhIGNoZWNrczoKKyAgICAgIGNoZWNrKDM5LCAyMTIsIDAsICAwLCBbZS5ib2R5XSk7CisgICAg
ICBjaGVjaygzOSwgMjEyLCAwLCAxMCwgW2UuZDIsIGUucDIsIGUuYm9keV0pOworICAgICAgY2hl
Y2soMzksIDIxMiwgMTAsIDAsIFtlLnA1LCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDM5LCAyMTIs
IDEwLCAxMCwgW2UucDUsIGUuZDIsIGUucDIsIGUuYm9keV0pOworCisgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgICAgfQorCisgICAgd2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisgIDwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorICA8aDEgaWQ9ImgxIj48L2gxPgorICA8
ZGl2IGlkPSJkMSI+PC9kaXY+CisKKyAgPCEtLSBmbG9hdGVkIGVsZW1lbnQgLS0+CisgIDxkaXYg
aWQ9ImQyIiBzdHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PgorCisgIDwhLS0gaGlkZGVuIGVsZW1l
bnQgLS0+CisgIDxwIGlkPSJwMSIgc3R5bGU9ImZsb2F0OiBsZWZ0OyB2aXNpYmlsaXR5OiBoaWRk
ZW4iPjwvcD4KKworICA8cCBpZD0icDIiIHN0eWxlPSJjbGVhcjogbGVmdCI+PHNwYW4gaWQ9InNw
YW4iPjwvc3Bhbj48L3A+CisKKyAgPCEtLSBhYnNvbHV0ZSBwb3NpdGlvbiAtLT4KKyAgPHAgaWQ9
InAzIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDo1MHB4OyBoZWln
aHQ6NTBweDsiPjwvcD4KKworICA8IS0tIGZpeGVkIHBvc2l0aW9uIC0tPgorICA8cCBpZD0icDQi
IHN0eWxlPSJwb3NpdGlvbjogZml4ZWQ7IHRvcDogMzBweDsgbGVmdDogMTUwcHg7IGhlaWdodDog
NTBweDsgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsiPjwvcD4KKworICA8IS0tIHJlbGF0aXZlIHBv
c2l0aW9uIC0tPgorICA8cCBpZD0icDUiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOiAt
MTAwcHg7IGxlZnQ6IDMwcHg7IG1hcmdpbi1ib3R0b206IC03MHB4OyBiYWNrZ3JvdW5kLWNvbG9y
OiBncmVlbiI+PC9wPgorCisgIDxzcGFuIGlkPSJjb25zb2xlIj48L3NwYW4+CisgIDxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuY3NzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJv
bVJlY3QuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTZmYzAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9t
UmVjdC5jc3MKQEAgLTAsMCArMSw0NCBAQAorYm9keSB7CisgIG1hcmdpbjogOHB4OworICBwYWRk
aW5nOiAwOworfQorCitoMSwgZGl2LCBwLCBpZnJhbWUgeworICBkaXNwbGF5OiBibG9jazsKKyAg
d2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDMwcHg7CisgIGJvcmRlcjogM3B4IHNvbGlkIGJsYWNr
OworICBwYWRkaW5nOiAxMHB4OworICBtYXJnaW46IDEwcHg7Cit9CisKKyNzcGFuIHsKKyAgZGlz
cGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBib3JkZXI6
IDNweCBzb2xpZCBibGFjazsKKyAgcGFkZGluZzogMTBweDsKKyAgbWFyZ2luOiAxMHB4OworICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKyNpZnJhbWUxIHsKKyAgaGVpZ2h0OiAxMDBweDsK
KyAgbWFyZ2luLXRvcDogNjBweDsKK30KKworI3A2IHsKKyAgaGVpZ2h0OiA1MHB4OworICBtYXJn
aW4tdG9wOiAzMHB4OworfQorCisjdHJhbnNmIHsKKyAgbWFyZ2luLXRvcDogNjBweDsKKyAgLXdl
YmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOworfQorCisjZGVjaW1hbCB7CisgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgbGVmdDogMC41cHg7CisgIHRvcDogNTAuNXB4OworfQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNjMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMKQEAgLTAsMCArMSw0
MyBAQAorLyoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICAqIEFudG9uaW8gR29tZXMgPHRvbmlr
aXRvb0B3ZWJraXQub3JnPgorICoqLworCitmdW5jdGlvbiBjaGVjayh4LCB5LCBoUGFkZGluZywg
dlBhZGRpbmcsIGxpc3QpCit7CisgIC8qCisgICAgTm9kZUxpc3Qgbm9kZXNGcm9tUmVjdChpbiBs
b25nIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBsb25nIHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBsb25nIGhQYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gbG9uZyB2UGFkZGluZyk7CisgICovCisgIHZhciBub2RlcyA9IGRvY3VtZW50Lm5v
ZGVzRnJvbVJlY3QoeCwgeSwgaFBhZGRpbmcsIHZQYWRkaW5nKTsKKworICBpZiAobm9kZXMubGVu
Z3RoICE9IGxpc3QubGVuZ3RoKSB7CisgICAgdGVzdEZhaWxlZCgiRGlmZmVyZW50IG51bWJlciBv
ZiBub2RlcyBmb3IgcmVjdCIgKworICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJd
LCAiICsKKyAgICAgICAgICAgICAgIlsiICsgaFBhZGRpbmcgKyAiLCIgKyB2UGFkZGluZyArICJd
OiAnIiArIGxpc3QubGVuZ3RoICsgIicgdnMgJyIgKyBub2Rlcy5sZW5ndGggKyAiJyIpOworICAg
IHJldHVybjsKKyAgfQorCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKysp
IHsKKyAgICBpZiAobm9kZXNbaV0gIT0gbGlzdFtpXSkgeworICAgICAgdGVzdEZhaWxlZCgiVW5l
eHBlY3RlZCBub2RlICMiICsgaSArICIgZm9yIHJlY3QgIiArCisgICAgICAgICAgICAgICAgIlsi
ICsgeCArICIsIiArIHkgKyAiXSwgIiArCisgICAgICAgICAgICAgICAgIlsiICsgaFBhZGRpbmcg
KyAiLCIgKyB2UGFkZGluZyArICJdIiArICIgLSAiICsgbm9kZXNbaV0pOworICAgICAgcmV0dXJu
OworICAgIH0KKyAgfQorCisgIHRlc3RQYXNzZWQoIkFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZv
ciByZWN0ICIgICsKKyAgICAgICAgICAgIlsiICsgeCArICIsIiArIHkgKyAiXSwgIiArCisgICAg
ICAgICAgICJbIiArIGhQYWRkaW5nICsgIiwiICsgdlBhZGRpbmcgKyAiXSIpOworfQorCitmdW5j
dGlvbiBnZXRDZW50ZXJGb3IoZWxlbWVudCkKK3sKKyAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworICByZXR1cm4geyB4IDogcGFyc2VJbnQoKHJlY3QubGVmdCAr
IHJlY3QucmlnaHQpIC8gMikgLCB5IDogcGFyc2VJbnQoKHJlY3QudG9wICsgcmVjdC5ib3R0b20p
IC8gMil9OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjFjMjU1Ni4uY2Fh
N2RjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw3OCBAQAorMjAxMC0wNi0yNSBHcmFjZSBLbG9iYSAgPGtsb2JhZ0BnbWFp
bC5jb20+ICwgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0
ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUgaW5zdGVhZCBvZiBhIHBvaW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE5NworCisgICAgICAgIFBh
dGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEg
cmVjdGFuZ3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIHdo
ZW4gYXBwbGljYWJsZS4gVGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIGNoYW5nZQorICAgICAgICBp
cyB0byBwcm92aWRlIG1lY2hhbmlzbXMgdG8gbW9yZSBwcmVjaXNlIHRhcCBhY3Rpb25zIGJ5IHRo
ZSB1c2Vycy4KKworICAgICAgICBUaGUgbWFpbiBpZGVhIGlzIHRvIG1vZGlmeSB0aGUgSGl0VGVz
dFJlc3VsdCB0byB0YWtlIGEgcGFkZGluZy4gVGhlIHBhZGRpbmcKKyAgICAgICAgdGVsbHMgaG93
IG11Y2ggdG8gZXhwYW5kIHRoZSBzZWFyY2ggcmVjdCBhcm91bmQgYSBzdXBwb3NlZCB0b3VjaCBw
b2ludC4gSWYgaXQKKyAgICAgICAgaXMgMCwgaXQgd29ya3MgYXMgdGhlIGN1cnJlbnQgcG9pbnQg
YmFzZWQgaGl0IHRlc3RpbmcuIElmIGl0IGlzIG5vbi16ZXJvLCBoaXQgdGVzdAorICAgICAgICB3
aWxsIGtlZXAgcmVjb3JkIG9mIGFsbCBub2RlcyB0aGF0IGludGVyc2VjdCB0aGUgcHJvdmlkZWQg
dGVzdCBhcmVhLiBUaGUgbG9naWMKKyAgICAgICAgd2lsbCBjb250aW51ZSBzZWFyY2hpbmcgd2hl
biBpdCBmaW5kcyBhIGNhbmRpZGF0ZSB1bmxlc3MgdGhlIHJlY3RhbmdsZSBpcyBmdWxseQorICAg
ICAgICBlbmNsb3NlZCBieSB0aGUgY2FuZGlkYXRlLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBsaXN0
IG9mIE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleQorICAgICAgICBhcmUgaGl0LXRlc3RlZC4gVGhl
IGNhbGxlciB3aWxsIGRlY2lkZSBob3cgdG8gcHJvY2VzcyB0aGVtLgorCisgICAgICAgIEFzIHdh
eXMgdG8gZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5LCB0aGUgcGF0Y2g6CisKKyAgICAgICAgLSBh
ZGRzIGEgbm9kZXNGcm9tUmVjdCBtZXRob2QgdG8gdGhlIERvY3VtZW50IGNsYXNzLCBleHBvc2lu
ZyB0aGUgZnVuY2lvbmFsaXR5CisgICAgICAgIHRvIHRoZSBET00uIE1ldGhvZCByZXR1cm5zIGEg
Tm9kZUxpc3Qgd2l0aCBhbGwgbm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhlIGdpdmVuCisgICAgICAg
IGhpdC10ZXN0ZWQgYXJlYS4KKyAgICAgICAgLSBleHRlbmRzIGhpdFRlc3RSZXN1bHRBdFBvaW50
IG1ldGhvZCBvZiB0aGUgRXZlbnRIYW5kbGVyIHdpdGggYW4gZXh0cmEgJ3BhZGRpbmcnCisgICAg
ICAgIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBJbnRTaXplKDAsMCkuIFRoZSByZWN0LWJhc2Vk
IGhpdCB0ZXN0IGlzIHBlcmZvcm1lZCB3aGVuIGEKKyAgICAgICAgbm9uLXplcm8gcGFkZGluZyBp
cyBwYXNzZWQgaW4uCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNp
Yy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9kZXNGcm9tUmVjdCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWRkUmF3Tm9kZUZv
clJlZ2lvblRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ6OmlzUmVnaW9uVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0OjpyYXdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpy
ZWdpb25Gcm9tUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KToKKwogMjAxMC0wNi0y
NSAgTGVpIFpoZW5nICA8bHpoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggYjBiNGQxYi4uOTE5Y2U2MiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cApAQCAtMjE0LDcgKzIxNCw3IEBAIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTRzY3Jv
bGxPdmVyZmxvd0VOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51CiBfX1pON1dl
YkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9sbEV2ZW50RXYKIF9fWk43V2ViQ29yZTEyRXZl
bnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoYW5kbGVUZXh0SW5wdXRFdmVudEVSS05TXzZTdHJp
bmdFUE5TXzVFdmVudEViYgotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1
bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0UKK19fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2lu
dEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VF
dmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJlbGVhc2VFdmVu
dEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIy
N2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMzdiMzUzOC4uOTA0
ZDU3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcApAQCAtMTE4LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiU2VnbWVudGVk
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiU3RhdGljSGFzaFNldE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
U3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJU
ZXh0RXZlbnQuaCIKQEAgLTk5OSw2ICsxMDAwLDQwIEBAIEtVUkwgRG9jdW1lbnQ6OmJhc2VVUkko
KSBjb25zdAogICAgIHJldHVybiBtX2Jhc2VVUkw7CiB9CiAKKy8vIEZJWE1FOiB3ZSBuZWVkIHRv
IGRpc2N1c3MgdGhlIERPTSBBUEkgaGVyZS4gTWF5YmUgbWFraW5nIGl0IHJlY2VpdmUgYSByZWFs
IFJlY3QsCisvLyBpLmUuIHgsIHksIHcsIGguCisKKy8vIG5vZGVzRnJvbVJlY3QKK1Bhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IERvY3VtZW50Ojpub2Rlc0Zyb21SZWN0KGludCB4LCBpbnQgeSwgaW50IGhQ
YWRkaW5nLCBpbnQgdlBhZGRpbmcpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFNoYXJlIGNvZGUg
YmV0d2VlbiB0aGlzLCBlbGVtZW50RnJvbVBvaW50IGFuZCBjYXJldFJhbmdlRnJvbVBvaW50Lgor
ICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSogZnJh
bWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghZnJh
bWVWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFt
ZVZpZXctPnBhZ2Vab29tRmFjdG9yKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50
UG9pbnQoRmxvYXRQb2ludCh4ICogem9vbUZhY3RvciAgKyB2aWV3KCktPnNjcm9sbFgoKSwgeSAq
IHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworCisgICAgLy8gTk9URTogd2UgYXJl
IG5vdCBjaGVja2luZyBmb3IgYSB2aWV3cG9ydCByZWN0IGludGVyc2VjdCBzaW5jZSB3ZSBhcmUg
aGl0dGVzdCdpbmcgd2l0aAorICAgIC8vIGlnbm9yZUNsaXBwaW5nCisgICAgSGl0VGVzdFJlcXVl
c3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlIHwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nKTsKKyAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdChwb2ludCwgSW50U2l6ZShoUGFkZGluZywgdlBhZGRpbmcpIC8qIHBhZGRpbmcgKi8p
OworICAgIHJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOwor
CisjaWZuZGVmIE5ERUJVRworICAgIGR1bXBOb2RlTGlzdEZyb21SZWN0KHJlc3VsdC5yYXdOb2Rl
TGlzdCgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFN0YXRpY0hhc2hTZXROb2RlTGlzdDo6YWRv
cHQocmVzdWx0LnJhd05vZGVMaXN0KCkpOworfQorCiBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVu
dEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNoYXJlIGNv
ZGUgYmV0d2VlbiB0aGlzIGFuZCBjYXJldFJhbmdlRnJvbVBvaW50LgpAQCAtMTU0Miw2ICsxNTc3
LDI4IEBAIHZvaWQgRG9jdW1lbnQ6OmNyZWF0ZVN0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWluQ29tcGF0TW9kZSgpLCBtYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMpKTsKIH0KIAorI2lmbmRlZiBOREVCVUcKK3ZvaWQgRG9jdW1lbnQ6
OmR1bXBOb2RlTGlzdEZyb21SZWN0KGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+JiBs
aXN0KSBjb25zdAoreworICAgIHByaW50ZigiTGlzdCBzaXplOiVkXG4iLCBsaXN0LnNpemUoKSk7
CisKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBs
aXN0LmJlZ2luKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGxpc3QuZW5kKCk7CisgICAgZm9yICggOyBpdCAhPSBlbmQgOyArK2l0KSB7Cisg
ICAgICAgIE5vZGUqIG5vZGUgPSAoKml0KS5nZXQoKTsKKyAgICAgICAgaWYgKG5vZGUtPmlzVGV4
dE5vZGUoKSkKKyAgICAgICAgICAgIHByaW50ZigiVGV4dCBub2RlIGhpdFxuIik7CisgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUt
Pmhhc0lEKCkpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJIaXQgPCVzPiwgaWQ9JyVzJ1xuIiwg
bm9kZS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSktPmdldEF0dHJpYnV0ZSgiaWQiKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIkhpdCA8JXM+LCBOTyBJRCEnXG4iLCBu
b2RlLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorICAgIHBy
aW50ZigiXG4iKTsKK30KKyNlbmRpZgorCiB2b2lkIERvY3VtZW50OjphdHRhY2goKQogewogICAg
IEFTU0VSVCghYXR0YWNoZWQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
IGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAzMTdmYmI3Li40NzcyYTExIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
QEAgLTI5OSw2ICsyOTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNFbGVtZW50V2l0aElkKEF0
b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zTXVsdGlwbGVFbGVt
ZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgeyByZXR1cm4gbV9kdXBs
aWNhdGVJZHMuY29udGFpbnMoZWxlbWVudElkLmltcGwoKSk7IH0KIAorICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3QoaW50IHgsIGludCB5LCBpbnQgaFBhZGRpbmcsIGludCB2
UGFkZGluZykgY29uc3Q7CiAgICAgRWxlbWVudCogZWxlbWVudEZyb21Qb2ludChpbnQgeCwgaW50
IHkpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2VGcm9tUG9pbnQoaW50
IHgsIGludCB5KTsKIApAQCAtMTAzMiw2ICsxMDMzLDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGNyZWF0ZVN0eWxlU2VsZWN0b3IoKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXBO
b2RlTGlzdEZyb21SZWN0KGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+JikgY29uc3Q7
CisjZW5kaWYKKwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsKICAgICB2b2lkIHBlbmRpbmdFdmVudFRp
bWVyRmlyZWQoVGltZXI8RG9jdW1lbnQ+Kik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAppbmRleCA5NTk5ZDc2Li41MDhh
Y2UxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysrIGIvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaWRsCkBAIC0xODYsNiArMTg2LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01T
dHJpbmcgZGVmYXVsdENoYXJzZXQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxTdHJpbmdUbz1VbmRlZmluZWRdIERPTVN0cmluZyByZWFkeVN0YXRlOwogCisKKyAgICAg
ICAgTm9kZUxpc3QgICAgICAgICAgIG5vZGVzRnJvbVJlY3QoaW4gbG9uZyB4LCBpbiBsb25nIHks
IGluIGxvbmcgaFBhZGRpbmcsIGluIGxvbmcgdlBhZGRpbmcpOwogICAgICAgICBFbGVtZW50ICAg
ICAgICAgICAgZWxlbWVudEZyb21Qb2ludChpbiBsb25nIHgsIGluIGxvbmcgeSk7CiAgICAgICAg
IFJhbmdlICAgICAgICAgICAgICBjYXJldFJhbmdlRnJvbVBvaW50KGluIGxvbmcgeCwgaW4gbG9u
ZyB5KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA3N2FjYTcxLi4xY2IzYzkzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtODU5LDkgKzg1OSw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjphbGxv
d0RIVE1MRHJhZyhib29sJiBmbGFnREhUTUwsIGJvb2wmIGZsYWdVQSkgY29uc3QKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIAotSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRs
ZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxv
d1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRl
c3RTY3JvbGxiYXJzKQorSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRB
dFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJv
b2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzLCBjb25z
dCBJbnRTaXplJiBwYWRkaW5nKQogewotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsK
KyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCwgcGFkZGluZyk7CiAgICAgaWYgKCFtX2Zy
YW1lLT5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBpbnQg
aGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3Rp
dmU7CkBAIC04ODMsNyArODgzLDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRl
c3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAgICAg
RnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsKICAgICAg
ICAgSW50UG9pbnQgd2lkZ2V0UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKS54KCkgKyB2aWV3LT5z
Y3JvbGxYKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlckxlZnQoKSAtIHJlbmRlcldpZGdldC0+cGFk
ZGluZ0xlZnQoKSwgCiAgICAgICAgICAgICByZXN1bHQubG9jYWxQb2ludCgpLnkoKSArIHZpZXct
PnNjcm9sbFkoKSAtIHJlbmRlcldpZGdldC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJXaWRnZXQtPnBh
ZGRpbmdUb3AoKSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCwgcGFkZGluZyk7CiAgICAgICAgIGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+
bGF5ZXIoKS0+aGl0VGVzdChIaXRUZXN0UmVxdWVzdChoaXRUeXBlKSwgd2lkZ2V0SGl0VGVzdFJl
c3VsdCk7CiAgICAgICAgIHJlc3VsdCA9IHdpZGdldEhpdFRlc3RSZXN1bHQ7CiAKQEAgLTkwNSw3
ICs5MDUsNyBAQCBIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGFsbAogICAgICAgICAgICAgaWYgKHJlc3Vs
dFZpZXcgJiYgbWFpblZpZXcpIHsKICAgICAgICAgICAgICAgICBJbnRQb2ludCB3aW5kb3dQb2lu
dCA9IHJlc3VsdFZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVzdWx0LnBvaW50KCkpOwogICAgICAg
ICAgICAgICAgIEludFBvaW50IG1haW5GcmFtZVBvaW50ID0gbWFpblZpZXctPndpbmRvd1RvQ29u
dGVudHMod2luZG93UG9pbnQpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1haW5GcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5GcmFtZVBvaW50LCBhbGxv
d1NoYWRvd0NvbnRlbnQsIGlnbm9yZUNsaXBwaW5nKTsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJh
bWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZywgdGVzdFNjcm9sbGJh
cnMsIHBhZGRpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCmluZGV4IDJmOTcyZmMuLmIzZWVhODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTEwNSw3ICsx
MDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29v
bkluUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJl
c3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9v
bCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLCBIaXRUZXN0U2Nyb2xsYmFycyBzY3JvbGxiYXJzID0g
RG9udEhpdFRlc3RTY3JvbGxiYXJzKTsKKyAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRB
dFBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRI
aXRUZXN0U2Nyb2xsYmFycywgY29uc3QgSW50U2l6ZSYgcGFkZGluZyA9IEludFNpemUoKSk7CiAK
ICAgICBib29sIG1vdXNlUHJlc3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW91c2VQcmVzc2VkOyB9
CiAgICAgdm9pZCBzZXRNb3VzZVByZXNzZWQoYm9vbCBwcmVzc2VkKSB7IG1fbW91c2VQcmVzc2Vk
ID0gcHJlc3NlZDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4IDZjYjkwNjMuLjhl
MzRkNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKQEAgLTExMyw5ICsxMTMsMTEgQEAg
Ym9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgSW50UmVjdCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0KS5j
b250YWlucyh4LCB5KSkgeworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5
LCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBi
b3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4LCB5KSkpIHsKICAg
ICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHgg
LSB0eCwgeSAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3Vs
dC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIGJvdW5k
c1JlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA1MDkzM2M2Li4wNmRhZDBh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNTIsNiArNTIsMTMgQEAgSGl0
VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiB9CiAK
K0hpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25z
dCBJbnRTaXplJiBwYWRkaW5nKQorICAgIDogbV9wb2ludChwb2ludCkKKyAgICAsIG1fcGFkZGlu
ZyhwYWRkaW5nKQorICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCit7Cit9CisKIEhpdFRlc3RS
ZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgOiBt
X2lubmVyTm9kZShvdGhlci5pbm5lck5vZGUoKSkKICAgICAsIG1faW5uZXJOb25TaGFyZWROb2Rl
KG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpKQpAQCAtNTksNiArNjYsOCBAQCBIaXRUZXN0UmVz
dWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQogICAgICwgbV9s
b2NhbFBvaW50KG90aGVyLmxvY2FsUG9pbnQoKSkKICAgICAsIG1faW5uZXJVUkxFbGVtZW50KG90
aGVyLlVSTEVsZW1lbnQoKSkKICAgICAsIG1fc2Nyb2xsYmFyKG90aGVyLnNjcm9sbGJhcigpKQor
ICAgICwgbV9wYWRkaW5nKG90aGVyLnBhZGRpbmcoKSkKKyAgICAsIG1fcmF3Tm9kZUxpc3Qob3Ro
ZXIucmF3Tm9kZUxpc3QoKSkKICAgICAsIG1faXNPdmVyV2lkZ2V0KG90aGVyLmlzT3ZlcldpZGdl
dCgpKQogewogfQpAQCAtNzUsNiArODQsOCBAQCBIaXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0
OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgbV9sb2NhbFBvaW50
ID0gb3RoZXIubG9jYWxQb2ludCgpOwogICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJM
RWxlbWVudCgpOwogICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CisgICAgbV9w
YWRkaW5nID0gb3RoZXIucGFkZGluZygpOworICAgIG1fcmF3Tm9kZUxpc3QgPSBvdGhlci5yYXdO
b2RlTGlzdCgpOwogICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQpAQCAtMzYyLDQgKzM3MywzNCBAQCBib29sIEhpdFRlc3RSZXN1
bHQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbm5lck5vblNoYXJl
ZE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKK3ZvaWQgSGl0VGVzdFJlc3VsdDo6YXBw
ZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQoreworICAgIEFTU0VSVChpc1JlZ2lvblRl
c3QoKSk7CisKKyAgICBpZiAoIW1faW5uZXJOb2RlICYmIG90aGVyLmlubmVyTm9kZSgpKSB7Cisg
ICAgICAgIG1faW5uZXJOb2RlID0gb3RoZXIuaW5uZXJOb2RlKCk7CisgICAgICAgIG1faW5uZXJO
b25TaGFyZWROb2RlID0gb3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgICAgIG1fbG9j
YWxQb2ludCA9IG90aGVyLmxvY2FsUG9pbnQoKTsKKyAgICAgICAgbV9pbm5lclVSTEVsZW1lbnQg
PSBvdGhlci5VUkxFbGVtZW50KCk7CisgICAgICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xs
YmFyKCk7CisgICAgICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7Cisg
ICAgfQorCisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4mIGxpc3QgPSBvdGhl
ci5yYXdOb2RlTGlzdCgpOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9p
dGVyYXRvciBsYXN0ID0gbGlzdC5lbmQoKTsKKyAgICBmb3IgKExpc3RIYXNoU2V0PFJlZlB0cjxO
b2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGFzdDsgKytp
dCkKKyAgICAgICAgbV9yYXdOb2RlTGlzdC5hZGQoaXQtPmdldCgpKTsKK30KKworYm9vbCBIaXRU
ZXN0UmVzdWx0OjphZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChOb2RlKiBub2RlLCBpbnQgeCwgaW50
IHksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBub2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAg
bV9yYXdOb2RlTGlzdC5hZGQobm9kZSk7CisKKyAgICByZXR1cm4gIXJlY3QuY29udGFpbnMocmVn
aW9uRnJvbVBvaW50KHgsIHkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IGQxOTA2YmEuLmVlOWM2ODEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmgKQEAgLTIxLDcgKzIxLDEwIEBACiAjZGVmaW5lIEhpdFRlc3RSZXN1bHRf
aAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDYgKzQxLDcgQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgSGl0VGVzdFJlc3Vs
dCB7CiBwdWJsaWM6CiAgICAgSGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYpOworICAgIEhp
dFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRTaXplJik7CiAgICAgSGl0VGVz
dFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgfkhpdFRlc3RSZXN1bHQoKTsKICAg
ICBIaXRUZXN0UmVzdWx0JiBvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYpOwpAQCAtNDks
NiArNTMsMTEgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIFVSTEVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2lubmVyVVJMRWxlbWVudC5nZXQoKTsgfQogICAgIFNjcm9sbGJhciogc2Nyb2xsYmFy
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7IH0KICAgICBib29sIGlzT3Zlcldp
ZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVyV2lkZ2V0OyB9CisgICAgSW50U2l6ZSBwYWRk
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9CisgICAgYm9vbCBpc1JlZ2lvblRlc3Qo
KSBjb25zdCB7IHJldHVybiAhbV9wYWRkaW5nLmlzWmVybygpOyB9CisgICAgSW50UmVjdCByZWdp
b25Gcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdDsKKyAgICBJbnRSZWN0IHJlZ2lvbkZyb21Q
b2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0
cjxOb2RlPiA+JiByYXdOb2RlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3Tm9kZUxpc3Q7IH0K
IAogICAgIHZvaWQgc2V0VG9Ob25TaGFkb3dBbmNlc3RvcigpOwogCkBAIC03Niw2ICs4NSwxMCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZSgpIGNvbnN0OwogCisgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYpOworICAgIC8vIHJldHVybiB0cnVlIGlmIGl0IGlzIHJlZ2lvbiB0ZXN0IGFuZCB0aGUgaGl0
IHRlc3QgbmVlZHMgdG8gY29udGludWUgYXMgdGhlIHJlZ2lvbiBpcyBub3QgZnVsbHkgY292ZXJl
ZCBieSB0aGUgcmVjdAorICAgIGJvb2wgYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QoTm9kZSosIGlu
dCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCA9IEludFJlY3QoKSk7CisKIHByaXZhdGU6
CiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX2lubmVy
Tm9uU2hhcmVkTm9kZTsKQEAgLTg0LDkgKzk3LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hlcmUgaW5zaWRlIHRoZSByZW5kZXJlciB3ZSBo
aXQgb24gc3Vic2VxdWVudCBvcGVyYXRpb25zLgogICAgIFJlZlB0cjxFbGVtZW50PiBtX2lubmVy
VVJMRWxlbWVudDsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3Njcm9sbGJhcjsKKyAgICBJbnRT
aXplIG1fcGFkZGluZzsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3Jhd05vZGVM
aXN0OwogICAgIGJvb2wgbV9pc092ZXJXaWRnZXQ7IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUg
b3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcgYXJlYSBvZiBhIFJl
bmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCiB9OwogCitpbmxpbmUgSW50UmVjdCBIaXRUZXN0UmVz
dWx0OjpyZWdpb25Gcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdAoreworICAgIHJldHVybiBJ
bnRSZWN0KHggLSBtX3BhZGRpbmcud2lkdGgoKSwgeSAtIG1fcGFkZGluZy5oZWlnaHQoKSwgMiAq
IG1fcGFkZGluZy53aWR0aCgpICsgMSwgMiAqIG1fcGFkZGluZy5oZWlnaHQoKSArIDEpOworfQor
CitpbmxpbmUgSW50UmVjdCBIaXRUZXN0UmVzdWx0OjpyZWdpb25Gcm9tUG9pbnQoY29uc3QgSW50
UG9pbnQmIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QocC54KCkgLSBtX3BhZGRpbmcu
d2lkdGgoKSwgcC55KCkgLSBtX3BhZGRpbmcuaGVpZ2h0KCksIDIgKiBtX3BhZGRpbmcud2lkdGgo
KSArIDEsIDIgKiBtX3BhZGRpbmcuaGVpZ2h0KCkgKyAxKTsKK30KKwogU3RyaW5nIGRpc3BsYXlT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IDZmZGVlYTMuLmYwNjkwYTEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC02MTEsNyArNjExLDcgQEAgYm9v
bCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmUKIHsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXNpYmxl
T3ZlcmZsb3dSZWN0KCkpOwogICAgIG92ZXJmbG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYg
KCFvdmVyZmxvd1JlY3QuY29udGFpbnMoeCwgeSkpCisgICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHgsIHkpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gQ2hlY2sgY2hpbGRyZW4gZmlyc3QuCkBAIC02MjQsOSArNjI0LDEwIEBA
IGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAKICAgICAvLyBOb3cgY2hlY2sgb3Vyc2VsdmVzLgog
ICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIGhlaWdodCgpKTsK
LSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuY29udGFpbnMoeCwgeSkpIHsK
KyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQu
cmVnaW9uRnJvbVBvaW50KHgsIHkpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsgLy8gRG9uJ3QgYWRk
IGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxv
Y2sncyBzcGFjZS4KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFk
ZFJhd05vZGVGb3JSZWdpb25UZXN0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgcmVjdCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBjNjNlZTFlLi5mNGY3Y2Q0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMjg3LDkgKzI4NywxMCBAQCBib29sIElu
bGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBpbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRSZWN0IHJl
Y3QodHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAgaWYgKG1fdHJ1
bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJl
Y3QuY29udGFpbnMoeCwgeSkpIHsKKyAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNh
dGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWdpb25Gcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QocmVu
ZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5k
ZXggODc1NzJiNi4uNzExNDM5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzc0
NywxOSArMzc0NywyMSBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgICAgICAvLyBDaGVj
ayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVy
Zmxvd0JveCA9IHZpc2libGVPdmVyZmxvd1JlY3QoKTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92
ZSh0eCwgdHkpOwotICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmNvbnRhaW5zKF94LCBfeSkpCisg
ICAgICAgIGlmICghb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50
KF94LCBfeSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICgo
aGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24g
PT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1BvaW50SW5PdmVyZmxvd0NvbnRy
b2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0eSkpIHsKICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIC8vIFRPRE86IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCgpIGRvZXNuJ3Qg
aGFuZGxlIHJlZ2lvbiB0ZXN0IHlldC4KKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkUmF3Tm9kZUZv
clJlZ2lvblRlc3Qobm9kZSgpLCBfeCwgX3kpKQorICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55
IHNwaWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRy
b2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKLSAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAh
dXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVjdCh0eCwgdHkpLmNv
bnRhaW5zKF94LCBfeSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95
KSk7CisgICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRyb2xDbGlw
KCkgPyBjb250cm9sQ2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9t
UG9pbnQoX3gsIF95KSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1
bHQucmVnaW9uRnJvbVBvaW50KF94LCBfeSkpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbikgewog
ICAgICAgICAvLyBIaXQgdGVzdCBkZXNjZW5kYW50cyBmaXJzdC4KICAgICAgICAgaW50IHNjcm9s
bGVkWCA9IHR4OwpAQCAtMzgwNyw5ICszODA5LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
CiAgICAgLy8gTm93IGhpdCB0ZXN0IG91ciBiYWNrZ3JvdW5kCiAgICAgaWYgKGhpdFRlc3RBY3Rp
b24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RD
aGlsZEJsb2NrQmFja2dyb3VuZCkgewogICAgICAgICBJbnRSZWN0IGJvdW5kc1JlY3QodHgsIHR5
LCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci0gICAgICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkg
JiYgYm91bmRzUmVjdC5jb250YWlucyhfeCwgX3kpKSB7CisgICAgICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9p
bnQoX3gsIF95KSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LmFkZFJhd05vZGVGb3JSZWdpb25UZXN0KG5vZGUoKSwgX3gs
IF95LCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMzgzNCwxMyArMzgzNywxNiBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRU
ZXN0Q29sdW1ucyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cgogICAgICAgICBjdXJyWU9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xS
ZWN0Lm1vdmUodHgsIHR5KTsKICAgICAgICAgCi0gICAgICAgIGlmIChjb2xSZWN0LmNvbnRhaW5z
KHgsIHkpKSB7CisgICAgICAgIGlmIChjb2xSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZy
b21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNpZGUgdGhp
cyBjb2x1bW4uCiAgICAgICAgICAgICAvLyBBZGp1c3QgdHggYW5kIHR5IHRvIGNoYW5nZSB3aGVy
ZSB3ZSBoaXQgdGVzdC4KICAgICAgICAgCiAgICAgICAgICAgICBpbnQgZmluYWxYID0gdHggKyBj
dXJyWE9mZnNldDsKICAgICAgICAgICAgIGludCBmaW5hbFkgPSB0eSArIGN1cnJZT2Zmc2V0Owot
ICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHgsIHks
IGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQu
aXNSZWdpb25UZXN0KCkgJiYgIWNvbFJlY3QuY29udGFpbnMocmVzdWx0LnJlZ2lvbkZyb21Qb2lu
dCh4LCB5KSkpCisgICAgICAgICAgICAgICAgaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3Vs
dCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0
LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGNjZGJiYzcuLmQ0MzQzMzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTU1Miw5ICs1
NTMsMTEgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKIAogICAgIC8vIENoZWNrIG91ciBib3Vu
ZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkg
YmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9y
IHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICBpZiAodmlzaWJsZVRvSGl0VGVz
dGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0eSwg
d2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgSW50UmVjdCBi
b3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBpZiAo
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBi
b3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4UG9zLCB5UG9zKSkp
IHsKICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0
eCwgeVBvcyAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3Vs
dC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChub2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3Qp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDhlN2QxNjUuLjc4ZmZkYjggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTM3NywxMCArMzc3LDEwIEBAIEhUTUxNYXBFbGVtZW50
KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogCiBib29sIFJlbmRlckltYWdlOjpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCiB7Ci0gICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsK
KyAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRk
aW5nKCkpOwogICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJl
cXVlc3QsIHRlbXBSZXN1bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbik7CiAKLSAgICBp
ZiAoaW5zaWRlICYmIG5vZGUoKSkgeworICAgIGlmICh0ZW1wUmVzdWx0LmlubmVyTm9kZSgpICYm
IG5vZGUoKSkgewogICAgICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkp
IHsKICAgICAgICAgICAgIEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAg
ICAgICAgICAgICBmbG9hdCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwpAQCAtMzkx
LDYgKzM5MSw4IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBpZiAoIWluc2lkZSAmJiByZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgaWYgKGluc2lkZSkKICAgICAgICAgcmVzdWx0ID0g
dGVtcFJlc3VsdDsKICAgICByZXR1cm4gaW5zaWRlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CmluZGV4IDdmZWI3YzkuLjZiMWMxZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTI3NDUsNyArMjc0NSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIGlmIChw
YXJlbnQoKSkgewogICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlw
UmVjdChyb290TGF5ZXIsIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgICAgICAgICAvLyBH
byBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5nIGNsaXAgbm93LgotICAgICAgICAgICAgaWYg
KCFjbGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpKQorICAgICAgICAgICAgaWYgKCFjbGlw
UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoaGl0VGVzdFBvaW50KSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIApAQCAtMjg1OCwxNyArMjg1OCwy
MSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIH0KIAogICAgIC8vIE5leHQgd2Ugd2Fu
dCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVj
dHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAm
JiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMocmVz
dWx0LnJlZ2lvbkZyb21Qb2ludChoaXRUZXN0UG9pbnQpKSAmJiBpc1NlbGZQYWludGluZ0xheWVy
KCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVzdWx0
LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25vdyB3
ZSdyZSBmcm9udG1vc3QuCi0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQu
cG9pbnQoKSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQo
KSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVz
dCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdERlc2NlbmRh
bnRzKSAmJgogICAgICAgICAgICAgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRG
b3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVn
aW9uVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAg
ICAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5kIGNhbiBkZXB0aC1zb3J0IHdpdGgg
ZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBhIGNhbmRpZGF0ZS4KICAgICAgICAg
ICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJl
c3VsdCk7CiAgICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91ciBuZWdhdGl2ZSB6LWluZGV4IGNo
aWxkcmVuLgpAQCAtMjg4NCwxMyArMjg4OCwxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAog
ICAgIGlmIChjYW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwog
Ci0gICAgaWYgKGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgewotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50
KCkpOworICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KGhp
dFRlc3RQb2ludCkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgICAgICBIaXRUZXN0
UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRkaW5nKCkpOwogICAg
ICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRz
LCBoaXRUZXN0UG9pbnQsIEhpdFRlc3RTZWxmKSAmJgogICAgICAgICAgICAgaXNIaXRDYW5kaWRh
dGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zv
cm1TdGF0ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CisgICAg
ICAgICAgICBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CkBA
IC0yOTM3LDE0ICsyOTQ1LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExp
c3QoVmVjdG9yPFJlbmRlckxheWVyKj4qIGxpc3QsIFJlbmRlckxheWVyKiByCiAgICAgZm9yIChp
bnQgaSA9IGxpc3QtPnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIFJlbmRlckxh
eWVyKiBjaGlsZExheWVyID0gbGlzdC0+YXQoaSk7CiAgICAgICAgIFJlbmRlckxheWVyKiBoaXRM
YXllciA9IDA7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQo
KSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVz
dWx0LnBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQog
ICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExh
eWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0
UG9pbnQsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290
TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9p
bnQsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
dGVtcFJlc3VsdCk7CiAgICAgICAgIGlmIChpc0hpdENhbmRpZGF0ZShoaXRMYXllciwgZGVwdGhT
b3J0RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpKSB7CiAg
ICAgICAgICAgICByZXN1bHRMYXllciA9IGhpdExheWVyOwotICAgICAgICAgICAgcmVzdWx0ID0g
dGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRo
U29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0z
MDA0LDcgKzMwMTUsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExh
eWVyQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgUmVuZAogICAgICAgICBJbnRSZWN0
IGxvY2FsQ2xpcFJlY3QoaGl0VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVy
c2VjdChjb2xSZWN0KTsKICAgICAgICAgCi0gICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0Vt
cHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpKSB7CisgICAgICAg
IGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3Rz
KHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoaGl0VGVzdFBvaW50KSkpIHsKICAgICAgICAgICAgIFJl
bmRlckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgICAgICBpZiAoIWNvbHVtbkluZGV4KSB7
CiAgICAgICAgICAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0gdG8gY2hh
bmdlIHdoZXJlIHRoZSBsYXllciBwYWludHMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94
TGlzdC5jcHAKaW5kZXggMzM0YTM4Mi4uOTQzOTcyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCiAKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yNDUsMTQgKzI0NiwxNCBAQCBib29sIFJl
bmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgSGl0VGVzdFJlcQogICAgIC8vIGNvbnRhaW4gdGhlIHBvaW50LiAgVGhpcyBpcyBhIHF1
aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFueSBs
aW5lcy4KICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBmbGF3ZWQgaW4gdGhlIGZvbGxvd2lu
ZyBleHRyZW1lbHkgb2JzY3VyZSB3YXk6CiAgICAgLy8gaWYgc29tZSBsaW5lIGluIHRoZSBtaWRk
bGUgaGFzIGEgaHVnZSBvdmVyZmxvdywgaXQgbWlnaHQgYWN0dWFsbHkgZXh0ZW5kIGJlbG93IHRo
ZSBsYXN0IGxpbmUuCi0gICAgaWYgKCh5ID49IHR5ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5i
b3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgfHwgKHkgPCB0eSArIGZpcnN0TGluZUJveCgpLT5yb290
KCktPnRvcFZpc2libGVPdmVyZmxvdygpKSkKKyAgICBpZiAoKHkgLSByZXN1bHQucGFkZGluZygp
LmhlaWdodCgpID49IHR5ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSkgfHwgKHkgKyByZXN1bHQucGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBmaXJzdExp
bmVCb3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFNlZSBpZiBvdXIgcm9vdCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4g
IElmIHNvLCB0aGVuIHdlIGhpdCB0ZXN0CiAgICAgLy8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0
IGJveGVzIGNhbiBlYXNpbHkgb3ZlcmxhcCwgc28gd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlv
bnMKICAgICAvLyBiYXNlZCBvZmYgcG9zaXRpb25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBv
dXIgbGFzdCBsaW5lIGJveC4KICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGlu
ZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkgewotICAgICAgICBpZiAo
eSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsg
Y3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoeSAr
IHJlc3VsdC5wYWRkaW5nKCkuaGVpZ2h0KCkgPj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2li
bGVPdmVyZmxvdygpICYmIHkgLSByZXN1bHQucGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBjdXJy
LT5yb290KCktPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBib29sIGlu
c2lkZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsK
ICAgICAgICAgICAgIGlmIChpbnNpZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IGNhN2ViODEuLjFmNDhhYjUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUm9vdC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKQEAgLTMxNyw2ICszMTgs
OCBAQCBib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZs
b2F0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IENTUy9IVE1MIGFzc3VtZXMgdGhlIGxvY2FsIHBvaW50IGlz
IHJlbGF0aXZlIHRvIHRoZSBib3JkZXIgYm94LCByaWdodD8KICAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94KTsKKyAgICAgICAgICAgIC8vIFRP
RE86IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWdpb24gdGVzdCB5ZXQuCisg
ICAgICAgICAgICByZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QoY2hpbGQtPm5vZGUoKSwg
X3gsIF95KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IDdkNTUzZWEuLjg3M2QwOGEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTEx
MzUsNyArMTEzNiw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgdHkgKz0geSgpOwog
CiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8
IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2Vj
dHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4UG9zLCB5UG9zKSkpIHsKICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0
b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgKGNoaWxkLT5pc1Rh
YmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikgJiYKICAgICAgICAgICAgICAgICBj
aGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4UG9zLCB5UG9zLCB0eCwgdHksIGFj
dGlvbikpIHsKQEAgLTExNDYsOSArMTE0NywxMSBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQog
ICAgIH0KIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4KLSAgICBpZiAodmlzaWJsZVRv
SGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rp
b24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBJbnRSZWN0KHR4LCB0eSwgd2lk
dGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgSW50UmVjdCBib3Vu
ZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBpZiAodmlz
aWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8
fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBib3VuZHNSZWN0Lmlu
dGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4UG9zLCB5UG9zKSkpIHsKICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2Rl
Rm9yUmVnaW9uVGVzdChub2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggYjI1ZDNlNi4uYjliNzM1OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJl
bmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkBAIC0xMTUyLDcg
KzExNTMsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIHR4ICs9IHgoKTsKICAgICB0
eSArPSB5KCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJl
Y3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25G
cm9tUG9pbnQoeFBvcywgeVBvcykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnByZXZpb3VzU2libGluZygpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA4
OWVjMzVhLi44OGI4YTMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTM4MCw3
ICszODAsNyBAQCBib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlcwogICAgIGJvb2wgaW5zaWRlID0gUmVu
ZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBh
Y3Rpb24pOwogICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmVhbGx5IG92ZXIg
dGhlIHdpZGdldCBpdHNlbGYgKGFuZCBub3QganVzdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcgYXJl
YSkuCi0gICAgaWYgKGluc2lkZSAmJiAhaGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5lck5vZGUoKSA9
PSBub2RlKCkpCisgICAgaWYgKChpbnNpZGUgfHwgcmVzdWx0LmlzUmVnaW9uVGVzdCgpKSAmJiAh
aGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkpCiAgICAgICAgIHJlc3Vs
dC5zZXRJc092ZXJXaWRnZXQoY29udGVudEJveFJlY3QoKS5jb250YWlucyhyZXN1bHQubG9jYWxQ
b2ludCgpKSk7CiAgICAgcmV0dXJuIGluc2lkZTsKIH0KLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60772</attachid>
            <date>2010-07-07 13:34:59 -0700</date>
            <delta_ts>2010-07-19 19:17:13 -0700</delta_ts>
            <desc>patch v2 - feature + tests</desc>
            <filename>0001-2010-07-07-Grace-Kloba--Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>54600</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBmZjIyZDM1NzY4YzM5NDc0MGZiYTZmYmIxZjYwN2VlMzNjOGI3NzBjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMDcgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFBhdGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5
c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQogICAgICAgIGFzIGlu
cHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNhYmxlLiBUaGUgcHJpbWFyeSBnb2Fs
IG9mIHRoaXMgY2hhbmdlCiAgICAgICAgaXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIHRvIG1vcmUg
cHJlY2lzZSB0YXAgYWN0aW9ucyBieSB0aGUgdXNlcnMuCgogICAgICAgIFRoZSBtYWluIGlkZWEg
aXMgdG8gbW9kaWZ5IHRoZSBIaXRUZXN0UmVzdWx0IHRvIHRha2UgYSBwYWRkaW5nLiBUaGUgcGFk
ZGluZwogICAgICAgIHRlbGxzIGhvdyBtdWNoIHRvIGV4cGFuZCB0aGUgc2VhcmNoIHJlY3QgYXJv
dW5kIGEgc3VwcG9zZWQgdG91Y2ggcG9pbnQuIElmIGl0CiAgICAgICAgaXMgMCwgaXQgd29ya3Mg
YXMgdGhlIGN1cnJlbnQgcG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcuIElmIGl0IGlzIG5vbi16ZXJv
LCBoaXQgdGVzdAogICAgICAgIHdpbGwga2VlcCByZWNvcmQgb2YgYWxsIG5vZGVzIHRoYXQgaW50
ZXJzZWN0IHRoZSBwcm92aWRlZCB0ZXN0IGFyZWEuIFRoZSBsb2dpYwogICAgICAgIHdpbGwgY29u
dGludWUgc2VhcmNoaW5nIHdoZW4gaXQgZmluZHMgYSBjYW5kaWRhdGUgdW5sZXNzIHRoZSByZWN0
YW5nbGUgaXMgZnVsbHkKICAgICAgICBlbmNsb3NlZCBieSB0aGUgY2FuZGlkYXRlLiBUaGUgcmVz
dWx0IHdpbGwgYmUgYSBsaXN0IG9mIE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleQogICAgICAgIGFy
ZSBoaXQtdGVzdGVkLiBUaGUgY2FsbGVyIHdpbGwgZGVjaWRlIGhvdyB0byBwcm9jZXNzIHRoZW0u
CgogICAgICAgIEFzIHdheXMgdG8gZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5LCB0aGUgcGF0Y2g6
CgogICAgICAgIC0gYWRkcyBhIG5vZGVzRnJvbVJlY3QgbWV0aG9kIHRvIHRoZSBEb2N1bWVudCBj
bGFzcywgZXhwb3NpbmcgdGhlIGZ1bmNpb25hbGl0eQogICAgICAgIHRvIHRoZSBET00uIE1ldGhv
ZCByZXR1cm5zIGEgTm9kZUxpc3Qgd2l0aCBhbGwgbm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhlIGdp
dmVuCiAgICAgICAgaGl0LXRlc3RlZCBhcmVhLgogICAgICAgIC0gZXh0ZW5kcyBoaXRUZXN0UmVz
dWx0QXRQb2ludCBtZXRob2Qgb2YgdGhlIEV2ZW50SGFuZGxlciB3aXRoIGFuIGV4dHJhICdwYWRk
aW5nJwogICAgICAgIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBJbnRTaXplKDAsMCkuIFRoZSBy
ZWN0LWJhc2VkIGhpdCB0ZXN0IGlzIHBlcmZvcm1lZCB3aGVuIGEKICAgICAgICBub24temVybyBw
YWRkaW5nIGlzIHBhc3NlZCBpbi4KCiAgICAgICAgVGVzdDogZmFzdC9kb20vbm9kZXNGcm9tUmVj
dC1iYXNpYy5odG1sCgogICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2Rlc0Zyb21SZWN0KTog
VGhpcyBtZXRob2QgZXhwb3NlcyB0aGUgcmVjdCBiYXNlZCBmdW5jaW9uYWxpdHkgdG8KICAgICAg
ICB0aGUgRE9NLiBJdCB3b3JrcyBzaW1pbGFybHkgdG8gZWxlbWVudEZyb21Qb2ludCwgaG93ZXZl
ciByZWNlaXZpbmcgYSByZWN0YW5ndWxhciBhcmVhCiAgICAgICAgYXMgaW5wdXQgaW5zdGVhZCBv
ZiBhIHBvaW50LCBhbmQgcmV0dXJuaW5nIGEgei1pbmRleCBvcmRlcmVkIGxpc3Qgb2Ygbm9kZXMg
KG5vdCBlbGVtZW50cykKICAgICAgICB3aG9zZSBhcmVhIGludGVyc2VjdCB0aGUgaGl0IHRlc3Qg
cmVjdC4KICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KICAgICAgICAqIGRvbS9Eb2N1
bWVudC5pZGw6IERpdHRvLgogICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgogICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KTogVGhlIGZ1bmNp
b25hbGl0eSBpcyBhbHNvIGV4cG9zZWQgdGhyb3VnaCB0aGlzCiAgICAgICAgbWV0aG9kLiBQYXRj
aCBhZGRzIGEgYWRkaXRpb25hbCBJbnRTaXplIHBhcmFtZXRlciB0byB3b3JrIGFzIHRoZSBwYWRk
aW5nIGFyZWEsIGJ1aWxkaW5nIHVwCiAgICAgICAgdGhlIGhpdCB0ZXN0IHJlY3QuCiAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5oOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3Vs
dCk6IFJlY3QgYmFzZWQgaGl0IHRlc3QgY29uc3RydWN0b3IuIFJlY2VpdmVzIGEKICAgICAgICBw
YWRkaW5nIEludFNpemUgYXMgcGFyYW1ldGVyLiBJdCBjYW4gYmUgKDAsMCkuCiAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om9wZXJhdG9yPSk6IE1vZGlmaWVkIHRvIGFzc2lnbiB0aGUg
cmF3Tm9kZUxpc3QgYXMgd2VsbC4KICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YXBw
ZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJlc3VsdCBvYmplY3RzIGluIGEgd2F5IHRoYXQKICAgICAg
ICByYXdOb2RlTGlzdCdzIG9mIGJvdGggb2JqZWN0cyBnZXQgYW1lbmRlZC4KICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6YWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QpOiBBZGRzIGEgZ2l2
ZW4gTm9kZSB0byB0aGUgbGlzdCBvZgogICAgICAgIGhpdCBub2Rlcy4KICAgICAgICAqIHJlbmRl
cmluZy9IaXRUZXN0UmVzdWx0Lmg6CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnBh
ZGRpbmcpOiBSZXR1cm5zIHRoZSBwYWRkaW5nIGFzIGFuIEludFNpemUuCiAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OmlzUmVnaW9uVGVzdCk6IFJldHVybnMgaWYgdGhlIEhpdFRlc3RS
ZXN1bHQgaXMgcmVjdCBiYXNlZCBvciBub3QuCiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1
bHQ6OnJhd05vZGVMaXN0KTogUmV0dXJucyB0aGUgbGlzdCBub2RlcyBoaXQuCiAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnJlZ2lvbkZyb21Qb2ludCk6IFJldHVybnMgdGhlIGhpdCB0
ZXN0IGFyZWEgZ2l2ZW4gdGhlIGhpdCB0ZXN0IHBvaW50CiAgICAgICAgYW5kIHBhZGRpbmcuCiAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGl0VGVzdExheWVyKToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhp
dFRlc3RMaXN0KToKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExh
eWVyQ29sdW1ucyk6CiAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgogICAgICAg
IChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOiBNZXRob2QgaXMgbW9kaWZpZWQg
dG8gc3VwcG9ydCByZWN0IGJhc2VkIGhpdCB0ZXN0IGV4dGVuc2lvbi4KICAgICAgICBOb3cgaXQg
bm90IGp1c3QgY2hlY2tzIGlmIHRoZSBib3VuZGFyeSBvZiB0aGUgbm9kZSBiZWluZyBoaXQtdGVz
dGVkIGNvbnRhaW5zIGEgaGl0IHRlc3QgcG9pbnQsIGJ1dAogICAgICAgIGluc3RlYWQgaXQgY2hl
Y2tzIGlmIHRoZSBib3VuZGFyeSBvZiB0aGUgbm9kZSBpbnRlcnNlY3RzIGEgaGl0IHRlc3QgcmVj
dC4gSXQgaXMgaW1wbGVtZW50ZWQgc28KICAgICAgICB0aGF0IHRoZSBjb21tb24gY2FzZSAocG9p
bnQgYmFzZWQgaGl0IHRlc3QpIHdvcmtzIGFzIHByZXZpb3VzbHkuCiAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6Om5v
ZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6
CiAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmhpdFRlc3RDb2x1bW5zKTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6IERpdHRvLgog
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGluZUJveExpc3QuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6aGl0
VGVzdCk6CiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bm9k
ZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KTog
RGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6IERpdHRvLgotLS0KIExheW91dFRlc3Rz
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArKwogLi4uL2Zh
c3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQgfCAgICAxICsKIC4u
Li9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dCAgICAgIHwgICAyNiAr
KysrKysKIExheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbCAgICAg
IHwgICA4OSArKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3Vy
Y2VzL25vZGVzRnJvbVJlY3QuY3NzICAgfCAgIDQ0ICsrKysrKysrKysKIExheW91dFRlc3RzL2Zh
c3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzICAgIHwgICA0NCArKysrKysrKysrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODgg
KysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgNjkgKysrKysrKysrKysrKysrCiBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9k
b20vRG9jdW1lbnQuaWRsICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArLQog
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy
ICstCiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgICAgICAgICAgICAgICAgICB8
ICAgIDYgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwICAgICAgICAgICAg
ICAgIHwgICA0NyArKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmgg
ICAgICAgICAgICAgICAgICB8ICAgMjcgKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmNwcCAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwICAgICAgICAgICAgICAgIHwgICAgNSArLQogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwICAgICAgICAgICAgICAgICAgfCAgIDIwICsrKy0tCiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiAr
LQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAgICAgICAgICAgICAgICAgfCAg
IDQ0ICsrKysrKystLS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCAg
ICAgICAgICAgIHwgICAgNSArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAg
ICAgICAgICAgICAgICAgfCAgICAzICsKIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cCAgICAgICAgICAgICAgICAgIHwgICAgOSArKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAgICAgICAgICAgIHwgICAgMyArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcCAgICAgICAgICAgICAgICAgfCAgICAyICstCiAyNyBmaWxlcyBjaGFuZ2Vk
LCA1MzIgaW5zZXJ0aW9ucygrKSwgNDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2lj
Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMv
bm9kZXNGcm9tUmVjdC5jc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzMGZhMjQyLi5jM2Y0YjdkIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDctMDcgQW50b25pbyBHb21lcyAgPHRvbmlraXRv
b0B3ZWJraXQub3JnPiAsIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhhbmNlIHRoZSBoaXQg
dGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2ludAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcKKworICAgICAgICAq
IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3
LTA3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCBy
ZXZpZXdlZCwganVzdCB1cGRhdGluZyB0ZXN0IGV4cGVjdGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CmluZGV4IGU4MWU1MDUuLjkwZjM2MGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dApAQCAtNjI0
LDYgKzYyNCw3IEBAIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTYW1lTm9kZSBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmlzU3VwcG9ydGVkIFtmdW5jdGlvbl0KIHdp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubG9va3VwTmFtZXNwYWNlVVJJIFtmdW5jdGlvbl0KIHdp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubG9va3VwUHJlZml4IFtmdW5jdGlvbl0KK3dpbmRvdy5E
b2N1bWVudC5wcm90b3R5cGUubm9kZXNGcm9tUmVjdCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1l
bnQucHJvdG90eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90
eXBlLnF1ZXJ5Q29tbWFuZEVuYWJsZWQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3Rv
dHlwZS5xdWVyeUNvbW1hbmRJbmRldGVybSBbZnVuY3Rpb25dCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjFlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI2IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzAsMF0K
K1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzEwLDBdCitQ
QVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1Myw3MV0sIFswLDEwXQorUEFT
UyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMsNzFdLCBbMTAsMTBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzAsMTBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzEwLDBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzEwLDEwXQorUEFT
UyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUzLDE5M10sIFswLDBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzIwLDBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzAsMjBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzAsMF0KK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwxODNdLCBbMCwxXQorUEFTUyBB
bGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4M10sIFsxLDBdCitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzEsMV0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFswLDBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBbMTAsMF0KK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFswLDEwXQorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzEwLDEwXQorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVj
dCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMTAsMTBdCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42YTQwNjRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sPgor
PGhlYWQ+CisgIDx0aXRsZT5Eb2N1bWVudDo6bm9kZXNGcm9tUmVjdCB0ZXN0IC0gYnVnIDQwMTk3
PC90aXRsZT4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gQGltcG9ydCAicmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuY3NzIjsgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbm9k
ZXNGcm9tUmVjdC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCI+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgIH0KKworICAgICAgdmFyIGUgPSB7fTsKKworICAgICAgLy8gU2V0IHVwIHNob3J0
Y3V0IGFjY2VzcyB0byBlbGVtZW50cworICAgICAgZVsnaHRtbCddID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImh0bWwiKVswXTsKKyAgICAgIFsnaDEnLCAnZDEnLCAnZDInLCAncDEn
LCAncDInLCAncDMnLCAncDQnLCAncDUnLCAnc3BhbicsICdib2R5J10uZm9yRWFjaChmdW5jdGlv
bihhKSB7CisgICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICAg
IH0pOworCisgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisKKyAgICAgIGNoZWNrKDUzLCA3
MSwgMCwgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAxMCwgMCwgW2UucDMsIGUu
Ym9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAwLCAxMCwgW2UuZDEsIGUuaDEsIGUuYm9keV0p
OworICAgICAgY2hlY2soNTMsIDcxLCAxMCwgMTAsIFtlLnAzLCBlLmQxLCBlLmgxLCBlLmJvZHld
KTsKKworICAgICAgY2hlY2soMTUyLCAxMDUsIDAsIDEwLCBbZS5wMywgZS5ib2R5XSk7CisgICAg
ICBjaGVjaygxNTIsIDEwNSwgMTAsIDAsIFtlLnA0LCBlLmQxLCBlLmJvZHldKTsKKyAgICAgIGNo
ZWNrKDE1MiwgMTA1LCAxMCwgMTAsIFtlLnA0LCBlLnAzLCBlLmQxLCBlLmJvZHldKTsKKworICAg
ICAgLy8gZS5wMSBpcyBpbnZpc2libGUgYW5kIHNob3VsZG4ndCBhcHBlYXI6CisgICAgICBjaGVj
aygxNTMsMTkzLDAsMCxbZS5wNV0pOworICAgICAgLy8gTk9URTogW2UucDUsIGUuZDJdKSBzaG91
bGQgYmUgcmV0dXJuZWQgaWYgd2UgZGlkIG5vdCBzdG9wCisgICAgICAvLyBhdCBlLnA1LCB3aGlj
aCBmdWxseSBlbmNsb3NlcyB0aGUgdGFyZ2V0IHJlY3QuCisgICAgICBjaGVjaygxNTMsMTkzLDIw
LDAsIFtlLnA1XSk7CisgICAgICBjaGVjaygxNTMsMTkzLDAsMjAsIFtlLnA1LCBlLmJvZHldKTsK
KworICAgICAgLy8gUHJlY2lzZSBwaXhlbCBjaGVja3M6CisgICAgICBjaGVjaygxNDQsIDE4Mywg
MCwgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2soMTQ0LCAxODMsIDAsIDEsIFtlLnA1LCBlLmJv
ZHldKTsKKyAgICAgIGNoZWNrKDE0NCwgMTgzLCAxLCAwLCBbZS5kMiwgZS5ib2R5XSk7CisgICAg
ICBjaGVjaygxNDQsIDE4MywgMSwgMSwgW2UucDUsIGUuZDIsIGUuYm9keV0pOworICAgICAgY2hl
Y2soNzcsIDI0MCwgMCwgMCwgW2UucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAwLCBb
ZS5wMl0pOworICAgICAgY2hlY2soNzcsIDI0MCwgMCwgMTAsIFtlLnA1LCBlLnNwYW4sIGUucDJd
KTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAxMCwgW2UucDUsIGUuc3BhbiwgZS5wMl0pOwor
CisgICAgICAvLyBFeHBhbmRpbmcgYXJlYSBjaGVja3M6CisgICAgICBjaGVjaygzOSwgMjEyLCAw
LCAgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2soMzksIDIxMiwgMCwgMTAsIFtlLmQyLCBlLnAy
LCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDM5LCAyMTIsIDEwLCAwLCBbZS5wNSwgZS5ib2R5XSk7
CisgICAgICBjaGVjaygzOSwgMjEyLCAxMCwgMTAsIFtlLnA1LCBlLmQyLCBlLnAyLCBlLmJvZHld
KTsKKworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5vbmxv
YWQgPSBydW5UZXN0OworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKyAg
PGgxIGlkPSJoMSI+PC9oMT4KKyAgPGRpdiBpZD0iZDEiPjwvZGl2PgorCisgIDwhLS0gZmxvYXRl
ZCBlbGVtZW50IC0tPgorICA8ZGl2IGlkPSJkMiIgc3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj4K
KworICA8IS0tIGhpZGRlbiBlbGVtZW50IC0tPgorICA8cCBpZD0icDEiIHN0eWxlPSJmbG9hdDog
bGVmdDsgdmlzaWJpbGl0eTogaGlkZGVuIj48L3A+CisKKyAgPHAgaWQ9InAyIiBzdHlsZT0iY2xl
YXI6IGxlZnQiPjxzcGFuIGlkPSJzcGFuIj48L3NwYW4+PC9wPgorCisgIDwhLS0gYWJzb2x1dGUg
cG9zaXRpb24gLS0+CisgIDxwIGlkPSJwMyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6
IDEwcHg7IGxlZnQ6NTBweDsgaGVpZ2h0OjUwcHg7Ij48L3A+CisKKyAgPCEtLSBmaXhlZCBwb3Np
dGlvbiAtLT4KKyAgPHAgaWQ9InA0IiBzdHlsZT0icG9zaXRpb246IGZpeGVkOyB0b3A6IDMwcHg7
IGxlZnQ6IDE1MHB4OyBoZWlnaHQ6IDUwcHg7IGJhY2tncm91bmQtY29sb3I6IGJsdWU7Ij48L3A+
CisKKyAgPCEtLSByZWxhdGl2ZSBwb3NpdGlvbiAtLT4KKyAgPHAgaWQ9InA1IiBzdHlsZT0icG9z
aXRpb246cmVsYXRpdmU7IHRvcDogLTEwMHB4OyBsZWZ0OiAzMHB4OyBtYXJnaW4tYm90dG9tOiAt
NzBweDsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW4iPjwvcD4KKworICA8c3BhbiBpZD0iY29uc29s
ZSI+PC9zcGFuPgorICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43MmU2ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzCkBAIC0wLDAgKzEsNDQgQEAKK2JvZHkgewor
ICBtYXJnaW46IDhweDsKKyAgcGFkZGluZzogMDsKK30KKworaDEsIGRpdiwgcCwgaWZyYW1lIHsK
KyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBi
b3JkZXI6IDNweCBzb2xpZCBibGFjazsKKyAgcGFkZGluZzogMTBweDsKKyAgbWFyZ2luOiAxMHB4
OworfQorCisjc3BhbiB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwcHg7CisgIGhl
aWdodDogMzBweDsKKyAgYm9yZGVyOiAzcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDEwcHg7
CisgIG1hcmdpbjogMTBweDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisjaWZyYW1l
MSB7CisgIGhlaWdodDogMTAwcHg7CisgIG1hcmdpbi10b3A6IDYwcHg7Cit9CisKKyNwNiB7Cisg
IGhlaWdodDogNTBweDsKKyAgbWFyZ2luLXRvcDogMzBweDsKK30KKworI3RyYW5zZiB7CisgIG1h
cmdpbi10b3A6IDYwcHg7CisgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKK30K
KworI2RlY2ltYWwgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGxlZnQ6IDAuNXB4OworICB0
b3A6IDUwLjVweDsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNl
cy9ub2Rlc0Zyb21SZWN0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVz
RnJvbVJlY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmM2YQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zy
b21SZWN0LmpzCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb250cmlidXRvcnM6CisgKiAgICAg
KiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KKyAqKi8KKworZnVuY3Rpb24g
Y2hlY2soeCwgeSwgaFBhZGRpbmcsIHZQYWRkaW5nLCBsaXN0KQoreworICAvKgorICAgIE5vZGVM
aXN0IG5vZGVzRnJvbVJlY3QoaW4gbG9uZyB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gbG9uZyB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9uZyBoUGFkZGluZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvbmcgdlBhZGRpbmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGlnbm9yZUNsaXBwaW5nKTsKKyAgKi8KKyAgdmFy
IG5vZGVzID0gZG9jdW1lbnQubm9kZXNGcm9tUmVjdCh4LCB5LCBoUGFkZGluZywgdlBhZGRpbmcs
IHRydWUgLyogaWdub3JlQ2xpcHBpbmcgKi8pOworCisgIGlmIChub2Rlcy5sZW5ndGggIT0gbGlz
dC5sZW5ndGgpIHsKKyAgICB0ZXN0RmFpbGVkKCJEaWZmZXJlbnQgbnVtYmVyIG9mIG5vZGVzIGZv
ciByZWN0IiArCisgICAgICAgICAgICAgICJbIiArIHggKyAiLCIgKyB5ICsgIl0sICIgKworICAg
ICAgICAgICAgICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRkaW5nICsgIl06ICciICsgbGlz
dC5sZW5ndGggKyAiJyB2cyAnIiArIG5vZGVzLmxlbmd0aCArICInIik7CisgICAgcmV0dXJuOwor
ICB9CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgeworICAgIGlm
IChub2Rlc1tpXSAhPSBsaXN0W2ldKSB7CisgICAgICB0ZXN0RmFpbGVkKCJVbmV4cGVjdGVkIG5v
ZGUgIyIgKyBpICsgIiBmb3IgcmVjdCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwi
ICsgeSArICJdLCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQ
YWRkaW5nICsgIl0iICsgIiAtICIgKyBub2Rlc1tpXSk7CisgICAgICByZXR1cm47CisgICAgfQor
ICB9CisKKyAgdGVzdFBhc3NlZCgiQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgIiAg
KworICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAiICsKKyAgICAgICAgICAgIlsi
ICsgaFBhZGRpbmcgKyAiLCIgKyB2UGFkZGluZyArICJdIik7Cit9CisKK2Z1bmN0aW9uIGdldENl
bnRlckZvcihlbGVtZW50KQoreworICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7CisgIHJldHVybiB7IHggOiBwYXJzZUludCgocmVjdC5sZWZ0ICsgcmVjdC5yaWdo
dCkgLyAyKSAsIHkgOiBwYXJzZUludCgocmVjdC50b3AgKyByZWN0LmJvdHRvbSkgLyAyKX07Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MTY3MTUyLi4wM2U1ODk0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDkxIEBACisyMDEwLTA3LTA3IEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNvbT4gLCBB
bnRvbmlvIEdvbWVzICA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5oYW5jZSB0aGUgaGl0IHRlc3RpbmcgdG8g
dGFrZSBhIHJlY3RhbmdsZSBpbnN0ZWFkIG9mIGEgcG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTk3CisKKyAgICAgICAgUGF0Y2ggZXh0ZW5k
cyB0aGUgaGl0IHRlc3Rpbmcgc3lzdGVtIHRvIHdvcmsgY29uc2lkZXJpbmcgYSByZWN0YW5ndWxh
ciBhcmVhCisgICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNh
YmxlLiBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgY2hhbmdlCisgICAgICAgIGlzIHRvIHByb3Zp
ZGUgbWVjaGFuaXNtcyB0byBtb3JlIHByZWNpc2UgdGFwIGFjdGlvbnMgYnkgdGhlIHVzZXJzLgor
CisgICAgICAgIFRoZSBtYWluIGlkZWEgaXMgdG8gbW9kaWZ5IHRoZSBIaXRUZXN0UmVzdWx0IHRv
IHRha2UgYSBwYWRkaW5nLiBUaGUgcGFkZGluZworICAgICAgICB0ZWxscyBob3cgbXVjaCB0byBl
eHBhbmQgdGhlIHNlYXJjaCByZWN0IGFyb3VuZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50LiBJZiBp
dAorICAgICAgICBpcyAwLCBpdCB3b3JrcyBhcyB0aGUgY3VycmVudCBwb2ludCBiYXNlZCBoaXQg
dGVzdGluZy4gSWYgaXQgaXMgbm9uLXplcm8sIGhpdCB0ZXN0CisgICAgICAgIHdpbGwga2VlcCBy
ZWNvcmQgb2YgYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBwcm92aWRlZCB0ZXN0IGFyZWEu
IFRoZSBsb2dpYworICAgICAgICB3aWxsIGNvbnRpbnVlIHNlYXJjaGluZyB3aGVuIGl0IGZpbmRz
IGEgY2FuZGlkYXRlIHVubGVzcyB0aGUgcmVjdGFuZ2xlIGlzIGZ1bGx5CisgICAgICAgIGVuY2xv
c2VkIGJ5IHRoZSBjYW5kaWRhdGUuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGxpc3Qgb2YgTm9kZSBp
biB0aGUgei1vcmRlciB0aGV5CisgICAgICAgIGFyZSBoaXQtdGVzdGVkLiBUaGUgY2FsbGVyIHdp
bGwgZGVjaWRlIGhvdyB0byBwcm9jZXNzIHRoZW0uCisKKyAgICAgICAgQXMgd2F5cyB0byBleHBv
c2UgdGhlIGZ1bmN0aW9uYWxpdHksIHRoZSBwYXRjaDoKKworICAgICAgICAtIGFkZHMgYSBub2Rl
c0Zyb21SZWN0IG1ldGhvZCB0byB0aGUgRG9jdW1lbnQgY2xhc3MsIGV4cG9zaW5nIHRoZSBmdW5j
aW9uYWxpdHkKKyAgICAgICAgdG8gdGhlIERPTS4gTWV0aG9kIHJldHVybnMgYSBOb2RlTGlzdCB3
aXRoIGFsbCBub2RlcyB0aGF0IGludGVyc2VjdCB0aGUgZ2l2ZW4KKyAgICAgICAgaGl0LXRlc3Rl
ZCBhcmVhLgorICAgICAgICAtIGV4dGVuZHMgaGl0VGVzdFJlc3VsdEF0UG9pbnQgbWV0aG9kIG9m
IHRoZSBFdmVudEhhbmRsZXIgd2l0aCBhbiBleHRyYSAncGFkZGluZycKKyAgICAgICAgcGFyYW1l
dGVyLCBkZWZhdWx0aW5nIHRvIEludFNpemUoMCwwKS4gVGhlIHJlY3QtYmFzZWQgaGl0IHRlc3Qg
aXMgcGVyZm9ybWVkIHdoZW4gYQorICAgICAgICBub24temVybyBwYWRkaW5nIGlzIHBhc3NlZCBp
bi4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKKwor
ICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2Rlc0Zyb21SZWN0KTogVGhpcyBtZXRob2Qg
ZXhwb3NlcyB0aGUgcmVjdCBiYXNlZCBmdW5jaW9uYWxpdHkgdG8KKyAgICAgICAgdGhlIERPTS4g
SXQgd29ya3Mgc2ltaWxhcmx5IHRvIGVsZW1lbnRGcm9tUG9pbnQsIGhvd2V2ZXIgcmVjZWl2aW5n
IGEgcmVjdGFuZ3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQs
IGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQgbGlzdCBvZiBub2RlcyAobm90IGVsZW1l
bnRzKQorICAgICAgICB3aG9zZSBhcmVhIGludGVyc2VjdCB0aGUgaGl0IHRlc3QgcmVjdC4KKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmlk
bDogRGl0dG8uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6IFRoZSBmdW5jaW9uYWxp
dHkgaXMgYWxzbyBleHBvc2VkIHRocm91Z2ggdGhpcworICAgICAgICBtZXRob2QuIFBhdGNoIGFk
ZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdvcmsgYXMgdGhlIHBhZGRpbmcg
YXJlYSwgYnVpbGRpbmcgdXAKKyAgICAgICAgdGhlIGhpdCB0ZXN0IHJlY3QuCisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3Vs
dCk6IFJlY3QgYmFzZWQgaGl0IHRlc3QgY29uc3RydWN0b3IuIFJlY2VpdmVzIGEKKyAgICAgICAg
cGFkZGluZyBJbnRTaXplIGFzIHBhcmFtZXRlci4gSXQgY2FuIGJlICgwLDApLgorICAgICAgICAo
V2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZpZWQgdG8gYXNzaWduIHRo
ZSByYXdOb2RlTGlzdCBhcyB3ZWxsLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6
YXBwZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJlc3VsdCBvYmplY3RzIGluIGEgd2F5IHRoYXQKKyAg
ICAgICAgcmF3Tm9kZUxpc3QncyBvZiBib3RoIG9iamVjdHMgZ2V0IGFtZW5kZWQuCisgICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGRSYXdOb2RlRm9yUmVnaW9uVGVzdCk6IEFkZHMg
YSBnaXZlbiBOb2RlIHRvIHRoZSBsaXN0IG9mCisgICAgICAgIGhpdCBub2Rlcy4KKyAgICAgICAg
KiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6cGFkZGluZyk6IFJldHVybnMgdGhlIHBhZGRpbmcgYXMgYW4gSW50U2l6ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlzUmVnaW9uVGVzdCk6IFJldHVybnMgaWYgdGhl
IEhpdFRlc3RSZXN1bHQgaXMgcmVjdCBiYXNlZCBvciBub3QuCisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0OjpyYXdOb2RlTGlzdCk6IFJldHVybnMgdGhlIGxpc3Qgbm9kZXMgaGl0Lgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6cmVnaW9uRnJvbVBvaW50KTogUmV0dXJu
cyB0aGUgaGl0IHRlc3QgYXJlYSBnaXZlbiB0aGUgaGl0IHRlc3QgcG9pbnQKKyAgICAgICAgYW5k
IHBhZGRpbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOiBN
ZXRob2QgaXMgbW9kaWZpZWQgdG8gc3VwcG9ydCByZWN0IGJhc2VkIGhpdCB0ZXN0IGV4dGVuc2lv
bi4KKyAgICAgICAgTm93IGl0IG5vdCBqdXN0IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2YgdGhl
IG5vZGUgYmVpbmcgaGl0LXRlc3RlZCBjb250YWlucyBhIGhpdCB0ZXN0IHBvaW50LCBidXQKKyAg
ICAgICAgaW5zdGVhZCBpdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGludGVy
c2VjdHMgYSBoaXQgdGVzdCByZWN0LiBJdCBpcyBpbXBsZW1lbnRlZCBzbworICAgICAgICB0aGF0
IHRoZSBjb21tb24gY2FzZSAocG9pbnQgYmFzZWQgaGl0IHRlc3QpIHdvcmtzIGFzIHByZXZpb3Vz
bHkuCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
Ojpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6
Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lk
Z2V0Ojpub2RlQXRQb2ludCk6IERpdHRvLgorCiAyMDEwLTA3LTA3ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3Rl
aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgppbmRleCBjMjcxNTI1Li4wN2YzYmJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTIxNCw3ICsyMTQsNyBA
QCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsb3dFTlNfMTVTY3JvbGxE
aXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFudQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNXNl
bmRTY3JvbGxFdmVudEV2CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxF
dmVudEVSTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjIwaGFuZGxlVGV4dElucHV0RXZlbnRFUktOU182U3RyaW5nRVBOU181RXZlbnRFYmIKLV9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2lu
dEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIw
aGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU184SW50UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxi
YXJzRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIxaGFuZGxlTW91
c2VQcmVzc0V2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjIzaGFuZGxlTW91c2VSZWxlYXNlRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VF
dmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjdjYXBzTG9ja1N0YXRlTWF5SGF2ZUNo
YW5nZWRFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCmluZGV4IGE1OGI5NWUuLjUzNTZmMWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTEx
OSw2ICsxMTksNyBAQAogI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0
YXRpY0hhc2hTZXROb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgogI2luY2x1
ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCkBAIC0yMDgsNiAr
MjA5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKKy8vICNkZWZpbmUg
RFVNUF9ISVRURVNUX1JFU1VMVCAxCiAKIC8vIFRoaXMgYW1vdW50IG9mIHRpbWUgbXVzdCBoYXZl
IGVsYXBzZWQgYmVmb3JlIHdlIHdpbGwgZXZlbiBjb25zaWRlciBzY2hlZHVsaW5nIGEgbGF5b3V0
IHdpdGhvdXQgYSBkZWxheS4KIC8vIEZJWE1FOiBGb3IgZmFzdGVyIG1hY2hpbmVzIHRoaXMgdmFs
dWUgY2FuIHJlYWxseSBiZSBsb3dlcmVkIHRvIDIwMC4gIDI1MCBpcyBhZGVxdWF0ZSwgYnV0IGEg
bGl0dGxlIGhpZ2gKQEAgLTEwMDMsNiArMTAwNSw3MyBAQCBLVVJMIERvY3VtZW50OjpiYXNlVVJJ
KCkgY29uc3QKICAgICByZXR1cm4gbV9iYXNlVVJMOwogfQogCisjaWYgRFVNUF9ISVRURVNUX1JF
U1VMVAordm9pZCBzdGF0aWMgZHVtcEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0KQoreworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IGxpc3QgPSByZXN1bHQu
cmF3Tm9kZUxpc3QoKTsKKyAgICBwcmludGYoIkhpdFRlc3QgYXQgeD0lZCB5PSVkIGhQYWRkaW5n
PSVkIHZQYWRkaW5nPSVkXG4iLAorICAgICAgICAgICByZXN1bHQucG9pbnQoKS54KCksIHJlc3Vs
dC5wb2ludCgpLnkoKSwgcmVzdWx0LnBhZGRpbmcoKS53aWR0aCgpLCByZXN1bHQucGFkZGluZygp
LmhlaWdodCgpKTsKKyAgICBwcmludGYoIkxpc3Qgc2l6ZTolZFxuIiwgbGlzdC5zaXplKCkpOwor
CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlz
dC5iZWdpbigpOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBsaXN0LmVuZCgpOworICAgIGZvciAoIDsgaXQgIT0gZW5kIDsgKytpdCkgeworICAg
ICAgICBOb2RlKiBub2RlID0gKCppdCkuZ2V0KCk7CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1l
bnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNJRCgpKQorICAgICAgICAgICAg
ICAgIHByaW50ZigiSGl0IGVsZW1lbnQgPCVzPiwgaWQ9JyVzJ1xuIiwgbm9kZS0+bm9kZU5hbWUo
KS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0
ZSgiaWQiKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwcmludGYoIkhpdCBlbGVtZW50IDwlcz4sIE5PIElEISdcbiIsIG5vZGUtPm5v
ZGVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aXNUZXh0
Tm9kZSgpKQorICAgICAgICAgICAgcHJpbnRmKCJUZXh0IG5vZGUgaGl0XG4iKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJIaXQgbm9kZSA8JXM+XG4iLCBub2RlLT5ub2RlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9CisjZW5kaWYK
KworLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUgRE9NIEFQSSBoZXJlIGF0IHNvbWUg
cG9pbnQuIElkZWFzOgorLy8KKy8vICogbWFrZSBpdCByZWNlaXZlIGEgcmVhbCBSZWN0LCBpLmUu
IG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CisvLyAqIG1ha2UgaXQgcmVjZWl2ZSB0aGUgZXhw
YWRpbmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBzZXBhcmF0ZWRseSwKKy8vICAgaS5lLiBub2Rl
c0Zyb21SZWN0KHgsIHQsIHRvcFNpemUsIHJpZ2h0U2l6ZSwgYm90dG9tU2l6ZSwgbGVmdFNpemUp
OworCisvLyBub2Rlc0Zyb21SZWN0CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9k
ZXNGcm9tUmVjdChpbnQgeCwgaW50IHksIGludCBoUGFkZGluZywgaW50IHZQYWRkaW5nLCBib29s
IGlnbm9yZUNsaXBwaW5nKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaGFyZSBjb2RlIGJldHdl
ZW4gdGhpcywgZWxlbWVudEZyb21Qb2ludCBhbmQgY2FyZXRSYW5nZUZyb21Qb2ludC4KKyAgICBp
ZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZVZpZXctPnBh
Z2Vab29tRmFjdG9yKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxv
YXRQb2ludCh4ICogem9vbUZhY3RvciAgKyB2aWV3KCktPnNjcm9sbFgoKSwgeSAqIHpvb21GYWN0
b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworCisgICAgSW50U2l6ZSBwYWRkaW5nKGhQYWRkaW5n
LCB2UGFkZGluZyk7CisgICAgaWYgKCFpZ25vcmVDbGlwcGluZyAmJiAhZnJhbWVWaWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKS5pbnRlcnNlY3RzKEludFJlY3QocG9pbnQsIHBhZGRpbmcpKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgdHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisgICAgaWYgKGlnbm9yZUNsaXBwaW5nKQorICAg
ICAgICB0eXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZzsKKworICAgIEhpdFRl
c3RSZXF1ZXN0IHJlcXVlc3QodHlwZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQs
IHBhZGRpbmcpOworICAgIHJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCBy
ZXN1bHQpOworCisjaWYgRFVNUF9ISVRURVNUX1JFU1VMVAorICAgIGR1bXBIaXRUZXN0UmVzdWx0
KHJlc3VsdCk7CisjZW5kaWYKKworICAgIHJldHVybiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q6OmFk
b3B0KHJlc3VsdC5yYXdOb2RlTGlzdCgpKTsKK30KKwogRWxlbWVudCogRG9jdW1lbnQ6OmVsZW1l
bnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBTaGFyZSBj
b2RlIGJldHdlZW4gdGhpcyBhbmQgY2FyZXRSYW5nZUZyb21Qb2ludC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDcyNzU3
YmQuLjRiZDhkYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaApAQCAtMzAxLDYgKzMwMSw3IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0OwogICAgIGJvb2wg
Y29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVu
dElkKSB7IHJldHVybiBtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKTsg
fQogCisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChpbnQgeCwgaW50IHks
IGludCBoUGFkZGluZywgaW50IHZQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nKSBjb25zdDsK
ICAgICBFbGVtZW50KiBlbGVtZW50RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICAg
UGFzc1JlZlB0cjxSYW5nZT4gY2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpOwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKaW5kZXggOTU5OWQ3Ni4uOTJjOGU2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtMTg2LDYgKzE4Niw4
IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFN0cmluZ1RvPVVuZGVmaW5lZF0gRE9NU3RyaW5nIGRlZmF1bHRDaGFyc2V0OwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01TdHJp
bmcgcmVhZHlTdGF0ZTsKIAorCisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICBub2Rlc0Zyb21S
ZWN0KGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIGhQYWRkaW5nLCBpbiBsb25nIHZQYWRk
aW5nLCBpbiBib29sZWFuIGlnbm9yZUNsaXBwaW5nKTsKICAgICAgICAgRWxlbWVudCAgICAgICAg
ICAgIGVsZW1lbnRGcm9tUG9pbnQoaW4gbG9uZyB4LCBpbiBsb25nIHkpOwogICAgICAgICBSYW5n
ZSAgICAgICAgICAgICAgY2FyZXRSYW5nZUZyb21Qb2ludChpbiBsb25nIHgsIGluIGxvbmcgeSk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYmE0OTg4ZC4uMDJmYWJhYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTg1OSw5ICs4NTksOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6YWxsb3dESFRN
TERyYWcoYm9vbCYgZmxhZ0RIVE1MLCBib29sJiBmbGFnVUEpIGNvbnN0CiB9CiAjZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICAKLUhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpo
aXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFk
b3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nLCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Ny
b2xsYmFycykKK0hpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGln
bm9yZUNsaXBwaW5nLCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Nyb2xsYmFycywgY29uc3QgSW50
U2l6ZSYgcGFkZGluZykKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7CisgICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOwogICAgIGlmICghbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaW50IGhpdFR5
cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwpA
QCAtODgzLDcgKzg4Myw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVz
dWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsCiAgICAgICAgIEZyYW1l
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7CiAgICAgICAgIElu
dFBvaW50IHdpZGdldFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkueCgpICsgdmlldy0+c2Nyb2xs
WCgpIC0gcmVuZGVyV2lkZ2V0LT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJXaWRnZXQtPnBhZGRpbmdM
ZWZ0KCksIAogICAgICAgICAgICAgcmVzdWx0LmxvY2FsUG9pbnQoKS55KCkgKyB2aWV3LT5zY3Jv
bGxZKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlclRvcCgpIC0gcmVuZGVyV2lkZ2V0LT5wYWRkaW5n
VG9wKCkpOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0
UG9pbnQpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0
UG9pbnQsIHBhZGRpbmcpOwogICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmxheWVy
KCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSksIHdpZGdldEhpdFRlc3RSZXN1bHQp
OwogICAgICAgICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVzdWx0OwogCkBAIC05MDUsNyArOTA1
LDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3
ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBy
ZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAgICAg
ICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRz
KHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFk
b3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFp
bkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9p
bnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3JlQ2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzLCBw
YWRkaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCA0Y2NhODk4Li4xMjhiNDBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xMDUsNyArMTA1LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1
YWQoY29uc3QgRmxvYXRRdWFkJik7CiAKLSAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRB
dFBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRI
aXRUZXN0U2Nyb2xsYmFycyk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0QXRQb2lu
dChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNs
aXBwaW5nID0gZmFsc2UsIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250SGl0VGVz
dFNjcm9sbGJhcnMsIGNvbnN0IEludFNpemUmIHBhZGRpbmcgPSBJbnRTaXplKCkpOwogCiAgICAg
Ym9vbCBtb3VzZVByZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX21vdXNlUHJlc3NlZDsgfQogICAg
IHZvaWQgc2V0TW91c2VQcmVzc2VkKGJvb2wgcHJlc3NlZCkgeyBtX21vdXNlUHJlc3NlZCA9IHBy
ZXNzZWQ7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAppbmRleCAzZTEzNDJmLi5lY2QzNmY0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC0xMTMsOSArMTEzLDExIEBAIGJvb2wg
RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodmlzaWJsZVRv
SGl0VGVzdGluZygpICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCkuY29udGFp
bnMoeCwgeSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgbV93
aWR0aCwgbV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRz
UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAg
IHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgs
IHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRk
UmF3Tm9kZUZvclJlZ2lvblRlc3QocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCBib3VuZHNSZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNTA5MzNjNi4uMWM4NDQ2YyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTQ5LDYgKzQ5LDE1IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IElu
dFBvaW50JiBwb2ludCkKICAgICA6IG1fcG9pbnQocG9pbnQpCiAgICAgLCBtX2lzT3ZlcldpZGdl
dChmYWxzZSkKKyAgICAsIG1faXNSZWdpb25UZXN0KGZhbHNlKQoreworfQorCitIaXRUZXN0UmVz
dWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50U2l6ZSYg
cGFkZGluZykKKyAgICA6IG1fcG9pbnQocG9pbnQpCisgICAgLCBtX3BhZGRpbmcocGFkZGluZykK
KyAgICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQorICAgICwgbV9pc1JlZ2lvblRlc3QodHJ1ZSkK
IHsKIH0KIApAQCAtNTksNyArNjgsMTAgQEAgSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChj
b25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKICAgICAsIG1fbG9jYWxQb2ludChvdGhlci5sb2Nh
bFBvaW50KCkpCiAgICAgLCBtX2lubmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCiAg
ICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3JvbGxiYXIoKSkKKyAgICAsIG1fcGFkZGluZyhvdGhl
ci5wYWRkaW5nKCkpCisgICAgLCBtX3Jhd05vZGVMaXN0KG90aGVyLnJhd05vZGVMaXN0KCkpCiAg
ICAgLCBtX2lzT3ZlcldpZGdldChvdGhlci5pc092ZXJXaWRnZXQoKSkKKyAgICAsIG1faXNSZWdp
b25UZXN0KG90aGVyLmlzUmVnaW9uVGVzdCgpKQogewogfQogCkBAIC03NSw3ICs4NywxMCBAQCBI
aXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3Vs
dCYgb3RoZXIpCiAgICAgbV9sb2NhbFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOwogICAgIG1f
aW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgpOwogICAgIG1fc2Nyb2xsYmFyID0g
b3RoZXIuc2Nyb2xsYmFyKCk7CisgICAgbV9wYWRkaW5nID0gb3RoZXIucGFkZGluZygpOworICAg
IG1fcmF3Tm9kZUxpc3QgPSBvdGhlci5yYXdOb2RlTGlzdCgpOwogICAgIG1faXNPdmVyV2lkZ2V0
ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CisgICAgbV9pc1JlZ2lvblRlc3QgPSBvdGhlci5pc1Jl
Z2lvblRlc3QoKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTM2Miw0ICszNzcsMzYgQEAg
Ym9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW5uZXJOb25TaGFyZWROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCit2b2lkIEhp
dFRlc3RSZXN1bHQ6OmFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKK3sKKyAgICBB
U1NFUlQoaXNSZWdpb25UZXN0KCkpOworCisgICAgaWYgKCFtX2lubmVyTm9kZSAmJiBvdGhlci5p
bm5lck5vZGUoKSkgeworICAgICAgICBtX2lubmVyTm9kZSA9IG90aGVyLmlubmVyTm9kZSgpOwor
ICAgICAgICBtX2lubmVyTm9uU2hhcmVkTm9kZSA9IG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgp
OworICAgICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7CisgICAgICAgIG1f
aW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgpOworICAgICAgICBtX3Njcm9sbGJh
ciA9IG90aGVyLnNjcm9sbGJhcigpOworICAgICAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlz
T3ZlcldpZGdldCgpOworICAgIH0KKworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2Rl
PiA+JiBsaXN0ID0gb3RoZXIucmF3Tm9kZUxpc3QoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8
Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGxpc3QuZW5kKCk7CisgICAgZm9yIChMaXN0
SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7
IGl0ICE9IGxhc3Q7ICsraXQpCisgICAgICAgIG1fcmF3Tm9kZUxpc3QuYWRkKGl0LT5nZXQoKSk7
Cit9CisKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6YWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QoTm9kZSog
bm9kZSwgaW50IHgsIGludCB5LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChp
c1JlZ2lvblRlc3QoKSk7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBtX3Jhd05vZGVM
aXN0LmFkZChub2RlKTsKKworICAgIHJldHVybiAhcmVjdC5jb250YWlucyhyZWdpb25Gcm9tUG9p
bnQoeCwgeSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgKaW5kZXggZDE5MDZiYS4uNDU1OGU1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuaApAQCAtMjEsNyArMjEsMTAgQEAKICNkZWZpbmUgSGl0VGVzdFJlc3VsdF9oCiAKICNpbmNs
dWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzgsNiArNDEsNyBAQCBjbGFzcyBTdHJpbmc7CiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsKIHB1Ymxp
YzoKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50Jik7CisgICAgSGl0VGVzdFJlc3Vs
dChjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFNpemUmKTsKICAgICBIaXRUZXN0UmVzdWx0KGNv
bnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICB+SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RS
ZXN1bHQmIG9wZXJhdG9yPShjb25zdCBIaXRUZXN0UmVzdWx0Jik7CkBAIC00OSw2ICs1MywxMSBA
QCBwdWJsaWM6CiAgICAgRWxlbWVudCogVVJMRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5u
ZXJVUkxFbGVtZW50LmdldCgpOyB9CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQogICAgIGJvb2wgaXNPdmVyV2lkZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9pc092ZXJXaWRnZXQ7IH0KKyAgICBJbnRTaXplIHBhZGRpbmcoKSBjb25z
dCB7IHJldHVybiBtX3BhZGRpbmc7IH0KKyAgICBib29sIGlzUmVnaW9uVGVzdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNSZWdpb25UZXN0IHx8ICFtX3BhZGRpbmcuaXNaZXJvKCk7IH0KKyAgICBJbnRS
ZWN0IHJlZ2lvbkZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0OworICAgIEludFJlY3QgcmVn
aW9uRnJvbVBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgY29uc3QgTGlzdEhhc2hT
ZXQ8UmVmUHRyPE5vZGU+ID4mIHJhd05vZGVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yYXdOb2Rl
TGlzdDsgfQogCiAgICAgdm9pZCBzZXRUb05vblNoYWRvd0FuY2VzdG9yKCk7CiAKQEAgLTc2LDYg
Kzg1LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzTGl2ZUxpbmsoKSBjb25zdDsKICAgICBib29s
IGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBIaXRU
ZXN0UmVzdWx0Jik7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHJlZ2lvbiB0ZXN0IGFu
ZCB0aGUgaGl0IHRlc3QgbmVlZHMgdG8gY29udGludWUgYXMgdGhlIHJlZ2lvbiBpcyBub3QgZnVs
bHkKKyAgICAvLyBjb3ZlcmVkIGJ5IHRoZSByZWN0LgorICAgIGJvb2wgYWRkUmF3Tm9kZUZvclJl
Z2lvblRlc3QoTm9kZSosIGludCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCA9IEludFJl
Y3QoKSk7CisKIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2RlOwogICAgIFJl
ZlB0cjxOb2RlPiBtX2lubmVyTm9uU2hhcmVkTm9kZTsKQEAgLTg0LDkgKzk4LDIyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hlcmUgaW5zaWRl
IHRoZSByZW5kZXJlciB3ZSBoaXQgb24gc3Vic2VxdWVudCBvcGVyYXRpb25zLgogICAgIFJlZlB0
cjxFbGVtZW50PiBtX2lubmVyVVJMRWxlbWVudDsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3Nj
cm9sbGJhcjsKKyAgICBJbnRTaXplIG1fcGFkZGluZzsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8
Tm9kZT4gPiBtX3Jhd05vZGVMaXN0OwogICAgIGJvb2wgbV9pc092ZXJXaWRnZXQ7IC8vIFJldHVy
bnMgdHJ1ZSBpZiB3ZSBhcmUgb3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUgYm9yZGVyL3Bh
ZGRpbmcgYXJlYSBvZiBhIFJlbmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCisgICAgYm9vbCBtX2lz
UmVnaW9uVGVzdDsKIH07CiAKK2lubGluZSBJbnRSZWN0IEhpdFRlc3RSZXN1bHQ6OnJlZ2lvbkZy
b21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoeCAtIG1f
cGFkZGluZy53aWR0aCgpLCB5IC0gbV9wYWRkaW5nLmhlaWdodCgpLCAyICogbV9wYWRkaW5nLndp
ZHRoKCkgKyAxLCAyICogbV9wYWRkaW5nLmhlaWdodCgpICsgMSk7Cit9CisKK2lubGluZSBJbnRS
ZWN0IEhpdFRlc3RSZXN1bHQ6OnJlZ2lvbkZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChwLngoKSAtIG1fcGFkZGluZy53aWR0aCgpLCBwLnko
KSAtIG1fcGFkZGluZy5oZWlnaHQoKSwgMiAqIG1fcGFkZGluZy53aWR0aCgpICsgMSwgMiAqIG1f
cGFkZGluZy5oZWlnaHQoKSArIDEpOworfQorCiBTdHJpbmcgZGlzcGxheVN0cmluZyhjb25zdCBT
dHJpbmcmLCBjb25zdCBOb2RlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggMTM1OTQzOC4uYmNhZDZlYiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTYxMSw3ICs2MTEsNyBAQCBib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZQogewogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc2libGVPdmVyZmxvd1JlY3Qo
KSk7CiAgICAgb3ZlcmZsb3dSZWN0Lm1vdmUodHgsIHR5KTsKLSAgICBpZiAoIW92ZXJmbG93UmVj
dC5jb250YWlucyh4LCB5KSkKKyAgICBpZiAoIW92ZXJmbG93UmVjdC5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWdpb25Gcm9tUG9pbnQoeCwgeSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KQEAgLTYyNCw5ICs2MjQsMTAgQEAgYm9vbCBJbmxpbmVG
bG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmUKIAogICAgIC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMuCiAgICAgSW50UmVjdCBy
ZWN0KHR4ICsgbV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9p
bnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1f
eSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJl
Z2lvblRlc3QocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCmluZGV4IDg1NDdmZTAuLjFlYTIwYzcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCkBAIC0yODcsOSArMjg3LDEwIEBAIGJvb2wgSW5saW5lVGV4dEJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGluCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwg
dHkgKyBtX3ksIG1fd2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNG
dWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4
LCB5KSkgeworICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2lu
dCh4LCB5KSkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChyZW5kZXJlcigpLT5ub2Rl
KCksIHgsIHksIHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBmOTgxMTA4Li5j
NjdmMDEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zNzM3LDE5ICszNzM3LDIx
IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQg
dG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlz
aWJsZU92ZXJmbG93UmVjdCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0g
ICAgICAgIGlmICghb3ZlcmZsb3dCb3guY29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFv
dmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoX3gsIF95KSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hp
bGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94
LCBfeSwgdHgsIHR5KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Ly8gVE9ETzogaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKCkgZG9lc24ndCBoYW5kbGUgcmVnaW9u
IHRlc3QgeWV0LgorICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChu
b2RlKCksIF94LCBfeSkpCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8v
IElmIHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAg
ICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1
c2VPdmVyZmxvd0NsaXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8ICho
YXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95
KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBib29s
IGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xD
bGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludChfeCwgX3kp
KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9t
UG9pbnQoX3gsIF95KSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAgIC8vIEhp
dCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBpbnQgc2Nyb2xsZWRYID0gdHg7CkBA
IC0zNzk3LDkgKzM3OTksMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAvLyBOb3cg
aGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0
QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNr
Z3JvdW5kKSB7CiAgICAgICAgIEludFJlY3QgYm91bmRzUmVjdCh0eCwgdHksIHdpZHRoKCksIGhl
aWdodCgpKTsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0
LmNvbnRhaW5zKF94LCBfeSkpIHsKKyAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAm
JiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludChfeCwgX3kpKSkg
ewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0g
dHgsIF95IC0gdHkpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3Qobm9kZSgpLCBfeCwgX3ksIGJvdW5kc1Jl
Y3QpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0zODI0LDEzICszODI3LDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAgICAgICAgIGN1
cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwg
dHkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNvbFJlY3QuY29udGFpbnMoeCwgeSkpIHsKKyAg
ICAgICAgaWYgKGNvbFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHgsIHkp
KSkgewogICAgICAgICAgICAgLy8gVGhlIHBvaW50IGlzIGluc2lkZSB0aGlzIGNvbHVtbi4KICAg
ICAgICAgICAgIC8vIEFkanVzdCB0eCBhbmQgdHkgdG8gY2hhbmdlIHdoZXJlIHdlIGhpdCB0ZXN0
LgogICAgICAgICAKICAgICAgICAgICAgIGludCBmaW5hbFggPSB0eCArIGN1cnJYT2Zmc2V0Owog
ICAgICAgICAgICAgaW50IGZpbmFsWSA9IHR5ICsgY3VycllPZmZzZXQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5h
bFksIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3Qo
KSAmJiAhY29sUmVjdC5jb250YWlucyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHgsIHkpKSkKKyAg
ICAgICAgICAgICAgICBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBmaW5h
bFgsIGZpbmFsWSwgaGl0VGVzdEFjdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFs
WCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKaW5kZXggZjhkOTQ5Ny4uZTYyNjQ0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTUyLDkgKzU1MywxMSBAQCBib29s
IFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdAogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3Ig
dGhpcyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhl
CiAgICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxl
bWVudHMgbGlrZSBpbWFnZXMpLgotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0
aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWln
aHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJ
bnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2aXNpYmxlVG9IaXRU
ZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZFJhd05vZGVG
b3JSZWdpb25UZXN0KG5vZGUoKSwgeFBvcywgeVBvcywgYm91bmRzUmVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAKaW5kZXggOGU3ZDE2NS4uNzhmZmRiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcApAQCAtMzc3LDEwICszNzcsMTAgQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdl
OjppbWFnZU1hcCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAg
ICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgIEhpdFRlc3RS
ZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAg
Ym9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJl
c3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKIAotICAgIGlmIChpbnNpZGUgJiYg
bm9kZSgpKSB7CisgICAgaWYgKHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAg
ICAgICAgIGlmIChIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAg
ICAgSW50UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZs
b2F0IHpvb20gPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CkBAIC0zOTEsNiArMzkxLDggQEAg
Ym9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICghaW5z
aWRlICYmIHJlc3VsdC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1w
UmVzdWx0KTsKICAgICBpZiAoaW5zaWRlKQogICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0Owog
ICAgIHJldHVybiBpbnNpZGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMDUxNjJm
Yy4uZjkwYmJlMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjc0NSw3ICsyNzQ1
LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgaWYgKHBhcmVudCgpKSB7CiAg
ICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXll
ciwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0
ZXN0IHRoZSBlbmNsb3NpbmcgY2xpcCBub3cuCi0gICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmNv
bnRhaW5zKGhpdFRlc3RQb2ludCkpCisgICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2Vj
dHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludChoaXRUZXN0UG9pbnQpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQogCkBAIC0yODU4LDE3ICsyODU4LDIxIEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlckxheWVyKiBjb250CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0
aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5
ZXIuCi0gICAgaWYgKGZnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgeworICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJv
bVBvaW50KGhpdFRlc3RQb2ludCkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAg
ICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ug
b25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9z
dC4KLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAg
ICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFk
ZGluZygpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBsYXllckJvdW5kcywgaGl0VGVzdFBvaW50LCBIaXRUZXN0RGVzY2VuZGFudHMpICYmCiAgICAg
ICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRy
LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewotICAgICAgICAgICAgcmVzdWx0
ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYg
KCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICAgICAgIC8vIEZvcmVncm91bmQgY2FuIGRlcHRoLXNvcnQgd2l0aCBkZXNjZW5kYW50IGxh
eWVycywgc28ga2VlcCB0aGlzIGFzIGEgY2FuZGlkYXRlLgogICAgICAgICAgICAgY2FuZGlkYXRl
TGF5ZXIgPSB0aGlzOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVn
aW9uVGVzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9
CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCkBAIC0y
ODg0LDEzICsyODg4LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKGNhbmRp
ZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAoYmdS
ZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0g
ICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgaWYg
KGJnUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoaGl0VGVzdFBvaW50KSkg
JiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJl
c3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChoaXRU
ZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2lu
dCwgSGl0VGVzdFNlbGYpICYmCiAgICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxz
ZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgp
KSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1w
UmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1w
UmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHRlbXBSZXN1bHQpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gMDsKQEAgLTI5MDIsOCArMjkx
MCw5IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllckJvdW5kcy54KCkgLSByZW5kZXJCb3hYKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyQm94WSgpLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoaXRUZXN0RmlsdGVyKSkgewotICAgICAgICAvLyBJdCdzIHdyb25nIHRvIHNl
dCBpbm5lck5vZGUsIGJ1dCB0aGVuIGNsYWltIHRoYXQgeW91IGRpZG4ndCBoaXQgYW55dGhpbmcu
Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0LmlubmVyTm9kZSgpKTsKKyAgICAgICAgLy8gSXQncyB3
cm9uZyB0byBzZXQgaW5uZXJOb2RlLCBidXQgdGhlbiBjbGFpbSB0aGF0IHlvdSBkaWRuJ3QgaGl0
IGFueXRoaW5nLCB1bmxlc3MgaXQgaXMKKyAgICAgICAgLy8gYSByZWdpb24gdGVzdC4KKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSAm
JiByZXN1bHQucmF3Tm9kZUxpc3QoKS5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtMjkzNywxNCArMjk0NiwyMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0LCBSZW5kZXJMYXllciogcgog
ICAgIGZvciAoaW50IGkgPSBsaXN0LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAg
ICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJM
YXllciogaGl0TGF5ZXIgPSAwOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVz
dWx0LnBvaW50KCkpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBv
aW50KCksIHJlc3VsdC5wYWRkaW5nKCkpOwogICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdp
bmF0ZWQoKSkKICAgICAgICAgICAgIGhpdExheWVyID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5
ZXIoY2hpbGRMYXllciwgcm9vdExheWVyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVj
dCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0
TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwg
aGl0VGVzdFBvaW50LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50
cyk7CisKKyAgICAgICAgLy8gSWYgaXQgYSByZWdpb24gdGVzdCwgd2UgY2FuIHNhZmVseSBhcHBl
bmQgdGhlIHRlbXBvcmFyeSByZXN1bHQgc2luY2UgaXQgbWlnaHQgaGFkIGhpdAorICAgICAgICAv
LyBub2RlcyBidXQgbm90IG5lY2Vzc2VyaWx5IGhhZCBoaXRMYXllciBzZXQuCisgICAgICAgIGlm
IChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBS
ZXN1bHQpOworCiAgICAgICAgIGlmIChpc0hpdENhbmRpZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0
RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpKSB7CiAgICAg
ICAgICAgICByZXN1bHRMYXllciA9IGhpdExheWVyOwotICAgICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRoU29y
dERlc2NlbmRhbnRzKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDA0
LDcgKzMwMjAsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVy
Q29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgUmVuZAogICAgICAgICBJbnRSZWN0IGxv
Y2FsQ2xpcFJlY3QoaGl0VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2Vj
dChjb2xSZWN0KTsKICAgICAgICAgCi0gICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5
KCkgJiYgbG9jYWxDbGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpKSB7CisgICAgICAgIGlm
ICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3RzKHJl
c3VsdC5yZWdpb25Gcm9tUG9pbnQoaGl0VGVzdFBvaW50KSkpIHsKICAgICAgICAgICAgIFJlbmRl
ckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgICAgICBpZiAoIWNvbHVtbkluZGV4KSB7CiAg
ICAgICAgICAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0gdG8gY2hhbmdl
IHdoZXJlIHRoZSBsYXllciBwYWludHMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQm94TGlzdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAKaW5kZXggMmQyNzc0OC4uMGM1OTRkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCiAKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yNDUsMTQgKzI0NiwxNCBAQCBib29sIFJlbmRl
ckxpbmVCb3hMaXN0OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgSGl0VGVzdFJlcQogICAgIC8vIGNvbnRhaW4gdGhlIHBvaW50LiAgVGhpcyBpcyBhIHF1aWNr
IHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFueSBsaW5l
cy4KICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBmbGF3ZWQgaW4gdGhlIGZvbGxvd2luZyBl
eHRyZW1lbHkgb2JzY3VyZSB3YXk6CiAgICAgLy8gaWYgc29tZSBsaW5lIGluIHRoZSBtaWRkbGUg
aGFzIGEgaHVnZSBvdmVyZmxvdywgaXQgbWlnaHQgYWN0dWFsbHkgZXh0ZW5kIGJlbG93IHRoZSBs
YXN0IGxpbmUuCi0gICAgaWYgKCh5ID49IHR5ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5ib3R0
b21WaXNpYmxlT3ZlcmZsb3coKSkgfHwgKHkgPCB0eSArIGZpcnN0TGluZUJveCgpLT5yb290KCkt
PnRvcFZpc2libGVPdmVyZmxvdygpKSkKKyAgICBpZiAoKHkgLSByZXN1bHQucGFkZGluZygpLmhl
aWdodCgpID49IHR5ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZs
b3coKSkgfHwgKHkgKyByZXN1bHQucGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBmaXJzdExpbmVC
b3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIFNlZSBpZiBvdXIgcm9vdCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4gIElm
IHNvLCB0aGVuIHdlIGhpdCB0ZXN0CiAgICAgLy8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0IGJv
eGVzIGNhbiBlYXNpbHkgb3ZlcmxhcCwgc28gd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMK
ICAgICAvLyBiYXNlZCBvZmYgcG9zaXRpb25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIg
bGFzdCBsaW5lIGJveC4KICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGluZUJv
eCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkgewotICAgICAgICBpZiAoeSA+
PSB0eSArIGN1cnItPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3Vy
ci0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoeSArIHJl
c3VsdC5wYWRkaW5nKCkuaGVpZ2h0KCkgPj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVP
dmVyZmxvdygpICYmIHkgLSByZXN1bHQucGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBjdXJyLT5y
b290KCktPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBib29sIGluc2lk
ZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsKICAg
ICAgICAgICAgIGlmIChpbnNpZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IGM5MzFmMWMuLmI3YTYzZTUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUm9vdC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzE0LDYg
KzMxNSw4IEBAIGJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGlmIChjaGlsZC0+bm9k
ZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24p
KSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9jYWwgcG9p
bnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwogICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOworICAgICAgICAgICAg
Ly8gVE9ETzogbm9kZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlZ2lvbiB0ZXN0IHll
dC4KKyAgICAgICAgICAgIHJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChjaGlsZC0+bm9k
ZSgpLCBfeCwgX3kpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggZmQ5MDk5MC4uNjU0N2ZlYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91dC5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpA
QCAtMTEzNSw3ICsxMTM2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICB0eSArPSB5
KCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7Cisg
ICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50
ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkg
JiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQt
PmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSAmJgogICAgICAgICAgICAg
ICAgIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQb3MsIHR4LCB0
eSwgYWN0aW9uKSkgewpAQCAtMTE0Niw5ICsxMTQ3LDExIEBAIGJvb2wgUmVuZGVyVGFibGU6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LgotICAgIGlmICh2aXNp
YmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8
IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIEludFJlY3QodHgsIHR5
LCB3aWR0aCgpLCBoZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0
IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlm
ICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3Jv
dW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGJvdW5kc1Jl
Y3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9z
IC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZFJh
d05vZGVGb3JSZWdpb25UZXN0KG5vZGUoKSwgeFBvcywgeVBvcywgYm91bmRzUmVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBiMjVkM2U2Li5iOWI3MzU5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTEx
NTIsNyArMTE1Myw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgdHggKz0geCgpOwog
ICAgIHR5ICs9IHkoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dD
bGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKQorICAgIGlmIChoYXNPdmVyZmxv
d0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJl
Z2lvbkZyb21Qb2ludCh4UG9zLCB5UG9zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmlu
ZGV4IGFhM2I3NzIuLmZhOGNmOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAt
Mzg0LDcgKzM4NCw3IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzCiAgICAgYm9vbCBpbnNpZGUg
PSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwg
dHksIGFjdGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkg
b3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGlu
ZyBhcmVhKS4KLSAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9k
ZSgpID09IG5vZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWdpb25UZXN0KCkp
ICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKICAgICAgICAg
cmVzdWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJlc3VsdC5s
b2NhbFBvaW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQotLSAKMS43LjAuNAoK
</data>
<flag name="commit-queue"
          id="48527"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62029</attachid>
            <date>2010-07-19 19:17:13 -0700</date>
            <delta_ts>2010-07-21 06:31:06 -0700</delta_ts>
            <desc>patch v3 - feature + tests</desc>
            <filename>0001-2010-07-19-Grace-Kloba--Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>54873</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBjN2M3ZDU0YzIxZmNlNDU5OTIxMjRjOTc3ZGVjNGQxMjA1YTEzMmQzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMTkgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFBhdGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5
c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQogICAgICAgIGFzIGlu
cHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNhYmxlLiBUaGUgcHJpbWFyeSBnb2Fs
IG9mIHRoaXMgY2hhbmdlCiAgICAgICAgaXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3Jl
IHByZWNpc2UgdGFwIGFjdGlvbnMgYnkgdGhlIHVzZXJzLgoKICAgICAgICBUaGUgbWFpbiBpZGVh
IGlzIHRvIG1vZGlmeSB0aGUgSGl0VGVzdFJlc3VsdCB0byB0YWtlIGEgcGFkZGluZy4gVGhlIHBh
ZGRpbmcKICAgICAgICB0ZWxscyBob3cgbXVjaCB0byBleHBhbmQgdGhlIHNlYXJjaCByZWN0IGFy
b3VuZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50LiBJZiBpdAogICAgICAgIGlzIG5vbi1wb3NpdGl2
ZSwgaXQgd29ya3MgYXMgdGhlIGN1cnJlbnQgcG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcuIE90aGVy
d2lzZSwgaGl0CiAgICAgICAgdGVzdCB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbCBub2RlcyB0aGF0
IGludGVyc2VjdCB0aGUgcHJvdmlkZWQgdGVzdCBhcmVhLiBUaGUgbG9naWMKICAgICAgICB3aWxs
IGNvbnRpbnVlIHNlYXJjaGluZyB3aGVuIGl0IGZpbmRzIGEgY2FuZGlkYXRlIHVudGlsIHRoZSBy
ZWN0YW5nbGUgaXMgZnVsbHkgZW5jbG9zZWQKICAgICAgICBieSB0aGUgY2FuZGlkYXRlLiBUaGUg
cmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleSBhcmUgaGl0
LXRlc3RlZC4KICAgICAgICBUaGUgY2FsbGVyIHdpbGwgZGVjaWRlIGhvdyB0byBwcm9jZXNzIHRo
ZW0uCgogICAgICAgIEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBh
dGNoOgoKICAgICAgICAtIEFkZHMgYSBub2Rlc0Zyb21SZWN0IG1ldGhvZCB0byB0aGUgRG9jdW1l
bnQgY2xhc3MsIGV4cG9zaW5nIHRoZSBmdW5jaW9uYWxpdHkKICAgICAgICB0byB0aGUgRE9NLiBN
ZXRob2QgcmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRo
ZSBnaXZlbgogICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KICAgICAgICAtIEV4dGVuZHMgaGl0VGVz
dFJlc3VsdEF0UG9pbnQgbWV0aG9kIG9mIHRoZSBFdmVudEhhbmRsZXIgd2l0aCBhbiBleHRyYSAn
cGFkZGluZycKICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgtMSwgLTEp
LiBUaGUgcmVjdC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCiAgICAgICAgbm9u
LW5lZ2F0aXZlIHBhZGRpbmcgaXMgcGFzc2VkIGluLgoKICAgICAgICBUZXN0OiBmYXN0L2RvbS9u
b2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKCiAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgogICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVz
RnJvbVJlY3QpOiBUaGlzIG1ldGhvZCBleHBvc2VzIHRoZSByZWN0IGJhc2VkIGZ1bmNpb25hbGl0
eSB0bwogICAgICAgIHRoZSBET00uIEl0IHdvcmtzIHNpbWlsYXJseSB0byBlbGVtZW50RnJvbVBv
aW50LCBob3dldmVyIHJlY2VpdmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKICAgICAgICBhcyBpbnB1
dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQgbGlz
dCBvZiBub2RlcyAobm90IGVsZW1lbnRzKQogICAgICAgIHdob3NlIGFyZWEgaW50ZXJzZWN0IHRo
ZSBoaXQgdGVzdCByZWN0LgogICAgICAgICogZG9tL0RvY3VtZW50Lmg6IERpdHRvLgogICAgICAg
ICogZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCiAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQp
OiBUaGUgZnVuY2lvbmFsaXR5IGlzIGFsc28gZXhwb3NlZCB0aHJvdWdoIHRoaXMKICAgICAgICBt
ZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdvcmsg
YXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKICAgICAgICB0aGUgaGl0IHRlc3QgcmVj
dC4KICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IERpdHRvLgogICAgICAgICogcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpI
aXRUZXN0UmVzdWx0KTogUmVjdCBiYXNlZCBoaXQgdGVzdCBjb25zdHJ1Y3Rvci4gUmVjZWl2ZXMg
YQogICAgICAgIHBhZGRpbmcgSW50U2l6ZSBhcyBwYXJhbWV0ZXIuIEl0IGNhbiBiZSAoMCwwKS4K
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZpZWQgdG8g
YXNzaWduIHRoZSByYXdOb2RlTGlzdCBhcyB3ZWxsLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0OjphcHBlbmQpOiBNZXJnZSB0byBIaXRUZXN0UmVzdWx0IG9iamVjdHMgaW4gYSB3YXkg
dGhhdAogICAgICAgIHJhd05vZGVMaXN0J3Mgb2YgYm90aCBvYmplY3RzIGdldCBhbWVuZGVkLgog
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGRSYXdOb2RlRm9yUmVnaW9uVGVzdCk6
IEFkZHMgYSBnaXZlbiBOb2RlIHRvIHRoZSBsaXN0IG9mCiAgICAgICAgaGl0IG5vZGVzLgogICAg
ICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKICAgICAgICAoV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdDo6cGFkZGluZyk6IFJldHVybnMgdGhlIHBhZGRpbmcgYXMgYW4gSW50U2l6ZS4KICAg
ICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNSZWdpb25UZXN0KTogUmV0dXJucyBpZiB0
aGUgSGl0VGVzdFJlc3VsdCBpcyByZWN0IGJhc2VkIG9yIG5vdC4KICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6cmF3Tm9kZUxpc3QpOiBSZXR1cm5zIHRoZSBsaXN0IG5vZGVzIGhpdC4K
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6cmVnaW9uRnJvbVBvaW50KTogUmV0dXJu
cyB0aGUgaGl0IHRlc3QgYXJlYSBnaXZlbiB0aGUgaGl0IHRlc3QgcG9pbnQKICAgICAgICBhbmQg
cGFkZGluZy4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgogICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGl0VGVzdExpc3QpOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0
VGVzdENoaWxkTGF5ZXJDb2x1bW5zKToKICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6IE1ldGhvZCBp
cyBtb2RpZmllZCB0byBzdXBwb3J0IHJlY3QgYmFzZWQgaGl0IHRlc3QgZXh0ZW5zaW9uLgogICAg
ICAgIE5vdyBpdCBub3QganVzdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGJl
aW5nIGhpdC10ZXN0ZWQgY29udGFpbnMgYSBoaXQgdGVzdCBwb2ludCwgYnV0CiAgICAgICAgaW5z
dGVhZCBpdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBo
aXQgdGVzdCByZWN0LiBJdCBpcyBpbXBsZW1lbnRlZCBzbwogICAgICAgIHRoYXQgdGhlIGNvbW1v
biBjYXNlIChwb2ludCBiYXNlZCBoaXQgdGVzdCkgd29ya3MgYXMgcHJldmlvdXNseS4KICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQp
OiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6IERpdHRvLgogICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50
KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgogICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVC
b3hMaXN0OjpoaXRUZXN0KToKICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoK
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9k
ZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgog
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KTogRGl0dG8uCi0tLQog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEw
ICsrCiAuLi4vZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCB8
ICAgIDEgKwogLi4uL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0ICAg
ICAgfCAgIDI2ICsrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNp
Yy5odG1sICAgICAgfCAgIDg5ICsrKysrKysrKysrKysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3MgICB8ICAgNDQgKysrKysrKysrKwogTGF5
b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMgICAgfCAgIDQ0ICsr
KysrKysrKysKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICA4OCArKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3MSArKysrKysrKysrKysrKysrCiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEg
KwogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOCArLQogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgICAgICAg
ICAgICAgICAgICB8ICAgIDYgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
ICAgICAgICAgICAgICAgIHwgICA0NyArKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmggICAgICAgICAgICAgICAgICB8ICAgMzIgKysrKysrKwogV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgICAgICAgICAgICAgICAgfCAgICA3ICstCiBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCAgICAgICAgICAgICAgICAgIHwgICAyMCAr
KystLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCAgICAgICAgICAgICAgICAgICAg
fCAgICA3ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgICAgICAgICAgICAg
ICAgICB8ICAgIDYgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCAgICAgICAg
ICAgICAgICAgIHwgICA0NCArKysrKysrLS0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5l
Qm94TGlzdC5jcHAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jvb3QuY3BwICAgICAgICAgICAgICAgIHwgICAgMyArCiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDkgKystCiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwICAgICAgICAgICB8ICAgIDMgKy0KIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogMjcg
ZmlsZXMgY2hhbmdlZCwgNTM5IGluc2VydGlvbnMoKyksIDQ1IGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhw
ZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC1iYXNpYy5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9k
b20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0
VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMKCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGY4NWEz
Mi4uYjAyMjk0NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA3LTE5IEFudG9uaW8gR29t
ZXMgIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4gLCBHcmFjZSBLbG9iYSAgPGtsb2JhZ0BnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5o
YW5jZSB0aGUgaGl0IHRlc3RpbmcgdG8gdGFrZSBhIHJlY3RhbmdsZSBpbnN0ZWFkIG9mIGEgcG9p
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTk3
CisKKyAgICAgICAgKiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sOiBBZGRl
ZC4KKwogMjAxMC0wNy0xOSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CmluZGV4
IGMxNmU1NmQuLmVhYWI1ODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dApAQCAtNjI5LDYgKzYyOSw3
IEBAIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTYW1lTm9kZSBbZnVuY3Rpb25dCiB3aW5k
b3cuRG9jdW1lbnQucHJvdG90eXBlLmlzU3VwcG9ydGVkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUubG9va3VwTmFtZXNwYWNlVVJJIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUubG9va3VwUHJlZml4IFtmdW5jdGlvbl0KK3dpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUubm9kZXNGcm9tUmVjdCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90
eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5
Q29tbWFuZEVuYWJsZWQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVy
eUNvbW1hbmRJbmRldGVybSBbZnVuY3Rpb25dCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjg5ZjFlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2IEBA
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzAsMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzEwLDBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1Myw3MV0sIFswLDEwXQorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMsNzFdLCBbMTAsMTBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzAsMTBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzEwLDBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzEwLDEwXQorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUzLDE5M10sIFswLDBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzIwLDBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzAsMjBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwxODNdLCBbMCwxXQorUEFTUyBBbGwgY29ycmVj
dCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4M10sIFsxLDBdCitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzEsMV0KK1BBU1MgQWxsIGNvcnJlY3Qg
bm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5v
ZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBbMTAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9k
ZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2Rl
cyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzEwLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2Rl
cyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBm
b3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZv
dW5kIGZvciByZWN0IFszOSwyMTJdLCBbMTAsMTBdCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42YTQwNjRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9k
ZXNGcm9tUmVjdC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sPgorPGhlYWQ+Cisg
IDx0aXRsZT5Eb2N1bWVudDo6bm9kZXNGcm9tUmVjdCB0ZXN0IC0gYnVnIDQwMTk3PC90aXRsZT4K
KyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gQGltcG9ydCAicmVzb3VyY2VzL25vZGVzRnJvbVJl
Y3QuY3NzIjsgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbm9kZXNGcm9tUmVj
dC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+
CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
IH0KKworICAgICAgdmFyIGUgPSB7fTsKKworICAgICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFjY2Vz
cyB0byBlbGVtZW50cworICAgICAgZVsnaHRtbCddID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImh0bWwiKVswXTsKKyAgICAgIFsnaDEnLCAnZDEnLCAnZDInLCAncDEnLCAncDInLCAn
cDMnLCAncDQnLCAncDUnLCAnc3BhbicsICdib2R5J10uZm9yRWFjaChmdW5jdGlvbihhKSB7Cisg
ICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICAgIH0pOworCisg
ICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisKKyAgICAgIGNoZWNrKDUzLCA3MSwgMCwgMCwg
W2UuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAxMCwgMCwgW2UucDMsIGUuYm9keV0pOwor
ICAgICAgY2hlY2soNTMsIDcxLCAwLCAxMCwgW2UuZDEsIGUuaDEsIGUuYm9keV0pOworICAgICAg
Y2hlY2soNTMsIDcxLCAxMCwgMTAsIFtlLnAzLCBlLmQxLCBlLmgxLCBlLmJvZHldKTsKKworICAg
ICAgY2hlY2soMTUyLCAxMDUsIDAsIDEwLCBbZS5wMywgZS5ib2R5XSk7CisgICAgICBjaGVjaygx
NTIsIDEwNSwgMTAsIDAsIFtlLnA0LCBlLmQxLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE1Miwg
MTA1LCAxMCwgMTAsIFtlLnA0LCBlLnAzLCBlLmQxLCBlLmJvZHldKTsKKworICAgICAgLy8gZS5w
MSBpcyBpbnZpc2libGUgYW5kIHNob3VsZG4ndCBhcHBlYXI6CisgICAgICBjaGVjaygxNTMsMTkz
LDAsMCxbZS5wNV0pOworICAgICAgLy8gTk9URTogW2UucDUsIGUuZDJdKSBzaG91bGQgYmUgcmV0
dXJuZWQgaWYgd2UgZGlkIG5vdCBzdG9wCisgICAgICAvLyBhdCBlLnA1LCB3aGljaCBmdWxseSBl
bmNsb3NlcyB0aGUgdGFyZ2V0IHJlY3QuCisgICAgICBjaGVjaygxNTMsMTkzLDIwLDAsIFtlLnA1
XSk7CisgICAgICBjaGVjaygxNTMsMTkzLDAsMjAsIFtlLnA1LCBlLmJvZHldKTsKKworICAgICAg
Ly8gUHJlY2lzZSBwaXhlbCBjaGVja3M6CisgICAgICBjaGVjaygxNDQsIDE4MywgMCwgMCwgW2Uu
Ym9keV0pOworICAgICAgY2hlY2soMTQ0LCAxODMsIDAsIDEsIFtlLnA1LCBlLmJvZHldKTsKKyAg
ICAgIGNoZWNrKDE0NCwgMTgzLCAxLCAwLCBbZS5kMiwgZS5ib2R5XSk7CisgICAgICBjaGVjaygx
NDQsIDE4MywgMSwgMSwgW2UucDUsIGUuZDIsIGUuYm9keV0pOworICAgICAgY2hlY2soNzcsIDI0
MCwgMCwgMCwgW2UucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAwLCBbZS5wMl0pOwor
ICAgICAgY2hlY2soNzcsIDI0MCwgMCwgMTAsIFtlLnA1LCBlLnNwYW4sIGUucDJdKTsKKyAgICAg
IGNoZWNrKDc3LCAyNDAsIDEwLCAxMCwgW2UucDUsIGUuc3BhbiwgZS5wMl0pOworCisgICAgICAv
LyBFeHBhbmRpbmcgYXJlYSBjaGVja3M6CisgICAgICBjaGVjaygzOSwgMjEyLCAwLCAgMCwgW2Uu
Ym9keV0pOworICAgICAgY2hlY2soMzksIDIxMiwgMCwgMTAsIFtlLmQyLCBlLnAyLCBlLmJvZHld
KTsKKyAgICAgIGNoZWNrKDM5LCAyMTIsIDEwLCAwLCBbZS5wNSwgZS5ib2R5XSk7CisgICAgICBj
aGVjaygzOSwgMjEyLCAxMCwgMTAsIFtlLnA1LCBlLmQyLCBlLnAyLCBlLmJvZHldKTsKKworICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5vbmxvYWQgPSBydW5U
ZXN0OworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKyAgPGgxIGlkPSJo
MSI+PC9oMT4KKyAgPGRpdiBpZD0iZDEiPjwvZGl2PgorCisgIDwhLS0gZmxvYXRlZCBlbGVtZW50
IC0tPgorICA8ZGl2IGlkPSJkMiIgc3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj4KKworICA8IS0t
IGhpZGRlbiBlbGVtZW50IC0tPgorICA8cCBpZD0icDEiIHN0eWxlPSJmbG9hdDogbGVmdDsgdmlz
aWJpbGl0eTogaGlkZGVuIj48L3A+CisKKyAgPHAgaWQ9InAyIiBzdHlsZT0iY2xlYXI6IGxlZnQi
PjxzcGFuIGlkPSJzcGFuIj48L3NwYW4+PC9wPgorCisgIDwhLS0gYWJzb2x1dGUgcG9zaXRpb24g
LS0+CisgIDxwIGlkPSJwMyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6IDEwcHg7IGxl
ZnQ6NTBweDsgaGVpZ2h0OjUwcHg7Ij48L3A+CisKKyAgPCEtLSBmaXhlZCBwb3NpdGlvbiAtLT4K
KyAgPHAgaWQ9InA0IiBzdHlsZT0icG9zaXRpb246IGZpeGVkOyB0b3A6IDMwcHg7IGxlZnQ6IDE1
MHB4OyBoZWlnaHQ6IDUwcHg7IGJhY2tncm91bmQtY29sb3I6IGJsdWU7Ij48L3A+CisKKyAgPCEt
LSByZWxhdGl2ZSBwb3NpdGlvbiAtLT4KKyAgPHAgaWQ9InA1IiBzdHlsZT0icG9zaXRpb246cmVs
YXRpdmU7IHRvcDogLTEwMHB4OyBsZWZ0OiAzMHB4OyBtYXJnaW4tYm90dG9tOiAtNzBweDsgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW4iPjwvcD4KKworICA8c3BhbiBpZD0iY29uc29sZSI+PC9zcGFu
PgorICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291
cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43MmU2ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3Vy
Y2VzL25vZGVzRnJvbVJlY3QuY3NzCkBAIC0wLDAgKzEsNDQgQEAKK2JvZHkgeworICBtYXJnaW46
IDhweDsKKyAgcGFkZGluZzogMDsKK30KKworaDEsIGRpdiwgcCwgaWZyYW1lIHsKKyAgZGlzcGxh
eTogYmxvY2s7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBib3JkZXI6IDNw
eCBzb2xpZCBibGFjazsKKyAgcGFkZGluZzogMTBweDsKKyAgbWFyZ2luOiAxMHB4OworfQorCisj
c3BhbiB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMzBw
eDsKKyAgYm9yZGVyOiAzcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDEwcHg7CisgIG1hcmdp
bjogMTBweDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisjaWZyYW1lMSB7CisgIGhl
aWdodDogMTAwcHg7CisgIG1hcmdpbi10b3A6IDYwcHg7Cit9CisKKyNwNiB7CisgIGhlaWdodDog
NTBweDsKKyAgbWFyZ2luLXRvcDogMzBweDsKK30KKworI3RyYW5zZiB7CisgIG1hcmdpbi10b3A6
IDYwcHg7CisgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKK30KKworI2RlY2lt
YWwgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGxlZnQ6IDAuNXB4OworICB0b3A6IDUwLjVw
eDsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zy
b21SZWN0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3Qu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmM2YQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0Lmpz
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgKiBBbnRvbmlv
IEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KKyAqKi8KKworZnVuY3Rpb24gY2hlY2soeCwg
eSwgaFBhZGRpbmcsIHZQYWRkaW5nLCBsaXN0KQoreworICAvKgorICAgIE5vZGVMaXN0IG5vZGVz
RnJvbVJlY3QoaW4gbG9uZyB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9uZyB5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9uZyBoUGFkZGluZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGxvbmcgdlBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBib29sZWFuIGlnbm9yZUNsaXBwaW5nKTsKKyAgKi8KKyAgdmFyIG5vZGVzID0g
ZG9jdW1lbnQubm9kZXNGcm9tUmVjdCh4LCB5LCBoUGFkZGluZywgdlBhZGRpbmcsIHRydWUgLyog
aWdub3JlQ2xpcHBpbmcgKi8pOworCisgIGlmIChub2Rlcy5sZW5ndGggIT0gbGlzdC5sZW5ndGgp
IHsKKyAgICB0ZXN0RmFpbGVkKCJEaWZmZXJlbnQgbnVtYmVyIG9mIG5vZGVzIGZvciByZWN0IiAr
CisgICAgICAgICAgICAgICJbIiArIHggKyAiLCIgKyB5ICsgIl0sICIgKworICAgICAgICAgICAg
ICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRkaW5nICsgIl06ICciICsgbGlzdC5sZW5ndGgg
KyAiJyB2cyAnIiArIG5vZGVzLmxlbmd0aCArICInIik7CisgICAgcmV0dXJuOworICB9CisKKyAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgeworICAgIGlmIChub2Rlc1tp
XSAhPSBsaXN0W2ldKSB7CisgICAgICB0ZXN0RmFpbGVkKCJVbmV4cGVjdGVkIG5vZGUgIyIgKyBp
ICsgIiBmb3IgcmVjdCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJd
LCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRkaW5nICsg
Il0iICsgIiAtICIgKyBub2Rlc1tpXSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAg
dGVzdFBhc3NlZCgiQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgIiAgKworICAgICAg
ICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAiICsKKyAgICAgICAgICAgIlsiICsgaFBhZGRp
bmcgKyAiLCIgKyB2UGFkZGluZyArICJdIik7Cit9CisKK2Z1bmN0aW9uIGdldENlbnRlckZvcihl
bGVtZW50KQoreworICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisgIHJldHVybiB7IHggOiBwYXJzZUludCgocmVjdC5sZWZ0ICsgcmVjdC5yaWdodCkgLyAyKSAs
IHkgOiBwYXJzZUludCgocmVjdC50b3AgKyByZWN0LmJvdHRvbSkgLyAyKX07Cit9CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYjRjYjQwLi40NDBiMGU5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBA
CisyMDEwLTA3LTE5IEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNvbT4gLCBBbnRvbmlvIEdv
bWVzICA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRW5oYW5jZSB0aGUgaGl0IHRlc3RpbmcgdG8gdGFrZSBhIHJl
Y3RhbmdsZSBpbnN0ZWFkIG9mIGEgcG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQwMTk3CisKKyAgICAgICAgUGF0Y2ggZXh0ZW5kcyB0aGUgaGl0
IHRlc3Rpbmcgc3lzdGVtIHRvIHdvcmsgY29uc2lkZXJpbmcgYSByZWN0YW5ndWxhciBhcmVhCisg
ICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNhYmxlLiBUaGUg
cHJpbWFyeSBnb2FsIG9mIHRoaXMgY2hhbmdlCisgICAgICAgIGlzIHRvIHByb3ZpZGUgbWVjaGFu
aXNtcyBmb3IgbW9yZSBwcmVjaXNlIHRhcCBhY3Rpb25zIGJ5IHRoZSB1c2Vycy4KKworICAgICAg
ICBUaGUgbWFpbiBpZGVhIGlzIHRvIG1vZGlmeSB0aGUgSGl0VGVzdFJlc3VsdCB0byB0YWtlIGEg
cGFkZGluZy4gVGhlIHBhZGRpbmcKKyAgICAgICAgdGVsbHMgaG93IG11Y2ggdG8gZXhwYW5kIHRo
ZSBzZWFyY2ggcmVjdCBhcm91bmQgYSBzdXBwb3NlZCB0b3VjaCBwb2ludC4gSWYgaXQKKyAgICAg
ICAgaXMgbm9uLXBvc2l0aXZlLCBpdCB3b3JrcyBhcyB0aGUgY3VycmVudCBwb2ludCBiYXNlZCBo
aXQgdGVzdGluZy4gT3RoZXJ3aXNlLCBoaXQKKyAgICAgICAgdGVzdCB3aWxsIGtlZXAgcmVjb3Jk
IG9mIGFsbCBub2RlcyB0aGF0IGludGVyc2VjdCB0aGUgcHJvdmlkZWQgdGVzdCBhcmVhLiBUaGUg
bG9naWMKKyAgICAgICAgd2lsbCBjb250aW51ZSBzZWFyY2hpbmcgd2hlbiBpdCBmaW5kcyBhIGNh
bmRpZGF0ZSB1bnRpbCB0aGUgcmVjdGFuZ2xlIGlzIGZ1bGx5IGVuY2xvc2VkCisgICAgICAgIGJ5
IHRoZSBjYW5kaWRhdGUuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGxpc3Qgb2YgTm9kZSBpbiB0aGUg
ei1vcmRlciB0aGV5IGFyZSBoaXQtdGVzdGVkLgorICAgICAgICBUaGUgY2FsbGVyIHdpbGwgZGVj
aWRlIGhvdyB0byBwcm9jZXNzIHRoZW0uCisKKyAgICAgICAgSW4gb3JkZXIgdG8gZXhwb3NlIHRo
ZSBmdW5jdGlvbmFsaXR5LCB0aGUgcGF0Y2g6CisKKyAgICAgICAgLSBBZGRzIGEgbm9kZXNGcm9t
UmVjdCBtZXRob2QgdG8gdGhlIERvY3VtZW50IGNsYXNzLCBleHBvc2luZyB0aGUgZnVuY2lvbmFs
aXR5CisgICAgICAgIHRvIHRoZSBET00uIE1ldGhvZCByZXR1cm5zIGEgTm9kZUxpc3Qgd2l0aCBh
bGwgbm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhlIGdpdmVuCisgICAgICAgIGhpdC10ZXN0ZWQgYXJl
YS4KKyAgICAgICAgLSBFeHRlbmRzIGhpdFRlc3RSZXN1bHRBdFBvaW50IG1ldGhvZCBvZiB0aGUg
RXZlbnRIYW5kbGVyIHdpdGggYW4gZXh0cmEgJ3BhZGRpbmcnCisgICAgICAgIHBhcmFtZXRlciwg
ZGVmYXVsdGluZyB0byBJbnRTaXplKC0xLCAtMSkuIFRoZSByZWN0LWJhc2VkIGhpdCB0ZXN0IGlz
IHBlcmZvcm1lZCB3aGVuIGEKKyAgICAgICAgbm9uLW5lZ2F0aXZlIHBhZGRpbmcgaXMgcGFzc2Vk
IGluLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbAor
CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3QpOiBUaGlzIG1ldGhv
ZCBleHBvc2VzIHRoZSByZWN0IGJhc2VkIGZ1bmNpb25hbGl0eSB0bworICAgICAgICB0aGUgRE9N
LiBJdCB3b3JrcyBzaW1pbGFybHkgdG8gZWxlbWVudEZyb21Qb2ludCwgaG93ZXZlciByZWNlaXZp
bmcgYSByZWN0YW5ndWxhciBhcmVhCisgICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2lu
dCwgYW5kIHJldHVybmluZyBhIHotaW5kZXggb3JkZXJlZCBsaXN0IG9mIG5vZGVzIChub3QgZWxl
bWVudHMpCisgICAgICAgIHdob3NlIGFyZWEgaW50ZXJzZWN0IHRoZSBoaXQgdGVzdCByZWN0Lgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aWRsOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KTogVGhlIGZ1bmNpb25h
bGl0eSBpcyBhbHNvIGV4cG9zZWQgdGhyb3VnaCB0aGlzCisgICAgICAgIG1ldGhvZC4gUGF0Y2gg
YWRkcyBhIGFkZGl0aW9uYWwgSW50U2l6ZSBwYXJhbWV0ZXIgdG8gd29yayBhcyB0aGUgcGFkZGlu
ZyBhcmVhLCBidWlsZGluZyB1cAorICAgICAgICB0aGUgaGl0IHRlc3QgcmVjdC4KKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVz
dWx0KTogUmVjdCBiYXNlZCBoaXQgdGVzdCBjb25zdHJ1Y3Rvci4gUmVjZWl2ZXMgYQorICAgICAg
ICBwYWRkaW5nIEludFNpemUgYXMgcGFyYW1ldGVyLiBJdCBjYW4gYmUgKDAsMCkuCisgICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0pOiBNb2RpZmllZCB0byBhc3NpZ24g
dGhlIHJhd05vZGVMaXN0IGFzIHdlbGwuCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjphcHBlbmQpOiBNZXJnZSB0byBIaXRUZXN0UmVzdWx0IG9iamVjdHMgaW4gYSB3YXkgdGhhdAor
ICAgICAgICByYXdOb2RlTGlzdCdzIG9mIGJvdGggb2JqZWN0cyBnZXQgYW1lbmRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFkZFJhd05vZGVGb3JSZWdpb25UZXN0KTogQWRk
cyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxpc3Qgb2YKKyAgICAgICAgaGl0IG5vZGVzLgorICAgICAg
ICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0aGUgcGFkZGluZyBhcyBhbiBJbnRTaXplLgorICAg
ICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNSZWdpb25UZXN0KTogUmV0dXJucyBpZiB0
aGUgSGl0VGVzdFJlc3VsdCBpcyByZWN0IGJhc2VkIG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ6OnJhd05vZGVMaXN0KTogUmV0dXJucyB0aGUgbGlzdCBub2RlcyBoaXQu
CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpyZWdpb25Gcm9tUG9pbnQpOiBSZXR1
cm5zIHRoZSBoaXQgdGVzdCBhcmVhIGdpdmVuIHRoZSBoaXQgdGVzdCBwb2ludAorICAgICAgICBh
bmQgcGFkZGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6
IE1ldGhvZCBpcyBtb2RpZmllZCB0byBzdXBwb3J0IHJlY3QgYmFzZWQgaGl0IHRlc3QgZXh0ZW5z
aW9uLgorICAgICAgICBOb3cgaXQgbm90IGp1c3QgY2hlY2tzIGlmIHRoZSBib3VuZGFyeSBvZiB0
aGUgbm9kZSBiZWluZyBoaXQtdGVzdGVkIGNvbnRhaW5zIGEgaGl0IHRlc3QgcG9pbnQsIGJ1dAor
ICAgICAgICBpbnN0ZWFkIGl0IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2YgdGhlIG5vZGUgaW50
ZXJzZWN0cyBhIGhpdCB0ZXN0IHJlY3QuIEl0IGlzIGltcGxlbWVudGVkIHNvCisgICAgICAgIHRo
YXQgdGhlIGNvbW1vbiBjYXNlIChwb2ludCBiYXNlZCBoaXQgdGVzdCkgd29ya3MgYXMgcHJldmlv
dXNseS4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6
IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9v
dDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJX
aWRnZXQ6Om5vZGVBdFBvaW50KTogRGl0dG8uCisKIDIwMTAtMDctMTkgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgppbmRleCA0NWFkODNjLi5iNGE5MTE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTIxNiw3ICsyMTYsNyBAQCBf
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsb3dFTlNfMTVTY3JvbGxEaXJl
Y3Rpb25FTlNfMTdTY3JvbGxHcmFudQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNXNlbmRT
Y3JvbGxFdmVudEV2CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVu
dEVSTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIw
aGFuZGxlVGV4dElucHV0RXZlbnRFUktOU182U3RyaW5nRVBOU181RXZlbnRFYmIKLV9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2ludEVi
Yk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0
VGVzdFJlc3VsdEF0UG9pbnRFUktOU184SW50UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJz
RVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIxaGFuZGxlTW91c2VQ
cmVzc0V2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjIzaGFuZGxlTW91c2VSZWxlYXNlRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVu
dEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjdjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5n
ZWRFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IDljNzQ3ZDMuLmRmYTk5ZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTExOSw2
ICsxMTksNyBAQAogI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5oIgogI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgogI2luY2x1ZGUg
IlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCkBAIC0yMDgsNiArMjA5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
Ly8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKKyNkZWZpbmUgRFVNUF9I
SVRURVNUX1JFU1VMVCAxCiAKIC8vIFRoaXMgYW1vdW50IG9mIHRpbWUgbXVzdCBoYXZlIGVsYXBz
ZWQgYmVmb3JlIHdlIHdpbGwgZXZlbiBjb25zaWRlciBzY2hlZHVsaW5nIGEgbGF5b3V0IHdpdGhv
dXQgYSBkZWxheS4KIC8vIEZJWE1FOiBGb3IgZmFzdGVyIG1hY2hpbmVzIHRoaXMgdmFsdWUgY2Fu
IHJlYWxseSBiZSBsb3dlcmVkIHRvIDIwMC4gIDI1MCBpcyBhZGVxdWF0ZSwgYnV0IGEgbGl0dGxl
IGhpZ2gKQEAgLTEwMDMsNiArMTAwNSw3NSBAQCBLVVJMIERvY3VtZW50OjpiYXNlVVJJKCkgY29u
c3QKICAgICByZXR1cm4gbV9iYXNlVVJMOwogfQogCisjaWYgRFVNUF9ISVRURVNUX1JFU1VMVAor
dm9pZCBzdGF0aWMgZHVtcEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
KQoreworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IGxpc3QgPSByZXN1bHQucmF3Tm9k
ZUxpc3QoKTsKKyAgICBwcmludGYoIiglcykgLSB7eD0lZCB5PSVkIGhQYWRkaW5nPSVkIHZQYWRk
aW5nPSVkfVxuIiwKKyAgICAgICAgICAgX19GVU5DVElPTl9fLCByZXN1bHQucG9pbnQoKS54KCks
IHJlc3VsdC5wb2ludCgpLnkoKSwgcmVzdWx0LnBhZGRpbmcoKS53aWR0aCgpLCByZXN1bHQucGFk
ZGluZygpLmhlaWdodCgpKTsKKyAgICBwcmludGYoIkxpc3Qgc2l6ZTolZFxuIiwgbGlzdC5zaXpl
KCkpOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxO
b2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsKKyAgICBMaXN0SGFzaFNl
dDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsKKyAgICBm
b3IgKCA7IGl0ICE9IGVuZCA7ICsraXQpIHsKKyAgICAgICAgcHJpbnRmKCIlZCkgIiwgKytjb3Vu
dCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSAoKml0KS5nZXQoKTsKKyAgICAgICAgaWYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0lEKCkpCisgICAg
ICAgICAgICAgICAgcHJpbnRmKCJIaXQgZWxlbWVudCA8JXM+LCBpZD0nJXMnXG4iLCBub2RlLT5u
b2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0
QXR0cmlidXRlKCJpZCIpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHByaW50ZigiSGl0IGVsZW1lbnQgPCVzPiwgTk8gSUQhJ1xuIiwg
bm9kZS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChub2Rl
LT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICBwcmludGYoIlRleHQgbm9kZSBoaXQuIENvbnRl
bnQ6JyVzJ1xuIiwgbm9kZS0+dGV4dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJIaXQgbm9kZSA8JXM+XG4iLCBub2RlLT5ub2RlTmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9CisjZW5kaWYK
KworLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUgRE9NIEFQSSBoZXJlIGF0IHNvbWUg
cG9pbnQuIElkZWFzOgorLy8KKy8vICogbWFrZSBpdCByZWNlaXZlIGEgcmVhbCBSZWN0LCBpLmUu
IG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CisvLyAqIG1ha2UgaXQgcmVjZWl2ZSB0aGUgZXhw
YWRpbmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBzZXBhcmF0ZWRseSwKKy8vICAgaS5lLiBub2Rl
c0Zyb21SZWN0KHgsIHQsIHRvcFNpemUsIHJpZ2h0U2l6ZSwgYm90dG9tU2l6ZSwgbGVmdFNpemUp
OworCisvLyBub2Rlc0Zyb21SZWN0CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9k
ZXNGcm9tUmVjdChpbnQgeCwgaW50IHksIGludCBoUGFkZGluZywgaW50IHZQYWRkaW5nLCBib29s
IGlnbm9yZUNsaXBwaW5nKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaGFyZSBjb2RlIGJldHdl
ZW4gdGhpcywgZWxlbWVudEZyb21Qb2ludCBhbmQgY2FyZXRSYW5nZUZyb21Qb2ludC4KKyAgICBp
ZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZVZpZXctPnBh
Z2Vab29tRmFjdG9yKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxv
YXRQb2ludCh4ICogem9vbUZhY3RvciAgKyB2aWV3KCktPnNjcm9sbFgoKSwgeSAqIHpvb21GYWN0
b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworCisgICAgSW50U2l6ZSBwYWRkaW5nKGhQYWRkaW5n
LCB2UGFkZGluZyk7CisgICAgaWYgKCFpZ25vcmVDbGlwcGluZyAmJiAhZnJhbWVWaWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKS5pbnRlcnNlY3RzKEludFJlY3QocG9pbnQsIHBhZGRpbmcpKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgdHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisgICAgaWYgKGlnbm9yZUNsaXBwaW5nKQorICAg
ICAgICB0eXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZzsKKworICAgIEhpdFRl
c3RSZXF1ZXN0IHJlcXVlc3QodHlwZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQs
IHBhZGRpbmcpOworICAgIHJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCBy
ZXN1bHQpOworCisjaWYgRFVNUF9ISVRURVNUX1JFU1VMVAorICAgIGR1bXBIaXRUZXN0UmVzdWx0
KHJlc3VsdCk7CisjZW5kaWYKKworICAgIHJldHVybiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q6OmFk
b3B0KHJlc3VsdC5yYXdOb2RlTGlzdCgpKTsKK30KKwogRWxlbWVudCogRG9jdW1lbnQ6OmVsZW1l
bnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBTaGFyZSBj
b2RlIGJldHdlZW4gdGhpcyBhbmQgY2FyZXRSYW5nZUZyb21Qb2ludC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDA3OGNi
NTMuLmMzZWU5YjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaApAQCAtMzAyLDYgKzMwMiw3IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0OwogICAgIGJvb2wg
Y29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVu
dElkKSB7IHJldHVybiBtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKTsg
fQogCisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChpbnQgeCwgaW50IHks
IGludCBoUGFkZGluZywgaW50IHZQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nKSBjb25zdDsK
ICAgICBFbGVtZW50KiBlbGVtZW50RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICAg
UGFzc1JlZlB0cjxSYW5nZT4gY2FyZXRSYW5nZUZyb21Qb2ludChpbnQgeCwgaW50IHkpOwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwKaW5kZXggOTU5OWQ3Ni4uOTJjOGU2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtMTg2LDYgKzE4Niw4
IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFN0cmluZ1RvPVVuZGVmaW5lZF0gRE9NU3RyaW5nIGRlZmF1bHRDaGFyc2V0OwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01TdHJp
bmcgcmVhZHlTdGF0ZTsKIAorCisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICBub2Rlc0Zyb21S
ZWN0KGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIGhQYWRkaW5nLCBpbiBsb25nIHZQYWRk
aW5nLCBpbiBib29sZWFuIGlnbm9yZUNsaXBwaW5nKTsKICAgICAgICAgRWxlbWVudCAgICAgICAg
ICAgIGVsZW1lbnRGcm9tUG9pbnQoaW4gbG9uZyB4LCBpbiBsb25nIHkpOwogICAgICAgICBSYW5n
ZSAgICAgICAgICAgICAgY2FyZXRSYW5nZUZyb21Qb2ludChpbiBsb25nIHgsIGluIGxvbmcgeSk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggOGUzZjcwZS4uMzQxM2Q0OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTg1OSw5ICs4NTksOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6YWxsb3dESFRN
TERyYWcoYm9vbCYgZmxhZ0RIVE1MLCBib29sJiBmbGFnVUEpIGNvbnN0CiB9CiAjZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICAKLUhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpo
aXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFk
b3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nLCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Ny
b2xsYmFycykKK0hpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGln
bm9yZUNsaXBwaW5nLCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Nyb2xsYmFycywgY29uc3QgSW50
U2l6ZSYgcGFkZGluZykKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7CisgICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOwogICAgIGlmICghbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaW50IGhpdFR5
cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwpA
QCAtODgzLDcgKzg4Myw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVz
dWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsCiAgICAgICAgIEZyYW1l
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7CiAgICAgICAgIElu
dFBvaW50IHdpZGdldFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkueCgpICsgdmlldy0+c2Nyb2xs
WCgpIC0gcmVuZGVyV2lkZ2V0LT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJXaWRnZXQtPnBhZGRpbmdM
ZWZ0KCksIAogICAgICAgICAgICAgcmVzdWx0LmxvY2FsUG9pbnQoKS55KCkgKyB2aWV3LT5zY3Jv
bGxZKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlclRvcCgpIC0gcmVuZGVyV2lkZ2V0LT5wYWRkaW5n
VG9wKCkpOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0
UG9pbnQpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0
UG9pbnQsIHBhZGRpbmcpOwogICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmxheWVy
KCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSksIHdpZGdldEhpdFRlc3RSZXN1bHQp
OwogICAgICAgICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVzdWx0OwogCkBAIC05MDUsNyArOTA1
LDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3
ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBy
ZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAgICAg
ICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRz
KHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFk
b3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFp
bkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9p
bnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3JlQ2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzLCBw
YWRkaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCA0Y2NhODk4Li5lOWE5MjRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xMDUsNyArMTA1LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1
YWQoY29uc3QgRmxvYXRRdWFkJik7CiAKLSAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRB
dFBvaW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdu
b3JlQ2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRI
aXRUZXN0U2Nyb2xsYmFycyk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0QXRQb2lu
dChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNs
aXBwaW5nID0gZmFsc2UsIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250SGl0VGVz
dFNjcm9sbGJhcnMsIGNvbnN0IEludFNpemUmIHBhZGRpbmcgPSBJbnRTaXplKC0xLCAtMSkpOwog
CiAgICAgYm9vbCBtb3VzZVByZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX21vdXNlUHJlc3NlZDsg
fQogICAgIHZvaWQgc2V0TW91c2VQcmVzc2VkKGJvb2wgcHJlc3NlZCkgeyBtX21vdXNlUHJlc3Nl
ZCA9IHByZXNzZWQ7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAppbmRleCAzZTEzNDJmLi5l
Y2QzNmY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC0xMTMsOSArMTEzLDExIEBA
IGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodmlz
aWJsZVRvSGl0VGVzdGluZygpICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCku
Y29udGFpbnMoeCwgeSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0
eSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYg
Ym91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoeCwgeSkpKSB7CiAg
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1
bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCBib3Vu
ZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNTA5MzNjNi4uMjdhOTIz
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTQ5LDYgKzQ5LDE1IEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNv
bnN0IEludFBvaW50JiBwb2ludCkKICAgICA6IG1fcG9pbnQocG9pbnQpCiAgICAgLCBtX2lzT3Zl
cldpZGdldChmYWxzZSkKKyAgICAsIG1faXNSZWdpb25UZXN0KGZhbHNlKQoreworfQorCitIaXRU
ZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50
U2l6ZSYgcGFkZGluZykKKyAgICA6IG1fcG9pbnQocG9pbnQpCisgICAgLCBtX3BhZGRpbmcocGFk
ZGluZykKKyAgICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQorICAgICwgbV9pc1JlZ2lvblRlc3Qo
dHJ1ZSkKIHsKIH0KIApAQCAtNTksNyArNjgsMTAgQEAgSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJl
c3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKICAgICAsIG1fbG9jYWxQb2ludChvdGhl
ci5sb2NhbFBvaW50KCkpCiAgICAgLCBtX2lubmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50
KCkpCiAgICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3JvbGxiYXIoKSkKKyAgICAsIG1fcGFkZGlu
ZyhvdGhlci5wYWRkaW5nKCkpCisgICAgLCBtX3Jhd05vZGVMaXN0KG90aGVyLnJhd05vZGVMaXN0
KCkpCiAgICAgLCBtX2lzT3ZlcldpZGdldChvdGhlci5pc092ZXJXaWRnZXQoKSkKKyAgICAsIG1f
aXNSZWdpb25UZXN0KG90aGVyLmlzUmVnaW9uVGVzdCgpKQogewogfQogCkBAIC03NSw3ICs4Nywx
MCBAQCBIaXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVz
dFJlc3VsdCYgb3RoZXIpCiAgICAgbV9sb2NhbFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOwog
ICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgpOwogICAgIG1fc2Nyb2xs
YmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CisgICAgbV9wYWRkaW5nID0gb3RoZXIucGFkZGluZygp
OworICAgIG1fcmF3Tm9kZUxpc3QgPSBvdGhlci5yYXdOb2RlTGlzdCgpOwogICAgIG1faXNPdmVy
V2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CisgICAgbV9pc1JlZ2lvblRlc3QgPSBvdGhl
ci5pc1JlZ2lvblRlc3QoKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTM2Miw0ICszNzcs
MzYgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCit2
b2lkIEhpdFRlc3RSZXN1bHQ6OmFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKK3sK
KyAgICBBU1NFUlQoaXNSZWdpb25UZXN0KCkpOworCisgICAgaWYgKCFtX2lubmVyTm9kZSAmJiBv
dGhlci5pbm5lck5vZGUoKSkgeworICAgICAgICBtX2lubmVyTm9kZSA9IG90aGVyLmlubmVyTm9k
ZSgpOworICAgICAgICBtX2lubmVyTm9uU2hhcmVkTm9kZSA9IG90aGVyLmlubmVyTm9uU2hhcmVk
Tm9kZSgpOworICAgICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7CisgICAg
ICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgpOworICAgICAgICBtX3Nj
cm9sbGJhciA9IG90aGVyLnNjcm9sbGJhcigpOworICAgICAgICBtX2lzT3ZlcldpZGdldCA9IG90
aGVyLmlzT3ZlcldpZGdldCgpOworICAgIH0KKworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0
cjxOb2RlPiA+JiBsaXN0ID0gb3RoZXIucmF3Tm9kZUxpc3QoKTsKKyAgICBMaXN0SGFzaFNldDxS
ZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGxpc3QuZW5kKCk7CisgICAgZm9y
IChMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJl
Z2luKCk7IGl0ICE9IGxhc3Q7ICsraXQpCisgICAgICAgIG1fcmF3Tm9kZUxpc3QuYWRkKGl0LT5n
ZXQoKSk7Cit9CisKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6YWRkUmF3Tm9kZUZvclJlZ2lvblRlc3Qo
Tm9kZSogbm9kZSwgaW50IHgsIGludCB5LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFT
U0VSVChpc1JlZ2lvblRlc3QoKSk7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgbm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIG1fcmF3
Tm9kZUxpc3QuYWRkKG5vZGUpOworCisgICAgcmV0dXJuICFyZWN0LmNvbnRhaW5zKHJlZ2lvbkZy
b21Qb2ludCh4LCB5KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuaAppbmRleCBkMTkwNmJhLi5hMDljN2VjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5oCkBAIC0yMSw3ICsyMSwxMCBAQAogI2RlZmluZSBIaXRUZXN0UmVzdWx0X2gKIAog
I2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RI
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCw2ICs0MSw5IEBAIGNsYXNzIFN0cmluZzsKIGNsYXNzIEhpdFRlc3RSZXN1bHQgewog
cHVibGljOgogICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmKTsKKyAgICAvLyBQYXNz
IGEgbm9uLW5lZ2F0aXZlIEludFNpemUgdmFsdWUgYXMgcGFkZGluZyB0byBwZXJmb3JtIGEgcmVj
dC1iYXNlZAorICAgIC8vIGhpdCB0ZXN0LgorICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9p
bnQmLCBjb25zdCBJbnRTaXplJiBwYWRkaW5nKTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhp
dFRlc3RSZXN1bHQmKTsKICAgICB+SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQm
IG9wZXJhdG9yPShjb25zdCBIaXRUZXN0UmVzdWx0Jik7CkBAIC00OSw2ICs1NSwxMSBAQCBwdWJs
aWM6CiAgICAgRWxlbWVudCogVVJMRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXJVUkxF
bGVtZW50LmdldCgpOyB9CiAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbGJhci5nZXQoKTsgfQogICAgIGJvb2wgaXNPdmVyV2lkZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc092ZXJXaWRnZXQ7IH0KKyAgICBJbnRTaXplIHBhZGRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3BhZGRpbmc7IH0KKyAgICBib29sIGlzUmVnaW9uVGVzdCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNSZWdpb25UZXN0ICYmIGhhc1ZhbGlkUGFkZGluZygpOyB9CisgICAgSW50UmVjdCByZWdp
b25Gcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdDsKKyAgICBJbnRSZWN0IHJlZ2lvbkZyb21Q
b2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0
cjxOb2RlPiA+JiByYXdOb2RlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3Tm9kZUxpc3Q7IH0K
IAogICAgIHZvaWQgc2V0VG9Ob25TaGFkb3dBbmNlc3RvcigpOwogCkBAIC03Niw3ICs4NywxNSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZSgpIGNvbnN0OwogCisgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyByZWdpb24gdGVzdCBhbmQgdGhlIGhp
dCB0ZXN0IG5lZWRzIHRvIGNvbnRpbnVlIGFzIHRoZSByZWdpb24gaXMgbm90IGZ1bGx5CisgICAg
Ly8gY292ZXJlZCBieSB0aGUgcmVjdC4KKyAgICBib29sIGFkZFJhd05vZGVGb3JSZWdpb25UZXN0
KE5vZGUqLCBpbnQgeCwgaW50IHksIGNvbnN0IEludFJlY3QmIHJlY3QgPSBJbnRSZWN0KCkpOwor
CiBwcml2YXRlOgorCisgICAgaW5saW5lIGJvb2wgaGFzVmFsaWRQYWRkaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWRkaW5nLndpZHRoKCkgPj0gMCAmJiBtX3BhZGRpbmcuaGVpZ2h0KCkgPj0gMDsg
fQorCiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX2lu
bmVyTm9uU2hhcmVkTm9kZTsKICAgICBJbnRQb2ludCBtX3BvaW50OwpAQCAtODQsOSArMTAzLDIy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hl
cmUgaW5zaWRlIHRoZSByZW5kZXJlciB3ZSBoaXQgb24gc3Vic2VxdWVudCBvcGVyYXRpb25zLgog
ICAgIFJlZlB0cjxFbGVtZW50PiBtX2lubmVyVVJMRWxlbWVudDsKICAgICBSZWZQdHI8U2Nyb2xs
YmFyPiBtX3Njcm9sbGJhcjsKKyAgICBJbnRTaXplIG1fcGFkZGluZzsKKyAgICBMaXN0SGFzaFNl
dDxSZWZQdHI8Tm9kZT4gPiBtX3Jhd05vZGVMaXN0OwogICAgIGJvb2wgbV9pc092ZXJXaWRnZXQ7
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgb3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUg
Ym9yZGVyL3BhZGRpbmcgYXJlYSBvZiBhIFJlbmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCisgICAg
Ym9vbCBtX2lzUmVnaW9uVGVzdDsKIH07CiAKK2lubGluZSBJbnRSZWN0IEhpdFRlc3RSZXN1bHQ6
OnJlZ2lvbkZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlZ2lv
bkZyb21Qb2ludChJbnRQb2ludCh4LCB5KSk7Cit9CisKK2lubGluZSBJbnRSZWN0IEhpdFRlc3RS
ZXN1bHQ6OnJlZ2lvbkZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSW50UmVjdChwLngoKSAtIG1fcGFkZGluZy53aWR0aCgpLCBwLnkoKSAtIG1fcGFkZGlu
Zy5oZWlnaHQoKSwgMiAqIG1fcGFkZGluZy53aWR0aCgpICsgMSwgMiAqIG1fcGFkZGluZy5oZWln
aHQoKSArIDEpOworfQorCiBTdHJpbmcgZGlzcGxheVN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25z
dCBOb2RlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggZmJmZTU2ZC4uNGU2YjZiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKQEAgLTYxMSw3ICs2MTEsNyBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogewog
ICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc2libGVPdmVyZmxvd1JlY3QoKSk7CiAgICAgb3Zl
cmZsb3dSZWN0Lm1vdmUodHgsIHR5KTsKLSAgICBpZiAoIW92ZXJmbG93UmVjdC5jb250YWlucyh4
LCB5KSkKKyAgICBpZiAoIW92ZXJmbG93UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9t
UG9pbnQoeCwgeSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGls
ZHJlbiBmaXJzdC4KQEAgLTYyNCw5ICs2MjQsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUK
IAogICAgIC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMuCiAgICAgSW50UmVjdCByZWN0KHR4ICsgbV94
LCB0eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoeCwgeSkpKSB7
CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2lu
dCh4IC0gdHgsIHkgLSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3
YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkUmF3Tm9kZUZvclJlZ2lvblRlc3QocmVu
ZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IDg1NDdmZTAuLjFlYTIwYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCkBAIC0yODcsOSArMjg3LDEwIEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGluCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1f
d2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlv
biAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAg
IGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludCh4LCB5KSkpIHsK
ICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50
KHggLSB0eCwgeSAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJl
c3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAxZTUxYmMxLi4xNTQ5ZWZhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zNzQ3LDE5ICszNzQ3LDIxIEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhp
bmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzaWJsZU92ZXJmbG93
UmVjdCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIGlmICgh
b3ZlcmZsb3dCb3guY29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5p
bnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoX3gsIF95KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RC
bG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tn
cm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94LCBfeSwgdHgsIHR5
KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0
eCwgX3kgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gVE9ETzogaXNQ
b2ludEluT3ZlcmZsb3dDb250cm9sKCkgZG9lc24ndCBoYW5kbGUgcmVnaW9uIHRlc3QgeWV0Lgor
ICAgICAgICBpZiAoIXJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChub2RlKCksIF94LCBf
eSkpCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUg
Y2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAgYm9vbCB1c2VP
dmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXIo
KTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VPdmVyZmxvd0Ns
aXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xp
cCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95KSA6IG92ZXJmbG93
Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBib29sIGNoZWNrQ2hpbGRy
ZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVjdCh0eCwg
dHkpLmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludChfeCwgX3kpKSA6IG92ZXJmbG93
Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoX3gsIF95
KSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2Nl
bmRhbnRzIGZpcnN0LgogICAgICAgICBpbnQgc2Nyb2xsZWRYID0gdHg7CkBAIC0zODA3LDkgKzM4
MDksMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3Vy
IGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3Jv
dW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAg
ICAgICAgIEludFJlY3QgYm91bmRzUmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAg
ICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94
LCBfeSkpIHsKKyAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2ludChfeCwgX3kpKSkgewogICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRk
UmF3Tm9kZUZvclJlZ2lvblRlc3Qobm9kZSgpLCBfeCwgX3ksIGJvdW5kc1JlY3QpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zODM0LDEzICsz
ODM3LDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9
IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKGNvbFJlY3QuY29udGFpbnMoeCwgeSkpIHsKKyAgICAgICAgaWYgKGNv
bFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHgsIHkpKSkgewogICAgICAg
ICAgICAgLy8gVGhlIHBvaW50IGlzIGluc2lkZSB0aGlzIGNvbHVtbi4KICAgICAgICAgICAgIC8v
IEFkanVzdCB0eCBhbmQgdHkgdG8gY2hhbmdlIHdoZXJlIHdlIGhpdCB0ZXN0LgogICAgICAgICAK
ICAgICAgICAgICAgIGludCBmaW5hbFggPSB0eCArIGN1cnJYT2Zmc2V0OwogICAgICAgICAgICAg
aW50IGZpbmFsWSA9IHR5ICsgY3VycllPZmZzZXQ7Ci0gICAgICAgICAgICByZXR1cm4gaGl0VGVz
dENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RB
Y3Rpb24pOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSAmJiAhY29sUmVj
dC5jb250YWlucyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHgsIHkpKSkKKyAgICAgICAgICAgICAg
ICBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwg
aGl0VGVzdEFjdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBo
aXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
aW5kZXggMjAyMDAwMy4uNjc3NjY3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTU0LDkgKzU1NSwxMSBAQCBib29sIFJlbmRlckJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdAogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3Nl
IGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9y
ZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBp
bWFnZXMpLgotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYWN0aW9uID09IEhpdFRl
c3RGb3JlZ3JvdW5kICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkuY29udGFp
bnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0
eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYg
YWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1
bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZFJhd05vZGVGb3JSZWdpb25UZXN0
KG5vZGUoKSwgeFBvcywgeVBvcywgYm91bmRzUmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
aW5kZXggOGU3ZDE2NS4uNzhmZmRiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAt
Mzc3LDEwICszNzcsMTAgQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgp
IGNvbnN0CiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBIaXRUZXN0UmVz
dWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJl
c3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgYm9vbCBpbnNpZGUg
PSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJlc3VsdCwgeCwgeSwg
dHgsIHR5LCBoaXRUZXN0QWN0aW9uKTsKIAotICAgIGlmIChpbnNpZGUgJiYgbm9kZSgpKSB7Cisg
ICAgaWYgKHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAgICAgICAgIGlmIChI
VE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAgICAgSW50UmVjdCBj
b250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IHpvb20gPSBz
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CkBAIC0zOTEsNiArMzkxLDggQEAgYm9vbCBSZW5kZXJJ
bWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3UKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICghaW5zaWRlICYmIHJlc3Vs
dC5pc1JlZ2lvblRlc3QoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAg
ICBpZiAoaW5zaWRlKQogICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgIHJldHVybiBp
bnNpZGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDZmNWU4ZS4uNzQ5NThiOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjc0Niw3ICsyNzQ2LDcgQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgICAgICBJ
bnRSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXllciwgdXNlVGVtcG9y
YXJ5Q2xpcFJlY3RzKTsKICAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0ZXN0IHRoZSBlbmNs
b3NpbmcgY2xpcCBub3cuCi0gICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmNvbnRhaW5zKGhpdFRl
c3RQb2ludCkpCisgICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMocmVzdWx0LnJl
Z2lvbkZyb21Qb2ludChoaXRUZXN0UG9pbnQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogCkBAIC0yODU5LDE3ICsyODU5LDIxIEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBj
b250CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9z
IGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYg
KGZnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
eworICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KGhpdFRl
c3RQb2ludCkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVz
dCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRv
IGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KLSAgICAgICAg
SGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgSGl0VGVz
dFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFkZGluZygpKTsKICAg
ICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5k
cywgaGl0VGVzdFBvaW50LCBIaXRUZXN0RGVzY2VuZGFudHMpICYmCiAgICAgICAgICAgICBpc0hp
dENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5l
ZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3Vs
dDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYgKCFkZXB0aFNvcnRE
ZXNjZW5kYW50cykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIC8v
IEZvcmVncm91bmQgY2FuIGRlcHRoLXNvcnQgd2l0aCBkZXNjZW5kYW50IGxheWVycywgc28ga2Vl
cCB0aGlzIGFzIGEgY2FuZGlkYXRlLgogICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlz
OwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVnaW9uVGVzdCgpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBO
b3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCkBAIC0yODg1LDEzICsyODg5
LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQog
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0LmNvbnRhaW5z
KGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAgIEhpdFRl
c3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgaWYgKGJnUmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWdpb25Gcm9tUG9pbnQoaGl0VGVzdFBvaW50KSkgJiYgaXNTZWxmUGFp
bnRpbmdMYXllcigpKSB7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQu
cG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMo
cmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVzdFNl
bGYpICYmCiAgICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZv
ckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWdp
b25UZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZXN1
bHQuaXNSZWdpb25UZXN0KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQp
OwogICAgIH0KICAgICAKICAgICByZXR1cm4gMDsKQEAgLTI5MDMsOCArMjkxMSw5IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5k
cy54KCkgLSByZW5kZXJCb3hYKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJC
b3VuZHMueSgpIC0gcmVuZGVyQm94WSgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
aXRUZXN0RmlsdGVyKSkgewotICAgICAgICAvLyBJdCdzIHdyb25nIHRvIHNldCBpbm5lck5vZGUs
IGJ1dCB0aGVuIGNsYWltIHRoYXQgeW91IGRpZG4ndCBoaXQgYW55dGhpbmcuCi0gICAgICAgIEFT
U0VSVCghcmVzdWx0LmlubmVyTm9kZSgpKTsKKyAgICAgICAgLy8gSXQncyB3cm9uZyB0byBzZXQg
aW5uZXJOb2RlLCBidXQgdGhlbiBjbGFpbSB0aGF0IHlvdSBkaWRuJ3QgaGl0IGFueXRoaW5nLCB1
bmxlc3MgaXQgaXMKKyAgICAgICAgLy8gYSByZWdpb24gdGVzdC4KKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuaW5uZXJOb2RlKCkgfHwgKHJlc3VsdC5pc1JlZ2lvblRlc3QoKSAmJiByZXN1bHQucmF3
Tm9kZUxpc3QoKS5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MjkzOCwxNCArMjk0NywyMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0
KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0LCBSZW5kZXJMYXllciogcgogICAgIGZvciAoaW50
IGkgPSBsaXN0LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBSZW5kZXJMYXll
ciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5
ZXIgPSAwOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkp
OworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3Vs
dC5wYWRkaW5nKCkpOwogICAgICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAg
ICAgICAgICAgIGhpdExheWVyID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXll
ciwgcm9vdExheWVyLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBv
aW50LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExh
eWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50
LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CisKKyAgICAg
ICAgLy8gSWYgaXQgYSByZWdpb24gdGVzdCwgd2UgY2FuIHNhZmVseSBhcHBlbmQgdGhlIHRlbXBv
cmFyeSByZXN1bHQgc2luY2UgaXQgbWlnaHQgaGFkIGhpdAorICAgICAgICAvLyBub2RlcyBidXQg
bm90IG5lY2Vzc2VyaWx5IGhhZCBoaXRMYXllciBzZXQuCisgICAgICAgIGlmIChyZXN1bHQuaXNS
ZWdpb25UZXN0KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworCiAg
ICAgICAgIGlmIChpc0hpdENhbmRpZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMs
IHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgICAgICByZXN1
bHRMYXllciA9IGhpdExheWVyOwotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LmlzUmVnaW9uVGVzdCgpKQorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRz
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDA1LDcgKzMwMjEsNyBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhSZW5k
ZXJMYXllciogY2hpbGRMYXllciwgUmVuZAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3Qo
aGl0VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsK
ICAgICAgICAgCi0gICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxD
bGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpKSB7CisgICAgICAgIGlmICghbG9jYWxDbGlw
UmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWdpb25G
cm9tUG9pbnQoaGl0VGVzdFBvaW50KSkpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBoaXRM
YXllciA9IDA7CiAgICAgICAgICAgICBpZiAoIWNvbHVtbkluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0gdG8gY2hhbmdlIHdoZXJlIHRoZSBs
YXllciBwYWludHMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94
TGlzdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKaW5kZXgg
MmQyNzc0OC4uMGM1OTRkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpbmVCb3hMaXN0LmgiCiAKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAi
SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVu
ZGVySW5saW5lLmgiCkBAIC0yNDUsMTQgKzI0NiwxNCBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0
OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGl0VGVzdFJl
cQogICAgIC8vIGNvbnRhaW4gdGhlIHBvaW50LiAgVGhpcyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1
aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFueSBsaW5lcy4KICAgICAvLyBG
SVhNRTogVGhpcyBjaGVjayBpcyBmbGF3ZWQgaW4gdGhlIGZvbGxvd2luZyBleHRyZW1lbHkgb2Jz
Y3VyZSB3YXk6CiAgICAgLy8gaWYgc29tZSBsaW5lIGluIHRoZSBtaWRkbGUgaGFzIGEgaHVnZSBv
dmVyZmxvdywgaXQgbWlnaHQgYWN0dWFsbHkgZXh0ZW5kIGJlbG93IHRoZSBsYXN0IGxpbmUuCi0g
ICAgaWYgKCh5ID49IHR5ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSkgfHwgKHkgPCB0eSArIGZpcnN0TGluZUJveCgpLT5yb290KCktPnRvcFZpc2libGVP
dmVyZmxvdygpKSkKKyAgICBpZiAoKHkgLSByZXN1bHQucGFkZGluZygpLmhlaWdodCgpID49IHR5
ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgfHwgKHkg
KyByZXN1bHQucGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBmaXJzdExpbmVCb3goKS0+cm9vdCgp
LT50b3BWaXNpYmxlT3ZlcmZsb3coKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IFNlZSBpZiBvdXIgcm9vdCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4gIElmIHNvLCB0aGVuIHdl
IGhpdCB0ZXN0CiAgICAgLy8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0IGJveGVzIGNhbiBlYXNp
bHkgb3ZlcmxhcCwgc28gd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMKICAgICAvLyBiYXNl
ZCBvZmYgcG9zaXRpb25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIgbGFzdCBsaW5lIGJv
eC4KICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkgewotICAgICAgICBpZiAoeSA+PSB0eSArIGN1cnIt
PnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5i
b3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoeSArIHJlc3VsdC5wYWRkaW5n
KCkuaGVpZ2h0KCkgPj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpICYm
IHkgLSByZXN1bHQucGFkZGluZygpLmhlaWdodCgpIDwgdHkgKyBjdXJyLT5yb290KCktPmJvdHRv
bVZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsKICAgICAgICAgICAgIGlm
IChpbnNpZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCmluZGV4IDc3MTM0NDUuLjhlOWI0YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzE5LDYgKzMyMCw4IEBAIGJv
b2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0RmxvYXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24pKSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9jYWwgcG9pbnQgaXMgcmVsYXRp
dmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOworICAgICAgICAgICAgLy8gVE9ETzogbm9k
ZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlZ2lvbiB0ZXN0IHlldC4KKyAgICAgICAg
ICAgIHJlc3VsdC5hZGRSYXdOb2RlRm9yUmVnaW9uVGVzdChjaGlsZC0+bm9kZSgpLCBfeCwgX3kp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKaW5kZXggZmQ5MDk5MC4uNjU0N2ZlYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRml4ZWRUYWJsZUxheW91dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMTEzNSw3ICsx
MTM2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICB0eSArPSB5KCk7CiAKICAgICAv
LyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZs
b3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1
bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3Vz
U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVy
Qm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0
aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSAmJgogICAgICAgICAgICAgICAgIGNoaWxkLT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQb3MsIHR4LCB0eSwgYWN0aW9uKSkg
ewpAQCAtMTE0Niw5ICsxMTQ3LDExIEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgfQog
CiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LgotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBo
ZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3Qg
PSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlv
biA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVnaW9uRnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZFJhd05vZGVGb3JSZWdp
b25UZXN0KG5vZGUoKSwgeFBvcywgeVBvcywgYm91bmRzUmVjdCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBiMjVkM2U2Li5iOWI3MzU5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTExNTIsNyArMTE1Myw3
IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgdHggKz0geCgpOwogICAgIHR5ICs9IHko
KTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwg
dHkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAh
b3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlZ2lvbkZyb21Qb2lu
dCh4UG9zLCB5UG9zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IDZmYjI3NDku
LjkxNTJjZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMzk0LDcgKzM5NCw3
IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzCiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJSZXBs
YWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbik7
CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUgd2lk
Z2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4KLSAg
ICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUo
KSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWdpb25UZXN0KCkpICYmICFoYWRSZXN1
bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKICAgICAgICAgcmVzdWx0LnNldElz
T3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJlc3VsdC5sb2NhbFBvaW50KCkp
KTsKICAgICByZXR1cm4gaW5zaWRlOwogfQotLSAKMS43LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62175</attachid>
            <date>2010-07-21 06:31:06 -0700</date>
            <delta_ts>2010-07-22 10:43:38 -0700</delta_ts>
            <desc>patch v4 - feature + tests</desc>
            <filename>0001-2010-07-21-Grace-Kloba--Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>56304</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBjNWFhZjNjNTRiYWFmNGI3Mzg1MzU4MWY5ODU4ZjE5NDBmNDYwOWU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMjEgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFBhdGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5
c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQogICAgICAgIGFzIGlu
cHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNhYmxlLiBUaGUgcHJpbWFyeSBnb2Fs
IG9mIHRoaXMgY2hhbmdlCiAgICAgICAgaXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3Jl
IHByZWNpc2UgdGFwIGFjdGlvbnMgYnkgdGhlIHVzZXJzLgoKICAgICAgICBUaGUgbWFpbiBpZGVh
IGlzIHRvIG1vZGlmeSB0aGUgSGl0VGVzdFJlc3VsdCB0byB0YWtlIGEgcGFkZGluZy4gVGhlIHBh
ZGRpbmcKICAgICAgICB0ZWxscyBob3cgbXVjaCB0byBleHBhbmQgdGhlIHNlYXJjaCByZWN0IGFy
b3VuZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50LiBJZiBpdAogICAgICAgIGlzIG5vbi1wb3NpdGl2
ZSwgaXQgd29ya3MgYXMgdGhlIGN1cnJlbnQgcG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcuIE90aGVy
d2lzZSwgaGl0CiAgICAgICAgdGVzdCB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbCBub2RlcyB0aGF0
IGludGVyc2VjdCB0aGUgcHJvdmlkZWQgdGVzdCBhcmVhLiBUaGUgbG9naWMKICAgICAgICB3aWxs
IGNvbnRpbnVlIHNlYXJjaGluZyB3aGVuIGl0IGZpbmRzIGEgY2FuZGlkYXRlIHVudGlsIHRoZSBy
ZWN0YW5nbGUgaXMgZnVsbHkgZW5jbG9zZWQKICAgICAgICBieSB0aGUgY2FuZGlkYXRlLiBUaGUg
cmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleSBhcmUgaGl0
LXRlc3RlZC4KICAgICAgICBUaGUgY2FsbGVyIHdpbGwgZGVjaWRlIGhvdyB0byBwcm9jZXNzIHRo
ZW0uCgogICAgICAgIEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBh
dGNoOgoKICAgICAgICAtIEFkZHMgYSBub2Rlc0Zyb21SZWN0IG1ldGhvZCB0byB0aGUgRG9jdW1l
bnQgY2xhc3MsIGV4cG9zaW5nIHRoZSBmdW5jaW9uYWxpdHkKICAgICAgICB0byB0aGUgRE9NLiBN
ZXRob2QgcmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRo
ZSBnaXZlbgogICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KICAgICAgICAtIEV4dGVuZHMgaGl0VGVz
dFJlc3VsdEF0UG9pbnQgbWV0aG9kIG9mIHRoZSBFdmVudEhhbmRsZXIgd2l0aCBhbiBleHRyYSAn
cGFkZGluZycKICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgtMSwgLTEp
LiBUaGUgcmVjdC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCiAgICAgICAgbm9u
LW5lZ2F0aXZlIHBhZGRpbmcgaXMgcGFzc2VkIGluLgoKICAgICAgICBUZXN0OiBmYXN0L2RvbS9u
b2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKCiAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgogICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVz
RnJvbVJlY3QpOiBUaGlzIG1ldGhvZCBleHBvc2VzIHRoZSByZWN0IGJhc2VkIGZ1bmNpb25hbGl0
eSB0bwogICAgICAgIHRoZSBET00uIEl0IHdvcmtzIHNpbWlsYXJseSB0byBlbGVtZW50RnJvbVBv
aW50LCBob3dldmVyIHJlY2VpdmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKICAgICAgICBhcyBpbnB1
dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQgbGlz
dCBvZiBub2RlcyAobm90IGVsZW1lbnRzKQogICAgICAgIHdob3NlIGFyZWEgaW50ZXJzZWN0IHRo
ZSBoaXQgdGVzdCByZWN0LgogICAgICAgICogZG9tL0RvY3VtZW50Lmg6IERpdHRvLgogICAgICAg
ICogZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCiAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQp
OiBUaGUgZnVuY2lvbmFsaXR5IGlzIGFsc28gZXhwb3NlZCB0aHJvdWdoIHRoaXMKICAgICAgICBt
ZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdvcmsg
YXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKICAgICAgICB0aGUgaGl0IHRlc3QgcmVj
dC4KICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IERpdHRvLgogICAgICAgICogcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpI
aXRUZXN0UmVzdWx0KTogUmVjdCBiYXNlZCBoaXQgdGVzdCBjb25zdHJ1Y3Rvci4gUmVjZWl2ZXMg
YQogICAgICAgIHBhZGRpbmcgSW50U2l6ZSBhcyBwYXJhbWV0ZXIuIEl0IGNhbiBiZSAoMCwwKS4K
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZpZWQgdG8g
YXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMgd2VsbC4KICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6YXBwZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJlc3VsdCBvYmplY3Rz
IGluIGEgd2F5IHRoYXQgdGhlCiAgICAgICAgbGlzdCBub2RlJ3Mgb2YgYm90aCBvYmplY3RzIGdl
dCBhbWVuZGVkLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxpc3Qgb2YKICAgICAg
ICBoaXQgbm9kZXMuCiAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgogICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0aGUgcGFkZGluZyBh
cyBhbiBJbnRTaXplLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc1JlY3RCYXNl
ZFRlc3QpOiBSZXR1cm5zIGlmIHRoZSBIaXRUZXN0UmVzdWx0IGlzIHJlY3QgYmFzZWQgb3Igbm90
LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjoucmVjdEJhc2VkVGVzdFJlc3VsdCk6
IFJldHVybnMgdGhlIGxpc3Qgbm9kZXMgaGl0LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJucyB0aGUgaGl0IHRlc3QgcmVjdCBnaXZlbiB0aGUg
aGl0IHRlc3QgcG9pbnQKICAgICAgICBhbmQgcGFkZGluZy4KICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5
ZXIpOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgogICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKToKICAgICAg
ICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lz
Qm94Ojpub2RlQXRQb2ludCk6IE1ldGhvZCBpcyBtb2RpZmllZCB0byBzdXBwb3J0IHJlY3QgYmFz
ZWQgaGl0IHRlc3QgZXh0ZW5zaW9uLgogICAgICAgIE5vdyBpdCBub3QganVzdCBjaGVja3MgaWYg
dGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGJlaW5nIGhpdC10ZXN0ZWQgY29udGFpbnMgYSBoaXQg
dGVzdCBwb2ludCwgYnV0CiAgICAgICAgaW5zdGVhZCBpdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5
IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBoaXQgdGVzdCByZWN0LiBJdCBpcyBpbXBsZW1lbnRl
ZCBzbwogICAgICAgIHRoYXQgdGhlIGNvbW1vbiBjYXNlIChwb2ludCBiYXNlZCBoaXQgdGVzdCkg
d29ya3MgYXMgcHJldmlvdXNseS4KICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4K
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2lu
dCk6IERpdHRvLgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMp
OiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgogICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9v
dDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgog
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CiAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6
Om5vZGVBdFBvaW50KTogRGl0dG8uCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsrCiAuLi4vZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCB8ICAgIDEgKwogLi4uL2Zhc3QvZG9tL25vZGVzRnJv
bVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0ICAgICAgfCAgIDI2ICsrKysrKwogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sICAgICAgfCAgIDg5ICsrKysrKysrKysr
KysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5j
c3MgICB8ICAgNDQgKysrKysrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuanMgICAgfCAgIDQ0ICsrKysrKysrKysKIFdlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4OCArKysrKysrKysrKysrKysrKysr
CiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKy0KIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICA2OSArKysrKysrKysrKysrKysKIFdlYkNvcmUvZG9tL0RvY3VtZW50LmggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysKIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKy0KIFdlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9yZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBXZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCAgICAgICAgICAgICAgICB8ICAgNTEgKysrKysr
KysrKysKIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaCAgICAgICAgICAgICAgICAg
IHwgICA0NiArKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCAg
ICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwICAgICAgICAgICAgICAgIHwgICAgNSArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwICAgICAgICAgICAgICAgICAgfCAgIDIwICsrKy0tCiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsrKysrKyst
LS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCAgICAgICAgICAgIHwg
ICAgNyArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgICAgICAgICAgICAg
ICAgfCAgICAzICsKIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCAgICAgICAgICAg
ICAgICAgIHwgICAgOSArKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHAgICAgICAgICAgIHwgICAgMyArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cCAgICAgICAgICAgICAgICAgfCAgICAyICstCiAyNyBmaWxlcyBjaGFuZ2VkLCA1NjggaW5zZXJ0
aW9ucygrKSwgNDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVj
dC5jc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMv
bm9kZXNGcm9tUmVjdC5qcwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5OTQyNWFhLi40YzExMjc0IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTAtMDctMjEgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3Jn
PiAsIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhhbmNlIHRoZSBoaXQgdGVzdGluZyB0byB0
YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcKKworICAgICAgICAqIGZhc3QvZG9tL25v
ZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTIwICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAppbmRleCA5YjA5OTg0Li5jOTc3MzQxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQKQEAgLTYyOCw2ICs2MjgsNyBAQCB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBl
LmlzU2FtZU5vZGUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pc1N1cHBv
cnRlZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmxvb2t1cE5hbWVzcGFj
ZVVSSSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmxvb2t1cFByZWZpeCBb
ZnVuY3Rpb25dCit3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLm5vZGVzRnJvbVJlY3QgW2Z1bmN0
aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5ub3JtYWxpemUgW2Z1bmN0aW9uXQogd2lu
ZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRFbmFibGVkIFtmdW5jdGlvbl0KIHdp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucXVlcnlDb21tYW5kSW5kZXRlcm0gW2Z1bmN0aW9uXQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWYxZWEzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNiBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFs1Myw3MV0sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0
IFs1Myw3MV0sIFsxMCwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBb
NTMsNzFdLCBbMCwxMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUz
LDcxXSwgWzEwLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUy
LDEwNV0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUy
LDEwNV0sIFsxMCwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUy
LDEwNV0sIFsxMCwxMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1
MywxOTNdLCBbMCwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUz
LDE5M10sIFsyMCwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUz
LDE5M10sIFswLDIwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0
LDE4M10sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQs
MTgzXSwgWzAsMV0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwx
ODNdLCBbMSwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4
M10sIFsxLDFdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBd
LCBbMCwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwg
WzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBb
MCwxMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFsx
MCwxMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFsw
LDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMCwx
MF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFsxMCww
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzEwLDEw
XQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2lj
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0MDY0YQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApAQCAtMCww
ICsxLDg5IEBACis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+RG9jdW1lbnQ6Om5vZGVzRnJvbVJl
Y3QgdGVzdCAtIGJ1ZyA0MDE5NzwvdGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+IEBp
bXBvcnQgInJlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcyI7IDwvc3R5bGU+CisgIDxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5
cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAg
IHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICB9CisKKyAgICAgIHZhciBlID0ge307CisKKyAg
ICAgIC8vIFNldCB1cCBzaG9ydGN1dCBhY2Nlc3MgdG8gZWxlbWVudHMKKyAgICAgIGVbJ2h0bWwn
XSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07CisgICAgICBbJ2gx
JywgJ2QxJywgJ2QyJywgJ3AxJywgJ3AyJywgJ3AzJywgJ3A0JywgJ3A1JywgJ3NwYW4nLCAnYm9k
eSddLmZvckVhY2goZnVuY3Rpb24oYSkgeworICAgICAgICBlW2FdID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoYSk7CisgICAgICB9KTsKKworICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOwor
CisgICAgICBjaGVjayg1MywgNzEsIDAsIDAsIFtlLmJvZHldKTsKKyAgICAgIGNoZWNrKDUzLCA3
MSwgMTAsIDAsIFtlLnAzLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDUzLCA3MSwgMCwgMTAsIFtl
LmQxLCBlLmgxLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDUzLCA3MSwgMTAsIDEwLCBbZS5wMywg
ZS5kMSwgZS5oMSwgZS5ib2R5XSk7CisKKyAgICAgIGNoZWNrKDE1MiwgMTA1LCAwLCAxMCwgW2Uu
cDMsIGUuYm9keV0pOworICAgICAgY2hlY2soMTUyLCAxMDUsIDEwLCAwLCBbZS5wNCwgZS5kMSwg
ZS5ib2R5XSk7CisgICAgICBjaGVjaygxNTIsIDEwNSwgMTAsIDEwLCBbZS5wNCwgZS5wMywgZS5k
MSwgZS5ib2R5XSk7CisKKyAgICAgIC8vIGUucDEgaXMgaW52aXNpYmxlIGFuZCBzaG91bGRuJ3Qg
YXBwZWFyOgorICAgICAgY2hlY2soMTUzLDE5MywwLDAsW2UucDVdKTsKKyAgICAgIC8vIE5PVEU6
IFtlLnA1LCBlLmQyXSkgc2hvdWxkIGJlIHJldHVybmVkIGlmIHdlIGRpZCBub3Qgc3RvcAorICAg
ICAgLy8gYXQgZS5wNSwgd2hpY2ggZnVsbHkgZW5jbG9zZXMgdGhlIHRhcmdldCByZWN0LgorICAg
ICAgY2hlY2soMTUzLDE5MywyMCwwLCBbZS5wNV0pOworICAgICAgY2hlY2soMTUzLDE5MywwLDIw
LCBbZS5wNSwgZS5ib2R5XSk7CisKKyAgICAgIC8vIFByZWNpc2UgcGl4ZWwgY2hlY2tzOgorICAg
ICAgY2hlY2soMTQ0LCAxODMsIDAsIDAsIFtlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE0NCwgMTgz
LCAwLCAxLCBbZS5wNSwgZS5ib2R5XSk7CisgICAgICBjaGVjaygxNDQsIDE4MywgMSwgMCwgW2Uu
ZDIsIGUuYm9keV0pOworICAgICAgY2hlY2soMTQ0LCAxODMsIDEsIDEsIFtlLnA1LCBlLmQyLCBl
LmJvZHldKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDAsIDAsIFtlLnAyXSk7CisgICAgICBjaGVj
ayg3NywgMjQwLCAxMCwgMCwgW2UucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDAsIDEwLCBb
ZS5wNSwgZS5zcGFuLCBlLnAyXSk7CisgICAgICBjaGVjayg3NywgMjQwLCAxMCwgMTAsIFtlLnA1
LCBlLnNwYW4sIGUucDJdKTsKKworICAgICAgLy8gRXhwYW5kaW5nIGFyZWEgY2hlY2tzOgorICAg
ICAgY2hlY2soMzksIDIxMiwgMCwgIDAsIFtlLmJvZHldKTsKKyAgICAgIGNoZWNrKDM5LCAyMTIs
IDAsIDEwLCBbZS5kMiwgZS5wMiwgZS5ib2R5XSk7CisgICAgICBjaGVjaygzOSwgMjEyLCAxMCwg
MCwgW2UucDUsIGUuYm9keV0pOworICAgICAgY2hlY2soMzksIDIxMiwgMTAsIDEwLCBbZS5wNSwg
ZS5kMiwgZS5wMiwgZS5ib2R5XSk7CisKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9
CisKKyAgICB3aW5kb3cub25sb2FkID0gcnVuVGVzdDsKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBpZD0iYm9keSI+CisgIDxoMSBpZD0iaDEiPjwvaDE+CisgIDxkaXYgaWQ9ImQxIj48L2Rp
dj4KKworICA8IS0tIGZsb2F0ZWQgZWxlbWVudCAtLT4KKyAgPGRpdiBpZD0iZDIiIHN0eWxlPSJm
bG9hdDogbGVmdCI+PC9kaXY+CisKKyAgPCEtLSBoaWRkZW4gZWxlbWVudCAtLT4KKyAgPHAgaWQ9
InAxIiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHZpc2liaWxpdHk6IGhpZGRlbiI+PC9wPgorCisgIDxw
IGlkPSJwMiIgc3R5bGU9ImNsZWFyOiBsZWZ0Ij48c3BhbiBpZD0ic3BhbiI+PC9zcGFuPjwvcD4K
KworICA8IS0tIGFic29sdXRlIHBvc2l0aW9uIC0tPgorICA8cCBpZD0icDMiIHN0eWxlPSJwb3Np
dGlvbjphYnNvbHV0ZTsgdG9wOiAxMHB4OyBsZWZ0OjUwcHg7IGhlaWdodDo1MHB4OyI+PC9wPgor
CisgIDwhLS0gZml4ZWQgcG9zaXRpb24gLS0+CisgIDxwIGlkPSJwNCIgc3R5bGU9InBvc2l0aW9u
OiBmaXhlZDsgdG9wOiAzMHB4OyBsZWZ0OiAxNTBweDsgaGVpZ2h0OiA1MHB4OyBiYWNrZ3JvdW5k
LWNvbG9yOiBibHVlOyI+PC9wPgorCisgIDwhLS0gcmVsYXRpdmUgcG9zaXRpb24gLS0+CisgIDxw
IGlkPSJwNSIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6IC0xMDBweDsgbGVmdDogMzBw
eDsgbWFyZ2luLWJvdHRvbTogLTcwcHg7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIj48L3A+CisK
KyAgPHNwYW4gaWQ9ImNvbnNvbGUiPjwvc3Bhbj4KKyAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3Mg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlNmZjMAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwpAQCAtMCww
ICsxLDQ0IEBACitib2R5IHsKKyAgbWFyZ2luOiA4cHg7CisgIHBhZGRpbmc6IDA7Cit9CisKK2gx
LCBkaXYsIHAsIGlmcmFtZSB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwcHg7Cisg
IGhlaWdodDogMzBweDsKKyAgYm9yZGVyOiAzcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDEw
cHg7CisgIG1hcmdpbjogMTBweDsKK30KKworI3NwYW4geworICBkaXNwbGF5OiBibG9jazsKKyAg
d2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDMwcHg7CisgIGJvcmRlcjogM3B4IHNvbGlkIGJsYWNr
OworICBwYWRkaW5nOiAxMHB4OworICBtYXJnaW46IDEwcHg7CisgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKK30KKworI2lmcmFtZTEgeworICBoZWlnaHQ6IDEwMHB4OworICBtYXJnaW4tdG9wOiA2
MHB4OworfQorCisjcDYgeworICBoZWlnaHQ6IDUwcHg7CisgIG1hcmdpbi10b3A6IDMwcHg7Cit9
CisKKyN0cmFuc2YgeworICBtYXJnaW4tdG9wOiA2MHB4OworICAtd2Via2l0LXRyYW5zZm9ybTog
cm90YXRlKC00NWRlZyk7Cit9CisKKyNkZWNpbWFsIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOwor
ICBsZWZ0OiAwLjVweDsKKyAgdG9wOiA1MC41cHg7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJlMDZjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29u
dHJpYnV0b3JzOgorICogICAgICogQW50b25pbyBHb21lcyA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+
CisgKiovCisKK2Z1bmN0aW9uIGNoZWNrKHgsIHksIGhQYWRkaW5nLCB2UGFkZGluZywgbGlzdCkK
K3sKKyAgLyoKKyAgICBOb2RlTGlzdCBub2Rlc0Zyb21SZWN0KGluIGxvbmcgeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGxvbmcgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIGxvbmcgaFBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBsb25nIHZQ
YWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBpZ25vcmVDbGlw
cGluZyk7CisgICovCisgIHZhciBub2RlcyA9IGRvY3VtZW50Lm5vZGVzRnJvbVJlY3QoeCwgeSwg
aFBhZGRpbmcsIHZQYWRkaW5nLCB0cnVlIC8qIGlnbm9yZUNsaXBwaW5nICovKTsKKworICBpZiAo
bm9kZXMubGVuZ3RoICE9IGxpc3QubGVuZ3RoKSB7CisgICAgdGVzdEZhaWxlZCgiRGlmZmVyZW50
IG51bWJlciBvZiBub2RlcyBmb3IgcmVjdCIgKworICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwi
ICsgeSArICJdLCAiICsKKyAgICAgICAgICAgICAgIlsiICsgaFBhZGRpbmcgKyAiLCIgKyB2UGFk
ZGluZyArICJdOiAnIiArIGxpc3QubGVuZ3RoICsgIicgdnMgJyIgKyBub2Rlcy5sZW5ndGggKyAi
JyIpOworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVu
Z3RoOyBpKyspIHsKKyAgICBpZiAobm9kZXNbaV0gIT0gbGlzdFtpXSkgeworICAgICAgdGVzdEZh
aWxlZCgiVW5leHBlY3RlZCBub2RlICMiICsgaSArICIgZm9yIHJlY3QgIiArCisgICAgICAgICAg
ICAgICAgIlsiICsgeCArICIsIiArIHkgKyAiXSwgIiArCisgICAgICAgICAgICAgICAgIlsiICsg
aFBhZGRpbmcgKyAiLCIgKyB2UGFkZGluZyArICJdIiArICIgLSAiICsgbm9kZXNbaV0pOworICAg
ICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIHRlc3RQYXNzZWQoIkFsbCBjb3JyZWN0IG5vZGVz
IGZvdW5kIGZvciByZWN0ICIgICsKKyAgICAgICAgICAgIlsiICsgeCArICIsIiArIHkgKyAiXSwg
IiArCisgICAgICAgICAgICJbIiArIGhQYWRkaW5nICsgIiwiICsgdlBhZGRpbmcgKyAiXSIpOwor
fQorCitmdW5jdGlvbiBnZXRDZW50ZXJGb3IoZWxlbWVudCkKK3sKKyAgdmFyIHJlY3QgPSBlbGVt
ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICByZXR1cm4geyB4IDogcGFyc2VJbnQoKHJl
Y3QubGVmdCArIHJlY3QucmlnaHQpIC8gMikgLCB5IDogcGFyc2VJbnQoKHJlY3QudG9wICsgcmVj
dC5ib3R0b20pIC8gMil9OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjEz
MDRjNy4uNmRiZjkzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MSBAQAorMjAxMC0wNy0yMSBHcmFjZSBLbG9iYSAgPGts
b2JhZ0BnbWFpbC5jb20+ICwgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuaGFuY2Ug
dGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUgaW5zdGVhZCBvZiBhIHBvaW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE5NworCisg
ICAgICAgIFBhdGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNp
ZGVyaW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEg
cG9pbnQsIHdoZW4gYXBwbGljYWJsZS4gVGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIGNoYW5nZQor
ICAgICAgICBpcyB0byBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIG1vcmUgcHJlY2lzZSB0YXAgYWN0
aW9ucyBieSB0aGUgdXNlcnMuCisKKyAgICAgICAgVGhlIG1haW4gaWRlYSBpcyB0byBtb2RpZnkg
dGhlIEhpdFRlc3RSZXN1bHQgdG8gdGFrZSBhIHBhZGRpbmcuIFRoZSBwYWRkaW5nCisgICAgICAg
IHRlbGxzIGhvdyBtdWNoIHRvIGV4cGFuZCB0aGUgc2VhcmNoIHJlY3QgYXJvdW5kIGEgc3VwcG9z
ZWQgdG91Y2ggcG9pbnQuIElmIGl0CisgICAgICAgIGlzIG5vbi1wb3NpdGl2ZSwgaXQgd29ya3Mg
YXMgdGhlIGN1cnJlbnQgcG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcuIE90aGVyd2lzZSwgaGl0Cisg
ICAgICAgIHRlc3Qgd2lsbCBrZWVwIHJlY29yZCBvZiBhbGwgbm9kZXMgdGhhdCBpbnRlcnNlY3Qg
dGhlIHByb3ZpZGVkIHRlc3QgYXJlYS4gVGhlIGxvZ2ljCisgICAgICAgIHdpbGwgY29udGludWUg
c2VhcmNoaW5nIHdoZW4gaXQgZmluZHMgYSBjYW5kaWRhdGUgdW50aWwgdGhlIHJlY3RhbmdsZSBp
cyBmdWxseSBlbmNsb3NlZAorICAgICAgICBieSB0aGUgY2FuZGlkYXRlLiBUaGUgcmVzdWx0IHdp
bGwgYmUgYSBsaXN0IG9mIE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleSBhcmUgaGl0LXRlc3RlZC4K
KyAgICAgICAgVGhlIGNhbGxlciB3aWxsIGRlY2lkZSBob3cgdG8gcHJvY2VzcyB0aGVtLgorCisg
ICAgICAgIEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoOgor
CisgICAgICAgIC0gQWRkcyBhIG5vZGVzRnJvbVJlY3QgbWV0aG9kIHRvIHRoZSBEb2N1bWVudCBj
bGFzcywgZXhwb3NpbmcgdGhlIGZ1bmNpb25hbGl0eQorICAgICAgICB0byB0aGUgRE9NLiBNZXRo
b2QgcmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBn
aXZlbgorICAgICAgICBoaXQtdGVzdGVkIGFyZWEuCisgICAgICAgIC0gRXh0ZW5kcyBoaXRUZXN0
UmVzdWx0QXRQb2ludCBtZXRob2Qgb2YgdGhlIEV2ZW50SGFuZGxlciB3aXRoIGFuIGV4dHJhICdw
YWRkaW5nJworICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgtMSwgLTEp
LiBUaGUgcmVjdC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCisgICAgICAgIG5v
bi1uZWdhdGl2ZSBwYWRkaW5nIGlzIHBhc3NlZCBpbi4KKworICAgICAgICBUZXN0OiBmYXN0L2Rv
bS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
Ojpub2Rlc0Zyb21SZWN0KTogVGhpcyBtZXRob2QgZXhwb3NlcyB0aGUgcmVjdCBiYXNlZCBmdW5j
aW9uYWxpdHkgdG8KKyAgICAgICAgdGhlIERPTS4gSXQgd29ya3Mgc2ltaWxhcmx5IHRvIGVsZW1l
bnRGcm9tUG9pbnQsIGhvd2V2ZXIgcmVjZWl2aW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQorICAgICAg
ICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9y
ZGVyZWQgbGlzdCBvZiBub2RlcyAobm90IGVsZW1lbnRzKQorICAgICAgICB3aG9zZSBhcmVhIGlu
dGVyc2VjdCB0aGUgaGl0IHRlc3QgcmVjdC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0
dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0
UmVzdWx0QXRQb2ludCk6IFRoZSBmdW5jaW9uYWxpdHkgaXMgYWxzbyBleHBvc2VkIHRocm91Z2gg
dGhpcworICAgICAgICBtZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFy
YW1ldGVyIHRvIHdvcmsgYXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKKyAgICAgICAg
dGhlIGhpdCB0ZXN0IHJlY3QuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCk6IFJlY3QgYmFzZWQgaGl0IHRlc3QgY29u
c3RydWN0b3IuIFJlY2VpdmVzIGEKKyAgICAgICAgcGFkZGluZyBJbnRTaXplIGFzIHBhcmFtZXRl
ci4gSXQgY2FuIGJlICgwLDApLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3Bl
cmF0b3I9KTogTW9kaWZpZWQgdG8gYXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMg
d2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6IE1lcmdlIHRv
IEhpdFRlc3RSZXN1bHQgb2JqZWN0cyBpbiBhIHdheSB0aGF0IHRoZQorICAgICAgICBsaXN0IG5v
ZGUncyBvZiBib3RoIG9iamVjdHMgZ2V0IGFtZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5v
ZGUgdG8gdGhlIGxpc3Qgb2YKKyAgICAgICAgaGl0IG5vZGVzLgorICAgICAgICAqIHJlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRk
aW5nKTogUmV0dXJucyB0aGUgcGFkZGluZyBhcyBhbiBJbnRTaXplLgorICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6aXNSZWN0QmFzZWRUZXN0KTogUmV0dXJucyBpZiB0aGUgSGl0VGVz
dFJlc3VsdCBpcyByZWN0IGJhc2VkIG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6Oi5yZWN0QmFzZWRUZXN0UmVzdWx0KTogUmV0dXJucyB0aGUgbGlzdCBub2RlcyBoaXQu
CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJu
cyB0aGUgaGl0IHRlc3QgcmVjdCBnaXZlbiB0aGUgaGl0IHRlc3QgcG9pbnQKKyAgICAgICAgYW5k
IHBhZGRpbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOiBN
ZXRob2QgaXMgbW9kaWZpZWQgdG8gc3VwcG9ydCByZWN0IGJhc2VkIGhpdCB0ZXN0IGV4dGVuc2lv
bi4KKyAgICAgICAgTm93IGl0IG5vdCBqdXN0IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2YgdGhl
IG5vZGUgYmVpbmcgaGl0LXRlc3RlZCBjb250YWlucyBhIGhpdCB0ZXN0IHBvaW50LCBidXQKKyAg
ICAgICAgaW5zdGVhZCBpdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGludGVy
c2VjdHMgYSBoaXQgdGVzdCByZWN0LiBJdCBpcyBpbXBsZW1lbnRlZCBzbworICAgICAgICB0aGF0
IHRoZSBjb21tb24gY2FzZSAocG9pbnQgYmFzZWQgaGl0IHRlc3QpIHdvcmtzIGFzIHByZXZpb3Vz
bHkuCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
Ojpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6
Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lk
Z2V0Ojpub2RlQXRQb2ludCk6IERpdHRvLgorCiAyMDEwLTA3LTIwICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KaW5kZXggNGRkNGVlNy4uOTM4YzA0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yMTYsNyArMjE2
LDcgQEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbG93RU5TXzE1U2Ny
b2xsRGlyZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MTVzZW5kU2Nyb2xsRXZlbnRFdgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNmhhbmRsZVdo
ZWVsRXZlbnRFUk5TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhh
bmRsZXIyMGhhbmRsZVRleHRJbnB1dEV2ZW50RVJLTlNfNlN0cmluZ0VQTlNfNUV2ZW50RWJiCi1f
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU184SW50
UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJzRQorX19aTjdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdIaXRUZXN0U2Ny
b2xsYmFyc0VSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRs
ZU1vdXNlUHJlc3NFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIyM2hhbmRsZU1vdXNlUmVsZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1v
dXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjI3Y2Fwc0xvY2tTdGF0ZU1heUhh
dmVDaGFuZ2VkRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5Yzc0N2QzLi5lZWI4M2M2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMTksNiArMTE5LDcgQEAKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRl
ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgpAQCAtMjA4
LDYgKzIwOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIC8vICNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCisvLyAjZGVm
aW5lIERVTVBfSElUVEVTVF9SRVNVTFQgMQogCiAvLyBUaGlzIGFtb3VudCBvZiB0aW1lIG11c3Qg
aGF2ZSBlbGFwc2VkIGJlZm9yZSB3ZSB3aWxsIGV2ZW4gY29uc2lkZXIgc2NoZWR1bGluZyBhIGxh
eW91dCB3aXRob3V0IGEgZGVsYXkuCiAvLyBGSVhNRTogRm9yIGZhc3RlciBtYWNoaW5lcyB0aGlz
IHZhbHVlIGNhbiByZWFsbHkgYmUgbG93ZXJlZCB0byAyMDAuICAyNTAgaXMgYWRlcXVhdGUsIGJ1
dCBhIGxpdHRsZSBoaWdoCkBAIC0xMDAzLDYgKzEwMDUsNzMgQEAgS1VSTCBEb2N1bWVudDo6YmFz
ZVVSSSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFzZVVSTDsKIH0KIAorI2lmZGVmIERVTVBfSElU
VEVTVF9SRVNVTFQKK3ZvaWQgc3RhdGljIGR1bXBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBsaXN0ID0g
cmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKyAgICBwcmludGYoIiglcykgLSB7eD0lZCB5
PSVkIGhQYWRkaW5nPSVkIHZQYWRkaW5nPSVkfVxuIiwKKyAgICAgICAgICAgX19GVU5DVElPTl9f
LCByZXN1bHQucG9pbnQoKS54KCksIHJlc3VsdC5wb2ludCgpLnkoKSwgcmVzdWx0LnBhZGRpbmco
KS53aWR0aCgpLCByZXN1bHQucGFkZGluZygpLmhlaWdodCgpKTsKKyAgICBwcmludGYoIkxpc3Qg
c2l6ZTolZFxuIiwgbGlzdC5zaXplKCkpOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAg
IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVn
aW4oKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbGlzdC5lbmQoKTsKKyAgICBmb3IgKCA7IGl0ICE9IGVuZCA7ICsraXQpIHsKKyAgICAgICAg
cHJpbnRmKCIlZCkgIiwgKytjb3VudCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSAoKml0KS5nZXQo
KTsKKyAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYg
KG5vZGUtPmhhc0lEKCkpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJIaXQgZWxlbWVudCA8JXM+
LCBpZD0nJXMnXG4iLCBub2RlLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKCJpZCIpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiSGl0IGVsZW1l
bnQgPCVzPiwgTk8gSUQhJ1xuIiwgbm9kZS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICBwcmludGYo
IlRleHQgbm9kZSBoaXQuIENvbnRlbnQ6JyVzJ1xuIiwgbm9kZS0+dGV4dENvbnRlbnQoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJIaXQgbm9kZSA8
JXM+XG4iLCBub2RlLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBwcmlu
dGYoIlxuIik7Cit9CisjZW5kaWYKKworLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUg
RE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgorLy8gKiBtYWtpbmcgaXQgcmVjZWl2
ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7Cisv
LyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2ggZGlyZWN0aW9u
IHNlcGFyYXRlbHksCisvLyAgIGkuZS4gbm9kZXNGcm9tUmVjdCh4LCB5LCB0b3BTaXplLCByaWdo
dFNpemUsIGJvdHRvbVNpemUsIGxlZnRTaXplKTsKK1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+IERvY3Vt
ZW50Ojpub2Rlc0Zyb21SZWN0KGludCBjZW50ZXJYLCBpbnQgY2VudGVyWSwgaW50IGhQYWRkaW5n
LCBpbnQgdlBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFNoYXJlIGNvZGUgYmV0d2VlbiB0aGlzLCBlbGVtZW50RnJvbVBvaW50IGFuZCBjYXJldFJh
bmdlRnJvbVBvaW50LgorICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7Cisg
ICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgem9vbUZh
Y3RvciA9IGZyYW1lVmlldy0+cGFnZVpvb21GYWN0b3IoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9
IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KGNlbnRlclggKiB6b29tRmFjdG9yICArIHZpZXco
KS0+c2Nyb2xsWCgpLCBjZW50ZXJZICogem9vbUZhY3RvciArIHZpZXcoKS0+c2Nyb2xsWSgpKSk7
CisgICAgSW50U2l6ZSBwYWRkaW5nKGhQYWRkaW5nLCB2UGFkZGluZyk7CisKKyAgICBpbnQgdHlw
ZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CisK
KyAgICAvLyBXaGVuIGlnbm9yZUNsaXBwaW5nIGlzIGZhbHNlLCB0aGlzIG1ldGhvZCByZXR1cm5z
IG51bGwgZm9yIGNvb3JkaW5hdGVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0LgorICAgIGlmIChp
Z25vcmVDbGlwcGluZykKKyAgICAgICAgdHlwZSB8PSBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xp
cHBpbmc7CisgICAgZWxzZSBpZiAoIWZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuaW50
ZXJzZWN0cyhJbnRSZWN0KHBvaW50LCBwYWRkaW5nKSkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0eXBlKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dChwb2ludCwgcGFkZGluZyk7CisgICAgcmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJl
cXVlc3QsIHJlc3VsdCk7CisKKyNpZmRlZiBEVU1QX0hJVFRFU1RfUkVTVUxUCisgICAgZHVtcEhp
dFRlc3RSZXN1bHQocmVzdWx0KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFN0YXRpY0hhc2hTZXRO
b2RlTGlzdDo6YWRvcHQocmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSk7Cit9CisKIEVsZW1l
bnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogU2hhcmUgY29kZSBiZXR3ZWVuIHRoaXMgYW5kIGNhcmV0UmFuZ2VGcm9tUG9p
bnQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAppbmRleCAwNzhjYjUzLi43ODliOTZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTMwMiw2ICszMDIsMTgg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzRWxlbWVudFdpdGhJZChBdG9taWNTdHJpbmdJbXBsKiBp
ZCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIHsgcmV0dXJuIG1fZHVwbGljYXRlSWRzLmNvbnRhaW5z
KGVsZW1lbnRJZC5pbXBsKCkpOyB9CiAKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSBhbGwgbm9k
ZXMgdGhhdCBpbnRlcnNlY3QgYSByZWN0IGluIHRoZSB3aW5kb3cncyBkb2N1bWVudCwgdW50aWwg
aXQgaXMgZnVsbHkgZW5jbG9zZWQgYnkKKyAgICAgKiB0aGUgYm91bmRhcmllcyBvZiBub2RlLgor
ICAgICAqCisgICAgICogQHBhcmFtIGNlbnRlclggeCByZWZlcmVuY2UgZm9yIHRoZSByZWN0YW5n
bGUgaW4gQ1NTIHBpeGVscworICAgICAqIEBwYXJhbSBjZW50ZXJZIHkgcmVmZXJlbmNlIGZvciB0
aGUgcmVjdGFuZ2xlIGluIENTUyBwaXhlbHMKKyAgICAgKiBAcGFyYW0gaFBhZGRpbmcgSG93IG11
Y2ggdG8gZXhwYW5kIHRoZSByZWN0YW5nbGUgaG9yaXpvbnRhbGx5CisgICAgICogQHBhcmFtIHZQ
YWRkaW5nIEhvdyBtdWNoIHRvIGV4cGFuZCB0aGUgcmVjdGFuZ2xlIHZlcnRpY2FsbHkKKyAgICAg
KiBAcGFyYW0gaWdub3JlQ2xpcHBpbmcgd2hldGhlciBvciBub3QgdG8gaWdub3JlIHRoZSByb290
IHNjcm9sbCBmcmFtZSB3aGVuIHJldHJpZXZpbmcgdGhlIGVsZW1lbnQuCisgICAgICogICAgICAg
IElmIGZhbHNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwgZm9yIGNvb3JkaW5hdGVzIG91dHNp
ZGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqLworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5v
ZGVzRnJvbVJlY3QoaW50IGNlbnRlclgsIGludCBjZW50ZXJZLCBpbnQgaFBhZGRpbmcsIGludCB2
UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZykgY29uc3Q7CiAgICAgRWxlbWVudCogZWxlbWVu
dEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNh
cmV0UmFuZ2VGcm9tUG9pbnQoaW50IHgsIGludCB5KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaWRsIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCmluZGV4IDk1OTlkNzYu
LjkyYzhlNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAorKysgYi9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5pZGwKQEAgLTE4Niw2ICsxODYsOCBAQCBtb2R1bGUgY29yZSB7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRd
IERPTVN0cmluZyBkZWZhdWx0Q2hhcnNldDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFN0cmluZ1RvPVVuZGVmaW5lZF0gRE9NU3RyaW5nIHJlYWR5U3RhdGU7CiAKKwor
ICAgICAgICBOb2RlTGlzdCAgICAgICAgICAgbm9kZXNGcm9tUmVjdChpbiBsb25nIHgsIGluIGxv
bmcgeSwgaW4gbG9uZyBoUGFkZGluZywgaW4gbG9uZyB2UGFkZGluZywgaW4gYm9vbGVhbiBpZ25v
cmVDbGlwcGluZyk7CiAgICAgICAgIEVsZW1lbnQgICAgICAgICAgICBlbGVtZW50RnJvbVBvaW50
KGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKICAgICAgICAgUmFuZ2UgICAgICAgICAgICAgIGNhcmV0
UmFuZ2VGcm9tUG9pbnQoaW4gbG9uZyB4LCBpbiBsb25nIHkpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CmluZGV4IGU3Zjk0YjAuLjFjM2MyYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04NTksOSAr
ODU5LDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmFsbG93REhUTUxEcmFnKGJvb2wmIGZsYWdESFRN
TCwgYm9vbCYgZmxhZ1VBKSBjb25zdAogfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQp
CiAgICAgCi1IaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9vbCBpZ25v
cmVDbGlwcGluZywgSGl0VGVzdFNjcm9sbGJhcnMgdGVzdFNjcm9sbGJhcnMpCitIaXRUZXN0UmVz
dWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50LCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZywgSGl0VGVz
dFNjcm9sbGJhcnMgdGVzdFNjcm9sbGJhcnMsIGNvbnN0IEludFNpemUmIHBhZGRpbmcpCiB7Ci0g
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
KHBvaW50LCBwYWRkaW5nKTsKICAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIGludCBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6
OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKQEAgLTg4Myw3ICs4ODMsNyBAQCBI
aXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50
UG9pbnQmIHBvaW50LCBib29sIGFsbAogICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpOwogICAgICAgICBJbnRQb2ludCB3aWRnZXRQb2ludChy
ZXN1bHQubG9jYWxQb2ludCgpLngoKSArIHZpZXctPnNjcm9sbFgoKSAtIHJlbmRlcldpZGdldC0+
Ym9yZGVyTGVmdCgpIC0gcmVuZGVyV2lkZ2V0LT5wYWRkaW5nTGVmdCgpLCAKICAgICAgICAgICAg
IHJlc3VsdC5sb2NhbFBvaW50KCkueSgpICsgdmlldy0+c2Nyb2xsWSgpIC0gcmVuZGVyV2lkZ2V0
LT5ib3JkZXJUb3AoKSAtIHJlbmRlcldpZGdldC0+cGFkZGluZ1RvcCgpKTsKLSAgICAgICAgSGl0
VGVzdFJlc3VsdCB3aWRnZXRIaXRUZXN0UmVzdWx0KHdpZGdldFBvaW50KTsKKyAgICAgICAgSGl0
VGVzdFJlc3VsdCB3aWRnZXRIaXRUZXN0UmVzdWx0KHdpZGdldFBvaW50LCBwYWRkaW5nKTsKICAg
ICAgICAgZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KEhpdFRlc3RS
ZXF1ZXN0KGhpdFR5cGUpLCB3aWRnZXRIaXRUZXN0UmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0g
d2lkZ2V0SGl0VGVzdFJlc3VsdDsKIApAQCAtOTA1LDcgKzkwNSw3IEBAIEhpdFRlc3RSZXN1bHQg
RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQs
IGJvb2wgYWxsCiAgICAgICAgICAgICBpZiAocmVzdWx0VmlldyAmJiBtYWluVmlldykgewogICAg
ICAgICAgICAgICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcmVzdWx0Vmlldy0+Y29udGVudHNU
b1dpbmRvdyhyZXN1bHQucG9pbnQoKSk7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgbWFpbkZy
YW1lUG9pbnQgPSBtYWluVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJl
c3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3JlQ2xp
cHBpbmcpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5GcmFtZVBvaW50LCBhbGxvd1NoYWRvd0NvbnRl
bnQsIGlnbm9yZUNsaXBwaW5nLCB0ZXN0U2Nyb2xsYmFycywgcGFkZGluZyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmggYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNGNjYTg5OC4uZTlhOTI0
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEZsb2F0UXVhZCYp
OwogCi0gICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2lu
dCYsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2Us
IEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMpOwor
ICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBi
b29sIGFsbG93U2hhZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLCBIaXRU
ZXN0U2Nyb2xsYmFycyBzY3JvbGxiYXJzID0gRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBjb25zdCBJ
bnRTaXplJiBwYWRkaW5nID0gSW50U2l6ZSgtMSwgLTEpKTsKIAogICAgIGJvb2wgbW91c2VQcmVz
c2VkKCkgY29uc3QgeyByZXR1cm4gbV9tb3VzZVByZXNzZWQ7IH0KICAgICB2b2lkIHNldE1vdXNl
UHJlc3NlZChib29sIHByZXNzZWQpIHsgbV9tb3VzZVByZXNzZWQgPSBwcmVzc2VkOyB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggM2UxMzQyZi4uNjFjZDUyNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmNwcApAQCAtMTEzLDkgKzExMywxMSBAQCBib29sIEVsbGlwc2lzQm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAm
JiBJbnRSZWN0KHR4LCB0eSwgbV93aWR0aCwgbV9oZWlnaHQpLmNvbnRhaW5zKHgsIHkpKSB7Cisg
ICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIG1fd2lkdGgsIG1faGVpZ2h0
KTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRU
ZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgYm91bmRzUmVjdCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDUwOTMzYzYuLmMxYzYyNDcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwCkBAIC00OSw5ICs0OSwxOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYgcG9p
bnQpCiAgICAgOiBtX3BvaW50KHBvaW50KQogICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCisg
ICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQogewogfQogCitIaXRUZXN0UmVzdWx0OjpIaXRUZXN0
UmVzdWx0KGNvbnN0IEludFBvaW50JiBjZW50ZXJQb2ludCwgY29uc3QgSW50U2l6ZSYgcGFkZGlu
ZykKKyAgICA6IG1fcG9pbnQoY2VudGVyUG9pbnQpCisgICAgLCBtX3BhZGRpbmcocGFkZGluZykK
KyAgICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQoreworICAgIG1faXNSZWN0QmFzZWQgPSBwYWRk
aW5nLndpZHRoKCkgPj0gMCAmJiBwYWRkaW5nLmhlaWdodCgpID49IDA7Cit9CisKIEhpdFRlc3RS
ZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgOiBt
X2lubmVyTm9kZShvdGhlci5pbm5lck5vZGUoKSkKICAgICAsIG1faW5uZXJOb25TaGFyZWROb2Rl
KG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpKQpAQCAtNTksNyArNjgsMTAgQEAgSGl0VGVzdFJl
c3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKICAgICAsIG1f
bG9jYWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCiAgICAgLCBtX2lubmVyVVJMRWxlbWVudChv
dGhlci5VUkxFbGVtZW50KCkpCiAgICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3JvbGxiYXIoKSkK
KyAgICAsIG1fcGFkZGluZyhvdGhlci5wYWRkaW5nKCkpCisgICAgLCBtX3JlY3RCYXNlZFRlc3RS
ZXN1bHQob3RoZXIucmVjdEJhc2VkVGVzdFJlc3VsdCgpKQogICAgICwgbV9pc092ZXJXaWRnZXQo
b3RoZXIuaXNPdmVyV2lkZ2V0KCkpCisgICAgLCBtX2lzUmVjdEJhc2VkKG90aGVyLmlzUmVjdEJh
c2VkVGVzdCgpKQogewogfQogCkBAIC03NSw3ICs4NywxMCBAQCBIaXRUZXN0UmVzdWx0JiBIaXRU
ZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgbV9s
b2NhbFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOwogICAgIG1faW5uZXJVUkxFbGVtZW50ID0g
b3RoZXIuVVJMRWxlbWVudCgpOwogICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7
CisgICAgbV9wYWRkaW5nID0gb3RoZXIucGFkZGluZygpOworICAgIG1fcmVjdEJhc2VkVGVzdFJl
c3VsdCA9IG90aGVyLnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKICAgICBtX2lzT3ZlcldpZGdldCA9
IG90aGVyLmlzT3ZlcldpZGdldCgpOworICAgIG1faXNSZWN0QmFzZWQgPSBvdGhlci5pc1JlY3RC
YXNlZFRlc3QoKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTM2Miw0ICszNzcsNDAgQEAg
Ym9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW5uZXJOb25TaGFyZWROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCitib29sIEhp
dFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgaW50
IHgsIGludCB5LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIElmIGl0IGlzIG5vdCBh
IHJlY3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4KKyAgICAv
LyBSZXR1cm4gZmFsc2UsIHNvIHRoZSBoaXQgdGVzdCBzdG9wcy4KKyAgICBpZiAoIWlzUmVjdEJh
c2VkVGVzdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiBub2RlIGlzIG51
bGwsIHJldHVybiB0cnVlIHNvIHRoZSBoaXQgdGVzdCBjYW4gY29udGludWUuCisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG5vZGUgPSBub2RlLT5zaGFkb3dBbmNl
c3Rvck5vZGUoKTsKKyAgICBtX3JlY3RCYXNlZFRlc3RSZXN1bHQuYWRkKG5vZGUpOworCisgICAg
cmV0dXJuICFyZWN0LmNvbnRhaW5zKHJlY3RGcm9tUG9pbnQoeCwgeSkpOworfQorCit2b2lkIEhp
dFRlc3RSZXN1bHQ6OmFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKK3sKKyAgICBB
U1NFUlQoaXNSZWN0QmFzZWRUZXN0KCkgJiYgb3RoZXIuaXNSZWN0QmFzZWRUZXN0KCkpOworCisg
ICAgaWYgKCFtX2lubmVyTm9kZSAmJiBvdGhlci5pbm5lck5vZGUoKSkgeworICAgICAgICBtX2lu
bmVyTm9kZSA9IG90aGVyLmlubmVyTm9kZSgpOworICAgICAgICBtX2lubmVyTm9uU2hhcmVkTm9k
ZSA9IG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgICAgICBtX2xvY2FsUG9pbnQgPSBv
dGhlci5sb2NhbFBvaW50KCk7CisgICAgICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJM
RWxlbWVudCgpOworICAgICAgICBtX3Njcm9sbGJhciA9IG90aGVyLnNjcm9sbGJhcigpOworICAg
ICAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgpOworICAgIH0KKworICAg
IGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+JiBsaXN0ID0gb3RoZXIucmVjdEJhc2Vk
VGVzdFJlc3VsdCgpOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVy
YXRvciBsYXN0ID0gbGlzdC5lbmQoKTsKKyAgICBmb3IgKExpc3RIYXNoU2V0PFJlZlB0cjxOb2Rl
PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGFzdDsgKytpdCkK
KyAgICAgICAgbV9yZWN0QmFzZWRUZXN0UmVzdWx0LmFkZChpdC0+Z2V0KCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggZDE5MDZi
YS4uMzQwYTU5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtMjEsNyArMjEsMTAg
QEAKICNkZWZpbmUgSGl0VGVzdFJlc3VsdF9oCiAKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiVGV4dERp
cmVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArNDEsOCBAQCBjbGFzcyBT
dHJpbmc7CiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsKIHB1YmxpYzoKICAgICBIaXRUZXN0UmVzdWx0
KGNvbnN0IEludFBvaW50Jik7CisgICAgLy8gUGFzcyBhIG5vbi1uZWdhdGl2ZSBJbnRTaXplIHZh
bHVlIGFzIHBhZGRpbmcgdG8gcGVyZm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCisgICAgSGl0
VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYgY2VudGVyUG9pbnQsIGNvbnN0IEludFNpemUmIHBh
ZGRpbmcpOwogICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwogICAgIH5I
aXRUZXN0UmVzdWx0KCk7CiAgICAgSGl0VGVzdFJlc3VsdCYgb3BlcmF0b3I9KGNvbnN0IEhpdFRl
c3RSZXN1bHQmKTsKQEAgLTc2LDcgKzgxLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzTGl2ZUxp
bmsoKSBjb25zdDsKICAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAKKyAgICAv
LyBSZWN0LWJhc2VkIGhpdCB0ZXN0IHJlbGF0ZWQgbWV0aG9kcy4KKyAgICBib29sIGlzUmVjdEJh
c2VkVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZWN0QmFzZWQ7IH0KKyAgICBJbnRSZWN0IHJl
Y3RGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdDsKKyAgICBJbnRSZWN0IHJlY3RGcm9tUG9p
bnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBJbnRTaXplIHBhZGRpbmcoKSBjb25zdCB7
IHJldHVybiBtX3BhZGRpbmc7IH0KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgaXMgcmVnaW9u
IHRlc3QgYW5kIHRoZSBoaXQgdGVzdCBuZWVkcyB0byBjb250aW51ZSBhcyB0aGUgcmVnaW9uIGlz
IG5vdCBmdWxseQorICAgIC8vIGNvdmVyZWQgYnkgdGhlIHJlY3QuCisgICAgYm9vbCBhZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBpbnQgeCwgaW50IHksIGNvbnN0IEludFJlY3Qm
IHJlY3QgPSBJbnRSZWN0KCkpOworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+
JiByZWN0QmFzZWRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0QmFzZWRUZXN0UmVz
dWx0OyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOworCiBwcml2YXRl
OgorCiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX2lu
bmVyTm9uU2hhcmVkTm9kZTsKICAgICBJbnRQb2ludCBtX3BvaW50OwpAQCAtODQsOSArMTAxLDM4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hl
cmUgaW5zaWRlIHRoZSByZW5kZXJlciB3ZSBoaXQgb24gc3Vic2VxdWVudCBvcGVyYXRpb25zLgog
ICAgIFJlZlB0cjxFbGVtZW50PiBtX2lubmVyVVJMRWxlbWVudDsKICAgICBSZWZQdHI8U2Nyb2xs
YmFyPiBtX3Njcm9sbGJhcjsKKyAgICBJbnRTaXplIG1fcGFkZGluZzsKKyAgICBMaXN0SGFzaFNl
dDxSZWZQdHI8Tm9kZT4gPiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQ7CiAgICAgYm9vbCBtX2lzT3Zl
cldpZGdldDsgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGFyZSBvdmVyIGEgd2lkZ2V0IChhbmQgbm90
IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhIG9mIGEgUmVuZGVyV2lkZ2V0IGZvciBleGFtcGxl
KS4KKyAgICBib29sIG1faXNSZWN0QmFzZWQ7CiB9OwogCitpbmxpbmUgSW50UmVjdCBIaXRUZXN0
UmVzdWx0OjpyZWN0RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3QKK3sKKyAgICByZXR1cm4g
cmVjdEZyb21Qb2ludChJbnRQb2ludCh4LCB5KSk7Cit9CisKKy8vIEZvcm11bGE6CisvLyB4ID0g
cC54KCkgLSBwYWRkaW5nLndpZHRoKCkKKy8vIHkgPSBwLnkoKSAtIHBhZGRpbmcuaGVpZ2h0KCkK
Ky8vIHdpZHRoID0gMiAqIHBhZGRpbmcud2lkdGgoKSArIDEKKy8vIGhlaWdodCA9IDIgKiBtX3Bh
ZGRpbmcuaGVpZ2h0KCkgKyAxCitpbmxpbmUgSW50UmVjdCBIaXRUZXN0UmVzdWx0OjpyZWN0RnJv
bVBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCByZWFs
UG9pbnQocG9pbnQpOworICAgIEludFNpemUgcmVhbFBhZGRpbmcobV9wYWRkaW5nKTsKKworICAg
IC8vIFJlYWwgSW50UG9pbnQgZm9yIHRoZSByZWN0LgorICAgIHJlYWxQYWRkaW5nLmNsYW1wTmVn
YXRpdmVUb1plcm8oKTsKKyAgICByZWFsUG9pbnQgLT0gcmVhbFBhZGRpbmc7CisKKyAgICAvLyBS
ZWFsIEludFNpemUgZm9yIHRoZSByZWN0LgorICAgIHJlYWxQYWRkaW5nLnNjYWxlKDIpOworICAg
IHJlYWxQYWRkaW5nICs9IEludFNpemUoMSwgMSk7CisKKyAgICByZXR1cm4gSW50UmVjdChyZWFs
UG9pbnQsIHJlYWxQYWRkaW5nKTsKK30KKwogU3RyaW5nIGRpc3BsYXlTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgY29uc3QgTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCmluZGV4IGZiZmU1NmQuLmRmZTc1NjEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCkBAIC02MTEsNyArNjExLDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmUKIHsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXNpYmxlT3ZlcmZsb3dSZWN0KCkp
OwogICAgIG92ZXJmbG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFvdmVyZmxvd1JlY3Qu
Y29udGFpbnMoeCwgeSkpCisgICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQu
cmVjdEZyb21Qb2ludCh4LCB5KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENo
ZWNrIGNoaWxkcmVuIGZpcnN0LgpAQCAtNjI0LDkgKzYyNCwxMCBAQCBib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZQogCiAgICAgLy8gTm93IGNoZWNrIG91cnNlbHZlcy4KICAgICBJbnRSZWN0IHJlY3Qo
dHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiByZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeCwg
eSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJl
LCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJlY3QpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggODU0N2ZlMC4uNTBmNmNmYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKQEAgLTI4Nyw5ICsyODcsMTAgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0
eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1
bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmNvbnRhaW5zKHgs
IHkpKSB7CisgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJs
ZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludCh4
LCB5KSkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5v
ZGUoKSwgeCwgeSwgcmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGU4YjU4MjIu
LmQ4MzFjMzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTM3NTIsMTkgKzM3NTIs
MjEgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVl
ZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSB2
aXNpYmxlT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmUodHgsIHR5KTsK
LSAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5jb250YWlucyhfeCwgX3kpKQorICAgICAgICBpZiAo
IW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoX3gsIF95KSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hp
bGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIF94
LCBfeSwgdHgsIHR5KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50
UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Ly8gRklYTUU6IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCgpIGRvZXNuJ3QgaGFuZGxlIHJlZ2lv
biB0ZXN0IHlldC4KKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChub2RlKCksIF94LCBfeSkpCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIC8vIElmIHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxv
dXQuCiAgICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFz
U2VsZlBhaW50aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAo
KSB8fCB1c2VPdmVyZmxvd0NsaXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlw
IHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMo
X3gsIF95KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAg
ICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNv
bnRyb2xDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoX3gs
IF95KSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZy
b21Qb2ludChfeCwgX3kpKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8g
SGl0IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIGludCBzY3JvbGxlZFggPSB0eDsK
QEAgLTM4MTIsOSArMzgxNCwxMCBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIC8vIE5v
dyBoaXQgdGVzdCBvdXIgYmFja2dyb3VuZAogICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRl
c3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0Jh
Y2tncm91bmQpIHsKICAgICAgICAgSW50UmVjdCBib3VuZHNSZWN0KHR4LCB0eSwgd2lkdGgoKSwg
aGVpZ2h0KCkpOwotICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1Jl
Y3QuY29udGFpbnMoX3gsIF95KSkgeworICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygp
ICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludChfeCwgX3kpKSkg
ewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0g
dHgsIF95IC0gdHkpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIF94LCBfeSwgYm91
bmRzUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTM4MzksMTMgKzM4NDIsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVt
bnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHIKICAgICAg
ICAgY3VycllPZmZzZXQgKz0gY29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAgY29sUmVjdC5tb3Zl
KHR4LCB0eSk7CiAgICAgICAgIAotICAgICAgICBpZiAoY29sUmVjdC5jb250YWlucyh4LCB5KSkg
eworICAgICAgICBpZiAoY29sUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHgs
IHkpKSkgewogICAgICAgICAgICAgLy8gVGhlIHBvaW50IGlzIGluc2lkZSB0aGlzIGNvbHVtbi4K
ICAgICAgICAgICAgIC8vIEFkanVzdCB0eCBhbmQgdHkgdG8gY2hhbmdlIHdoZXJlIHdlIGhpdCB0
ZXN0LgogICAgICAgICAKICAgICAgICAgICAgIGludCBmaW5hbFggPSB0eCArIGN1cnJYT2Zmc2V0
OwogICAgICAgICAgICAgaW50IGZpbmFsWSA9IHR5ICsgY3VycllPZmZzZXQ7Ci0gICAgICAgICAg
ICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBm
aW5hbFksIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNl
ZFRlc3QoKSAmJiAhY29sUmVjdC5jb250YWlucyhyZXN1bHQucmVjdEZyb21Qb2ludCh4LCB5KSkp
CisgICAgICAgICAgICAgICAgaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwg
ZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJldHVybiBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBm
aW5hbFgsIGZpbmFsWSwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCmluZGV4IDIwMjAwMDMuLmRhZjk0ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTU1NCw5ICs1NTUsMTEgQEAg
Ym9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQKIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4g
Rm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGlu
IHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2Vk
IGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwg
aGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKSB7CisgICAgSW50UmVjdCBib3VuZHNSZWN0
ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBpZiAodmlzaWJsZVRv
SGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBib3VuZHNSZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeFBvcywgeVBvcykpKSB7CiAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0
eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDhlN2QxNjUuLjIwNzM0NzkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKQEAgLTM3NywxMCArMzc3LDEwIEBAIEhUTUxNYXBFbGVtZW50KiBSZW5k
ZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogCiBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CiB7Ci0gICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICBI
aXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRkaW5nKCkp
OwogICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbik7CiAKLSAgICBpZiAoaW5z
aWRlICYmIG5vZGUoKSkgeworICAgIGlmICh0ZW1wUmVzdWx0LmlubmVyTm9kZSgpICYmIG5vZGUo
KSkgewogICAgICAgICBpZiAoSFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKICAg
ICAgICAgICAgIEludFJlY3QgY29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAg
ICAgICBmbG9hdCB6b29tID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwpAQCAtMzkxLDYgKzM5
MSw4IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBp
ZiAoIWluc2lkZSAmJiByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQodGVtcFJlc3VsdCk7CiAgICAgaWYgKGluc2lkZSkKICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc3VsdDsKICAgICByZXR1cm4gaW5zaWRlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IGQ2ZjVlOGUuLmMwZjhkOWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI3
NDYsNyArMjc0Niw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJl
bmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIGlmIChwYXJl
bnQoKSkgewogICAgICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVj
dChyb290TGF5ZXIsIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyk7CiAgICAgICAgICAgICAvLyBHbyBh
aGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5nIGNsaXAgbm93LgotICAgICAgICAgICAgaWYgKCFj
bGlwUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQpKQorICAgICAgICAgICAgaWYgKCFjbGlwUmVj
dC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KGhpdFRlc3RQb2ludCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKQEAgLTI4NTksMTcgKzI4NTksMjEgQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICB9CiAKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8g
c2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9m
IHRoZSBsYXllci4KLSAgICBpZiAoZmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNT
ZWxmUGFpbnRpbmdMYXllcigpKSB7CisgICAgaWYgKGZnUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0RnJvbVBvaW50KGhpdFRlc3RQb2ludCkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewog
ICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhpdFRlc3RSZXN1bHQsIGJlY2F1
c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBpZiB3ZSBrbm93IHdlJ3JlIGZy
b250bW9zdC4KLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgp
KTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1
bHQucGFkZGluZygpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1w
UmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdFBvaW50LCBIaXRUZXN0RGVzY2VuZGFudHMpICYm
CiAgICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRl
bnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewotICAgICAgICAgICAg
cmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRU
ZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAg
ICAgICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKICAgICAgICAgICAgIC8vIEZvcmVncm91bmQgY2FuIGRlcHRoLXNvcnQgd2l0aCBkZXNj
ZW5kYW50IGxheWVycywgc28ga2VlcCB0aGlzIGFzIGEgY2FuZGlkYXRlLgogICAgICAgICAgICAg
Y2FuZGlkYXRlTGF5ZXIgPSB0aGlzOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVz
dWx0KTsKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hp
bGRyZW4uCkBAIC0yODg1LDEzICsyODg5LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAg
ICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAK
LSAgICBpZiAoYmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdM
YXllcigpKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQo
KSk7CisgICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KGhpdFRl
c3RQb2ludCkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgICAgICBIaXRUZXN0UmVz
dWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRkaW5nKCkpOwogICAgICAg
ICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBo
aXRUZXN0UG9pbnQsIEhpdFRlc3RTZWxmKSAmJgogICAgICAgICAgICAgaXNIaXRDYW5kaWRhdGUo
dGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1T
dGF0ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CisgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIDA7
CkBAIC0yOTAzLDggKzI5MTEsOSBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0gcmVuZGVyQm94WCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAtIHJlbmRlckJveFkoKSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0VGVzdEZpbHRlcikpIHsKLSAgICAgICAgLy8g
SXQncyB3cm9uZyB0byBzZXQgaW5uZXJOb2RlLCBidXQgdGhlbiBjbGFpbSB0aGF0IHlvdSBkaWRu
J3QgaGl0IGFueXRoaW5nLgotICAgICAgICBBU1NFUlQoIXJlc3VsdC5pbm5lck5vZGUoKSk7Cisg
ICAgICAgIC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhh
dCB5b3UgZGlkbid0IGhpdCBhbnl0aGluZywgdW5sZXNzIGl0IGlzCisgICAgICAgIC8vIGEgcmVn
aW9uIHRlc3QuCisgICAgICAgIEFTU0VSVCghcmVzdWx0LmlubmVyTm9kZSgpIHx8IChyZXN1bHQu
aXNSZWN0QmFzZWRUZXN0KCkgJiYgcmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKS5zaXplKCkp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjkzOCwxNCArMjk0NywyMSBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXll
cio+KiBsaXN0LCBSZW5kZXJMYXllciogcgogICAgIGZvciAoaW50IGkgPSBsaXN0LT5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxp
c3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwotICAgICAgICBI
aXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgICAgICBIaXRUZXN0
UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRkaW5nKCkpOwogICAg
ICAgICBpZiAoY2hpbGRMYXllci0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIGhpdExheWVy
ID0gaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoY2hpbGRMYXllciwgcm9vdExheWVyLCByZXF1
ZXN0LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0
ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGl0
TGF5ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0
LCB0ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCBmYWxzZSwgdHJhbnNmb3Jt
U3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CisKKyAgICAgICAgLy8gSWYgaXQgYSByZWdp
b24gdGVzdCwgd2UgY2FuIHNhZmVseSBhcHBlbmQgdGhlIHRlbXBvcmFyeSByZXN1bHQgc2luY2Ug
aXQgbWlnaHQgaGFkIGhpdAorICAgICAgICAvLyBub2RlcyBidXQgbm90IG5lY2Vzc2VyaWx5IGhh
ZCBoaXRMYXllciBzZXQuCisgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworCiAgICAgICAgIGlmIChpc0hp
dENhbmRpZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVuZmxh
dHRlbmVkVHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgICAgICByZXN1bHRMYXllciA9IGhpdExh
eWVyOwotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBS
ZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDA1LDcgKzMwMjEsNyBAQCBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhSZW5kZXJMYXllciogY2hp
bGRMYXllciwgUmVuZAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0VGVzdFJlY3Qp
OwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5jb250
YWlucyhoaXRUZXN0UG9pbnQpKSB7CisgICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5
KCkgJiYgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KGhpdFRl
c3RQb2ludCkpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAg
ICAgICAgICAgaWYgKCFjb2x1bW5JbmRleCkgewogICAgICAgICAgICAgICAgIC8vIEFwcGx5IGEg
dHJhbnNsYXRpb24gdHJhbnNmb3JtIHRvIGNoYW5nZSB3aGVyZSB0aGUgbGF5ZXIgcGFpbnRzLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmluZGV4IDJkMjc3NDguLmIzZWI0
YzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5o
IgogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3gu
aCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgpA
QCAtMjQ1LDE0ICsyNDYsMTYgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXEKICAgICAvLyBjb250
YWluIHRoZSBwb2ludC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQgd2UgY2Fu
IHRha2UgdG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgY2hl
Y2sgaXMgZmxhd2VkIGluIHRoZSBmb2xsb3dpbmcgZXh0cmVtZWx5IG9ic2N1cmUgd2F5OgogICAg
IC8vIGlmIHNvbWUgbGluZSBpbiB0aGUgbWlkZGxlIGhhcyBhIGh1Z2Ugb3ZlcmZsb3csIGl0IG1p
Z2h0IGFjdHVhbGx5IGV4dGVuZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgotICAgIGlmICgoeSA+PSB0
eSArIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHx8ICh5
IDwgdHkgKyBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkpCisg
ICAgaWYgKHkgLSByZXN1bHQucGFkZGluZygpLmhlaWdodCgpID49IHR5ICsgbGFzdExpbmVCb3go
KS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKQorICAgICB8fCB5ICsgcmVzdWx0LnBh
ZGRpbmcoKS5oZWlnaHQoKSA8IHR5ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlzaWJs
ZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSBpZiBvdXIg
cm9vdCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4gIElmIHNvLCB0aGVuIHdlIGhpdCB0ZXN0CiAg
ICAgLy8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0IGJveGVzIGNhbiBlYXNpbHkgb3ZlcmxhcCwg
c28gd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMKICAgICAvLyBiYXNlZCBvZmYgcG9zaXRp
b25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIgbGFzdCBsaW5lIGJveC4KICAgICBmb3Ig
KElubGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+
cHJldkxpbmVCb3goKSkgewotICAgICAgICBpZiAoeSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9w
VmlzaWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxl
T3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoeSArIHJlc3VsdC5wYWRkaW5nKCkuaGVpZ2h0KCkg
Pj0gdHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpCisgICAgICAgICAmJiB5
IC0gcmVzdWx0LnBhZGRpbmcoKS5oZWlnaHQoKSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21W
aXNpYmxlT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSk7CiAgICAgICAgICAgICBpZiAo
aW5zaWRlKSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
b290LmNwcAppbmRleCA3NzEzNDQ1Li40ODIxYjI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
b290LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKIAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTMxOSw2ICszMjAsOCBAQCBib29s
IFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZQogICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IENTUy9IVE1MIGFzc3VtZXMgdGhlIGxvY2FsIHBvaW50IGlzIHJlbGF0aXZl
IHRvIHRoZSBib3JkZXIgYm94LCByaWdodD8KICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBub2Rl
QXRGbG9hdFBvaW50KCkgZG9lc24ndCBoYW5kbGUgcmVnaW9uIHRlc3QgeWV0LgorICAgICAgICAg
ICAgcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwgX3gs
IF95KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGZkOTA5OTAuLmNhNWRjNmEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTExMzUs
NyArMTEzNiw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgdHkgKz0geSgpOwogCiAg
ICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92
ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIGlmICgh
aGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGcm9tUG9pbnQoeFBvcywgeVBvcykpKSB7CiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5k
ZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNl
Y3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pICYmCiAgICAgICAgICAgICAgICAgY2hpbGQt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24p
KSB7CkBAIC0xMTQ2LDkgKzExNDcsMTEgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICB9
CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuCi0gICAgaWYgKHZpc2libGVUb0hpdFRl
c3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09
IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgSW50UmVjdCh0eCwgdHksIHdpZHRoKCks
IGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIEludFJlY3QgYm91bmRzUmVj
dCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0
aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNl
Y3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGIyNWQzZTYuLjJjMWI3MzkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMTE1Miw3ICsx
MTUzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICB0eCArPSB4KCk7CiAgICAgdHkg
Kz0geSgpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0
KHR4LCB0eSkuY29udGFpbnMoeFBvcywgeVBvcykpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgp
ICYmICFvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Q
b2ludCh4UG9zLCB5UG9zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IDZmYjI3
NDkuLjZlYzViNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMzk0LDcgKzM5
NCw3IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzCiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJS
ZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlv
bik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUg
d2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4K
LSAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5v
ZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFo
YWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKICAgICAgICAgcmVzdWx0
LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJlc3VsdC5sb2NhbFBv
aW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQotLSAKMS43LjAuNAoK
</data>
<flag name="commit-queue"
          id="50320"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62313</attachid>
            <date>2010-07-22 10:43:38 -0700</date>
            <delta_ts>2010-07-23 12:11:17 -0700</delta_ts>
            <desc>patch v5 - feature + tests</desc>
            <filename>0001-2010-07-21-Grace-Kloba--Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>57565</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSAyZGI3YmIxODlhODQ4OTUzYjg5ZGQ3Y2QyZDgxMTVmOTNhMzM2MjIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMjEgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFBhdGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5
c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQogICAgICAgIGFzIGlu
cHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNhYmxlLiBUaGUgcHJpbWFyeSBnb2Fs
IG9mIHRoaXMgY2hhbmdlCiAgICAgICAgaXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3Jl
IHByZWNpc2UgdGFwIGFjdGlvbnMgYnkgdGhlIHVzZXJzLgoKICAgICAgICBUaGUgbWFpbiBpZGVh
IGlzIHRvIG1vZGlmeSB0aGUgSGl0VGVzdFJlc3VsdCB0byB0YWtlIGEgcGFkZGluZy4gVGhlIHBh
ZGRpbmcKICAgICAgICB0ZWxscyBob3cgbXVjaCB0byBleHBhbmQgdGhlIHNlYXJjaCByZWN0IGFy
b3VuZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50LiBJZiBpdAogICAgICAgIGlzIG5vbi1wb3NpdGl2
ZSwgaXQgd29ya3MgYXMgdGhlIGN1cnJlbnQgcG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcuIE90aGVy
d2lzZSwgaGl0CiAgICAgICAgdGVzdCB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbCBub2RlcyB0aGF0
IGludGVyc2VjdCB0aGUgcHJvdmlkZWQgdGVzdCBhcmVhLiBUaGUgbG9naWMKICAgICAgICB3aWxs
IGNvbnRpbnVlIHNlYXJjaGluZyB3aGVuIGl0IGZpbmRzIGEgY2FuZGlkYXRlIHVudGlsIHRoZSBy
ZWN0YW5nbGUgaXMgZnVsbHkgZW5jbG9zZWQKICAgICAgICBieSB0aGUgY2FuZGlkYXRlLiBUaGUg
cmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleSBhcmUgaGl0
LXRlc3RlZC4KICAgICAgICBUaGUgY2FsbGVyIHdpbGwgZGVjaWRlIGhvdyB0byBwcm9jZXNzIHRo
ZW0uCgogICAgICAgIEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBh
dGNoOgoKICAgICAgICAtIEFkZHMgYSBub2Rlc0Zyb21SZWN0IG1ldGhvZCB0byB0aGUgRG9jdW1l
bnQgY2xhc3MsIGV4cG9zaW5nIHRoZSBmdW5jaW9uYWxpdHkKICAgICAgICB0byB0aGUgRE9NLiBN
ZXRob2QgcmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRo
ZSBnaXZlbgogICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KICAgICAgICAtIEV4dGVuZHMgaGl0VGVz
dFJlc3VsdEF0UG9pbnQgbWV0aG9kIG9mIHRoZSBFdmVudEhhbmRsZXIgd2l0aCBhbiBleHRyYSAn
cGFkZGluZycKICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgtMSwgLTEp
LiBUaGUgcmVjdC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCiAgICAgICAgbm9u
LW5lZ2F0aXZlIHBhZGRpbmcgaXMgcGFzc2VkIGluLgoKICAgICAgICBUZXN0OiBmYXN0L2RvbS9u
b2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKCiAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgogICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVz
RnJvbVJlY3QpOiBUaGlzIG1ldGhvZCBleHBvc2VzIHRoZSByZWN0IGJhc2VkIGZ1bmNpb25hbGl0
eSB0bwogICAgICAgIHRoZSBET00uIEl0IHdvcmtzIHNpbWlsYXJseSB0byBlbGVtZW50RnJvbVBv
aW50LCBob3dldmVyIHJlY2VpdmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKICAgICAgICBhcyBpbnB1
dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQgbGlz
dCBvZiBub2RlcyAobm90IGVsZW1lbnRzKQogICAgICAgIHdob3NlIGFyZWEgaW50ZXJzZWN0IHRo
ZSBoaXQgdGVzdCByZWN0LgogICAgICAgICogZG9tL0RvY3VtZW50Lmg6IERpdHRvLgogICAgICAg
ICogZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCiAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQp
OiBUaGUgZnVuY2lvbmFsaXR5IGlzIGFsc28gZXhwb3NlZCB0aHJvdWdoIHRoaXMKICAgICAgICBt
ZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdvcmsg
YXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKICAgICAgICB0aGUgaGl0IHRlc3QgcmVj
dC4KICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IERpdHRvLgogICAgICAgICogcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpI
aXRUZXN0UmVzdWx0KTogUmVjdCBiYXNlZCBoaXQgdGVzdCBjb25zdHJ1Y3Rvci4gUmVjZWl2ZXMg
YQogICAgICAgIHBhZGRpbmcgSW50U2l6ZSBhcyBwYXJhbWV0ZXIuIEl0IGNhbiBiZSAoMCwwKS4K
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZpZWQgdG8g
YXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMgd2VsbC4KICAgICAgICAoV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdDo6YXBwZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJlc3VsdCBvYmplY3Rz
IGluIGEgd2F5IHRoYXQgdGhlCiAgICAgICAgbGlzdCBub2RlJ3Mgb2YgYm90aCBvYmplY3RzIGdl
dCBhbWVuZGVkLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxpc3Qgb2YKICAgICAg
ICBoaXQgbm9kZXMuCiAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgogICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0aGUgcGFkZGluZyBh
cyBhbiBJbnRTaXplLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc1JlY3RCYXNl
ZFRlc3QpOiBSZXR1cm5zIGlmIHRoZSBIaXRUZXN0UmVzdWx0IGlzIHJlY3QgYmFzZWQgb3Igbm90
LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjoucmVjdEJhc2VkVGVzdFJlc3VsdCk6
IFJldHVybnMgdGhlIGxpc3Qgbm9kZXMgaGl0LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJucyB0aGUgaGl0IHRlc3QgcmVjdCBnaXZlbiB0aGUg
aGl0IHRlc3QgcG9pbnQKICAgICAgICBhbmQgcGFkZGluZy4KICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5
ZXIpOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgogICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKToKICAgICAg
ICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lz
Qm94Ojpub2RlQXRQb2ludCk6IE1ldGhvZCBpcyBtb2RpZmllZCB0byBzdXBwb3J0IHJlY3QgYmFz
ZWQgaGl0IHRlc3QgZXh0ZW5zaW9uLgogICAgICAgIE5vdyBpdCBub3QganVzdCBjaGVja3MgaWYg
dGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGJlaW5nIGhpdC10ZXN0ZWQgY29udGFpbnMgYSBoaXQg
dGVzdCBwb2ludCwgYnV0CiAgICAgICAgaW5zdGVhZCBpdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5
IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBoaXQgdGVzdCByZWN0LiBJdCBpcyBpbXBsZW1lbnRl
ZCBzbwogICAgICAgIHRoYXQgdGhlIGNvbW1vbiBjYXNlIChwb2ludCBiYXNlZCBoaXQgdGVzdCkg
d29ya3MgYXMgcHJldmlvdXNseS4KICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4K
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2lu
dCk6IERpdHRvLgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMp
OiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgogICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9p
bnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9v
dDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgog
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CiAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6
Om5vZGVBdFBvaW50KTogRGl0dG8uCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsrCiAuLi4vZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCB8ICAgIDEgKwogLi4uL2Zhc3QvZG9tL25vZGVzRnJv
bVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0ICAgICAgfCAgIDI2ICsrKysrKwogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sICAgICAgfCAgIDg5ICsrKysrKysrKysr
KysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5j
c3MgICB8ICAgNDQgKysrKysrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuanMgICAgfCAgIDQ0ICsrKysrKysrKysKIC4uLi9mYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiBXZWJDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODggKysrKysrKysrKysrKysr
KysrKwogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAyICstCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNjkgKysrKysrKysrKysrKysrCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKysrCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5p
ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIFdlYkNvcmUv
cmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgICAgICAgICAgICAgICAgfCAgIDUyICsr
KysrKysrKysrKwogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oICAgICAgICAgICAg
ICAgICAgfCAgIDQ4ICsrKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcCAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwICAgICAgICAgICAgICAgIHwgICAgNSArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwICAgICAgICAgICAgICAgICAgfCAgIDIwICsrKy0tCiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsr
KysrKystLS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCAgICAgICAg
ICAgIHwgICAgNyArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgICAgICAg
ICAgICAgICAgfCAgICAzICsKIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCAgICAg
ICAgICAgICAgICAgIHwgICAgOSArKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAgICAgICAgICAgIHwgICAgMyArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcCAgICAgICAgICAgICAgICAgfCAgICAyICstCiAyOCBmaWxlcyBjaGFuZ2VkLCA1NzYg
aW5zZXJ0aW9ucygrKSwgNDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0
VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNG
cm9tUmVjdC5jc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNv
dXJjZXMvbm9kZXNGcm9tUmVjdC5qcwoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0M2NhYjFkLi43MGUzN2JmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDctMjEgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJr
aXQub3JnPiAsIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhhbmNlIHRoZSBoaXQgdGVzdGlu
ZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2ludAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcKKworICAgICAgICAqIGZhc3Qv
ZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTIyICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVy
dGllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBy
b3BlcnRpZXMtZXhwZWN0ZWQudHh0CmluZGV4IDliMDk5ODQuLmM5NzczNDEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dApAQCAtNjI4LDYgKzYyOCw3IEBAIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUu
aXNTYW1lTm9kZSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmlzU3VwcG9y
dGVkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubG9va3VwTmFtZXNwYWNl
VVJJIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubG9va3VwUHJlZml4IFtm
dW5jdGlvbl0KK3dpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubm9kZXNGcm9tUmVjdCBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5k
b3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZEVuYWJsZWQgW2Z1bmN0aW9uXQogd2lu
ZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRJbmRldGVybSBbZnVuY3Rpb25dCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjFlYTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJl
Y3QgWzUzLDcxXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3Qg
WzUzLDcxXSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1
Myw3MV0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMs
NzFdLCBbMTAsMTBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIs
MTA1XSwgWzAsMTBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIs
MTA1XSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIs
MTA1XSwgWzEwLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUz
LDE5M10sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMs
MTkzXSwgWzIwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMs
MTkzXSwgWzAsMjBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQs
MTgzXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwx
ODNdLCBbMCwxXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4
M10sIFsxLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgz
XSwgWzEsMV0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0s
IFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBb
MTAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFsw
LDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzEw
LDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzAs
MF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFswLDEw
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzEwLDBd
CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMTAsMTBd
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQwNjRhCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sCkBAIC0wLDAg
KzEsODkgQEAKKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5Eb2N1bWVudDo6bm9kZXNGcm9tUmVj
dCB0ZXN0IC0gYnVnIDQwMTk3PC90aXRsZT4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gQGlt
cG9ydCAicmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzIjsgPC9zdHlsZT4KKyAgPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlw
ZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAg
eworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgIH0KKworICAgICAgdmFyIGUgPSB7fTsKKworICAg
ICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFjY2VzcyB0byBlbGVtZW50cworICAgICAgZVsnaHRtbCdd
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXTsKKyAgICAgIFsnaDEn
LCAnZDEnLCAnZDInLCAncDEnLCAncDInLCAncDMnLCAncDQnLCAncDUnLCAnc3BhbicsICdib2R5
J10uZm9yRWFjaChmdW5jdGlvbihhKSB7CisgICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChhKTsKKyAgICAgIH0pOworCisgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisK
KyAgICAgIGNoZWNrKDUzLCA3MSwgMCwgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcx
LCAxMCwgMCwgW2UucDMsIGUuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAwLCAxMCwgW2Uu
ZDEsIGUuaDEsIGUuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAxMCwgMTAsIFtlLnAzLCBl
LmQxLCBlLmgxLCBlLmJvZHldKTsKKworICAgICAgY2hlY2soMTUyLCAxMDUsIDAsIDEwLCBbZS5w
MywgZS5ib2R5XSk7CisgICAgICBjaGVjaygxNTIsIDEwNSwgMTAsIDAsIFtlLnA0LCBlLmQxLCBl
LmJvZHldKTsKKyAgICAgIGNoZWNrKDE1MiwgMTA1LCAxMCwgMTAsIFtlLnA0LCBlLnAzLCBlLmQx
LCBlLmJvZHldKTsKKworICAgICAgLy8gZS5wMSBpcyBpbnZpc2libGUgYW5kIHNob3VsZG4ndCBh
cHBlYXI6CisgICAgICBjaGVjaygxNTMsMTkzLDAsMCxbZS5wNV0pOworICAgICAgLy8gTk9URTog
W2UucDUsIGUuZDJdKSBzaG91bGQgYmUgcmV0dXJuZWQgaWYgd2UgZGlkIG5vdCBzdG9wCisgICAg
ICAvLyBhdCBlLnA1LCB3aGljaCBmdWxseSBlbmNsb3NlcyB0aGUgdGFyZ2V0IHJlY3QuCisgICAg
ICBjaGVjaygxNTMsMTkzLDIwLDAsIFtlLnA1XSk7CisgICAgICBjaGVjaygxNTMsMTkzLDAsMjAs
IFtlLnA1LCBlLmJvZHldKTsKKworICAgICAgLy8gUHJlY2lzZSBwaXhlbCBjaGVja3M6CisgICAg
ICBjaGVjaygxNDQsIDE4MywgMCwgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2soMTQ0LCAxODMs
IDAsIDEsIFtlLnA1LCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE0NCwgMTgzLCAxLCAwLCBbZS5k
MiwgZS5ib2R5XSk7CisgICAgICBjaGVjaygxNDQsIDE4MywgMSwgMSwgW2UucDUsIGUuZDIsIGUu
Ym9keV0pOworICAgICAgY2hlY2soNzcsIDI0MCwgMCwgMCwgW2UucDJdKTsKKyAgICAgIGNoZWNr
KDc3LCAyNDAsIDEwLCAwLCBbZS5wMl0pOworICAgICAgY2hlY2soNzcsIDI0MCwgMCwgMTAsIFtl
LnA1LCBlLnNwYW4sIGUucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAxMCwgW2UucDUs
IGUuc3BhbiwgZS5wMl0pOworCisgICAgICAvLyBFeHBhbmRpbmcgYXJlYSBjaGVja3M6CisgICAg
ICBjaGVjaygzOSwgMjEyLCAwLCAgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2soMzksIDIxMiwg
MCwgMTAsIFtlLmQyLCBlLnAyLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDM5LCAyMTIsIDEwLCAw
LCBbZS5wNSwgZS5ib2R5XSk7CisgICAgICBjaGVjaygzOSwgMjEyLCAxMCwgMTAsIFtlLnA1LCBl
LmQyLCBlLnAyLCBlLmJvZHldKTsKKworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0K
KworICAgIHdpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IGlkPSJib2R5Ij4KKyAgPGgxIGlkPSJoMSI+PC9oMT4KKyAgPGRpdiBpZD0iZDEiPjwvZGl2
PgorCisgIDwhLS0gZmxvYXRlZCBlbGVtZW50IC0tPgorICA8ZGl2IGlkPSJkMiIgc3R5bGU9ImZs
b2F0OiBsZWZ0Ij48L2Rpdj4KKworICA8IS0tIGhpZGRlbiBlbGVtZW50IC0tPgorICA8cCBpZD0i
cDEiIHN0eWxlPSJmbG9hdDogbGVmdDsgdmlzaWJpbGl0eTogaGlkZGVuIj48L3A+CisKKyAgPHAg
aWQ9InAyIiBzdHlsZT0iY2xlYXI6IGxlZnQiPjxzcGFuIGlkPSJzcGFuIj48L3NwYW4+PC9wPgor
CisgIDwhLS0gYWJzb2x1dGUgcG9zaXRpb24gLS0+CisgIDxwIGlkPSJwMyIgc3R5bGU9InBvc2l0
aW9uOmFic29sdXRlOyB0b3A6IDEwcHg7IGxlZnQ6NTBweDsgaGVpZ2h0OjUwcHg7Ij48L3A+CisK
KyAgPCEtLSBmaXhlZCBwb3NpdGlvbiAtLT4KKyAgPHAgaWQ9InA0IiBzdHlsZT0icG9zaXRpb246
IGZpeGVkOyB0b3A6IDMwcHg7IGxlZnQ6IDE1MHB4OyBoZWlnaHQ6IDUwcHg7IGJhY2tncm91bmQt
Y29sb3I6IGJsdWU7Ij48L3A+CisKKyAgPCEtLSByZWxhdGl2ZSBwb3NpdGlvbiAtLT4KKyAgPHAg
aWQ9InA1IiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDogLTEwMHB4OyBsZWZ0OiAzMHB4
OyBtYXJnaW4tYm90dG9tOiAtNzBweDsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW4iPjwvcD4KKwor
ICA8c3BhbiBpZD0iY29uc29sZSI+PC9zcGFuPgorICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU2ZmMwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzCkBAIC0wLDAg
KzEsNDQgQEAKK2JvZHkgeworICBtYXJnaW46IDhweDsKKyAgcGFkZGluZzogMDsKK30KKworaDEs
IGRpdiwgcCwgaWZyYW1lIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDBweDsKKyAg
aGVpZ2h0OiAzMHB4OworICBib3JkZXI6IDNweCBzb2xpZCBibGFjazsKKyAgcGFkZGluZzogMTBw
eDsKKyAgbWFyZ2luOiAxMHB4OworfQorCisjc3BhbiB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3
aWR0aDogMTAwcHg7CisgIGhlaWdodDogMzBweDsKKyAgYm9yZGVyOiAzcHggc29saWQgYmxhY2s7
CisgIHBhZGRpbmc6IDEwcHg7CisgIG1hcmdpbjogMTBweDsKKyAgZGlzcGxheTogaW5saW5lLWJs
b2NrOworfQorCisjaWZyYW1lMSB7CisgIGhlaWdodDogMTAwcHg7CisgIG1hcmdpbi10b3A6IDYw
cHg7Cit9CisKKyNwNiB7CisgIGhlaWdodDogNTBweDsKKyAgbWFyZ2luLXRvcDogMzBweDsKK30K
KworI3RyYW5zZiB7CisgIG1hcmdpbi10b3A6IDYwcHg7CisgIC13ZWJraXQtdHJhbnNmb3JtOiBy
b3RhdGUoLTQ1ZGVnKTsKK30KKworI2RlY2ltYWwgeworICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
IGxlZnQ6IDAuNXB4OworICB0b3A6IDUwLjVweDsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYmUwNmM2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb250
cmlidXRvcnM6CisgKiAgICAgKiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
KyAqKi8KKworZnVuY3Rpb24gY2hlY2soeCwgeSwgaFBhZGRpbmcsIHZQYWRkaW5nLCBsaXN0KQor
eworICAvKgorICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4gbG9uZyB4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gbG9uZyB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gbG9uZyBoUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvbmcgdlBh
ZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGlnbm9yZUNsaXBw
aW5nKTsKKyAgKi8KKyAgdmFyIG5vZGVzID0gZG9jdW1lbnQubm9kZXNGcm9tUmVjdCh4LCB5LCBo
UGFkZGluZywgdlBhZGRpbmcsIHRydWUgLyogaWdub3JlQ2xpcHBpbmcgKi8pOworCisgIGlmIChu
b2Rlcy5sZW5ndGggIT0gbGlzdC5sZW5ndGgpIHsKKyAgICB0ZXN0RmFpbGVkKCJEaWZmZXJlbnQg
bnVtYmVyIG9mIG5vZGVzIGZvciByZWN0IiArCisgICAgICAgICAgICAgICJbIiArIHggKyAiLCIg
KyB5ICsgIl0sICIgKworICAgICAgICAgICAgICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRk
aW5nICsgIl06ICciICsgbGlzdC5sZW5ndGggKyAiJyB2cyAnIiArIG5vZGVzLmxlbmd0aCArICIn
Iik7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5n
dGg7IGkrKykgeworICAgIGlmIChub2Rlc1tpXSAhPSBsaXN0W2ldKSB7CisgICAgICB0ZXN0RmFp
bGVkKCJVbmV4cGVjdGVkIG5vZGUgIyIgKyBpICsgIiBmb3IgcmVjdCAiICsKKyAgICAgICAgICAg
ICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyBo
UGFkZGluZyArICIsIiArIHZQYWRkaW5nICsgIl0iICsgIiAtICIgKyBub2Rlc1tpXSk7CisgICAg
ICByZXR1cm47CisgICAgfQorICB9CisKKyAgdGVzdFBhc3NlZCgiQWxsIGNvcnJlY3Qgbm9kZXMg
Zm91bmQgZm9yIHJlY3QgIiAgKworICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAi
ICsKKyAgICAgICAgICAgIlsiICsgaFBhZGRpbmcgKyAiLCIgKyB2UGFkZGluZyArICJdIik7Cit9
CisKK2Z1bmN0aW9uIGdldENlbnRlckZvcihlbGVtZW50KQoreworICB2YXIgcmVjdCA9IGVsZW1l
bnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgIHJldHVybiB7IHggOiBwYXJzZUludCgocmVj
dC5sZWZ0ICsgcmVjdC5yaWdodCkgLyAyKSAsIHkgOiBwYXJzZUludCgocmVjdC50b3AgKyByZWN0
LmJvdHRvbSkgLyAyKX07Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggNDQ5Mzc5Zi4uMmU5
YTU4NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC02
MjgsNiArNjI4LDcgQEAgd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pc1NhbWVOb2RlIFtmdW5j
dGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTdXBwb3J0ZWQgW2Z1bmN0aW9uXQog
d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5sb29rdXBOYW1lc3BhY2VVUkkgW2Z1bmN0aW9uXQog
d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5sb29rdXBQcmVmaXggW2Z1bmN0aW9uXQord2luZG93
LkRvY3VtZW50LnByb3RvdHlwZS5ub2Rlc0Zyb21SZWN0IFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUubm9ybWFsaXplIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90
b3R5cGUucXVlcnlDb21tYW5kRW5hYmxlZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJv
dG90eXBlLnF1ZXJ5Q29tbWFuZEluZGV0ZXJtIFtmdW5jdGlvbl0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM2NzhhNi4uODZlNDhjYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw5MSBAQAorMjAxMC0wNy0yMSBHcmFjZSBLbG9iYSAgPGtsb2JhZ0BnbWFpbC5jb20+
ICwgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5n
IHRvIHRha2UgYSByZWN0YW5nbGUgaW5zdGVhZCBvZiBhIHBvaW50CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE5NworCisgICAgICAgIFBhdGNoIGV4
dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFu
Z3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIHdoZW4gYXBw
bGljYWJsZS4gVGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIGNoYW5nZQorICAgICAgICBpcyB0byBw
cm92aWRlIG1lY2hhbmlzbXMgZm9yIG1vcmUgcHJlY2lzZSB0YXAgYWN0aW9ucyBieSB0aGUgdXNl
cnMuCisKKyAgICAgICAgVGhlIG1haW4gaWRlYSBpcyB0byBtb2RpZnkgdGhlIEhpdFRlc3RSZXN1
bHQgdG8gdGFrZSBhIHBhZGRpbmcuIFRoZSBwYWRkaW5nCisgICAgICAgIHRlbGxzIGhvdyBtdWNo
IHRvIGV4cGFuZCB0aGUgc2VhcmNoIHJlY3QgYXJvdW5kIGEgc3VwcG9zZWQgdG91Y2ggcG9pbnQu
IElmIGl0CisgICAgICAgIGlzIG5vbi1wb3NpdGl2ZSwgaXQgd29ya3MgYXMgdGhlIGN1cnJlbnQg
cG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcuIE90aGVyd2lzZSwgaGl0CisgICAgICAgIHRlc3Qgd2ls
bCBrZWVwIHJlY29yZCBvZiBhbGwgbm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhlIHByb3ZpZGVkIHRl
c3QgYXJlYS4gVGhlIGxvZ2ljCisgICAgICAgIHdpbGwgY29udGludWUgc2VhcmNoaW5nIHdoZW4g
aXQgZmluZHMgYSBjYW5kaWRhdGUgdW50aWwgdGhlIHJlY3RhbmdsZSBpcyBmdWxseSBlbmNsb3Nl
ZAorICAgICAgICBieSB0aGUgY2FuZGlkYXRlLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9m
IE5vZGUgaW4gdGhlIHotb3JkZXIgdGhleSBhcmUgaGl0LXRlc3RlZC4KKyAgICAgICAgVGhlIGNh
bGxlciB3aWxsIGRlY2lkZSBob3cgdG8gcHJvY2VzcyB0aGVtLgorCisgICAgICAgIEluIG9yZGVy
IHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoOgorCisgICAgICAgIC0gQWRk
cyBhIG5vZGVzRnJvbVJlY3QgbWV0aG9kIHRvIHRoZSBEb2N1bWVudCBjbGFzcywgZXhwb3Npbmcg
dGhlIGZ1bmNpb25hbGl0eQorICAgICAgICB0byB0aGUgRE9NLiBNZXRob2QgcmV0dXJucyBhIE5v
ZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBnaXZlbgorICAgICAgICBo
aXQtdGVzdGVkIGFyZWEuCisgICAgICAgIC0gRXh0ZW5kcyBoaXRUZXN0UmVzdWx0QXRQb2ludCBt
ZXRob2Qgb2YgdGhlIEV2ZW50SGFuZGxlciB3aXRoIGFuIGV4dHJhICdwYWRkaW5nJworICAgICAg
ICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgtMSwgLTEpLiBUaGUgcmVjdC1iYXNl
ZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCisgICAgICAgIG5vbi1uZWdhdGl2ZSBwYWRk
aW5nIGlzIHBhc3NlZCBpbi4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0
LWJhc2ljLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2Rlc0Zyb21SZWN0
KTogVGhpcyBtZXRob2QgZXhwb3NlcyB0aGUgcmVjdCBiYXNlZCBmdW5jaW9uYWxpdHkgdG8KKyAg
ICAgICAgdGhlIERPTS4gSXQgd29ya3Mgc2ltaWxhcmx5IHRvIGVsZW1lbnRGcm9tUG9pbnQsIGhv
d2V2ZXIgcmVjZWl2aW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0
ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQgbGlzdCBvZiBu
b2RlcyAobm90IGVsZW1lbnRzKQorICAgICAgICB3aG9zZSBhcmVhIGludGVyc2VjdCB0aGUgaGl0
IHRlc3QgcmVjdC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0dG8uCisgICAgICAgICog
ZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6
IFRoZSBmdW5jaW9uYWxpdHkgaXMgYWxzbyBleHBvc2VkIHRocm91Z2ggdGhpcworICAgICAgICBt
ZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdvcmsg
YXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKKyAgICAgICAgdGhlIGhpdCB0ZXN0IHJl
Y3QuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6SGl0VGVzdFJlc3VsdCk6IFJlY3QgYmFzZWQgaGl0IHRlc3QgY29uc3RydWN0b3IuIFJlY2Vp
dmVzIGEKKyAgICAgICAgcGFkZGluZyBJbnRTaXplIGFzIHBhcmFtZXRlci4gSXQgY2FuIGJlICgw
LDApLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZp
ZWQgdG8gYXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMgd2VsbC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6IE1lcmdlIHRvIEhpdFRlc3RSZXN1bHQg
b2JqZWN0cyBpbiBhIHdheSB0aGF0IHRoZQorICAgICAgICBsaXN0IG5vZGUncyBvZiBib3RoIG9i
amVjdHMgZ2V0IGFtZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxpc3Qg
b2YKKyAgICAgICAgaGl0IG5vZGVzLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0
aGUgcGFkZGluZyBhcyBhbiBJbnRTaXplLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6aXNSZWN0QmFzZWRUZXN0KTogUmV0dXJucyBpZiB0aGUgSGl0VGVzdFJlc3VsdCBpcyByZWN0
IGJhc2VkIG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Oi5yZWN0QmFz
ZWRUZXN0UmVzdWx0KTogUmV0dXJucyB0aGUgbGlzdCBub2RlcyBoaXQuCisgICAgICAgIChXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJucyB0aGUgaGl0IHRlc3Qg
cmVjdCBnaXZlbiB0aGUgaGl0IHRlc3QgcG9pbnQKKyAgICAgICAgYW5kIHBhZGRpbmcuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhp
dFRlc3RMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRM
YXllckNvbHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOiBNZXRob2QgaXMgbW9kaWZp
ZWQgdG8gc3VwcG9ydCByZWN0IGJhc2VkIGhpdCB0ZXN0IGV4dGVuc2lvbi4KKyAgICAgICAgTm93
IGl0IG5vdCBqdXN0IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2YgdGhlIG5vZGUgYmVpbmcgaGl0
LXRlc3RlZCBjb250YWlucyBhIGhpdCB0ZXN0IHBvaW50LCBidXQKKyAgICAgICAgaW5zdGVhZCBp
dCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBoaXQgdGVz
dCByZWN0LiBJdCBpcyBpbXBsZW1lbnRlZCBzbworICAgICAgICB0aGF0IHRoZSBjb21tb24gY2Fz
ZSAocG9pbnQgYmFzZWQgaGl0IHRlc3QpIHdvcmtzIGFzIHByZXZpb3VzbHkuCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxv
d0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6
IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQ
b2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGluZUJveExpc3Q6OmhpdFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
b290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KTog
RGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2lu
dCk6IERpdHRvLgorCiAyMDEwLTA3LTIyICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ft
c3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA5MDRj
ZjZlLi4yYWQ2Y2M0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTIxNiw3ICsyMTYsNyBAQCBfX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsb3dFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNfMTdTY3Jv
bGxHcmFudQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNXNlbmRTY3JvbGxFdmVudEV2CiBf
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSTlNfMThQbGF0Zm9y
bVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGFuZGxlVGV4dElucHV0
RXZlbnRFUktOU182U3RyaW5nRVBOU181RXZlbnRFYmIKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNj
cm9sbGJhcnNFagorX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBv
aW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU183SW50U2l6
ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktO
U18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5k
bGVNb3VzZVJlbGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggOWM3NDdkMy4uZWViODNjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTE5LDYgKzExOSw3IEBACiAj
aW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RhdGljSGFzaFNldE5vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExp
c3QuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKQEAgLTIwOCw2ICsyMDksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyAjZGVmaW5lIElO
U1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQorLy8gI2RlZmluZSBEVU1QX0hJVFRFU1RfUkVT
VUxUIDEKIAogLy8gVGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxhcHNlZCBiZWZvcmUg
d2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0aG91dCBhIGRlbGF5
LgogLy8gRklYTUU6IEZvciBmYXN0ZXIgbWFjaGluZXMgdGhpcyB2YWx1ZSBjYW4gcmVhbGx5IGJl
IGxvd2VyZWQgdG8gMjAwLiAgMjUwIGlzIGFkZXF1YXRlLCBidXQgYSBsaXR0bGUgaGlnaApAQCAt
MTAwMyw2ICsxMDA1LDczIEBAIEtVUkwgRG9jdW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogICAgIHJl
dHVybiBtX2Jhc2VVUkw7CiB9CiAKKyNpZmRlZiBEVU1QX0hJVFRFU1RfUkVTVUxUCit2b2lkIHN0
YXRpYyBkdW1wSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCit7Cisg
ICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbGlzdCA9IHJlc3VsdC5yZWN0QmFzZWRUZXN0
UmVzdWx0KCk7CisgICAgcHJpbnRmKCIoJXMpIC0ge3g9JWQgeT0lZCBoUGFkZGluZz0lZCB2UGFk
ZGluZz0lZH1cbiIsCisgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0LnBvaW50KCkueCgp
LCByZXN1bHQucG9pbnQoKS55KCksIHJlc3VsdC5wYWRkaW5nKCkud2lkdGgoKSwgcmVzdWx0LnBh
ZGRpbmcoKS5oZWlnaHQoKSk7CisgICAgcHJpbnRmKCJMaXN0IHNpemU6JWRcbiIsIGxpc3Quc2l6
ZSgpKTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8
Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7CisgICAgTGlzdEhhc2hT
ZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CisgICAg
Zm9yICggOyBpdCAhPSBlbmQgOyArK2l0KSB7CisgICAgICAgIHByaW50ZigiJWQpICIsICsrY291
bnQpOworICAgICAgICBOb2RlKiBub2RlID0gKCppdCkuZ2V0KCk7CisgICAgICAgIGlmIChub2Rl
LT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNJRCgpKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiSGl0IGVsZW1lbnQgPCVzPiwgaWQ9JyVzJ1xuIiwgbm9kZS0+
bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdl
dEF0dHJpYnV0ZSgiaWQiKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwcmludGYoIkhpdCBlbGVtZW50IDwlcz4sIE5PIElEISdcbiIs
IG5vZGUtPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobm9k
ZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAgICAgcHJpbnRmKCJUZXh0IG5vZGUgaGl0LiBDb250
ZW50OiclcydcbiIsIG5vZGUtPnRleHRDb250ZW50KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiSGl0IG5vZGUgPCVzPlxuIiwgbm9kZS0+bm9kZU5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworfQorI2VuZGlm
CisKKy8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc2N1c3MgdGhlIERPTSBBUEkgaGVyZSBhdCBzb21l
IHBvaW50LiBJZGVhczoKKy8vICogbWFraW5nIGl0IHJlY2VpdmUgYSByZWN0IGFzIHBhcmFtZXRl
ciwgaS5lLiBub2Rlc0Zyb21SZWN0KHgsIHksIHcsIGgpOworLy8gKiBtYWtpbmcgaXQgcmVjZWl2
ZSB0aGUgZXhwYWRpbmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBzZXBhcmF0ZWx5LAorLy8gICBp
LmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdG9wU2l6ZSwgcmlnaHRTaXplLCBib3R0b21TaXplLCBs
ZWZ0U2l6ZSk7CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9kZXNGcm9tUmVjdChp
bnQgY2VudGVyWCwgaW50IGNlbnRlclksIGludCBoUGFkZGluZywgaW50IHZQYWRkaW5nLCBib29s
IGlnbm9yZUNsaXBwaW5nKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaGFyZSBjb2RlIGJldHdl
ZW4gdGhpcywgZWxlbWVudEZyb21Qb2ludCBhbmQgY2FyZXRSYW5nZUZyb21Qb2ludC4KKyAgICBp
ZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZVZpZXctPnBh
Z2Vab29tRmFjdG9yKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxv
YXRQb2ludChjZW50ZXJYICogem9vbUZhY3RvciAgKyB2aWV3KCktPnNjcm9sbFgoKSwgY2VudGVy
WSAqIHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworICAgIEludFNpemUgcGFkZGlu
ZyhoUGFkZGluZywgdlBhZGRpbmcpOworCisgICAgaW50IHR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6
UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisgICAgLy8gV2hlbiBpZ25vcmVD
bGlwcGluZyBpcyBmYWxzZSwgdGhpcyBtZXRob2QgcmV0dXJucyBudWxsIGZvciBjb29yZGluYXRl
cyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICBpZiAoaWdub3JlQ2xpcHBpbmcpCisgICAg
ICAgIHR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nOworICAgIGVsc2UgaWYg
KCFmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmludGVyc2VjdHMoSW50UmVjdChwb2lu
dCwgcGFkZGluZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJl
cXVlc3QodHlwZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOwor
ICAgIHJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOworCisj
aWZkZWYgRFVNUF9ISVRURVNUX1JFU1VMVAorICAgIGR1bXBIaXRUZXN0UmVzdWx0KHJlc3VsdCk7
CisjZW5kaWYKKworICAgIHJldHVybiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q6OmFkb3B0KHJlc3Vs
dC5yZWN0QmFzZWRUZXN0UmVzdWx0KCkpOworfQorCiBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVu
dEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNoYXJlIGNv
ZGUgYmV0d2VlbiB0aGlzIGFuZCBjYXJldFJhbmdlRnJvbVBvaW50LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDc4Y2I1
My4uNzg5Yjk2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zMDIsNiArMzAyLDE4IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0OwogICAgIGJvb2wg
Y29udGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVu
dElkKSB7IHJldHVybiBtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKTsg
fQogCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IGEg
cmVjdCBpbiB0aGUgd2luZG93J3MgZG9jdW1lbnQsIHVudGlsIGl0IGlzIGZ1bGx5IGVuY2xvc2Vk
IGJ5CisgICAgICogdGhlIGJvdW5kYXJpZXMgb2Ygbm9kZS4KKyAgICAgKgorICAgICAqIEBwYXJh
bSBjZW50ZXJYIHggcmVmZXJlbmNlIGZvciB0aGUgcmVjdGFuZ2xlIGluIENTUyBwaXhlbHMKKyAg
ICAgKiBAcGFyYW0gY2VudGVyWSB5IHJlZmVyZW5jZSBmb3IgdGhlIHJlY3RhbmdsZSBpbiBDU1Mg
cGl4ZWxzCisgICAgICogQHBhcmFtIGhQYWRkaW5nIEhvdyBtdWNoIHRvIGV4cGFuZCB0aGUgcmVj
dGFuZ2xlIGhvcml6b250YWxseQorICAgICAqIEBwYXJhbSB2UGFkZGluZyBIb3cgbXVjaCB0byBl
eHBhbmQgdGhlIHJlY3RhbmdsZSB2ZXJ0aWNhbGx5CisgICAgICogQHBhcmFtIGlnbm9yZUNsaXBw
aW5nIHdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSB0aGUgcm9vdCBzY3JvbGwgZnJhbWUgd2hlbiBy
ZXRyaWV2aW5nIHRoZSBlbGVtZW50LgorICAgICAqICAgICAgICBJZiBmYWxzZSwgdGhpcyBtZXRo
b2QgcmV0dXJucyBudWxsIGZvciBjb29yZGluYXRlcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydC4K
KyAgICAgKi8KKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KGludCBjZW50
ZXJYLCBpbnQgY2VudGVyWSwgaW50IGhQYWRkaW5nLCBpbnQgdlBhZGRpbmcsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcpIGNvbnN0OwogICAgIEVsZW1lbnQqIGVsZW1lbnRGcm9tUG9pbnQoaW50IHgsIGlu
dCB5KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBjYXJldFJhbmdlRnJvbVBvaW50KGlu
dCB4LCBpbnQgeSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmlkbAppbmRleCA5NTk5ZDc2Li45MmM4ZTYzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRs
CkBAIC0xODYsNiArMTg2LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01TdHJpbmcgZGVmYXVsdENo
YXJzZXQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1V
bmRlZmluZWRdIERPTVN0cmluZyByZWFkeVN0YXRlOwogCisKKyAgICAgICAgTm9kZUxpc3QgICAg
ICAgICAgIG5vZGVzRnJvbVJlY3QoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgaFBhZGRp
bmcsIGluIGxvbmcgdlBhZGRpbmcsIGluIGJvb2xlYW4gaWdub3JlQ2xpcHBpbmcpOwogICAgICAg
ICBFbGVtZW50ICAgICAgICAgICAgZWxlbWVudEZyb21Qb2ludChpbiBsb25nIHgsIGluIGxvbmcg
eSk7CiAgICAgICAgIFJhbmdlICAgICAgICAgICAgICBjYXJldFJhbmdlRnJvbVBvaW50KGluIGxv
bmcgeCwgaW4gbG9uZyB5KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjZmM5ZjU2Li4zOWFm
ZTU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODYyLDkgKzg2Miw5IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjphbGxvd0RIVE1MRHJhZyhib29sJiBmbGFnREhUTUwsIGJvb2wmIGZsYWdVQSkgY29u
c3QKIH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIAotSGl0VGVzdFJlc3Vs
dCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RT
Y3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzLCBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RU
eXBlIGhpdFR5cGUpCitIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0
UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9v
bCBpZ25vcmVDbGlwcGluZywgSGl0VGVzdFNjcm9sbGJhcnMgdGVzdFNjcm9sbGJhcnMsIEhpdFRl
c3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSwgY29uc3QgSW50U2l6ZSYgcGFk
ZGluZykKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7CisgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOwogICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaWYgKGlnbm9yZUNsaXBwaW5n
KQpAQCAtODg1LDcgKzg4NSw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0
UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsCiAgICAgICAgIEZy
YW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7CiAgICAgICAg
IEludFBvaW50IHdpZGdldFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkueCgpICsgdmlldy0+c2Ny
b2xsWCgpIC0gcmVuZGVyV2lkZ2V0LT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJXaWRnZXQtPnBhZGRp
bmdMZWZ0KCksIAogICAgICAgICAgICAgcmVzdWx0LmxvY2FsUG9pbnQoKS55KCkgKyB2aWV3LT5z
Y3JvbGxZKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlclRvcCgpIC0gcmVuZGVyV2lkZ2V0LT5wYWRk
aW5nVG9wKCkpOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lk
Z2V0UG9pbnQpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lk
Z2V0UG9pbnQsIHBhZGRpbmcpOwogICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmxh
eWVyKCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSksIHdpZGdldEhpdFRlc3RSZXN1
bHQpOwogICAgICAgICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVzdWx0OwogCkBAIC05MDcsNyAr
OTA3LDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAgICAgICAgIGlmIChyZXN1bHRW
aWV3ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQg
PSByZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAg
ICAgICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IG1haW5WaWV3LT53aW5kb3dUb0NvbnRl
bnRzKHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dT
aGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1l
UG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3JlQ2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJz
LCBoaXRUeXBlLCBwYWRkaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAppbmRleCBhNDczMGJiLi5lODQwZDU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0x
MDYsNyArMTA2LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRTb29uSW5RdWFkKGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgSGl0VGVzdFJlc3VsdCBo
aXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFkb3dDb250
ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2UsIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9s
bGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVx
dWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1
ZXN0OjpBY3RpdmUpOworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdEF0UG9pbnQoY29u
c3QgSW50UG9pbnQmLCBib29sIGFsbG93U2hhZG93Q29udGVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlQ2xpcHBpbmcgPSBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9s
bGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUg
PSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgcGFkZGlu
ZyA9IEludFNpemUoLTEsIC0xKSk7CiAKICAgICBib29sIG1vdXNlUHJlc3NlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbW91c2VQcmVzc2VkOyB9CiAgICAgdm9pZCBzZXRNb3VzZVByZXNzZWQoYm9vbCBw
cmVzc2VkKSB7IG1fbW91c2VQcmVzc2VkID0gcHJlc3NlZDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwCmluZGV4IDNlMTM0MmYuLjYxY2Q1MjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL0VsbGlwc2lzQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKQEAgLTExMyw5ICsxMTMsMTEgQEAgYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgSW50UmVjdCh0eCwg
dHksIG1fd2lkdGgsIG1faGVpZ2h0KS5jb250YWlucyh4LCB5KSkgeworICAgIEludFJlY3QgYm91
bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgaWYgKHZp
c2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RG
cm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLT5ub2RlKCksIHgsIHksIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcAppbmRleCA1MDkzM2M2Li5mYjY0ODg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcApAQCAtNDksOSArNDksMTkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhpdFRl
c3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogICAgIDogbV9w
b2ludChwb2ludCkKICAgICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQorICAgICwgbV9wYWRkaW5n
KEludFNpemUoLTEsIC0xKSkKKyAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiB7CiB9CiAKK0hp
dFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIGNlbnRlclBvaW50LCBj
b25zdCBJbnRTaXplJiBwYWRkaW5nKQorICAgIDogbV9wb2ludChjZW50ZXJQb2ludCkKKyAgICAs
IG1faXNPdmVyV2lkZ2V0KGZhbHNlKQorICAgICwgbV9wYWRkaW5nKHBhZGRpbmcpCit7CisgICAg
bV9pc1JlY3RCYXNlZCA9IHBhZGRpbmcud2lkdGgoKSA+PSAwICYmIHBhZGRpbmcuaGVpZ2h0KCkg
Pj0gMDsKK30KKwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVz
dWx0JiBvdGhlcikKICAgICA6IG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgpKQogICAgICwg
bV9pbm5lck5vblNoYXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkpCkBAIC02MCw2
ICs3MCw5IEBAIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgb3RoZXIpCiAgICAgLCBtX2lubmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCiAg
ICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3JvbGxiYXIoKSkKICAgICAsIG1faXNPdmVyV2lkZ2V0
KG90aGVyLmlzT3ZlcldpZGdldCgpKQorICAgICwgbV9wYWRkaW5nKG90aGVyLnBhZGRpbmcoKSkK
KyAgICAsIG1faXNSZWN0QmFzZWQob3RoZXIuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgLCBtX3Jl
Y3RCYXNlZFRlc3RSZXN1bHQob3RoZXIucmVjdEJhc2VkVGVzdFJlc3VsdCgpKQogewogfQogCkBA
IC03Niw2ICs4OSw5IEBAIEhpdFRlc3RSZXN1bHQmIEhpdFRlc3RSZXN1bHQ6Om9wZXJhdG9yPShj
b25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKICAgICBtX2lubmVyVVJMRWxlbWVudCA9IG90aGVy
LlVSTEVsZW1lbnQoKTsKICAgICBtX3Njcm9sbGJhciA9IG90aGVyLnNjcm9sbGJhcigpOwogICAg
IG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CisgICAgbV9wYWRkaW5nID0g
b3RoZXIucGFkZGluZygpOworICAgIG1faXNSZWN0QmFzZWQgPSBvdGhlci5pc1JlY3RCYXNlZFRl
c3QoKTsKKyAgICBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgPSBvdGhlci5yZWN0QmFzZWRUZXN0UmVz
dWx0KCk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zNjIsNCArMzc4LDQwIEBAIGJvb2wg
SGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAogICAgIHJldHVybiBtX2lu
bmVyTm9uU2hhcmVkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAorYm9vbCBIaXRUZXN0
UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGludCB4LCBp
bnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBJZiBpdCBpcyBub3QgYSByZWN0
LWJhc2VkIGhpdCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8tb3AuCisgICAgLy8gUmV0
dXJuIGZhbHNlLCBzbyB0aGUgaGl0IHRlc3Qgc3RvcHMuCisgICAgaWYgKCFpc1JlY3RCYXNlZFRl
c3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgbm9kZSBpcyBudWxsLCBy
ZXR1cm4gdHJ1ZSBzbyB0aGUgaGl0IHRlc3QgY2FuIGNvbnRpbnVlLgorICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBub2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JO
b2RlKCk7CisgICAgbV9yZWN0QmFzZWRUZXN0UmVzdWx0LmFkZChub2RlKTsKKworICAgIHJldHVy
biAhcmVjdC5jb250YWlucyhyZWN0RnJvbVBvaW50KHgsIHkpKTsKK30KKwordm9pZCBIaXRUZXN0
UmVzdWx0OjphcHBlbmQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCit7CisgICAgQVNTRVJU
KGlzUmVjdEJhc2VkVGVzdCgpICYmIG90aGVyLmlzUmVjdEJhc2VkVGVzdCgpKTsKKworICAgIGlm
ICghbV9pbm5lck5vZGUgJiYgb3RoZXIuaW5uZXJOb2RlKCkpIHsKKyAgICAgICAgbV9pbm5lck5v
ZGUgPSBvdGhlci5pbm5lck5vZGUoKTsKKyAgICAgICAgbV9pbm5lck5vblNoYXJlZE5vZGUgPSBv
dGhlci5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICAgICAgbV9sb2NhbFBvaW50ID0gb3RoZXIu
bG9jYWxQb2ludCgpOworICAgICAgICBtX2lubmVyVVJMRWxlbWVudCA9IG90aGVyLlVSTEVsZW1l
bnQoKTsKKyAgICAgICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3JvbGxiYXIoKTsKKyAgICAgICAg
bV9pc092ZXJXaWRnZXQgPSBvdGhlci5pc092ZXJXaWRnZXQoKTsKKyAgICB9CisKKyAgICBjb25z
dCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IG90aGVyLnJlY3RCYXNlZFRlc3RS
ZXN1bHQoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3Ig
bGFzdCA9IGxpc3QuZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxhc3Q7ICsraXQpCisgICAg
ICAgIG1fcmVjdEJhc2VkVGVzdFJlc3VsdC5hZGQoaXQtPmdldCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IGQxOTA2YmEuLjVj
Y2RhMjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTIxLDcgKzIxLDEwIEBACiAj
ZGVmaW5lIEhpdFRlc3RSZXN1bHRfaAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rp
b24uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzQxLDggQEAgY2xhc3MgU3RyaW5n
OwogY2xhc3MgSGl0VGVzdFJlc3VsdCB7CiBwdWJsaWM6CiAgICAgSGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYpOworICAgIC8vIFBhc3MgYSBub24tbmVnYXRpdmUgSW50U2l6ZSB2YWx1ZSBh
cyBwYWRkaW5nIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0LgorICAgIEhpdFRlc3RS
ZXN1bHQoY29uc3QgSW50UG9pbnQmIGNlbnRlclBvaW50LCBjb25zdCBJbnRTaXplJiBwYWRkaW5n
KTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICB+SGl0VGVz
dFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShjb25zdCBIaXRUZXN0UmVz
dWx0Jik7CkBAIC03Niw3ICs4MSwyMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xpdmVMaW5rKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogCisgICAgLy8gUmVj
dC1iYXNlZCBoaXQgdGVzdCByZWxhdGVkIG1ldGhvZHMuCisgICAgYm9vbCBpc1JlY3RCYXNlZFRl
c3QoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjdEJhc2VkOyB9CisgICAgSW50UmVjdCByZWN0RnJv
bVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7CisgICAgSW50UmVjdCByZWN0RnJvbVBvaW50KGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBwYWRkaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9wYWRkaW5nOyB9CisgICAgaW50IHBhZGRpbmdXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFkZGluZy53aWR0aCgpID49IDAgPyBtX3BhZGRpbmcud2lkdGgoKSA6IDA7IH0KKyAgICBpbnQg
cGFkZGluZ0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFkZGluZy5oZWlnaHQoKSA+PSAwID8g
bV9wYWRkaW5nLmhlaWdodCgpIDogMDsgfQorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBy
ZWdpb24gdGVzdCBhbmQgdGhlIGhpdCB0ZXN0IG5lZWRzIHRvIGNvbnRpbnVlIGFzIHRoZSByZWdp
b24gaXMgbm90IGZ1bGx5CisgICAgLy8gY292ZXJlZCBieSB0aGUgcmVjdC4KKyAgICBib29sIGFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGludCB4LCBpbnQgeSwgY29uc3QgSW50
UmVjdCYgcmVjdCA9IEludFJlY3QoKSk7CisgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5v
ZGU+ID4mIHJlY3RCYXNlZFRlc3RSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3RCYXNlZFRl
c3RSZXN1bHQ7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CisKIHBy
aXZhdGU6CisKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5lck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+
IG1faW5uZXJOb25TaGFyZWROb2RlOwogICAgIEludFBvaW50IG1fcG9pbnQ7CkBAIC04NSw4ICsx
MDQsMzcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWxlbWVudD4gbV9pbm5lclVSTEVsZW1lbnQ7
CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7CiAgICAgYm9vbCBtX2lzT3Zlcldp
ZGdldDsgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGFyZSBvdmVyIGEgd2lkZ2V0IChhbmQgbm90IGlu
IHRoZSBib3JkZXIvcGFkZGluZyBhcmVhIG9mIGEgUmVuZGVyV2lkZ2V0IGZvciBleGFtcGxlKS4K
KyAgICBJbnRTaXplIG1fcGFkZGluZzsKKyAgICBib29sIG1faXNSZWN0QmFzZWQ7CisgICAgTGlz
dEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9yZWN0QmFzZWRUZXN0UmVzdWx0OwogfTsKIAoraW5s
aW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVjdEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJlY3RGcm9tUG9pbnQoSW50UG9pbnQoeCwgeSkpOworfQorCisv
LyBGb3JtdWxhOgorLy8geCA9IHAueCgpIC0gcGFkZGluZy53aWR0aCgpCisvLyB5ID0gcC55KCkg
LSBwYWRkaW5nLmhlaWdodCgpCisvLyB3aWR0aCA9IDIgKiBwYWRkaW5nLndpZHRoKCkgKyAxCisv
LyBoZWlnaHQgPSAyICogbV9wYWRkaW5nLmhlaWdodCgpICsgMQoraW5saW5lIEludFJlY3QgSGl0
VGVzdFJlc3VsdDo6cmVjdEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgSW50UG9pbnQgcmVhbFBvaW50KHBvaW50KTsKKyAgICBJbnRTaXplIHJlYWxQYWRkaW5n
KG1fcGFkZGluZyk7CisKKyAgICAvLyBSZWFsIEludFBvaW50IGZvciB0aGUgcmVjdC4KKyAgICBy
ZWFsUGFkZGluZy5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmVhbFBvaW50IC09IHJlYWxQ
YWRkaW5nOworCisgICAgLy8gUmVhbCBJbnRTaXplIGZvciB0aGUgcmVjdC4KKyAgICByZWFsUGFk
ZGluZy5zY2FsZSgyKTsKKyAgICByZWFsUGFkZGluZyArPSBJbnRTaXplKDEsIDEpOworCisgICAg
cmV0dXJuIEludFJlY3QocmVhbFBvaW50LCByZWFsUGFkZGluZyk7Cit9CisKIFN0cmluZyBkaXNw
bGF5U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE5vZGUqKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCBmYmZlNTZkLi5kZmU3
NTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtNjExLDcgKzYxMSw3IEBA
IGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiB7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3Qodmlz
aWJsZU92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxvd1JlY3QubW92ZSh0eCwgdHkpOwotICAg
IGlmICghb3ZlcmZsb3dSZWN0LmNvbnRhaW5zKHgsIHkpKQorICAgIGlmICghb3ZlcmZsb3dSZWN0
LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeCwgeSkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KQEAgLTYyNCw5ICs2MjQsMTAg
QEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKIAogICAgIC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMu
CiAgICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkp
OwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkg
eworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWN0RnJvbVBvaW50KHgsIHkpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsgLy8gRG9uJ3QgYWRk
IGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxv
Y2sncyBzcGFjZS4KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IDg1NDdmZTAuLjUwZjZjZmEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0yODcsOSArMjg3LDEwIEBAIGJv
b2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGluCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFJl
Y3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAo
bV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkg
JiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxU
cnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVz
dWx0LnJlY3RGcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJlY3QpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAppbmRleCBlOGI1ODIyLi5kODMxYzMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CkBAIC0zNzUyLDE5ICszNzUyLDIxIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAg
IC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgICAgICBJbnRS
ZWN0IG92ZXJmbG93Qm94ID0gdmlzaWJsZU92ZXJmbG93UmVjdCgpOwogICAgICAgICBvdmVyZmxv
d0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dCb3guY29udGFpbnMoX3gs
IF95KSkKKyAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJv
bVBvaW50KF94LCBfeSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RB
Y3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1BvaW50SW5PdmVyZmxv
d0NvbnRyb2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0eSkpIHsKICAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIC8vIEZJWE1FOiBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woKSBk
b2Vzbid0IGhhbmRsZSByZWdpb24gdGVzdCB5ZXQuCisgICAgICAgIGlmICghcmVzdWx0LmFkZE5v
ZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBfeCwgX3kpKQorICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNh
bid0IGhhdmUgYW55IHNwaWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0gaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1c2VDbGlw
ID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKLSAgICBib29sIGNoZWNr
Q2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGNvbnRyb2xDbGlwUmVj
dCh0eCwgdHkpLmNvbnRhaW5zKF94LCBfeSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuY29u
dGFpbnMoX3gsIF95KSk7CisgICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhh
c0NvbnRyb2xDbGlwKCkgPyBjb250cm9sQ2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWN0RnJvbVBvaW50KF94LCBfeSkpIDogb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVy
c2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoX3gsIF95KSkpOwogICAgIGlmIChjaGVja0NoaWxk
cmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBp
bnQgc2Nyb2xsZWRYID0gdHg7CkBAIC0zODEyLDkgKzM4MTQsMTAgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3UKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0
VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0g
SGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIEludFJlY3QgYm91bmRzUmVj
dCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRl
c3RpbmcoKSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94LCBfeSkpIHsKKyAgICAgICAgaWYgKHZp
c2libGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RG
cm9tUG9pbnQoX3gsIF95KSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQo
bm9kZSgpLCBfeCwgX3ksIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0zODM5LDEzICszODQyLDE2IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByCiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAg
ICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNvbFJl
Y3QuY29udGFpbnMoeCwgeSkpIHsKKyAgICAgICAgaWYgKGNvbFJlY3QuaW50ZXJzZWN0cyhyZXN1
bHQucmVjdEZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBwb2ludCBpcyBp
bnNpZGUgdGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAvLyBBZGp1c3QgdHggYW5kIHR5IHRvIGNo
YW5nZSB3aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAgCiAgICAgICAgICAgICBpbnQgZmluYWxY
ID0gdHggKyBjdXJyWE9mZnNldDsKICAgICAgICAgICAgIGludCBmaW5hbFkgPSB0eSArIGN1cnJZ
T2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1
bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkgJiYgIWNvbFJlY3QuY29udGFpbnMocmVzdWx0LnJl
Y3RGcm9tUG9pbnQoeCwgeSkpKQorICAgICAgICAgICAgICAgIGhpdFRlc3RDb250ZW50cyhyZXF1
ZXN0LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVl
c3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24pOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAyMDIwMDAzLi5kYWY5NGVh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJodG1sZWRpdGlu
Zy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBA
IC01NTQsOSArNTU1LDExIEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0CiAKICAgICAvLyBDaGVj
ayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdl
IGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBp
cyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVj
dCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAg
IEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7
CisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVn
cm91bmQgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3Ms
IHlQb3MpKSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQo
eFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9z
LCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCA4ZTdkMTY1Li4yMDcz
NDc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC0zNzcsMTAgKzM3NywxMCBAQCBI
VE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKIAogYm9vbCBSZW5k
ZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1
bHQucG9pbnQoKSk7CisgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgp
LCByZXN1bHQucGFkZGluZygpKTsKICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rp
b24pOwogCi0gICAgaWYgKGluc2lkZSAmJiBub2RlKCkpIHsKKyAgICBpZiAodGVtcFJlc3VsdC5p
bm5lck5vZGUoKSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAg
PSBpbWFnZU1hcCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50
Qm94UmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgem9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKQEAgLTM5MSw2ICszOTEsOCBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgICAg
ICB9CiAgICAgfQogCisgICAgaWYgKCFpbnNpZGUgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIGlmIChpbnNpZGUpCiAg
ICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgcmV0dXJuIGluc2lkZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCBkNmY1ZThlLi5jMGY4ZDlmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0yNzQ2LDcgKzI3NDYsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dAogICAgICAgICBpZiAocGFyZW50KCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3Qg
PSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOwog
ICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4K
LSAgICAgICAgICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkKKyAgICAg
ICAgICAgIGlmICghY2xpcFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludChoaXRU
ZXN0UG9pbnQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCkBAIC0y
ODU5LDE3ICsyODU5LDIxIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgfQogCiAgICAg
Ly8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hp
bGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKGZnUmVjdC5jb250YWlucyho
aXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIGlmIChmZ1JlY3Qu
aW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludChoaXRUZXN0UG9pbnQpKSAmJiBpc1NlbGZQ
YWludGluZ0xheWVyKCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBI
aXRUZXN0UmVzdWx0LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcg
aWYgd2Uga25vdyB3ZSdyZSBmcm9udG1vc3QuCi0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJl
c3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChy
ZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAgICAgIGlmIChoaXRUZXN0Q29u
dGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0
VGVzdERlc2NlbmRhbnRzKSAmJgogICAgICAgICAgICAgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFs
c2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQo
KSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICBpZiAo
cmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
dGVtcFJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
dGVtcFJlc3VsdDsKICAgICAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFudHMpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAvLyBGb3JlZ3JvdW5kIGNhbiBk
ZXB0aC1zb3J0IHdpdGggZGVzY2VuZGFudCBsYXllcnMsIHNvIGtlZXAgdGhpcyBhcyBhIGNhbmRp
ZGF0ZS4KICAgICAgICAgICAgIGNhbmRpZGF0ZUxheWVyID0gdGhpczsKLSAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91ciBu
ZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLgpAQCAtMjg4NSwxMyArMjg4OSwxNyBAQCBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udAogICAgIGlmIChjYW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZUxheWVyOwogCi0gICAgaWYgKGJnUmVjdC5jb250YWlucyhoaXRUZXN0UG9pbnQp
ICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBS
ZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgIGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQu
cmVjdEZyb21Qb2ludChoaXRUZXN0UG9pbnQpKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
KyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQu
cGFkZGluZygpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBsYXllckJvdW5kcywgaGl0VGVzdFBvaW50LCBIaXRUZXN0U2VsZikgJiYKICAgICAgICAg
ICAgIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVu
ZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0
ZW1wUmVzdWx0OworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlY3RCYXNl
ZFRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiAwOwpAQCAtMjkwMyw4ICsyOTExLDkgQEAgYm9vbCBSZW5kZXJMYXll
cjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLngoKSAtIHJl
bmRlckJveFgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkg
LSByZW5kZXJCb3hZKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdFRlc3RGaWx0
ZXIpKSB7Ci0gICAgICAgIC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4g
Y2xhaW0gdGhhdCB5b3UgZGlkbid0IGhpdCBhbnl0aGluZy4KLSAgICAgICAgQVNTRVJUKCFyZXN1
bHQuaW5uZXJOb2RlKCkpOworICAgICAgICAvLyBJdCdzIHdyb25nIHRvIHNldCBpbm5lck5vZGUs
IGJ1dCB0aGVuIGNsYWltIHRoYXQgeW91IGRpZG4ndCBoaXQgYW55dGhpbmcsIHVubGVzcyBpdCBp
cworICAgICAgICAvLyBhIHJlZ2lvbiB0ZXN0LgorICAgICAgICBBU1NFUlQoIXJlc3VsdC5pbm5l
ck5vZGUoKSB8fCAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpICYmIHJlc3VsdC5yZWN0QmFzZWRU
ZXN0UmVzdWx0KCkuc2l6ZSgpKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTI5MzgsMTQgKzI5NDcsMjEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGlz
dChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHIKICAgICBmb3IgKGlu
dCBpID0gbGlzdC0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgUmVuZGVyTGF5
ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExh
eWVyID0gMDsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgp
KTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1
bHQucGFkZGluZygpKTsKICAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVkKCkpCiAg
ICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKGNoaWxkTGF5
ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQ
b2ludCwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0VGVzdExheWVyKHJvb3RM
YXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQb2lu
dCwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOworCisgICAg
ICAgIC8vIElmIGl0IGEgcmVnaW9uIHRlc3QsIHdlIGNhbiBzYWZlbHkgYXBwZW5kIHRoZSB0ZW1w
b3JhcnkgcmVzdWx0IHNpbmNlIGl0IG1pZ2h0IGhhZCBoaXQKKyAgICAgICAgLy8gbm9kZXMgYnV0
IG5vdCBuZWNlc3NlcmlseSBoYWQgaGl0TGF5ZXIgc2V0LgorICAgICAgICBpZiAocmVzdWx0Lmlz
UmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsK
KwogICAgICAgICBpZiAoaXNIaXRDYW5kaWRhdGUoaGl0TGF5ZXIsIGRlcHRoU29ydERlc2NlbmRh
bnRzLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlKSkgewogICAgICAgICAgICAg
cmVzdWx0TGF5ZXIgPSBoaXRMYXllcjsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNj
ZW5kYW50cykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzAwNSw3ICsz
MDIxLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVt
bnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmQKICAgICAgICAgSW50UmVjdCBsb2NhbENs
aXBSZWN0KGhpdFRlc3RSZWN0KTsKICAgICAgICAgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3QoY29s
UmVjdCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWxvY2FsQ2xpcFJlY3QuaXNFbXB0eSgpICYm
IGxvY2FsQ2xpcFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkgeworICAgICAgICBpZiAoIWxv
Y2FsQ2xpcFJlY3QuaXNFbXB0eSgpICYmIGxvY2FsQ2xpcFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQu
cmVjdEZyb21Qb2ludChoaXRUZXN0UG9pbnQpKSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIq
IGhpdExheWVyID0gMDsKICAgICAgICAgICAgIGlmICghY29sdW1uSW5kZXgpIHsKICAgICAgICAg
ICAgICAgICAvLyBBcHBseSBhIHRyYW5zbGF0aW9uIHRyYW5zZm9ybSB0byBjaGFuZ2Ugd2hlcmUg
dGhlIGxheWVyIHBhaW50cy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcApp
bmRleCAyZDI3NzQ4Li40ZDBkY2Q2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExp
c3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGluZUJveExpc3QuaCIKIAorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKQEAgLTI0NSwxNCArMjQ2LDE2IEBAIGJvb2wgUmVuZGVyTGluZUJv
eExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRU
ZXN0UmVxCiAgICAgLy8gY29udGFpbiB0aGUgcG9pbnQuICBUaGlzIGlzIGEgcXVpY2sgc2hvcnQt
Y2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtlIHRvIGF2b2lkIHdhbGtpbmcgYW55IGxpbmVzLgogICAg
IC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGZsYXdlZCBpbiB0aGUgZm9sbG93aW5nIGV4dHJlbWVs
eSBvYnNjdXJlIHdheToKICAgICAvLyBpZiBzb21lIGxpbmUgaW4gdGhlIG1pZGRsZSBoYXMgYSBo
dWdlIG92ZXJmbG93LCBpdCBtaWdodCBhY3R1YWxseSBleHRlbmQgYmVsb3cgdGhlIGxhc3QgbGlu
ZS4KLSAgICBpZiAoKHkgPj0gdHkgKyBsYXN0TGluZUJveCgpLT5yb290KCktPmJvdHRvbVZpc2li
bGVPdmVyZmxvdygpKSB8fCAoeSA8IHR5ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlz
aWJsZU92ZXJmbG93KCkpKQorICAgIGlmICh5IC0gcmVzdWx0LnBhZGRpbmdIZWlnaHQoKSA+PSB0
eSArIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkKKyAgICAg
fHwgeSArIHJlc3VsdC5wYWRkaW5nSGVpZ2h0KCkgPCB0eSArIGZpcnN0TGluZUJveCgpLT5yb290
KCktPnRvcFZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBTZWUgaWYgb3VyIHJvb3QgbGluZXMgY29udGFpbiB0aGUgcG9pbnQuICBJZiBzbywgdGhlbiB3
ZSBoaXQgdGVzdAogICAgIC8vIHRoZW0gZnVydGhlci4gIE5vdGUgdGhhdCBib3hlcyBjYW4gZWFz
aWx5IG92ZXJsYXAsIHNvIHdlIGNhbid0IG1ha2UgYW55IGFzc3VtcHRpb25zCiAgICAgLy8gYmFz
ZWQgb2ZmIHBvc2l0aW9ucyBvZiBvdXIgZmlyc3QgbGluZSBib3ggb3Igb3VyIGxhc3QgbGluZSBi
b3guCiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gbGFzdExpbmVCb3goKTsgY3Vycjsg
Y3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpIHsKLSAgICAgICAgaWYgKHkgPj0gdHkgKyBjdXJy
LT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpICYmIHkgPCB0eSArIGN1cnItPnJvb3QoKS0+
Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYgKHkgKyByZXN1bHQucGFkZGlu
Z0hlaWdodCgpID49IHR5ICsgY3Vyci0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKQorICAg
ICAgICAgJiYgeSAtIHJlc3VsdC5wYWRkaW5nSGVpZ2h0KCkgPCB0eSArIGN1cnItPnJvb3QoKS0+
Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vy
ci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHkpOwogICAgICAgICAg
ICAgaWYgKGluc2lkZSkgewogICAgICAgICAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUm9vdC5jcHAKaW5kZXggNzcxMzQ0NS4uNDgyMWIyNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUm9vdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSb290
LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zMTksNiArMzIwLDgg
QEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9h
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDU1MvSFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyBy
ZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJveCwgcmlnaHQ/CiAgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7CisgICAgICAgICAgICAvLyBGSVhN
RTogbm9kZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlZ2lvbiB0ZXN0IHlldC4KKyAg
ICAgICAgICAgIHJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2Rl
KCksIF94LCBfeSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBmZDkwOTkwLi5jYTVkYzZhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGaXhlZFRhYmxlTGF5b3V0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBA
IC0xMTM1LDcgKzExMzYsNyBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIHR5ICs9IHko
KTsKIAogICAgIC8vIENoZWNrIGtpZHMgZmlyc3QuCi0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAo
KSB8fCBvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYg
IXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlz
VGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSAmJgogICAgICAgICAgICAgICAg
IGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHhQb3MsIHlQb3MsIHR4LCB0eSwg
YWN0aW9uKSkgewpAQCAtMTE0Niw5ICsxMTQ3LDExIEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LgotICAgIGlmICh2aXNpYmxl
VG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFj
dGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIEludFJlY3QodHgsIHR5LCB3
aWR0aCgpLCBoZWlnaHQoKSkuY29udGFpbnMoeFBvcywgeVBvcykpIHsKKyAgICBJbnRSZWN0IGJv
dW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIGlmICh2
aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5k
IHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGJvdW5kc1JlY3Qu
aW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludCh4UG9zLCB5UG9zKSkpIHsKICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHhQb3MgLSB0eCwgeVBvcyAtIHR5
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9S
ZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgeFBvcywgeVBvcywgYm91bmRzUmVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCBiMjVkM2U2Li4yYzFiNzM5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTEx
NTIsNyArMTE1Myw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgdHggKz0geCgpOwog
ICAgIHR5ICs9IHkoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhb3ZlcmZsb3dD
bGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5zKHhQb3MsIHlQb3MpKQorICAgIGlmIChoYXNPdmVyZmxv
d0NsaXAoKSAmJiAhb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMocmVzdWx0LnJl
Y3RGcm9tUG9pbnQoeFBvcywgeVBvcykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnByZXZpb3VzU2libGluZygpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRl
eCA2ZmIyNzQ5Li42ZWM1YjcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTM5
NCw3ICszOTQsNyBAQCBib29sIFJlbmRlcldpZGdldDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlcwogICAgIGJvb2wgaW5zaWRlID0g
UmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5
LCBhY3Rpb24pOwogICAgIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmVhbGx5IG92
ZXIgdGhlIHdpZGdldCBpdHNlbGYgKGFuZCBub3QganVzdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcg
YXJlYSkuCi0gICAgaWYgKGluc2lkZSAmJiAhaGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5lck5vZGUo
KSA9PSBub2RlKCkpCisgICAgaWYgKChpbnNpZGUgfHwgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgp
KSAmJiAhaGFkUmVzdWx0ICYmIHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkpCiAgICAgICAg
IHJlc3VsdC5zZXRJc092ZXJXaWRnZXQoY29udGVudEJveFJlY3QoKS5jb250YWlucyhyZXN1bHQu
bG9jYWxQb2ludCgpKSk7CiAgICAgcmV0dXJuIGluc2lkZTsKIH0KLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62453</attachid>
            <date>2010-07-23 12:11:17 -0700</date>
            <delta_ts>2010-07-26 07:16:25 -0700</delta_ts>
            <desc>patch v6 - feature + tests</desc>
            <filename>0001-2010-07-21-Grace-Kloba-klobag-gmail.com-Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>58983</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSAwMDdmYzRlMDRhMmQwNjBiNTQyYzk0YzI0MmQ2MmRmYjIyMjA4NWI3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMjEgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBjaGFuZ2Ug
aXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3JlIHByZWNpc2UgdGFwCiAgICAgICAgYWN0
aW9ucyBieSB0aGUgdXNlcnMgb24gbW9iaWxlIGRldmljZXMuCgogICAgICAgIFBhdGNoIGV4dGVu
ZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3Vs
YXIgYXJlYQogICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNh
YmxlLiBGb3IgdGhhdCwgdGhlIEhpdFRlc3RSZXN1bHQgY2xhc3MKICAgICAgICB3YXMgbW9kaWZp
ZWQgdG8gdGFrZSBhIHBhZGRpbmcgKEludFNpemUpLiBUaGUgcGFkZGluZyBzcGVjaWZpZXMgYSBm
dXp6eSByYW5nZSBmb3IKICAgICAgICBhY2NlcHRpbmcgaW5wdXQgZXZlbnRzIGluIHBpeGVscyBj
b29yZGluYXRlcyBmb3IgYm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAogICAgICAgIG9yaWVu
dGF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGl0IHRlbGxzIGhvdyBtdWNoIHRvIGV4cGFuZCB0aGUg
c2VhcmNoIHJlY3QKICAgICAgICBhcm91bmQgYSBzdXBwb3NlZCB0b3VjaCBwb2ludC4KCiAgICAg
ICAgSWYgaXQgaXMgbmVnYXRpdmUsIGhpdCB0ZXN0aW5nIHdpbGwgYmVoYXZpb3IgYXMgdGhlIGN1
cnJlbnQgcG9pbnQgYmFzZWQgaGl0IHRlc3RpbmcsCiAgICAgICAgYW5kIG1ldGhvZHMgYXJlIG5v
LW9wJ2VkIHRvIG5vdCByZWdyZXNzIHRoaXMgY29tbW9uIGJlaGF2aW9yIHBlcmZvcm1hbmNlLXdp
c2UuCiAgICAgICAgV2hlbiBub24gbmVnYXRpdmUgSW50U2l6ZSBpcyBwcm92aWRlZCwgdGhlIGhp
dCB0ZXN0IHJlc3VsdCB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbAogICAgICAgIG5vZGVzIHRoYXQg
aW50ZXJzZWN0IHRoZSBidWlsdCB1cCB0ZXN0IGFyZWEuIFRoZSBsb2dpYyB3aWxsIGNvbnRpbnVl
IHNlYXJjaGluZyB3aGVuIGl0CiAgICAgICAgZmluZHMgYSBjYW5kaWRhdGUgdW50aWwgdGhlIHJl
Y3RhbmdsZSBpcyBmdWxseSBlbmNsb3NlZCBieSB0aGUgYm91bmRhcmllcyBvZiBhIGNhbmRpZGF0
ZS4KICAgICAgICBUaGUgcmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIG5vZGVzIGluIHRoZSB6LW9y
ZGVyIHRoZXkgYXJlIGhpdC10ZXN0ZWQuCiAgICAgICAgQ2FsbGVyIHdpbGwgZGVjaWRlIGhvdyB0
byBwcm9jZXNzIHRoZW0uCgogICAgICAgIEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25h
bGl0eSwgdGhlIHBhdGNoOgoKICAgICAgICAtIEFkZHMgYSBub2Rlc0Zyb21SZWN0IG1ldGhvZCB0
byB0aGUgRG9jdW1lbnQgY2xhc3MsIGV4cG9zaW5nIHRoZSBmdW5jaW9uYWxpdHkKICAgICAgICB0
byB0aGUgRE9NLiBNZXRob2QgcmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQg
aW50ZXJzZWN0IHRoZSBnaXZlbgogICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KICAgICAgICAtIEV4
dGVuZHMgaGl0VGVzdFJlc3VsdEF0UG9pbnQgbWV0aG9kIG9mIHRoZSBFdmVudEhhbmRsZXIgd2l0
aCBhbiBleHRyYSAncGFkZGluZycKICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50
U2l6ZSgtMSwgLTEpLiBUaGUgcmVjdC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBh
CiAgICAgICAgbm9uLW5lZ2F0aXZlIHBhZGRpbmcgaXMgcGFzc2VkIGluLgoKICAgICAgICBUZXN0
OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKCiAgICAgICAgKiBXZWJDb3JlLmJh
c2UuZXhwOgogICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6Om5vZGVzRnJvbVJlY3QpOiBUaGlzIG1ldGhvZCBleHBvc2VzIHRoZSByZWN0IGJhc2Vk
IGZ1bmNpb25hbGl0eSB0bwogICAgICAgIHRoZSBET00uIEl0IHdvcmtzIHNpbWlsYXJseSB0byBl
bGVtZW50RnJvbVBvaW50LCBob3dldmVyIHJlY2VpdmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKICAg
ICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4
IG9yZGVyZWQgbGlzdCBvZiBub2RlcyAobm90IGVsZW1lbnRzKQogICAgICAgIHdob3NlIGFyZWEg
aW50ZXJzZWN0IHRoZSBoaXQgdGVzdCByZWN0LgogICAgICAgICogZG9tL0RvY3VtZW50Lmg6IERp
dHRvLgogICAgICAgICogZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCiAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJl
c3VsdEF0UG9pbnQpOiBUaGUgZnVuY2lvbmFsaXR5IGlzIGFsc28gZXhwb3NlZCB0aHJvdWdoIHRo
aXMKICAgICAgICBtZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1l
dGVyIHRvIHdvcmsgYXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKICAgICAgICB0aGUg
aGl0IHRlc3QgcmVjdC4KICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IERpdHRvLgogICAg
ICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgogICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KTogUmVjdCBiYXNlZCBoaXQgdGVzdCBjb25zdHJ1Y3Rv
ci4gUmVjZWl2ZXMgYQogICAgICAgIHBhZGRpbmcgSW50U2l6ZSBhcyBwYXJhbWV0ZXIuIEl0IGNh
biBiZSAoMCwwKS4KICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTog
TW9kaWZpZWQgdG8gYXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMgd2VsbC4KICAg
ICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YXBwZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJl
c3VsdCBvYmplY3RzIGluIGEgd2F5IHRoYXQgdGhlCiAgICAgICAgbGlzdCBub2RlJ3Mgb2YgYm90
aCBvYmplY3RzIGdldCBhbWVuZGVkLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojph
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxp
c3Qgb2YKICAgICAgICBoaXQgbm9kZXMuCiAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0
aGUgcGFkZGluZyBhcyBhbiBJbnRTaXplLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
Ojppc1JlY3RCYXNlZFRlc3QpOiBSZXR1cm5zIGlmIHRoZSBIaXRUZXN0UmVzdWx0IGlzIHJlY3Qg
YmFzZWQgb3Igbm90LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjoucmVjdEJhc2Vk
VGVzdFJlc3VsdCk6IFJldHVybnMgdGhlIGxpc3Qgbm9kZXMgaGl0LgogICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJucyB0aGUgaGl0IHRlc3QgcmVj
dCBnaXZlbiB0aGUgaGl0IHRlc3QgcG9pbnQKICAgICAgICBhbmQgcGFkZGluZy4KICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIpOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExp
c3QpOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1
bW5zKToKICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CiAgICAgICAgKFdlYkNv
cmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6IE1ldGhvZCBpcyBtb2RpZmllZCB0byBzdXBw
b3J0IHJlY3QgYmFzZWQgaGl0IHRlc3QgZXh0ZW5zaW9uLgogICAgICAgIE5vdyBpdCBub3QganVz
dCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGJlaW5nIGhpdC10ZXN0ZWQgY29u
dGFpbnMgYSBoaXQgdGVzdCBwb2ludCwgYnV0CiAgICAgICAgaW5zdGVhZCBpdCBjaGVja3MgaWYg
dGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBoaXQgdGVzdCByZWN0LiBJdCBp
cyBpbXBsZW1lbnRlZCBzbwogICAgICAgIHRoYXQgdGhlIGNvbW1vbiBjYXNlIChwb2ludCBiYXNl
ZCBoaXQgdGVzdCkgd29ya3MgYXMgcHJldmlvdXNseS4KICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9p
bnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludCk6IERpdHRvLgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0
VGVzdENvbHVtbnMpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgog
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFn
ZTo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94
TGlzdC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToK
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2lu
dCk6IERpdHRvLgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOiBEaXR0by4K
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgogICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KTogRGl0dG8uCgphbWVuZCBtZSAtIGNvcmUKLS0tCiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAg
KysKIC4uLi9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IHwg
ICAgMSArCiAuLi4vZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQgICAg
ICB8ICAgMjYgKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2lj
Lmh0bWwgICAgICB8ICAgODkgKysrKysrKysrKysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3MgICB8ICAgNDQgKysrKysrKysrCiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyAgICB8ICAgNDQgKysrKysr
KysrCiAuLi4vZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCB8
ICAgIDEgKwogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDk0ICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2OSArKysrKysrKysrKysrKwogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsr
KwogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOCArLQogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICA2ICstCiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgICAgICAg
ICAgICAgICAgICB8ICAgIDYgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
ICAgICAgICAgICAgICAgIHwgICA1OCArKysrKysrKysrKysKIFdlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuaCAgICAgICAgICAgICAgICAgIHwgICA0OCArKysrKysrKysrCiBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFdl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwICAgICAgICAgICAgICAgIHwgICAgNSAr
LQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwICAgICAgICAgICAgICAgICAgfCAg
IDIxICsrKy0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwICAgICAgICAgICAgICAg
ICAgICB8ICAgIDcgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCAgICAgICAg
ICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwICAg
ICAgICAgICAgICAgICAgfCAgIDQ4ICsrKysrKystLS0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcCAgICAgICAgICAgIHwgICAgNyArLQogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAgICAgICAgICAgICAgICAgfCAgICAzICsKIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcCAgICAgICAgICAgICAgICAgIHwgICAgOSArKy0KIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgICAgICAgICAgIHwgICAgMyArLQogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCAgICAgICAgICAgICAgICAgfCAgICAyICst
CiAyOCBmaWxlcyBjaGFuZ2VkLCA1OTIgaW5zZXJ0aW9ucygrKSwgNDYgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNp
Yy1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9u
b2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcwoKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAw
YzhiMzIwLi45NmI5NTVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDctMjEgQW50b25p
byBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPiAsIEdyYWNlIEtsb2JhICA8a2xvYmFnQGdt
YWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBFbmhhbmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEgcmVjdGFuZ2xlIGluc3RlYWQgb2Yg
YSBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDAxOTcKKworICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA3LTIyICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cmlu
ZGV4IDliMDk5ODQuLmM5NzczNDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dp
bmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dApAQCAtNjI4LDYgKzYy
OCw3IEBAIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTYW1lTm9kZSBbZnVuY3Rpb25dCiB3
aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmlzU3VwcG9ydGVkIFtmdW5jdGlvbl0KIHdpbmRvdy5E
b2N1bWVudC5wcm90b3R5cGUubG9va3VwTmFtZXNwYWNlVVJJIFtmdW5jdGlvbl0KIHdpbmRvdy5E
b2N1bWVudC5wcm90b3R5cGUubG9va3VwUHJlZml4IFtmdW5jdGlvbl0KK3dpbmRvdy5Eb2N1bWVu
dC5wcm90b3R5cGUubm9kZXNGcm9tUmVjdCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJv
dG90eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnF1
ZXJ5Q29tbWFuZEVuYWJsZWQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5x
dWVyeUNvbW1hbmRJbmRldGVybSBbZnVuY3Rpb25dCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjFlYTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2
IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BB
U1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzAsMF0KK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzEwLDBdCitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1Myw3MV0sIFswLDEwXQorUEFTUyBBbGwg
Y29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMsNzFdLCBbMTAsMTBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzAsMTBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzEwLDBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTIsMTA1XSwgWzEwLDEwXQorUEFTUyBBbGwg
Y29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUzLDE5M10sIFswLDBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzIwLDBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNTMsMTkzXSwgWzAsMjBdCitQQVNTIEFsbCBj
b3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzAsMF0KK1BBU1MgQWxsIGNv
cnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwxODNdLCBbMCwxXQorUEFTUyBBbGwgY29y
cmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4M10sIFsxLDBdCitQQVNTIEFsbCBjb3Jy
ZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzEsMV0KK1BBU1MgQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0
IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBbMTAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qg
bm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBu
b2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzEwLDEwXQorUEFTUyBBbGwgY29ycmVjdCBu
b2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9k
ZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2Rl
cyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVz
IGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMTAsMTBdCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42YTQwNjRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
bm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sPgorPGhlYWQ+
CisgIDx0aXRsZT5Eb2N1bWVudDo6bm9kZXNGcm9tUmVjdCB0ZXN0IC0gYnVnIDQwMTk3PC90aXRs
ZT4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gQGltcG9ydCAicmVzb3VyY2VzL25vZGVzRnJv
bVJlY3QuY3NzIjsgPC9zdHlsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbm9kZXNGcm9t
UmVjdC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlw
dCI+CisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICAgIH0KKworICAgICAgdmFyIGUgPSB7fTsKKworICAgICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFj
Y2VzcyB0byBlbGVtZW50cworICAgICAgZVsnaHRtbCddID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImh0bWwiKVswXTsKKyAgICAgIFsnaDEnLCAnZDEnLCAnZDInLCAncDEnLCAncDIn
LCAncDMnLCAncDQnLCAncDUnLCAnc3BhbicsICdib2R5J10uZm9yRWFjaChmdW5jdGlvbihhKSB7
CisgICAgICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICAgIH0pOwor
CisgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisKKyAgICAgIGNoZWNrKDUzLCA3MSwgMCwg
MCwgW2UuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAxMCwgMCwgW2UucDMsIGUuYm9keV0p
OworICAgICAgY2hlY2soNTMsIDcxLCAwLCAxMCwgW2UuZDEsIGUuaDEsIGUuYm9keV0pOworICAg
ICAgY2hlY2soNTMsIDcxLCAxMCwgMTAsIFtlLnAzLCBlLmQxLCBlLmgxLCBlLmJvZHldKTsKKwor
ICAgICAgY2hlY2soMTUyLCAxMDUsIDAsIDEwLCBbZS5wMywgZS5ib2R5XSk7CisgICAgICBjaGVj
aygxNTIsIDEwNSwgMTAsIDAsIFtlLnA0LCBlLmQxLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE1
MiwgMTA1LCAxMCwgMTAsIFtlLnA0LCBlLnAzLCBlLmQxLCBlLmJvZHldKTsKKworICAgICAgLy8g
ZS5wMSBpcyBpbnZpc2libGUgYW5kIHNob3VsZG4ndCBhcHBlYXI6CisgICAgICBjaGVjaygxNTMs
MTkzLDAsMCxbZS5wNV0pOworICAgICAgLy8gTk9URTogW2UucDUsIGUuZDJdKSBzaG91bGQgYmUg
cmV0dXJuZWQgaWYgd2UgZGlkIG5vdCBzdG9wCisgICAgICAvLyBhdCBlLnA1LCB3aGljaCBmdWxs
eSBlbmNsb3NlcyB0aGUgdGFyZ2V0IHJlY3QuCisgICAgICBjaGVjaygxNTMsMTkzLDIwLDAsIFtl
LnA1XSk7CisgICAgICBjaGVjaygxNTMsMTkzLDAsMjAsIFtlLnA1LCBlLmJvZHldKTsKKworICAg
ICAgLy8gUHJlY2lzZSBwaXhlbCBjaGVja3M6CisgICAgICBjaGVjaygxNDQsIDE4MywgMCwgMCwg
W2UuYm9keV0pOworICAgICAgY2hlY2soMTQ0LCAxODMsIDAsIDEsIFtlLnA1LCBlLmJvZHldKTsK
KyAgICAgIGNoZWNrKDE0NCwgMTgzLCAxLCAwLCBbZS5kMiwgZS5ib2R5XSk7CisgICAgICBjaGVj
aygxNDQsIDE4MywgMSwgMSwgW2UucDUsIGUuZDIsIGUuYm9keV0pOworICAgICAgY2hlY2soNzcs
IDI0MCwgMCwgMCwgW2UucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAwLCBbZS5wMl0p
OworICAgICAgY2hlY2soNzcsIDI0MCwgMCwgMTAsIFtlLnA1LCBlLnNwYW4sIGUucDJdKTsKKyAg
ICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAxMCwgW2UucDUsIGUuc3BhbiwgZS5wMl0pOworCisgICAg
ICAvLyBFeHBhbmRpbmcgYXJlYSBjaGVja3M6CisgICAgICBjaGVjaygzOSwgMjEyLCAwLCAgMCwg
W2UuYm9keV0pOworICAgICAgY2hlY2soMzksIDIxMiwgMCwgMTAsIFtlLmQyLCBlLnAyLCBlLmJv
ZHldKTsKKyAgICAgIGNoZWNrKDM5LCAyMTIsIDEwLCAwLCBbZS5wNSwgZS5ib2R5XSk7CisgICAg
ICBjaGVjaygzOSwgMjEyLCAxMCwgMTAsIFtlLnA1LCBlLmQyLCBlLnAyLCBlLmJvZHldKTsKKwor
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5vbmxvYWQgPSBy
dW5UZXN0OworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKyAgPGgxIGlk
PSJoMSI+PC9oMT4KKyAgPGRpdiBpZD0iZDEiPjwvZGl2PgorCisgIDwhLS0gZmxvYXRlZCBlbGVt
ZW50IC0tPgorICA8ZGl2IGlkPSJkMiIgc3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj4KKworICA8
IS0tIGhpZGRlbiBlbGVtZW50IC0tPgorICA8cCBpZD0icDEiIHN0eWxlPSJmbG9hdDogbGVmdDsg
dmlzaWJpbGl0eTogaGlkZGVuIj48L3A+CisKKyAgPHAgaWQ9InAyIiBzdHlsZT0iY2xlYXI6IGxl
ZnQiPjxzcGFuIGlkPSJzcGFuIj48L3NwYW4+PC9wPgorCisgIDwhLS0gYWJzb2x1dGUgcG9zaXRp
b24gLS0+CisgIDxwIGlkPSJwMyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6IDEwcHg7
IGxlZnQ6NTBweDsgaGVpZ2h0OjUwcHg7Ij48L3A+CisKKyAgPCEtLSBmaXhlZCBwb3NpdGlvbiAt
LT4KKyAgPHAgaWQ9InA0IiBzdHlsZT0icG9zaXRpb246IGZpeGVkOyB0b3A6IDMwcHg7IGxlZnQ6
IDE1MHB4OyBoZWlnaHQ6IDUwcHg7IGJhY2tncm91bmQtY29sb3I6IGJsdWU7Ij48L3A+CisKKyAg
PCEtLSByZWxhdGl2ZSBwb3NpdGlvbiAtLT4KKyAgPHAgaWQ9InA1IiBzdHlsZT0icG9zaXRpb246
cmVsYXRpdmU7IHRvcDogLTEwMHB4OyBsZWZ0OiAzMHB4OyBtYXJnaW4tYm90dG9tOiAtNzBweDsg
YmFja2dyb3VuZC1jb2xvcjogZ3JlZW4iPjwvcD4KKworICA8c3BhbiBpZD0iY29uc29sZSI+PC9z
cGFuPgorICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jl
c291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MmU2ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVz
b3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzCkBAIC0wLDAgKzEsNDQgQEAKK2JvZHkgeworICBtYXJn
aW46IDhweDsKKyAgcGFkZGluZzogMDsKK30KKworaDEsIGRpdiwgcCwgaWZyYW1lIHsKKyAgZGlz
cGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBib3JkZXI6
IDNweCBzb2xpZCBibGFjazsKKyAgcGFkZGluZzogMTBweDsKKyAgbWFyZ2luOiAxMHB4OworfQor
Cisjc3BhbiB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDog
MzBweDsKKyAgYm9yZGVyOiAzcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDEwcHg7CisgIG1h
cmdpbjogMTBweDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisjaWZyYW1lMSB7Cisg
IGhlaWdodDogMTAwcHg7CisgIG1hcmdpbi10b3A6IDYwcHg7Cit9CisKKyNwNiB7CisgIGhlaWdo
dDogNTBweDsKKyAgbWFyZ2luLXRvcDogMzBweDsKK30KKworI3RyYW5zZiB7CisgIG1hcmdpbi10
b3A6IDYwcHg7CisgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKK30KKworI2Rl
Y2ltYWwgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGxlZnQ6IDAuNXB4OworICB0b3A6IDUw
LjVweDsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rl
c0Zyb21SZWN0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJl
Y3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmM2YQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0
LmpzCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgKiBBbnRv
bmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KKyAqKi8KKworZnVuY3Rpb24gY2hlY2so
eCwgeSwgaFBhZGRpbmcsIHZQYWRkaW5nLCBsaXN0KQoreworICAvKgorICAgIE5vZGVMaXN0IG5v
ZGVzRnJvbVJlY3QoaW4gbG9uZyB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9u
ZyB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9uZyBoUGFkZGluZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIGxvbmcgdlBhZGRpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBib29sZWFuIGlnbm9yZUNsaXBwaW5nKTsKKyAgKi8KKyAgdmFyIG5vZGVz
ID0gZG9jdW1lbnQubm9kZXNGcm9tUmVjdCh4LCB5LCBoUGFkZGluZywgdlBhZGRpbmcsIHRydWUg
LyogaWdub3JlQ2xpcHBpbmcgKi8pOworCisgIGlmIChub2Rlcy5sZW5ndGggIT0gbGlzdC5sZW5n
dGgpIHsKKyAgICB0ZXN0RmFpbGVkKCJEaWZmZXJlbnQgbnVtYmVyIG9mIG5vZGVzIGZvciByZWN0
IiArCisgICAgICAgICAgICAgICJbIiArIHggKyAiLCIgKyB5ICsgIl0sICIgKworICAgICAgICAg
ICAgICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRkaW5nICsgIl06ICciICsgbGlzdC5sZW5n
dGggKyAiJyB2cyAnIiArIG5vZGVzLmxlbmd0aCArICInIik7CisgICAgcmV0dXJuOworICB9CisK
KyAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgeworICAgIGlmIChub2Rl
c1tpXSAhPSBsaXN0W2ldKSB7CisgICAgICB0ZXN0RmFpbGVkKCJVbmV4cGVjdGVkIG5vZGUgIyIg
KyBpICsgIiBmb3IgcmVjdCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSAr
ICJdLCAiICsKKyAgICAgICAgICAgICAgICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRkaW5n
ICsgIl0iICsgIiAtICIgKyBub2Rlc1tpXSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisK
KyAgdGVzdFBhc3NlZCgiQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgIiAgKworICAg
ICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAiICsKKyAgICAgICAgICAgIlsiICsgaFBh
ZGRpbmcgKyAiLCIgKyB2UGFkZGluZyArICJdIik7Cit9CisKK2Z1bmN0aW9uIGdldENlbnRlckZv
cihlbGVtZW50KQoreworICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCk7CisgIHJldHVybiB7IHggOiBwYXJzZUludCgocmVjdC5sZWZ0ICsgcmVjdC5yaWdodCkgLyAy
KSAsIHkgOiBwYXJzZUludCgocmVjdC50b3AgKyByZWN0LmJvdHRvbSkgLyAyKX07Cit9CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGll
cy1leHBlY3RlZC50eHQKaW5kZXggNDQ5Mzc5Zi4uMmU5YTU4NiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2lu
ZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC02MjgsNiArNjI4LDcgQEAgd2luZG93LkRv
Y3VtZW50LnByb3RvdHlwZS5pc1NhbWVOb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUuaXNTdXBwb3J0ZWQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlw
ZS5sb29rdXBOYW1lc3BhY2VVUkkgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlw
ZS5sb29rdXBQcmVmaXggW2Z1bmN0aW9uXQord2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5ub2Rl
c0Zyb21SZWN0IFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubm9ybWFsaXpl
IFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucXVlcnlDb21tYW5kRW5hYmxl
ZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZEluZGV0
ZXJtIFtmdW5jdGlvbl0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMmE0MTU1Ny4uMmViYWFiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NyBAQAorMjAxMC0wNy0y
MSBHcmFjZSBLbG9iYSAgPGtsb2JhZ0BnbWFpbC5jb20+ICwgQW50b25pbyBHb21lcyAgPHRvbmlr
aXRvb0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUgaW5z
dGVhZCBvZiBhIHBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MDE5NworCisgICAgICAgIFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBjaGFuZ2Ug
aXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3JlIHByZWNpc2UgdGFwCisgICAgICAgIGFj
dGlvbnMgYnkgdGhlIHVzZXJzIG9uIG1vYmlsZSBkZXZpY2VzLgorCisgICAgICAgIFBhdGNoIGV4
dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFu
Z3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIHdoZW4gYXBw
bGljYWJsZS4gRm9yIHRoYXQsIHRoZSBIaXRUZXN0UmVzdWx0IGNsYXNzCisgICAgICAgIHdhcyBt
b2RpZmllZCB0byB0YWtlIGEgcGFkZGluZyAoSW50U2l6ZSkuIFRoZSBwYWRkaW5nIHNwZWNpZmll
cyBhIGZ1enp5IHJhbmdlIGZvcgorICAgICAgICBhY2NlcHRpbmcgaW5wdXQgZXZlbnRzIGluIHBp
eGVscyBjb29yZGluYXRlcyBmb3IgYm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAorICAgICAg
ICBvcmllbnRhdGlvbnMuIEluIG90aGVyIHdvcmRzLCBpdCB0ZWxscyBob3cgbXVjaCB0byBleHBh
bmQgdGhlIHNlYXJjaCByZWN0CisgICAgICAgIGFyb3VuZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50
LgorCisgICAgICAgIElmIGl0IGlzIG5lZ2F0aXZlLCBoaXQgdGVzdGluZyB3aWxsIGJlaGF2aW9y
IGFzIHRoZSBjdXJyZW50IHBvaW50IGJhc2VkIGhpdCB0ZXN0aW5nLAorICAgICAgICBhbmQgbWV0
aG9kcyBhcmUgbm8tb3AnZWQgdG8gbm90IHJlZ3Jlc3MgdGhpcyBjb21tb24gYmVoYXZpb3IgcGVy
Zm9ybWFuY2Utd2lzZS4KKyAgICAgICAgV2hlbiBub24gbmVnYXRpdmUgSW50U2l6ZSBpcyBwcm92
aWRlZCwgdGhlIGhpdCB0ZXN0IHJlc3VsdCB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbAorICAgICAg
ICBub2RlcyB0aGF0IGludGVyc2VjdCB0aGUgYnVpbHQgdXAgdGVzdCBhcmVhLiBUaGUgbG9naWMg
d2lsbCBjb250aW51ZSBzZWFyY2hpbmcgd2hlbiBpdAorICAgICAgICBmaW5kcyBhIGNhbmRpZGF0
ZSB1bnRpbCB0aGUgcmVjdGFuZ2xlIGlzIGZ1bGx5IGVuY2xvc2VkIGJ5IHRoZSBib3VuZGFyaWVz
IG9mIGEgY2FuZGlkYXRlLgorICAgICAgICBUaGUgcmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIG5v
ZGVzIGluIHRoZSB6LW9yZGVyIHRoZXkgYXJlIGhpdC10ZXN0ZWQuCisgICAgICAgIENhbGxlciB3
aWxsIGRlY2lkZSBob3cgdG8gcHJvY2VzcyB0aGVtLgorCisgICAgICAgIEluIG9yZGVyIHRvIGV4
cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoOgorCisgICAgICAgIC0gQWRkcyBhIG5v
ZGVzRnJvbVJlY3QgbWV0aG9kIHRvIHRoZSBEb2N1bWVudCBjbGFzcywgZXhwb3NpbmcgdGhlIGZ1
bmNpb25hbGl0eQorICAgICAgICB0byB0aGUgRE9NLiBNZXRob2QgcmV0dXJucyBhIE5vZGVMaXN0
IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBnaXZlbgorICAgICAgICBoaXQtdGVz
dGVkIGFyZWEuCisgICAgICAgIC0gRXh0ZW5kcyBoaXRUZXN0UmVzdWx0QXRQb2ludCBtZXRob2Qg
b2YgdGhlIEV2ZW50SGFuZGxlciB3aXRoIGFuIGV4dHJhICdwYWRkaW5nJworICAgICAgICBwYXJh
bWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgtMSwgLTEpLiBUaGUgcmVjdC1iYXNlZCBoaXQg
dGVzdCBpcyBwZXJmb3JtZWQgd2hlbiBhCisgICAgICAgIG5vbi1uZWdhdGl2ZSBwYWRkaW5nIGlz
IHBhc3NlZCBpbi4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2lj
Lmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2Rlc0Zyb21SZWN0KTogVGhp
cyBtZXRob2QgZXhwb3NlcyB0aGUgcmVjdCBiYXNlZCBmdW5jaW9uYWxpdHkgdG8KKyAgICAgICAg
dGhlIERPTS4gSXQgd29ya3Mgc2ltaWxhcmx5IHRvIGVsZW1lbnRGcm9tUG9pbnQsIGhvd2V2ZXIg
cmVjZWl2aW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQorICAgICAgICBhcyBpbnB1dCBpbnN0ZWFkIG9m
IGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQgbGlzdCBvZiBub2RlcyAo
bm90IGVsZW1lbnRzKQorICAgICAgICB3aG9zZSBhcmVhIGludGVyc2VjdCB0aGUgaGl0IHRlc3Qg
cmVjdC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogRGl0dG8uCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmlkbDogRGl0dG8uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludCk6IFRoZSBm
dW5jaW9uYWxpdHkgaXMgYWxzbyBleHBvc2VkIHRocm91Z2ggdGhpcworICAgICAgICBtZXRob2Qu
IFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdvcmsgYXMgdGhl
IHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKKyAgICAgICAgdGhlIGhpdCB0ZXN0IHJlY3QuCisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6SGl0
VGVzdFJlc3VsdCk6IFJlY3QgYmFzZWQgaGl0IHRlc3QgY29uc3RydWN0b3IuIFJlY2VpdmVzIGEK
KyAgICAgICAgcGFkZGluZyBJbnRTaXplIGFzIHBhcmFtZXRlci4gSXQgY2FuIGJlICgwLDApLgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZpZWQgdG8g
YXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6IE1lcmdlIHRvIEhpdFRlc3RSZXN1bHQgb2JqZWN0
cyBpbiBhIHdheSB0aGF0IHRoZQorICAgICAgICBsaXN0IG5vZGUncyBvZiBib3RoIG9iamVjdHMg
Z2V0IGFtZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9S
ZWN0QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxpc3Qgb2YKKyAg
ICAgICAgaGl0IG5vZGVzLgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0aGUgcGFk
ZGluZyBhcyBhbiBJbnRTaXplLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6aXNS
ZWN0QmFzZWRUZXN0KTogUmV0dXJucyBpZiB0aGUgSGl0VGVzdFJlc3VsdCBpcyByZWN0IGJhc2Vk
IG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Oi5yZWN0QmFzZWRUZXN0
UmVzdWx0KTogUmV0dXJucyB0aGUgbGlzdCBub2RlcyBoaXQuCisgICAgICAgIChXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJucyB0aGUgaGl0IHRlc3QgcmVjdCBn
aXZlbiB0aGUgaGl0IHRlc3QgcG9pbnQKKyAgICAgICAgYW5kIHBhZGRpbmcuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNv
bHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOiBNZXRob2QgaXMgbW9kaWZpZWQgdG8g
c3VwcG9ydCByZWN0IGJhc2VkIGhpdCB0ZXN0IGV4dGVuc2lvbi4KKyAgICAgICAgTm93IGl0IG5v
dCBqdXN0IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2YgdGhlIG5vZGUgYmVpbmcgaGl0LXRlc3Rl
ZCBjb250YWlucyBhIGhpdCB0ZXN0IHBvaW50LCBidXQKKyAgICAgICAgaW5zdGVhZCBpdCBjaGVj
a3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBoaXQgdGVzdCByZWN0
LiBJdCBpcyBpbXBsZW1lbnRlZCBzbworICAgICAgICB0aGF0IHRoZSBjb21tb24gY2FzZSAocG9p
bnQgYmFzZWQgaGl0IHRlc3QpIHdvcmtzIGFzIHByZXZpb3VzbHkuCisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6
bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6
IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlu
ZUJveExpc3Q6OmhpdFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KTogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6IERp
dHRvLgorCiAyMDEwLTA3LTIyICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+
CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzODk5YmY1Li42YjI0ZDdj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KQEAgLTIxNiw3ICsyMTYsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0
c2Nyb2xsT3ZlcmZsb3dFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFudQogX19a
TjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNXNlbmRTY3JvbGxFdmVudEV2CiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRF
CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGFuZGxlVGV4dElucHV0RXZlbnRFUktOU182
U3RyaW5nRVBOU181RXZlbnRFYmIKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0
UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFagor
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOElu
dFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU183SW50U2l6ZUUKIF9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRmb3Jt
TW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJlbGVh
c2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhh
bmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOWM3NDdk
My4uZWViODNjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTE5LDYgKzExOSw3IEBACiAjaW5jbHVkZSAiU2Vn
bWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3RhdGljSGFzaFNldE5vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiU3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNs
dWRlICJUZXh0RXZlbnQuaCIKQEAgLTIwOCw2ICsyMDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZ
T1VUX1NDSEVEVUxJTkcgMQorLy8gI2RlZmluZSBEVU1QX0hJVFRFU1RfUkVTVUxUIDEKIAogLy8g
VGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxhcHNlZCBiZWZvcmUgd2Ugd2lsbCBldmVu
IGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0aG91dCBhIGRlbGF5LgogLy8gRklYTUU6
IEZvciBmYXN0ZXIgbWFjaGluZXMgdGhpcyB2YWx1ZSBjYW4gcmVhbGx5IGJlIGxvd2VyZWQgdG8g
MjAwLiAgMjUwIGlzIGFkZXF1YXRlLCBidXQgYSBsaXR0bGUgaGlnaApAQCAtMTAwMyw2ICsxMDA1
LDczIEBAIEtVUkwgRG9jdW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogICAgIHJldHVybiBtX2Jhc2VV
Ukw7CiB9CiAKKyNpZmRlZiBEVU1QX0hJVFRFU1RfUkVTVUxUCit2b2lkIHN0YXRpYyBkdW1wSGl0
VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCit7CisgICAgTGlzdEhhc2hT
ZXQ8UmVmUHRyPE5vZGU+ID4gbGlzdCA9IHJlc3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7Cisg
ICAgcHJpbnRmKCIoJXMpIC0ge3g9JWQgeT0lZCBoUGFkZGluZz0lZCB2UGFkZGluZz0lZH1cbiIs
CisgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0LnBvaW50KCkueCgpLCByZXN1bHQucG9p
bnQoKS55KCksIHJlc3VsdC5wYWRkaW5nKCkud2lkdGgoKSwgcmVzdWx0LnBhZGRpbmcoKS5oZWln
aHQoKSk7CisgICAgcHJpbnRmKCJMaXN0IHNpemU6JWRcbiIsIGxpc3Quc2l6ZSgpKTsKKworICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5v
ZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CisgICAgZm9yICggOyBpdCAh
PSBlbmQgOyArK2l0KSB7CisgICAgICAgIHByaW50ZigiJWQpICIsICsrY291bnQpOworICAgICAg
ICBOb2RlKiBub2RlID0gKCppdCkuZ2V0KCk7CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnRO
b2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNJRCgpKQorICAgICAgICAgICAgICAg
IHByaW50ZigiSGl0IGVsZW1lbnQgPCVzPiwgaWQ9JyVzJ1xuIiwgbm9kZS0+bm9kZU5hbWUoKS51
dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZSgi
aWQiKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBwcmludGYoIkhpdCBlbGVtZW50IDwlcz4sIE5PIElEISdcbiIsIG5vZGUtPm5vZGVO
YW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9k
ZSgpKQorICAgICAgICAgICAgcHJpbnRmKCJUZXh0IG5vZGUgaGl0LiBDb250ZW50OiclcydcbiIs
IG5vZGUtPnRleHRDb250ZW50KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByaW50ZigiSGl0IG5vZGUgPCVzPlxuIiwgbm9kZS0+bm9kZU5hbWUoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworfQorI2VuZGlmCisKKy8vIEZJWE1F
OiBXZSBuZWVkIHRvIGRpc2N1c3MgdGhlIERPTSBBUEkgaGVyZSBhdCBzb21lIHBvaW50LiBJZGVh
czoKKy8vICogbWFraW5nIGl0IHJlY2VpdmUgYSByZWN0IGFzIHBhcmFtZXRlciwgaS5lLiBub2Rl
c0Zyb21SZWN0KHgsIHksIHcsIGgpOworLy8gKiBtYWtpbmcgaXQgcmVjZWl2ZSB0aGUgZXhwYWRp
bmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBzZXBhcmF0ZWx5LAorLy8gICBpLmUuIG5vZGVzRnJv
bVJlY3QoeCwgeSwgdG9wU2l6ZSwgcmlnaHRTaXplLCBib3R0b21TaXplLCBsZWZ0U2l6ZSk7CitQ
YXNzUmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9kZXNGcm9tUmVjdChpbnQgY2VudGVyWCwg
aW50IGNlbnRlclksIGludCBoUGFkZGluZywgaW50IHZQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBw
aW5nKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaGFyZSBjb2RlIGJldHdlZW4gdGhpcywgZWxl
bWVudEZyb21Qb2ludCBhbmQgY2FyZXRSYW5nZUZyb21Qb2ludC4KKyAgICBpZiAoIXJlbmRlcmVy
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZVZpZXctPnBhZ2Vab29tRmFjdG9y
KCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChjZW50
ZXJYICogem9vbUZhY3RvciAgKyB2aWV3KCktPnNjcm9sbFgoKSwgY2VudGVyWSAqIHpvb21GYWN0
b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworICAgIEludFNpemUgcGFkZGluZyhoUGFkZGluZywg
dlBhZGRpbmcpOworCisgICAgaW50IHR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisgICAgLy8gV2hlbiBpZ25vcmVDbGlwcGluZyBpcyBm
YWxzZSwgdGhpcyBtZXRob2QgcmV0dXJucyBudWxsIGZvciBjb29yZGluYXRlcyBvdXRzaWRlIG9m
IHRoZSB2aWV3cG9ydC4KKyAgICBpZiAoaWdub3JlQ2xpcHBpbmcpCisgICAgICAgIHR5cGUgfD0g
SGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nOworICAgIGVsc2UgaWYgKCFmcmFtZVZpZXct
PnZpc2libGVDb250ZW50UmVjdCgpLmludGVyc2VjdHMoSW50UmVjdChwb2ludCwgcGFkZGluZykp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QodHlwZSk7
CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOworICAgIHJlbmRlclZp
ZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOworCisjaWZkZWYgRFVNUF9I
SVRURVNUX1JFU1VMVAorICAgIGR1bXBIaXRUZXN0UmVzdWx0KHJlc3VsdCk7CisjZW5kaWYKKwor
ICAgIHJldHVybiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q6OmFkb3B0KHJlc3VsdC5yZWN0QmFzZWRU
ZXN0UmVzdWx0KCkpOworfQorCiBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludChp
bnQgeCwgaW50IHkpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNoYXJlIGNvZGUgYmV0d2VlbiB0
aGlzIGFuZCBjYXJldFJhbmdlRnJvbVBvaW50LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDc4Y2I1My4uNzg5Yjk2YSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0zMDIsNiArMzAyLDE4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0VsZW1lbnRX
aXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNNdWx0
aXBsZUVsZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSB7IHJldHVy
biBtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKTsgfQogCisgICAgLyoq
CisgICAgICogUmV0cmlldmUgYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IGEgcmVjdCBpbiB0aGUg
d2luZG93J3MgZG9jdW1lbnQsIHVudGlsIGl0IGlzIGZ1bGx5IGVuY2xvc2VkIGJ5CisgICAgICog
dGhlIGJvdW5kYXJpZXMgb2Ygbm9kZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjZW50ZXJYIHgg
cmVmZXJlbmNlIGZvciB0aGUgcmVjdGFuZ2xlIGluIENTUyBwaXhlbHMKKyAgICAgKiBAcGFyYW0g
Y2VudGVyWSB5IHJlZmVyZW5jZSBmb3IgdGhlIHJlY3RhbmdsZSBpbiBDU1MgcGl4ZWxzCisgICAg
ICogQHBhcmFtIGhQYWRkaW5nIEhvdyBtdWNoIHRvIGV4cGFuZCB0aGUgcmVjdGFuZ2xlIGhvcml6
b250YWxseQorICAgICAqIEBwYXJhbSB2UGFkZGluZyBIb3cgbXVjaCB0byBleHBhbmQgdGhlIHJl
Y3RhbmdsZSB2ZXJ0aWNhbGx5CisgICAgICogQHBhcmFtIGlnbm9yZUNsaXBwaW5nIHdoZXRoZXIg
b3Igbm90IHRvIGlnbm9yZSB0aGUgcm9vdCBzY3JvbGwgZnJhbWUgd2hlbiByZXRyaWV2aW5nIHRo
ZSBlbGVtZW50LgorICAgICAqICAgICAgICBJZiBmYWxzZSwgdGhpcyBtZXRob2QgcmV0dXJucyBu
dWxsIGZvciBjb29yZGluYXRlcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKi8KKyAg
ICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KGludCBjZW50ZXJYLCBpbnQgY2Vu
dGVyWSwgaW50IGhQYWRkaW5nLCBpbnQgdlBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcpIGNv
bnN0OwogICAgIEVsZW1lbnQqIGVsZW1lbnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdDsK
ICAgICBQYXNzUmVmUHRyPFJhbmdlPiBjYXJldFJhbmdlRnJvbVBvaW50KGludCB4LCBpbnQgeSk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBiL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbAppbmRleCA5NTk5ZDc2Li45MmM4ZTYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5pZGwKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC0xODYsNiAr
MTg2LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01TdHJpbmcgZGVmYXVsdENoYXJzZXQ7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRdIERP
TVN0cmluZyByZWFkeVN0YXRlOwogCisKKyAgICAgICAgTm9kZUxpc3QgICAgICAgICAgIG5vZGVz
RnJvbVJlY3QoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgaFBhZGRpbmcsIGluIGxvbmcg
dlBhZGRpbmcsIGluIGJvb2xlYW4gaWdub3JlQ2xpcHBpbmcpOwogICAgICAgICBFbGVtZW50ICAg
ICAgICAgICAgZWxlbWVudEZyb21Qb2ludChpbiBsb25nIHgsIGluIGxvbmcgeSk7CiAgICAgICAg
IFJhbmdlICAgICAgICAgICAgICBjYXJldFJhbmdlRnJvbVBvaW50KGluIGxvbmcgeCwgaW4gbG9u
ZyB5KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAyYjEwYzZkLi5lMTBhM2ExIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtODYzLDkgKzg2Myw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjphbGxv
d0RIVE1MRHJhZyhib29sJiBmbGFnREhUTUwsIGJvb2wmIGZsYWdVQSkgY29uc3QKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIAotSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRs
ZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxv
d1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRl
c3RTY3JvbGxiYXJzLCBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUp
CitIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3Qg
SW50UG9pbnQmIHBvaW50LCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlw
cGluZywgSGl0VGVzdFNjcm9sbGJhcnMgdGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpI
aXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSwgY29uc3QgSW50U2l6ZSYgcGFkZGluZykKIHsKLSAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQo
cG9pbnQsIHBhZGRpbmcpOwogICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgaWYgKGlnbm9yZUNsaXBwaW5nKQpAQCAtODg2LDcg
Kzg4Niw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsCiAgICAgICAgIEZyYW1lVmlldyogdmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7CiAgICAgICAgIEludFBvaW50IHdp
ZGdldFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkueCgpICsgdmlldy0+c2Nyb2xsWCgpIC0gcmVu
ZGVyV2lkZ2V0LT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJXaWRnZXQtPnBhZGRpbmdMZWZ0KCksIAog
ICAgICAgICAgICAgcmVzdWx0LmxvY2FsUG9pbnQoKS55KCkgKyB2aWV3LT5zY3JvbGxZKCkgLSBy
ZW5kZXJXaWRnZXQtPmJvcmRlclRvcCgpIC0gcmVuZGVyV2lkZ2V0LT5wYWRkaW5nVG9wKCkpOwot
ICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0UG9pbnQpOwor
ICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0UG9pbnQsIHBh
ZGRpbmcpOwogICAgICAgICBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRl
c3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSksIHdpZGdldEhpdFRlc3RSZXN1bHQpOwogICAgICAg
ICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVzdWx0OwogCkBAIC05MDgsNyArOTA4LDcgQEAgSGl0
VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3ICYmIG1haW5W
aWV3KSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSByZXN1bHRWaWV3
LT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRQ
b2ludCBtYWluRnJhbWVQb2ludCA9IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1Bv
aW50KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50
LCBpZ25vcmVDbGlwcGluZyk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93
U2hhZG93Q29udGVudCwgaWdub3JlQ2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlLCBw
YWRkaW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCBhNDczMGJiLi5lODQwZDU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xMDYsNyArMTA2LDEx
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5R
dWFkKGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0
QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGln
bm9yZUNsaXBwaW5nID0gZmFsc2UsIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250
SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0
VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUp
OworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQm
LCBib29sIGFsbG93U2hhZG93Q29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaWdub3JlQ2xpcHBpbmcgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250
SGl0VGVzdFNjcm9sbGJhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVx
dWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgcGFkZGluZyA9IEludFNpemUo
LTEsIC0xKSk7CiAKICAgICBib29sIG1vdXNlUHJlc3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW91
c2VQcmVzc2VkOyB9CiAgICAgdm9pZCBzZXRNb3VzZVByZXNzZWQoYm9vbCBwcmVzc2VkKSB7IG1f
bW91c2VQcmVzc2VkID0gcHJlc3NlZDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
RWxsaXBzaXNCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4
IDNlMTM0MmYuLjYxY2Q1MjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKQEAgLTExMyw5
ICsxMTMsMTEgQEAgYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgSW50UmVjdCh0eCwgdHksIG1fd2lkdGgs
IG1faGVpZ2h0KS5jb250YWlucyh4LCB5KSkgeworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IElu
dFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgaWYgKHZpc2libGVUb0hpdFRl
c3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeCwg
eSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2Rl
KCksIHgsIHksIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA1
MDkzM2M2Li5iYjZkODliIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNDks
OSArNDksMTkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhpdFRlc3RSZXN1bHQ6Okhp
dFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogICAgIDogbV9wb2ludChwb2ludCkK
ICAgICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQorICAgICwgbV9wYWRkaW5nKEludFNpemUoLTEs
IC0xKSkKKyAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiB7CiB9CiAKK0hpdFRlc3RSZXN1bHQ6
OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIGNlbnRlclBvaW50LCBjb25zdCBJbnRTaXpl
JiBwYWRkaW5nKQorICAgIDogbV9wb2ludChjZW50ZXJQb2ludCkKKyAgICAsIG1faXNPdmVyV2lk
Z2V0KGZhbHNlKQorICAgICwgbV9wYWRkaW5nKHBhZGRpbmcpCit7CisgICAgbV9pc1JlY3RCYXNl
ZCA9IHBhZGRpbmcud2lkdGgoKSA+PSAwICYmIHBhZGRpbmcuaGVpZ2h0KCkgPj0gMDsKK30KKwog
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikK
ICAgICA6IG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgpKQogICAgICwgbV9pbm5lck5vblNo
YXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkpCkBAIC02MCw3ICs3MCwxMyBAQCBI
aXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQog
ICAgICwgbV9pbm5lclVSTEVsZW1lbnQob3RoZXIuVVJMRWxlbWVudCgpKQogICAgICwgbV9zY3Jv
bGxiYXIob3RoZXIuc2Nyb2xsYmFyKCkpCiAgICAgLCBtX2lzT3ZlcldpZGdldChvdGhlci5pc092
ZXJXaWRnZXQoKSkKKyAgICAsIG1fcGFkZGluZyhvdGhlci5wYWRkaW5nKCkpCiB7CisgICAgaWYg
KG1faXNSZWN0QmFzZWQgPSBvdGhlci5pc1JlY3RCYXNlZFRlc3QoKSkgeworICAgICAgICAvLyBP
bmx5IGNvcHkgdGhlIExpc3RIYXNoU2V0IGluIGNhc2Ugb2YgcmVjdCBoaXQgdGVzdC4KKyAgICAg
ICAgLy8gSXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiBhbmQgdW5uZWVkZWQgaW4gdGhlIGNv
bW1vbiBwb2ludCBiYXNlZCBjYXNlLgorICAgICAgICBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgPSBv
dGhlci5yZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgfQogfQogCiBIaXRUZXN0UmVzdWx0Ojp+
SGl0VGVzdFJlc3VsdCgpCkBAIC03Niw2ICs5MiwxMiBAQCBIaXRUZXN0UmVzdWx0JiBIaXRUZXN0
UmVzdWx0OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgbV9pbm5l
clVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7CiAgICAgbV9zY3JvbGxiYXIgPSBvdGhl
ci5zY3JvbGxiYXIoKTsKICAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgp
OworICAgIG1fcGFkZGluZyA9IG90aGVyLnBhZGRpbmcoKTsKKyAgICBpZiAobV9pc1JlY3RCYXNl
ZCA9IG90aGVyLmlzUmVjdEJhc2VkVGVzdCgpKSB7CisgICAgICAgIC8vIE9ubHkgY29weSB0aGUg
TGlzdEhhc2hTZXQgaW4gY2FzZSBvZiByZWN0IGhpdCB0ZXN0LgorICAgICAgICAvLyBJdCBpcyBh
biBleHBlbnNpdmUgb3BlcmF0aW9uIGFuZCB1bm5lZWRlZCBpbiB0aGUgY29tbW9uIHBvaW50IGJh
c2VkIGNhc2UuCisgICAgICAgIG1fcmVjdEJhc2VkVGVzdFJlc3VsdCA9IG90aGVyLnJlY3RCYXNl
ZFRlc3RSZXN1bHQoKTsKKyAgICB9CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zNjIsNCAr
Mzg0LDQwIEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAog
ICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0K
IAorYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUq
IG5vZGUsIGludCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBJZiBp
dCBpcyBub3QgYSByZWN0LWJhc2VkIGhpdCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8t
b3AuCisgICAgLy8gUmV0dXJuIGZhbHNlLCBzbyB0aGUgaGl0IHRlc3Qgc3RvcHMuCisgICAgaWYg
KCFpc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYg
bm9kZSBpcyBudWxsLCByZXR1cm4gdHJ1ZSBzbyB0aGUgaGl0IHRlc3QgY2FuIGNvbnRpbnVlLgor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBub2RlID0gbm9kZS0+
c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgbV9yZWN0QmFzZWRUZXN0UmVzdWx0LmFkZChub2Rl
KTsKKworICAgIHJldHVybiAhcmVjdC5jb250YWlucyhyZWN0RnJvbVBvaW50KHgsIHkpKTsKK30K
Kwordm9pZCBIaXRUZXN0UmVzdWx0OjphcHBlbmQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIp
Cit7CisgICAgQVNTRVJUKGlzUmVjdEJhc2VkVGVzdCgpICYmIG90aGVyLmlzUmVjdEJhc2VkVGVz
dCgpKTsKKworICAgIGlmICghbV9pbm5lck5vZGUgJiYgb3RoZXIuaW5uZXJOb2RlKCkpIHsKKyAg
ICAgICAgbV9pbm5lck5vZGUgPSBvdGhlci5pbm5lck5vZGUoKTsKKyAgICAgICAgbV9pbm5lck5v
blNoYXJlZE5vZGUgPSBvdGhlci5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICAgICAgbV9sb2Nh
bFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOworICAgICAgICBtX2lubmVyVVJMRWxlbWVudCA9
IG90aGVyLlVSTEVsZW1lbnQoKTsKKyAgICAgICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3JvbGxi
YXIoKTsKKyAgICAgICAgbV9pc092ZXJXaWRnZXQgPSBvdGhlci5pc092ZXJXaWRnZXQoKTsKKyAg
ICB9CisKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IG90aGVy
LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6
Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGxpc3QuZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxS
ZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxh
c3Q7ICsraXQpCisgICAgICAgIG1fcmVjdEJhc2VkVGVzdFJlc3VsdC5hZGQoaXQtPmdldCgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmlu
ZGV4IGQxOTA2YmEuLmE0ZjEyYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTIx
LDcgKzIxLDEwIEBACiAjZGVmaW5lIEhpdFRlc3RSZXN1bHRfaAogCiAjaW5jbHVkZSAiSW50UG9p
bnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzQxLDgg
QEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgSGl0VGVzdFJlc3VsdCB7CiBwdWJsaWM6CiAgICAgSGl0
VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYpOworICAgIC8vIFBhc3MgYSBub24tbmVnYXRpdmUg
SW50U2l6ZSB2YWx1ZSBhcyBwYWRkaW5nIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0
LgorICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIGNlbnRlclBvaW50LCBjb25zdCBJ
bnRTaXplJiBwYWRkaW5nKTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQm
KTsKICAgICB+SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShj
b25zdCBIaXRUZXN0UmVzdWx0Jik7CkBAIC03Niw3ICs4MSwyMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0
OwogCisgICAgLy8gUmVjdC1iYXNlZCBoaXQgdGVzdCByZWxhdGVkIG1ldGhvZHMuCisgICAgYm9v
bCBpc1JlY3RCYXNlZFRlc3QoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjdEJhc2VkOyB9CisgICAg
SW50UmVjdCByZWN0RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7CisgICAgSW50UmVjdCBy
ZWN0RnJvbVBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBwYWRkaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9CisgICAgaW50IHBhZGRpbmdXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFkZGluZy53aWR0aCgpID49IDAgPyBtX3BhZGRpbmcud2lkdGgoKSA6
IDA7IH0KKyAgICBpbnQgcGFkZGluZ0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFkZGluZy5o
ZWlnaHQoKSA+PSAwID8gbV9wYWRkaW5nLmhlaWdodCgpIDogMDsgfQorICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBpdCBpcyByZWN0LWJhc2VkIGhpdCB0ZXN0IGFuZCBuZWVkcyB0byBjb250aW51ZSB1
bnRpbCB0aGUgcmVjdCBpcyBmdWxseQorICAgIC8vIGVuY2xvc2VkIGJ5IHRoZSBib3VuZGFyaWVz
IG9mIGEgbm9kZS4KKyAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSos
IGludCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCA9IEludFJlY3QoKSk7CisgICAgY29u
c3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4mIHJlY3RCYXNlZFRlc3RSZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQ7IH0KKyAgICB2b2lkIGFwcGVuZChjb25z
dCBIaXRUZXN0UmVzdWx0Jik7CisKIHByaXZhdGU6CisKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5l
ck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb25TaGFyZWROb2RlOwogICAgIEludFBv
aW50IG1fcG9pbnQ7CkBAIC04NSw4ICsxMDQsMzcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWxl
bWVudD4gbV9pbm5lclVSTEVsZW1lbnQ7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxi
YXI7CiAgICAgYm9vbCBtX2lzT3ZlcldpZGdldDsgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGFyZSBv
dmVyIGEgd2lkZ2V0IChhbmQgbm90IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhIG9mIGEgUmVu
ZGVyV2lkZ2V0IGZvciBleGFtcGxlKS4KKyAgICBJbnRTaXplIG1fcGFkZGluZzsKKyAgICBib29s
IG1faXNSZWN0QmFzZWQ7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9yZWN0QmFz
ZWRUZXN0UmVzdWx0OwogfTsKIAoraW5saW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVjdEZy
b21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlY3RGcm9tUG9pbnQo
SW50UG9pbnQoeCwgeSkpOworfQorCisvLyBGb3JtdWxhOgorLy8geCA9IHAueCgpIC0gcGFkZGlu
Zy53aWR0aCgpCisvLyB5ID0gcC55KCkgLSBwYWRkaW5nLmhlaWdodCgpCisvLyB3aWR0aCA9IDIg
KiBwYWRkaW5nLndpZHRoKCkgKyAxCisvLyBoZWlnaHQgPSAyICogbV9wYWRkaW5nLmhlaWdodCgp
ICsgMQoraW5saW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVjdEZyb21Qb2ludChjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcmVhbFBvaW50KHBvaW50KTsK
KyAgICBJbnRTaXplIHJlYWxQYWRkaW5nKG1fcGFkZGluZyk7CisKKyAgICAvLyBSZWFsIEludFBv
aW50IGZvciB0aGUgcmVjdC4KKyAgICByZWFsUGFkZGluZy5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7
CisgICAgcmVhbFBvaW50IC09IHJlYWxQYWRkaW5nOworCisgICAgLy8gUmVhbCBJbnRTaXplIGZv
ciB0aGUgcmVjdC4KKyAgICByZWFsUGFkZGluZy5zY2FsZSgyKTsKKyAgICByZWFsUGFkZGluZyAr
PSBJbnRTaXplKDEsIDEpOworCisgICAgcmV0dXJuIEludFJlY3QocmVhbFBvaW50LCByZWFsUGFk
ZGluZyk7Cit9CisKIFN0cmluZyBkaXNwbGF5U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IE5v
ZGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAppbmRleCBmYmZlNTZkLi5kZmU3NTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcApAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiB7CiAgICAg
SW50UmVjdCBvdmVyZmxvd1JlY3QodmlzaWJsZU92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxv
d1JlY3QubW92ZSh0eCwgdHkpOwotICAgIGlmICghb3ZlcmZsb3dSZWN0LmNvbnRhaW5zKHgsIHkp
KQorICAgIGlmICghb3ZlcmZsb3dSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQo
eCwgeSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBm
aXJzdC4KQEAgLTYyNCw5ICs2MjQsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKIAogICAg
IC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMuCiAgICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0eSAr
IG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkg
JiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkg
JiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHgsIHkpKSkgewogICAgICAg
ICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4
LCB5IC0gdHkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29y
ZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVy
ZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CmluZGV4IDg1NDdmZTAuLjUwZjZjZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CkBAIC0yODcsOSArMjg3LDEwIEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGluCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lk
dGgsIGhlaWdodCgpKTsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAm
JiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlm
IChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3Rpbmco
KSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0g
dHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQu
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBlOGI1ODIyLi45NTUwZWJmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zNzUyLDE5ICszNzUyLDIyIEBAIGJvb2wgUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhp
bmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzaWJsZU92ZXJmbG93
UmVjdCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIGlmICgh
b3ZlcmZsb3dCb3guY29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5p
bnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KF94LCBfeSkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Qmxv
Y2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3Jv
dW5kKSAmJiBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0eSkp
IHsKICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgs
IF95IC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIEZJWE1FOiBpc1Bv
aW50SW5PdmVyZmxvd0NvbnRyb2woKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIHRlc3RzIHll
dC4KKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2Rl
KCksIF94LCBfeSkpCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIElm
IHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAgICAg
Ym9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBhaW50
aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1c2VP
dmVyZmxvd0NsaXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXND
b250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95KSA6
IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBJbnRSZWN0
IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0RnJvbVBvaW50KF94LCBfeSkpOworICAgIGJvb2wgY2hl
Y2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBS
ZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkgOiBvdmVyZmxvd0NsaXBSZWN0KHR4
LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVuKSB7
CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBpbnQgc2Ny
b2xsZWRYID0gdHg7CkBAIC0zODEyLDkgKzM4MTUsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3UKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVzdEFj
dGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVz
dENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIEludFJlY3QgYm91bmRzUmVjdCh0eCwg
dHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3Rpbmco
KSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94LCBfeSkpIHsKKyAgICAgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9p
bnQoX3gsIF95KSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgp
LCBfeCwgX3ksIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0zODM5LDEzICszODQzLDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByCiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAg
IGNvbFJlY3QubW92ZSh0eCwgdHkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNvbFJlY3QuY29u
dGFpbnMoeCwgeSkpIHsKKyAgICAgICAgaWYgKGNvbFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVj
dEZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNpZGUg
dGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAvLyBBZGp1c3QgdHggYW5kIHR5IHRvIGNoYW5nZSB3
aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAgCiAgICAgICAgICAgICBpbnQgZmluYWxYID0gdHgg
KyBjdXJyWE9mZnNldDsKICAgICAgICAgICAgIGludCBmaW5hbFkgPSB0eSArIGN1cnJZT2Zmc2V0
OwotICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHgs
IHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQuaXNSZWN0QmFzZWRUZXN0KCkgJiYgIWNvbFJlY3QuY29udGFpbnMocmVzdWx0LnJlY3RGcm9t
UG9pbnQoeCwgeSkpKQorICAgICAgICAgICAgICAgIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCBy
ZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJl
c3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24pOwogICAgICAgICB9CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAyMDIwMDAzLi5kYWY5NGVhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01NTQs
OSArNTU1LDExIEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0CiAKICAgICAvLyBDaGVjayBvdXIg
Ym91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNhbiBv
bmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0cnVl
IGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVjdCh0eCwg
dHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIEludFJl
Y3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAg
aWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQg
JiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQb3Mp
KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAt
IHR4LCB5UG9zIC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVz
dWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBib3Vu
ZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCA4ZTdkMTY1Li4yMDczNDc5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC0zNzcsMTAgKzM3NywxMCBAQCBIVE1MTWFw
RWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKIAogYm9vbCBSZW5kZXJJbWFn
ZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQogewotICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9p
bnQoKSk7CisgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1
bHQucGFkZGluZygpKTsKICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQ
b2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOwog
Ci0gICAgaWYgKGluc2lkZSAmJiBub2RlKCkpIHsKKyAgICBpZiAodGVtcFJlc3VsdC5pbm5lck5v
ZGUoKSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAgPSBpbWFn
ZU1hcCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50Qm94UmVj
dCgpOwogICAgICAgICAgICAgZmxvYXQgem9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
QEAgLTM5MSw2ICszOTEsOCBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgICAgICB9CiAg
ICAgfQogCisgICAgaWYgKCFpbnNpZGUgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIGlmIChpbnNpZGUpCiAgICAgICAg
IHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgcmV0dXJuIGluc2lkZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCBkNDBhNmY4Li4zNDE3ODY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0yNzM5LDE0ICsyNzM5LDE2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHVzZVRlbXBvcmFyeUNsaXBSZWN0
cyA9IGNvbXBvc2l0b3IoKS0+aW5Db21wb3NpdGluZ01vZGUoKTsKICNlbmRpZgotICAgIAorCisg
ICAgSW50UmVjdCBoaXRUZXN0QXJlYSA9IHJlc3VsdC5yZWN0RnJvbVBvaW50KGhpdFRlc3RQb2lu
dCk7CisKICAgICAvLyBBcHBseSBhIHRyYW5zZm9ybSBpZiB3ZSBoYXZlIG9uZS4KICAgICBpZiAo
dHJhbnNmb3JtKCkgJiYgIWFwcGxpZWRUcmFuc2Zvcm0pIHsKICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZSBwYXJlbnQncyBjbGlwIHJlY3RzIGhhdmUgYmVlbiBjYWxjdWxhdGVkLgogICAgICAgICBp
ZiAocGFyZW50KCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5k
Q2xpcFJlY3Qocm9vdExheWVyLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgICAgICAgICAg
Ly8gR28gYWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KLSAgICAgICAgICAg
IGlmICghY2xpcFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkKKyAgICAgICAgICAgIGlmICgh
Y2xpcFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIH0KIApAQCAtMjg1OSwxNyArMjg2MSwyMSBAQCBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXll
ciogY29udAogICAgIH0KIAogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNl
IHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAg
IGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xheWVy
KCkpIHsKKyAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdEFyZWEpICYmIGlzU2VsZlBh
aW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5IEhp
dFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0JyBp
ZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVz
dWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJl
c3VsdC5wb2ludCgpLCByZXN1bHQucGFkZGluZygpKTsKICAgICAgICAgaWYgKGhpdFRlc3RDb250
ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdFBvaW50LCBIaXRU
ZXN0RGVzY2VuZGFudHMpICYmCiAgICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxz
ZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgp
KSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0
ZW1wUmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0
ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIC8vIEZvcmVncm91bmQgY2FuIGRl
cHRoLXNvcnQgd2l0aCBkZXNjZW5kYW50IGxheWVycywgc28ga2VlcCB0aGlzIGFzIGEgY2FuZGlk
YXRlLgogICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlzOwotICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG5l
Z2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCkBAIC0yODg1LDEzICsyODkxLDE3IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlckxheWVyKiBjb250CiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1cm4g
Y2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkg
JiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJl
c3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RB
cmVhKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0
ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFkZGluZygpKTsKICAgICAgICAgaWYg
KGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVz
dFBvaW50LCBIaXRUZXN0U2VsZikgJiYKICAgICAgICAgICAgIGlzSGl0Q2FuZGlkYXRlKHRoaXMs
IGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUu
Z2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAgICAg
aWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiAwOwpAQCAt
MjkwMyw4ICsyOTEzLDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxheWVyQm91bmRzLngoKSAtIHJlbmRlckJveFgoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkgLSByZW5kZXJCb3hZKCksIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhpdFRlc3RGaWx0ZXIpKSB7Ci0gICAgICAgIC8vIEl0J3Mg
d3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlkbid0IGhp
dCBhbnl0aGluZy4KLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaW5uZXJOb2RlKCkpOworICAgICAg
ICAvLyBJdCdzIHdyb25nIHRvIHNldCBpbm5lck5vZGUsIGJ1dCB0aGVuIGNsYWltIHRoYXQgeW91
IGRpZG4ndCBoaXQgYW55dGhpbmcsIHVubGVzcyBpdCBpcworICAgICAgICAvLyBhIHJlY3QtYmFz
ZWQgdGVzdC4KKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgKHJlc3VsdC5p
c1JlY3RCYXNlZFRlc3QoKSAmJiByZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpLnNpemUoKSkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yOTM4LDE0ICsyOTQ5LDIxIEBA
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmVjdG9yPFJlbmRlckxheWVy
Kj4qIGxpc3QsIFJlbmRlckxheWVyKiByCiAgICAgZm9yIChpbnQgaSA9IGxpc3QtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0gbGlz
dC0+YXQoaSk7CiAgICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7Ci0gICAgICAgIEhp
dFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgICAgIEhpdFRlc3RS
ZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAgICAg
ICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5ZXIg
PSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVl
c3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRl
LCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaXRM
YXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zvcm1T
dGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKKworICAgICAgICAvLyBJZiBpdCBhIHJlY3Qt
YmFzZWQgdGVzdCwgd2UgY2FuIHNhZmVseSBhcHBlbmQgdGhlIHRlbXBvcmFyeSByZXN1bHQgc2lu
Y2UgaXQgbWlnaHQgaGFkIGhpdAorICAgICAgICAvLyBub2RlcyBidXQgbm90IG5lY2Vzc2VyaWx5
IGhhZCBoaXRMYXllciBzZXQuCisgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworCiAgICAgICAgIGlmIChp
c0hpdENhbmRpZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVu
ZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgICAgICByZXN1bHRMYXllciA9IGhp
dExheWVyOwotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRl
bXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDA1LDcgKzMwMjMsNyBAQCBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhSZW5kZXJMYXllciog
Y2hpbGRMYXllciwgUmVuZAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0VGVzdFJl
Y3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAgICAg
Ci0gICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5j
b250YWlucyhoaXRUZXN0UG9pbnQpKSB7CisgICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0Vt
cHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KGhp
dFRlc3RQb2ludCkpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwog
ICAgICAgICAgICAgaWYgKCFjb2x1bW5JbmRleCkgewogICAgICAgICAgICAgICAgIC8vIEFwcGx5
IGEgdHJhbnNsYXRpb24gdHJhbnNmb3JtIHRvIGNoYW5nZSB3aGVyZSB0aGUgbGF5ZXIgcGFpbnRz
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmluZGV4IDJkMjc3NDguLjRk
MGRjZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlz
dC5oIgogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRC
b3guaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgpAQCAtMjQ1LDE0ICsyNDYsMTYgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXEKICAgICAvLyBj
b250YWluIHRoZSBwb2ludC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQgd2Ug
Y2FuIHRha2UgdG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCiAgICAgLy8gRklYTUU6IFRoaXMg
Y2hlY2sgaXMgZmxhd2VkIGluIHRoZSBmb2xsb3dpbmcgZXh0cmVtZWx5IG9ic2N1cmUgd2F5Ogog
ICAgIC8vIGlmIHNvbWUgbGluZSBpbiB0aGUgbWlkZGxlIGhhcyBhIGh1Z2Ugb3ZlcmZsb3csIGl0
IG1pZ2h0IGFjdHVhbGx5IGV4dGVuZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgotICAgIGlmICgoeSA+
PSB0eSArIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpIHx8
ICh5IDwgdHkgKyBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkp
CisgICAgaWYgKHkgLSByZXN1bHQucGFkZGluZ0hlaWdodCgpID49IHR5ICsgbGFzdExpbmVCb3go
KS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKQorICAgICB8fCB5ICsgcmVzdWx0LnBh
ZGRpbmdIZWlnaHQoKSA8IHR5ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlzaWJsZU92
ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSBpZiBvdXIgcm9v
dCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4gIElmIHNvLCB0aGVuIHdlIGhpdCB0ZXN0CiAgICAg
Ly8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0IGJveGVzIGNhbiBlYXNpbHkgb3ZlcmxhcCwgc28g
d2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMKICAgICAvLyBiYXNlZCBvZmYgcG9zaXRpb25z
IG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIgbGFzdCBsaW5lIGJveC4KICAgICBmb3IgKElu
bGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJl
dkxpbmVCb3goKSkgewotICAgICAgICBpZiAoeSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9wVmlz
aWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSkgeworICAgICAgICBpZiAoeSArIHJlc3VsdC5wYWRkaW5nSGVpZ2h0KCkgPj0gdHkg
KyBjdXJyLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpCisgICAgICAgICAmJiB5IC0gcmVz
dWx0LnBhZGRpbmdIZWlnaHQoKSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSkgewogICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7
CiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJ
bnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcApp
bmRleCA3NzEzNDQ1Li5lMmRlZTVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSb290LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcApA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTMxOSw2ICszMjAsOCBAQCBib29sIFJlbmRlclNW
R1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZQogICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgLy8gRklY
TUU6IENTUy9IVE1MIGFzc3VtZXMgdGhlIGxvY2FsIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSBi
b3JkZXIgYm94LCByaWdodD8KICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBwb2ludEluQm9yZGVyQm94KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBub2RlQXRGbG9hdFBv
aW50KCkgZG9lc24ndCBoYW5kbGUgcmVjdC1iYXNlZCBoaXQgdGVzdHMgeWV0LgorICAgICAgICAg
ICAgcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwgX3gs
IF95KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGZkOTA5OTAuLmNhNWRjNmEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTExMzUs
NyArMTEzNiw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgdHkgKz0geSgpOwogCiAg
ICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8IG92
ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIGlmICgh
aGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGcm9tUG9pbnQoeFBvcywgeVBvcykpKSB7CiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5k
ZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNl
Y3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pICYmCiAgICAgICAgICAgICAgICAgY2hpbGQt
Pm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rpb24p
KSB7CkBAIC0xMTQ2LDkgKzExNDcsMTEgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICB9
CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuCi0gICAgaWYgKHZpc2libGVUb0hpdFRl
c3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09
IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgSW50UmVjdCh0eCwgdHksIHdpZHRoKCks
IGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIEludFJlY3QgYm91bmRzUmVj
dCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0
aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNl
Y3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNl
ZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGIyNWQzZTYuLjJjMWI3MzkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMTE1Miw3ICsx
MTUzLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICB0eCArPSB4KCk7CiAgICAgdHkg
Kz0geSgpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0
KHR4LCB0eSkuY29udGFpbnMoeFBvcywgeVBvcykpCisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgp
ICYmICFvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Q
b2ludCh4UG9zLCB5UG9zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IDZmYjI3
NDkuLjZlYzViNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMzk0LDcgKzM5
NCw3IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzCiAgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJS
ZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlv
bik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUg
d2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4K
LSAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5v
ZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFo
YWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKICAgICAgICAgcmVzdWx0
LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJlc3VsdC5sb2NhbFBv
aW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQotLSAKMS43LjAuNAoK
</data>
<flag name="review"
          id="50657"
          type_id="1"
          status="-"
          setter="hyatt"
    />
    <flag name="commit-queue"
          id="50658"
          type_id="3"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62569</attachid>
            <date>2010-07-26 07:16:25 -0700</date>
            <delta_ts>2010-07-27 15:53:45 -0700</delta_ts>
            <desc>patch v7 - feature + tests</desc>
            <filename>0001-2010-07-21-Grace-Kloba-klobag-gmail.com-Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>58758</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSAyYTI2Njk2Mzg0YzVhM2FlNGZjMWM0NGIyZWJmODFlN2IyMjgxMTcyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMjEgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBjaGFuZ2Ug
aXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3JlIHByZWNpc2UgdGFwCiAgICAgICAgYWN0
aW9ucyBieSB0aGUgdXNlcnMgb24gbW9iaWxlIGRldmljZXMuCgogICAgICAgIFBhdGNoIGV4dGVu
ZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3Vs
YXIgYXJlYQogICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNh
YmxlLiBGb3IgdGhhdCwgdGhlIEhpdFRlc3RSZXN1bHQgY2xhc3MKICAgICAgICB3YXMgbW9kaWZp
ZWQgdG8gdGFrZSBhIHBhZGRpbmcgKEludFNpemUpLiBUaGUgcGFkZGluZyBzcGVjaWZpZXMgYSBm
dXp6eSByYW5nZSBmb3IKICAgICAgICBhY2NlcHRpbmcgaW5wdXQgZXZlbnRzIGluIHBpeGVscyBj
b29yZGluYXRlcyBmb3IgYm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAogICAgICAgIG9yaWVu
dGF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGl0IHRlbGxzIGhvdyBtdWNoIHRvIGV4cGFuZCB0aGUg
c2VhcmNoIHJlY3QKICAgICAgICBhcm91bmQgYSBzdXBwb3NlZCB0b3VjaCBwb2ludC4KCiAgICAg
ICAgSWYgaXQgaXMgbm9uLXBvc2l0aXZlLCBoaXQgdGVzdGluZyB3aWxsIGJlaGF2aW9yIGFzIHRo
ZSBjdXJyZW50IHBvaW50IGJhc2VkIGhpdCB0ZXN0aW5nLAogICAgICAgIGFuZCBtZXRob2RzIGFy
ZSBuby1vcCdlZCB0byBub3QgcmVncmVzcyB0aGlzIGNvbW1vbiBiZWhhdmlvciBwZXJmb3JtYW5j
ZS13aXNlLgogICAgICAgIFdoZW4gcG9zaXRpdmUgKG9yIHZhbGlkKSBJbnRTaXplIGlzIHByb3Zp
ZGVkLCB0aGUgaGl0IHRlc3QgcmVzdWx0IHdpbGwga2VlcCByZWNvcmQgb2YgYWxsCiAgICAgICAg
bm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhlIGJ1aWx0IHVwIHRlc3QgYXJlYS4gVGhlIGxvZ2ljIHdp
bGwgY29udGludWUgc2VhcmNoaW5nIHdoZW4gaXQKICAgICAgICBmaW5kcyBhIGNhbmRpZGF0ZSB1
bnRpbCB0aGUgcmVjdGFuZ2xlIGlzIGZ1bGx5IGVuY2xvc2VkIGJ5IHRoZSBib3VuZGFyaWVzIG9m
IGEgY2FuZGlkYXRlLgogICAgICAgIFRoZSByZXN1bHQgd2lsbCBiZSBhIGxpc3Qgb2Ygbm9kZXMg
aW4gdGhlIHotb3JkZXIgdGhleSBhcmUgaGl0LXRlc3RlZC4KICAgICAgICBDYWxsZXIgd2lsbCBk
ZWNpZGUgaG93IHRvIHByb2Nlc3MgdGhlbS4KCiAgICAgICAgSW4gb3JkZXIgdG8gZXhwb3NlIHRo
ZSBmdW5jdGlvbmFsaXR5LCB0aGUgcGF0Y2g6CgogICAgICAgIC0gQWRkcyBhIG5vZGVzRnJvbVJl
Y3QgbWV0aG9kIHRvIHRoZSBEb2N1bWVudCBjbGFzcywgZXhwb3NpbmcgdGhlIGZ1bmNpb25hbGl0
eQogICAgICAgIHRvIHRoZSBET00uIE1ldGhvZCByZXR1cm5zIGEgTm9kZUxpc3Qgd2l0aCBhbGwg
bm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhlIGdpdmVuCiAgICAgICAgaGl0LXRlc3RlZCBhcmVhLgog
ICAgICAgIC0gRXh0ZW5kcyBoaXRUZXN0UmVzdWx0QXRQb2ludCBtZXRob2Qgb2YgdGhlIEV2ZW50
SGFuZGxlciB3aXRoIGFuIGV4dHJhICdwYWRkaW5nJwogICAgICAgIHBhcmFtZXRlciwgZGVmYXVs
dGluZyB0byBJbnRTaXplKDAsIDApLiBUaGUgcmVjdC1iYXNlZCBoaXQgdGVzdCBpcyBwZXJmb3Jt
ZWQgd2hlbiBhCiAgICAgICAgcG9zaXRpdmUgcGFkZGluZyBpcyBwYXNzZWQgaW4uCgogICAgICAg
IFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbAoKICAgICAgICAqIFdlYkNv
cmUuYmFzZS5leHA6CiAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgogICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6bm9kZXNGcm9tUmVjdCk6IFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHJlY3Qg
YmFzZWQgZnVuY2lvbmFsaXR5IHRvCiAgICAgICAgdGhlIERPTS4gSXQgd29ya3Mgc2ltaWxhcmx5
IHRvIGVsZW1lbnRGcm9tUG9pbnQsIGhvd2V2ZXIgcmVjZWl2aW5nIGEgcmVjdGFuZ3VsYXIgYXJl
YQogICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgYW5kIHJldHVybmluZyBhIHot
aW5kZXggb3JkZXJlZCBsaXN0IG9mIG5vZGVzIChub3QgZWxlbWVudHMpCiAgICAgICAgd2hvc2Ug
YXJlYSBpbnRlcnNlY3QgdGhlIGhpdCB0ZXN0IHJlY3QuCiAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCiAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOiBEaXR0by4KICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmNwcDoKICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoaXRU
ZXN0UmVzdWx0QXRQb2ludCk6IFRoZSBmdW5jaW9uYWxpdHkgaXMgYWxzbyBleHBvc2VkIHRocm91
Z2ggdGhpcwogICAgICAgIG1ldGhvZC4gUGF0Y2ggYWRkcyBhIGFkZGl0aW9uYWwgSW50U2l6ZSBw
YXJhbWV0ZXIgdG8gd29yayBhcyB0aGUgcGFkZGluZyBhcmVhLCBidWlsZGluZyB1cAogICAgICAg
IHRoZSBoaXQgdGVzdCByZWN0LgogICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogRGl0dG8u
CiAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CiAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOiBSZWN0IGJhc2VkIGhpdCB0ZXN0IGNvbnN0
cnVjdG9yLiBSZWNlaXZlcyBhCiAgICAgICAgcGFkZGluZyBJbnRTaXplIGFzIHBhcmFtZXRlci4g
VGhlIHBhZGRpbmcgaGFzIHRvIGJlIHZhbGlkIGZvciBhIHJlY3QgYmFzZWQgaGl0IHRlc3QgYmUg
cGVyZm9ybWVkLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0pOiBN
b2RpZmllZCB0byBhc3NpZ24gdGhlIG1fcmVjdEJhc2VkVGVzdFJlc3VsdCBhcyB3ZWxsLgogICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphcHBlbmQpOiBNZXJnZSB0byBIaXRUZXN0UmVz
dWx0IG9iamVjdHMgaW4gYSB3YXkgdGhhdCB0aGUKICAgICAgICBsaXN0IG5vZGUncyBvZiBib3Ro
IG9iamVjdHMgZ2V0IGFtZW5kZWQuCiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQpOiBBZGRzIGEgZ2l2ZW4gTm9kZSB0byB0aGUgbGlz
dCBvZgogICAgICAgIGhpdCBub2Rlcy4KICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0
Lmg6CiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnBhZGRpbmcpOiBSZXR1cm5zIHRo
ZSBwYWRkaW5nIGFzIGFuIEludFNpemUuCiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6
OmlzUmVjdEJhc2VkVGVzdCk6IFJldHVybnMgaWYgdGhlIEhpdFRlc3RSZXN1bHQgaXMgcmVjdCBi
YXNlZCBvciBub3QuCiAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Oi5yZWN0QmFzZWRU
ZXN0UmVzdWx0KTogUmV0dXJucyB0aGUgbGlzdCBub2RlcyBoaXQuCiAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQ6OnJlY3RGcm9tUG9pbnQpOiBSZXR1cm5zIHRoZSBoaXQgdGVzdCByZWN0
IGdpdmVuIHRoZSBoaXQgdGVzdCBwb2ludAogICAgICAgIGFuZCBwYWRkaW5nLgogICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcik6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGlz
dCk6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVt
bnMpOgogICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKICAgICAgICAoV2ViQ29y
ZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KTogTWV0aG9kIGlzIG1vZGlmaWVkIHRvIHN1cHBv
cnQgcmVjdCBiYXNlZCBoaXQgdGVzdCBleHRlbnNpb24uCiAgICAgICAgTm93IGl0IG5vdCBqdXN0
IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2YgdGhlIG5vZGUgYmVpbmcgaGl0LXRlc3RlZCBjb250
YWlucyBhIGhpdCB0ZXN0IHBvaW50LCBidXQKICAgICAgICBpbnN0ZWFkIGl0IGNoZWNrcyBpZiB0
aGUgYm91bmRhcnkgb2YgdGhlIG5vZGUgaW50ZXJzZWN0cyBhIGhpdCB0ZXN0IHJlY3QuIEl0IGlz
IGltcGxlbWVudGVkIHNvCiAgICAgICAgdGhhdCB0aGUgY29tbW9uIGNhc2UgKHBvaW50IGJhc2Vk
IGhpdCB0ZXN0KSB3b3JrcyBhcyBwcmV2aW91c2x5LgogICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwOgogICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2lu
dCk6IERpdHRvLgogICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgogICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6IERpdHRvLgogICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRU
ZXN0Q29sdW1ucyk6IERpdHRvLgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CiAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
Ojpub2RlQXRQb2ludCk6IERpdHRvLgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QpOgog
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgogICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6IERpdHRvLgogICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50
KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6IERpdHRvLgog
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcldpZGdldDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKysKIC4uLi9mYXN0L2RvbS9X
aW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IHwgICAgMSArCiAuLi4vZmFzdC9k
b20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQgICAgICB8ICAgMjYgKysrKysrCiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwgICAgICB8ICAgODkg
KysrKysrKysrKysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNG
cm9tUmVjdC5jc3MgICB8ICAgNDQgKysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNv
dXJjZXMvbm9kZXNGcm9tUmVjdC5qcyAgICB8ICAgNDQgKysrKysrKysrCiAuLi4vZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCB8ICAgIDEgKwogV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk0ICsrKysrKysr
KysrKysrKysrKysrCiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICA1NyArKysrKysrKysrKysKIFdlYkNvcmUvZG9tL0RvY3VtZW50Lmgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKysKIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmlkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKy0KIFdlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQogV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwICAgICAgICAgICAgICAgICAgfCAgICA2ICst
CiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCAgICAgICAgICAgICAgICB8ICAg
NTkgKysrKysrKysrKysrCiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggICAgICAg
ICAgICAgICAgICB8ICAgNDggKysrKysrKysrKwogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAgICAgICAgICAgICAgICAgfCAgICA3ICstCiBXZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcCAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcCAgICAgICAgICAgICAgICAgIHwgICAyMSArKystLQogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcCAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0K
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCAgICAgICAgICAgICAgICAgIHwgICA0
OCArKysrKysrLS0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAgICAg
ICAgICAgICB8ICAgIDcgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwICAg
ICAgICAgICAgICAgIHwgICAgMyArCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAg
ICAgICAgICAgICAgICAgICB8ICAgIDkgKystCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwICAgICAgICAgICB8ICAgIDMgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogMjggZmlsZXMgY2hhbmdlZCwg
NTg2IGluc2VydGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExh
eW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0CiBjcmVh
dGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5o
dG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuY3NzCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20v
cmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjhmNWQxNC4uNjM2NmQ1MSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA3LTIxIEFudG9uaW8gR29tZXMgIDx0b25pa2l0b29A
d2Via2l0Lm9yZz4gLCBHcmFjZSBLbG9iYSAgPGtsb2JhZ0BnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5oYW5jZSB0aGUgaGl0IHRl
c3RpbmcgdG8gdGFrZSBhIHJlY3RhbmdsZSBpbnN0ZWFkIG9mIGEgcG9pbnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMTk3CisKKyAgICAgICAgKiBm
YXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0y
MyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQuICBBZGQgY2hyb21pdW0gZXhwZWN0YXRpb25zIGZvciBuZXcgdGVzdHMuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dAppbmRleCA5YjA5OTg0Li5jOTc3MzQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQK
QEAgLTYyOCw2ICs2MjgsNyBAQCB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmlzU2FtZU5vZGUg
W2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pc1N1cHBvcnRlZCBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmxvb2t1cE5hbWVzcGFjZVVSSSBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmxvb2t1cFByZWZpeCBbZnVuY3Rpb25dCit3
aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLm5vZGVzRnJvbVJlY3QgW2Z1bmN0aW9uXQogd2luZG93
LkRvY3VtZW50LnByb3RvdHlwZS5ub3JtYWxpemUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50
LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRFbmFibGVkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVu
dC5wcm90b3R5cGUucXVlcnlDb21tYW5kSW5kZXRlcm0gW2Z1bmN0aW9uXQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWYxZWEzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwyNiBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1Myw3MV0s
IFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs1Myw3MV0sIFsx
MCwwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNTMsNzFdLCBbMCwx
MF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzEwLDEw
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUyLDEwNV0sIFswLDEw
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUyLDEwNV0sIFsxMCww
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUyLDEwNV0sIFsxMCwx
MF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE1MywxOTNdLCBbMCww
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUzLDE5M10sIFsyMCww
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTUzLDE5M10sIFswLDIw
XQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4M10sIFswLDBd
CitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFsxNDQsMTgzXSwgWzAsMV0K
K1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzE0NCwxODNdLCBbMSwwXQor
UEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMTQ0LDE4M10sIFsxLDFdCitQ
QVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBbMCwwXQorUEFT
UyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcsMjQwXSwgWzEwLDBdCitQQVNT
IEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3NywyNDBdLCBbMCwxMF0KK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3LDI0MF0sIFsxMCwxMF0KK1BBU1Mg
QWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFswLDBdCitQQVNTIEFs
bCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJdLCBbMCwxMF0KK1BBU1MgQWxs
IGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIxMl0sIFsxMCwwXQorUEFTUyBBbGwg
Y29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEyXSwgWzEwLDEwXQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0MDY0YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8
aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+RG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3QgdGVzdCAtIGJ1
ZyA0MDE5NzwvdGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+IEBpbXBvcnQgInJlc291
cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcyI7IDwvc3R5bGU+CisgIDxzY3JpcHQgc3JjPSIuLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL25vZGVzRnJvbVJlY3QuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiPgorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgICB9CisKKyAgICAgIHZhciBlID0ge307CisKKyAgICAgIC8vIFNldCB1
cCBzaG9ydGN1dCBhY2Nlc3MgdG8gZWxlbWVudHMKKyAgICAgIGVbJ2h0bWwnXSA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07CisgICAgICBbJ2gxJywgJ2QxJywgJ2Qy
JywgJ3AxJywgJ3AyJywgJ3AzJywgJ3A0JywgJ3A1JywgJ3NwYW4nLCAnYm9keSddLmZvckVhY2go
ZnVuY3Rpb24oYSkgeworICAgICAgICBlW2FdID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7
CisgICAgICB9KTsKKworICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOworCisgICAgICBjaGVj
ayg1MywgNzEsIDAsIDAsIFtlLmJvZHldKTsKKyAgICAgIGNoZWNrKDUzLCA3MSwgMTAsIDAsIFtl
LnAzLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDUzLCA3MSwgMCwgMTAsIFtlLmQxLCBlLmgxLCBl
LmJvZHldKTsKKyAgICAgIGNoZWNrKDUzLCA3MSwgMTAsIDEwLCBbZS5wMywgZS5kMSwgZS5oMSwg
ZS5ib2R5XSk7CisKKyAgICAgIGNoZWNrKDE1MiwgMTA1LCAwLCAxMCwgW2UucDMsIGUuYm9keV0p
OworICAgICAgY2hlY2soMTUyLCAxMDUsIDEwLCAwLCBbZS5wNCwgZS5kMSwgZS5ib2R5XSk7Cisg
ICAgICBjaGVjaygxNTIsIDEwNSwgMTAsIDEwLCBbZS5wNCwgZS5wMywgZS5kMSwgZS5ib2R5XSk7
CisKKyAgICAgIC8vIGUucDEgaXMgaW52aXNpYmxlIGFuZCBzaG91bGRuJ3QgYXBwZWFyOgorICAg
ICAgY2hlY2soMTUzLDE5MywwLDAsW2UucDVdKTsKKyAgICAgIC8vIE5PVEU6IFtlLnA1LCBlLmQy
XSkgc2hvdWxkIGJlIHJldHVybmVkIGlmIHdlIGRpZCBub3Qgc3RvcAorICAgICAgLy8gYXQgZS5w
NSwgd2hpY2ggZnVsbHkgZW5jbG9zZXMgdGhlIHRhcmdldCByZWN0LgorICAgICAgY2hlY2soMTUz
LDE5MywyMCwwLCBbZS5wNV0pOworICAgICAgY2hlY2soMTUzLDE5MywwLDIwLCBbZS5wNSwgZS5i
b2R5XSk7CisKKyAgICAgIC8vIFByZWNpc2UgcGl4ZWwgY2hlY2tzOgorICAgICAgY2hlY2soMTQ0
LCAxODMsIDAsIDAsIFtlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE0NCwgMTgzLCAwLCAxLCBbZS5w
NSwgZS5ib2R5XSk7CisgICAgICBjaGVjaygxNDQsIDE4MywgMSwgMCwgW2UuZDIsIGUuYm9keV0p
OworICAgICAgY2hlY2soMTQ0LCAxODMsIDEsIDEsIFtlLnA1LCBlLmQyLCBlLmJvZHldKTsKKyAg
ICAgIGNoZWNrKDc3LCAyNDAsIDAsIDAsIFtlLnAyXSk7CisgICAgICBjaGVjayg3NywgMjQwLCAx
MCwgMCwgW2UucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDAsIDEwLCBbZS5wNSwgZS5zcGFu
LCBlLnAyXSk7CisgICAgICBjaGVjayg3NywgMjQwLCAxMCwgMTAsIFtlLnA1LCBlLnNwYW4sIGUu
cDJdKTsKKworICAgICAgLy8gRXhwYW5kaW5nIGFyZWEgY2hlY2tzOgorICAgICAgY2hlY2soMzks
IDIxMiwgMCwgIDAsIFtlLmJvZHldKTsKKyAgICAgIGNoZWNrKDM5LCAyMTIsIDAsIDEwLCBbZS5k
MiwgZS5wMiwgZS5ib2R5XSk7CisgICAgICBjaGVjaygzOSwgMjEyLCAxMCwgMCwgW2UucDUsIGUu
Ym9keV0pOworICAgICAgY2hlY2soMzksIDIxMiwgMTAsIDEwLCBbZS5wNSwgZS5kMiwgZS5wMiwg
ZS5ib2R5XSk7CisKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKKyAgICB3aW5k
b3cub25sb2FkID0gcnVuVGVzdDsKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9k
eSI+CisgIDxoMSBpZD0iaDEiPjwvaDE+CisgIDxkaXYgaWQ9ImQxIj48L2Rpdj4KKworICA8IS0t
IGZsb2F0ZWQgZWxlbWVudCAtLT4KKyAgPGRpdiBpZD0iZDIiIHN0eWxlPSJmbG9hdDogbGVmdCI+
PC9kaXY+CisKKyAgPCEtLSBoaWRkZW4gZWxlbWVudCAtLT4KKyAgPHAgaWQ9InAxIiBzdHlsZT0i
ZmxvYXQ6IGxlZnQ7IHZpc2liaWxpdHk6IGhpZGRlbiI+PC9wPgorCisgIDxwIGlkPSJwMiIgc3R5
bGU9ImNsZWFyOiBsZWZ0Ij48c3BhbiBpZD0ic3BhbiI+PC9zcGFuPjwvcD4KKworICA8IS0tIGFi
c29sdXRlIHBvc2l0aW9uIC0tPgorICA8cCBpZD0icDMiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0
ZTsgdG9wOiAxMHB4OyBsZWZ0OjUwcHg7IGhlaWdodDo1MHB4OyI+PC9wPgorCisgIDwhLS0gZml4
ZWQgcG9zaXRpb24gLS0+CisgIDxwIGlkPSJwNCIgc3R5bGU9InBvc2l0aW9uOiBmaXhlZDsgdG9w
OiAzMHB4OyBsZWZ0OiAxNTBweDsgaGVpZ2h0OiA1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBibHVl
OyI+PC9wPgorCisgIDwhLS0gcmVsYXRpdmUgcG9zaXRpb24gLS0+CisgIDxwIGlkPSJwNSIgc3R5
bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6IC0xMDBweDsgbGVmdDogMzBweDsgbWFyZ2luLWJv
dHRvbTogLTcwcHg7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIj48L3A+CisKKyAgPHNwYW4gaWQ9
ImNvbnNvbGUiPjwvc3Bhbj4KKyAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3MgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9yZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzJlNmZjMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNzcwpAQCAtMCwwICsxLDQ0IEBACiti
b2R5IHsKKyAgbWFyZ2luOiA4cHg7CisgIHBhZGRpbmc6IDA7Cit9CisKK2gxLCBkaXYsIHAsIGlm
cmFtZSB7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMzBw
eDsKKyAgYm9yZGVyOiAzcHggc29saWQgYmxhY2s7CisgIHBhZGRpbmc6IDEwcHg7CisgIG1hcmdp
bjogMTBweDsKK30KKworI3NwYW4geworICBkaXNwbGF5OiBibG9jazsKKyAgd2lkdGg6IDEwMHB4
OworICBoZWlnaHQ6IDMwcHg7CisgIGJvcmRlcjogM3B4IHNvbGlkIGJsYWNrOworICBwYWRkaW5n
OiAxMHB4OworICBtYXJnaW46IDEwcHg7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKwor
I2lmcmFtZTEgeworICBoZWlnaHQ6IDEwMHB4OworICBtYXJnaW4tdG9wOiA2MHB4OworfQorCisj
cDYgeworICBoZWlnaHQ6IDUwcHg7CisgIG1hcmdpbi10b3A6IDMwcHg7Cit9CisKKyN0cmFuc2Yg
eworICBtYXJnaW4tdG9wOiA2MHB4OworICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRl
Zyk7Cit9CisKKyNkZWNpbWFsIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBsZWZ0OiAwLjVw
eDsKKyAgdG9wOiA1MC41cHg7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9y
ZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNl
cy9ub2Rlc0Zyb21SZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJl
MDZjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMv
bm9kZXNGcm9tUmVjdC5qcwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29udHJpYnV0b3JzOgor
ICogICAgICogQW50b25pbyBHb21lcyA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CisgKiovCisKK2Z1
bmN0aW9uIGNoZWNrKHgsIHksIGhQYWRkaW5nLCB2UGFkZGluZywgbGlzdCkKK3sKKyAgLyoKKyAg
ICBOb2RlTGlzdCBub2Rlc0Zyb21SZWN0KGluIGxvbmcgeCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIGxvbmcgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvbmcgaFBh
ZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBsb25nIHZQYWRkaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBpZ25vcmVDbGlwcGluZyk7CisgICov
CisgIHZhciBub2RlcyA9IGRvY3VtZW50Lm5vZGVzRnJvbVJlY3QoeCwgeSwgaFBhZGRpbmcsIHZQ
YWRkaW5nLCB0cnVlIC8qIGlnbm9yZUNsaXBwaW5nICovKTsKKworICBpZiAobm9kZXMubGVuZ3Ro
ICE9IGxpc3QubGVuZ3RoKSB7CisgICAgdGVzdEZhaWxlZCgiRGlmZmVyZW50IG51bWJlciBvZiBu
b2RlcyBmb3IgcmVjdCIgKworICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAi
ICsKKyAgICAgICAgICAgICAgIlsiICsgaFBhZGRpbmcgKyAiLCIgKyB2UGFkZGluZyArICJdOiAn
IiArIGxpc3QubGVuZ3RoICsgIicgdnMgJyIgKyBub2Rlcy5sZW5ndGggKyAiJyIpOworICAgIHJl
dHVybjsKKyAgfQorCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsK
KyAgICBpZiAobm9kZXNbaV0gIT0gbGlzdFtpXSkgeworICAgICAgdGVzdEZhaWxlZCgiVW5leHBl
Y3RlZCBub2RlICMiICsgaSArICIgZm9yIHJlY3QgIiArCisgICAgICAgICAgICAgICAgIlsiICsg
eCArICIsIiArIHkgKyAiXSwgIiArCisgICAgICAgICAgICAgICAgIlsiICsgaFBhZGRpbmcgKyAi
LCIgKyB2UGFkZGluZyArICJdIiArICIgLSAiICsgbm9kZXNbaV0pOworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgfQorCisgIHRlc3RQYXNzZWQoIkFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0ICIgICsKKyAgICAgICAgICAgIlsiICsgeCArICIsIiArIHkgKyAiXSwgIiArCisgICAgICAg
ICAgICJbIiArIGhQYWRkaW5nICsgIiwiICsgdlBhZGRpbmcgKyAiXSIpOworfQorCitmdW5jdGlv
biBnZXRDZW50ZXJGb3IoZWxlbWVudCkKK3sKKyAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpOworICByZXR1cm4geyB4IDogcGFyc2VJbnQoKHJlY3QubGVmdCArIHJl
Y3QucmlnaHQpIC8gMikgLCB5IDogcGFyc2VJbnQoKHJlY3QudG9wICsgcmVjdC5ib3R0b20pIC8g
Mil9OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2lu
ZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CmluZGV4IDQ0OTM3OWYuLjJlOWE1ODYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJv
cGVydGllcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dApAQCAtNjI4LDYgKzYyOCw3
IEBAIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTYW1lTm9kZSBbZnVuY3Rpb25dCiB3aW5k
b3cuRG9jdW1lbnQucHJvdG90eXBlLmlzU3VwcG9ydGVkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUubG9va3VwTmFtZXNwYWNlVVJJIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUubG9va3VwUHJlZml4IFtmdW5jdGlvbl0KK3dpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUubm9kZXNGcm9tUmVjdCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90
eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5
Q29tbWFuZEVuYWJsZWQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVy
eUNvbW1hbmRJbmRldGVybSBbZnVuY3Rpb25dCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM4Y2U3OWQuLjNmZGRkYzggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcg
QEAKKzIwMTAtMDctMjEgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8g
R29tZXMgIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBFbmhhbmNlIHRoZSBoaXQgdGVzdGluZyB0byB0YWtlIGEg
cmVjdGFuZ2xlIGluc3RlYWQgb2YgYSBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxOTcKKworICAgICAgICBUaGUgcHJpbWFyeSBnb2FsIG9m
IHRoaXMgY2hhbmdlIGlzIHRvIHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgbW9yZSBwcmVjaXNlIHRh
cAorICAgICAgICBhY3Rpb25zIGJ5IHRoZSB1c2VycyBvbiBtb2JpbGUgZGV2aWNlcy4KKworICAg
ICAgICBQYXRjaCBleHRlbmRzIHRoZSBoaXQgdGVzdGluZyBzeXN0ZW0gdG8gd29yayBjb25zaWRl
cmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKKyAgICAgICAgYXMgaW5wdXQgaW5zdGVhZCBvZiBhIHBv
aW50LCB3aGVuIGFwcGxpY2FibGUuIEZvciB0aGF0LCB0aGUgSGl0VGVzdFJlc3VsdCBjbGFzcwor
ICAgICAgICB3YXMgbW9kaWZpZWQgdG8gdGFrZSBhIHBhZGRpbmcgKEludFNpemUpLiBUaGUgcGFk
ZGluZyBzcGVjaWZpZXMgYSBmdXp6eSByYW5nZSBmb3IKKyAgICAgICAgYWNjZXB0aW5nIGlucHV0
IGV2ZW50cyBpbiBwaXhlbHMgY29vcmRpbmF0ZXMgZm9yIGJvdGggdmVydGljYWwgYW5kIGhvcml6
b250YWwKKyAgICAgICAgb3JpZW50YXRpb25zLiBJbiBvdGhlciB3b3JkcywgaXQgdGVsbHMgaG93
IG11Y2ggdG8gZXhwYW5kIHRoZSBzZWFyY2ggcmVjdAorICAgICAgICBhcm91bmQgYSBzdXBwb3Nl
ZCB0b3VjaCBwb2ludC4KKworICAgICAgICBJZiBpdCBpcyBub24tcG9zaXRpdmUgcGFkZGluZyAo
ZS5nLiAoLTEsIC0xKSwgKDUsIC0xKSwgKDAsIDApKSwgaGl0IHRlc3Rpbmcgd2lsbCBiZWhhdmlv
cgorICAgICAgICBhcyB0aGUgY3VycmVudCBwb2ludCBiYXNlZCBoaXQgdGVzdGluZzogbWV0aG9k
cyBhcmUgbm8tb3AnZWQgdG8gbm90IHJlZ3Jlc3MgaXQgcGVyZm9ybWFuY2Utd2lzZQorICAgICAg
ICBzaW5jZSBpdCBpcyB0aGUgY29tbW9uIGJlaGF2aW9yLiBXaGVuIHBvc2l0aXZlIHBhZGRpbmcg
aXMgcHJvdmlkZWQsIHRoZSBIaXRUZXN0UmVzdWx0IGNsYXNzIHdpbGwKKyAgICAgICAga2VlcCBy
ZWNvcmQgb2YgYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBidWlsdCB1cCB0ZXN0IGFyZWEu
IFRoZSBsb2dpYyB3aWxsIGNvbnRpbnVlIHNlYXJjaGluZworICAgICAgICB3aGVuIGl0IGZpbmRz
IGEgY2FuZGlkYXRlIHVudGlsIHRoZSBoaXQgdGVzdCBhcmVhIGlzIGZ1bGx5IGVuY2xvc2VkIGJ5
IHRoZSBib3VuZGFyaWVzIG9mIGEgY2FuZGlkYXRlLgorICAgICAgICBUaGUgcmVzdWx0IHdpbGwg
YmUgYSBsaXN0IG9mIG5vZGVzIGluIHRoZSB6LW9yZGVyIHRoZXkgYXJlIGhpdC10ZXN0ZWQuIENh
bGxlciB3aWxsIGRlY2lkZSBob3cKKyAgICAgICAgdG8gcHJvY2VzcyB0aGVtLgorCisgICAgICAg
IEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSwgdGhlIHBhdGNoOgorCisgICAg
ICAgIC0gQWRkcyBhIG5vZGVzRnJvbVJlY3QgbWV0aG9kIHRvIHRoZSBEb2N1bWVudCBjbGFzcywg
ZXhwb3NpbmcgdGhlIGZ1bmNpb25hbGl0eQorICAgICAgICB0byB0aGUgRE9NLiBNZXRob2QgcmV0
dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50ZXJzZWN0IHRoZSBnaXZlbgor
ICAgICAgICBoaXQtdGVzdGVkIGFyZWEuCisgICAgICAgIC0gRXh0ZW5kcyBoaXRUZXN0UmVzdWx0
QXRQb2ludCBtZXRob2Qgb2YgdGhlIEV2ZW50SGFuZGxlciB3aXRoIGFuIGV4dHJhICdwYWRkaW5n
JworICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6ZSgwLCAwKS4gVGhlIHJl
Y3QtYmFzZWQgaGl0IHRlc3QgaXMgcGVyZm9ybWVkIHdoZW4gYQorICAgICAgICBub24tbmVnYXRp
dmUgcGFkZGluZyBpcyBwYXNzZWQgaW4uCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC1iYXNpYy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9kZXNG
cm9tUmVjdCk6IFRoaXMgbWV0aG9kIGV4cG9zZXMgdGhlIHJlY3QgYmFzZWQgZnVuY2lvbmFsaXR5
IHRvCisgICAgICAgIHRoZSBET00uIEl0IHdvcmtzIHNpbWlsYXJseSB0byBlbGVtZW50RnJvbVBv
aW50LCBob3dldmVyIHJlY2VpdmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKKyAgICAgICAgYXMgaW5w
dXQgaW5zdGVhZCBvZiBhIHBvaW50LCBhbmQgcmV0dXJuaW5nIGEgei1pbmRleCBvcmRlcmVkIGxp
c3Qgb2Ygbm9kZXMgKG5vdCBlbGVtZW50cykKKyAgICAgICAgd2hvc2UgYXJlYSBpbnRlcnNlY3Qg
dGhlIGhpdCB0ZXN0IHJlY3QuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IERpdHRvLgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6IERpdHRvLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0
UG9pbnQpOiBUaGUgZnVuY2lvbmFsaXR5IGlzIGFsc28gZXhwb3NlZCB0aHJvdWdoIHRoaXMKKyAg
ICAgICAgbWV0aG9kLiBQYXRjaCBhZGRzIGEgYWRkaXRpb25hbCBJbnRTaXplIHBhcmFtZXRlciB0
byB3b3JrIGFzIHRoZSBwYWRkaW5nIGFyZWEsIGJ1aWxkaW5nIHVwCisgICAgICAgIHRoZSBoaXQg
dGVzdCByZWN0LgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOiBSZWN0IGJhc2VkIGhpdCB0ZXN0IGNvbnN0cnVjdG9y
LiBSZWNlaXZlcyBhCisgICAgICAgIHBhZGRpbmcgSW50U2l6ZSBhcyBwYXJhbWV0ZXIuIEl0IGNh
biBiZSAoMCwwKS4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6Om9wZXJhdG9yPSk6
IE1vZGlmaWVkIHRvIGFzc2lnbiB0aGUgbV9yZWN0QmFzZWRUZXN0UmVzdWx0IGFzIHdlbGwuCisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphcHBlbmQpOiBNZXJnZSB0byBIaXRUZXN0
UmVzdWx0IG9iamVjdHMgaW4gYSB3YXkgdGhhdCB0aGUKKyAgICAgICAgbGlzdCBub2RlJ3Mgb2Yg
Ym90aCBvYmplY3RzIGdldCBhbWVuZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdCk6IEFkZHMgYSBnaXZlbiBOb2RlIHRvIHRo
ZSBsaXN0IG9mCisgICAgICAgIGhpdCBub2Rlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6cGFkZGluZyk6IFJl
dHVybnMgdGhlIHBhZGRpbmcgYXMgYW4gSW50U2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OmlzUmVjdEJhc2VkVGVzdCk6IFJldHVybnMgaWYgdGhlIEhpdFRlc3RSZXN1bHQg
aXMgcmVjdCBiYXNlZCBvciBub3QuCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojou
cmVjdEJhc2VkVGVzdFJlc3VsdCk6IFJldHVybnMgdGhlIGxpc3Qgbm9kZXMgaGl0LgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6cmVjdEZyb21Qb2ludCk6IFJldHVybnMgdGhlIGhp
dCB0ZXN0IHJlY3QgZ2l2ZW4gdGhlIGhpdCB0ZXN0IHBvaW50CisgICAgICAgIGFuZCBwYWRkaW5n
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpoaXRUZXN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVz
dENoaWxkTGF5ZXJDb2x1bW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KTogTWV0aG9kIGlz
IG1vZGlmaWVkIHRvIHN1cHBvcnQgcmVjdCBiYXNlZCBoaXQgdGVzdCBleHRlbnNpb24uCisgICAg
ICAgIE5vdyBpdCBub3QganVzdCBjaGVja3MgaWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGJl
aW5nIGhpdC10ZXN0ZWQgY29udGFpbnMgYSBoaXQgdGVzdCBwb2ludCwgYnV0CisgICAgICAgIGlu
c3RlYWQgaXQgY2hlY2tzIGlmIHRoZSBib3VuZGFyeSBvZiB0aGUgbm9kZSBpbnRlcnNlY3RzIGEg
aGl0IHRlc3QgcmVjdC4gSXQgaXMgaW1wbGVtZW50ZWQgc28KKyAgICAgICAgdGhhdCB0aGUgY29t
bW9uIGNhc2UgKHBvaW50IGJhc2VkIGhpdCB0ZXN0KSB3b3JrcyBhcyBwcmV2aW91c2x5LgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0
UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KTogRGl0dG8uCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQ
b2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6bm9k
ZUF0UG9pbnQpOiBEaXR0by4KKwogMjAxMC0wNy0yMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmlu
ZGV4IDM4OTliZjUuLjZiMjRkN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMjE2LDcgKzIxNiw3IEBAIF9fWk43V2Vi
Q29yZTEyRXZlbnRIYW5kbGVyMTRzY3JvbGxPdmVyZmxvd0VOU18xNVNjcm9sbERpcmVjdGlvbkVO
U18xN1Njcm9sbEdyYW51CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9sbEV2
ZW50RXYKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJOU18x
OFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoYW5kbGVU
ZXh0SW5wdXRFdmVudEVSS05TXzZTdHJpbmdFUE5TXzVFdmVudEViYgotX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdI
aXRUZXN0U2Nyb2xsYmFyc0VqCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJl
c3VsdEF0UG9pbnRFUktOU184SW50UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJzRWpSS05T
XzdJbnRTaXplRQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NF
dmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyM2hhbmRsZU1vdXNlUmVsZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBf
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjI3Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkRXYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAppbmRleCAxYzBlNTdjLi4zMTUwN2ZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xMTksNiArMTE5
LDcgQEAKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdGF0aWNIYXNo
U2V0Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJTdHls
ZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgpAQCAtMTAwNCw2ICsxMDA1LDYy
IEBAIEtVUkwgRG9jdW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogICAgIHJldHVybiBtX2Jhc2VVUkw7
CiB9CiAKKy8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc2N1c3MgdGhlIERPTSBBUEkgaGVyZSBhdCBz
b21lIHBvaW50LiBJZGVhczoKKy8vICogbWFraW5nIGl0IHJlY2VpdmUgYSByZWN0IGFzIHBhcmFt
ZXRlciwgaS5lLiBub2Rlc0Zyb21SZWN0KHgsIHksIHcsIGgpOworLy8gKiBtYWtpbmcgaXQgcmVj
ZWl2ZSB0aGUgZXhwYWRpbmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBzZXBhcmF0ZWx5LAorLy8g
ICBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdG9wU2l6ZSwgcmlnaHRTaXplLCBib3R0b21TaXpl
LCBsZWZ0U2l6ZSk7CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9kZXNGcm9tUmVj
dChpbnQgY2VudGVyWCwgaW50IGNlbnRlclksIHVuc2lnbmVkIGhQYWRkaW5nLCB1bnNpZ25lZCB2
UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU2hh
cmUgY29kZSBiZXR3ZWVuIHRoaXMsIGVsZW1lbnRGcm9tUG9pbnQgYW5kIGNhcmV0UmFuZ2VGcm9t
UG9pbnQuCisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFt
ZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biAwOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAo
IWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0g
ZnJhbWVWaWV3LT5wYWdlWm9vbUZhY3RvcigpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRl
ZEludFBvaW50KEZsb2F0UG9pbnQoY2VudGVyWCAqIHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9s
bFgoKSwgY2VudGVyWSAqIHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworICAgIElu
dFNpemUgcGFkZGluZyhoUGFkZGluZywgdlBhZGRpbmcpOworCisgICAgaW50IHR5cGUgPSBIaXRU
ZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisgICAgLy8g
V2hlbiBpZ25vcmVDbGlwcGluZyBpcyBmYWxzZSwgdGhpcyBtZXRob2QgcmV0dXJucyBudWxsIGZv
ciBjb29yZGluYXRlcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICBpZiAoaWdub3JlQ2xp
cHBpbmcpCisgICAgICAgIHR5cGUgfD0gSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nOwor
ICAgIGVsc2UgaWYgKCFmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmludGVyc2VjdHMo
SW50UmVjdChwb2ludCwgcGFkZGluZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhpdFRl
c3RSZXF1ZXN0IHJlcXVlc3QodHlwZSk7CisKKyAgICAvLyBhZGQgYSBjb21tZW50CisgICAgaWYg
KHBhZGRpbmcuaXNaZXJvKCkpIHsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQp
OworICAgICAgICByZXR1cm4gaGFuZGxlWmVyb1BhZGRpbmcocmVxdWVzdCwgcmVzdWx0KTsKKyAg
ICB9CisKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCwgcGFkZGluZyk7CisgICAgcmVu
ZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CisKKyAgICByZXR1
cm4gU3RhdGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChyZXN1bHQucmVjdEJhc2VkVGVzdFJlc3Vs
dCgpKTsKK30KKworUGFzc1JlZlB0cjxOb2RlTGlzdD4gRG9jdW1lbnQ6OmhhbmRsZVplcm9QYWRk
aW5nKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQp
IGNvbnN0Cit7CisgICAgcmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJl
c3VsdCk7CisKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBub2RlID0gbm9kZS0+c2hhZG93QW5jZXN0
b3JOb2RlKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbGlzdDsKKyAgICBsaXN0
LmFkZChub2RlKTsKKyAgICByZXR1cm4gU3RhdGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChsaXN0
KTsKK30KKwogRWxlbWVudCogRG9jdW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQoaW50IHgsIGludCB5
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBTaGFyZSBjb2RlIGJldHdlZW4gdGhpcyBhbmQgY2Fy
ZXRSYW5nZUZyb21Qb2ludC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IGVlNDZmNTMuLjhlNDJhYWQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAt
ODcsNiArODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSFRNTE1hcEVsZW1l
bnQ7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CiAgICAgY2xhc3MgSGl0VGVzdFJlcXVlc3Q7Cisg
ICAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OwogICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKQEAgLTMw
Miw2ICszMDMsMTggQEAgcHVibGljOgogICAgIGJvb2wgaGFzRWxlbWVudFdpdGhJZChBdG9taWNT
dHJpbmdJbXBsKiBpZCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc011bHRpcGxlRWxlbWVudHNX
aXRoSWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIHsgcmV0dXJuIG1fZHVwbGljYXRl
SWRzLmNvbnRhaW5zKGVsZW1lbnRJZC5pbXBsKCkpOyB9CiAKKyAgICAvKioKKyAgICAgKiBSZXRy
aWV2ZSBhbGwgbm9kZXMgdGhhdCBpbnRlcnNlY3QgYSByZWN0IGluIHRoZSB3aW5kb3cncyBkb2N1
bWVudCwgdW50aWwgaXQgaXMgZnVsbHkgZW5jbG9zZWQgYnkKKyAgICAgKiB0aGUgYm91bmRhcmll
cyBvZiBub2RlLgorICAgICAqCisgICAgICogQHBhcmFtIGNlbnRlclggeCByZWZlcmVuY2UgZm9y
IHRoZSByZWN0YW5nbGUgaW4gQ1NTIHBpeGVscworICAgICAqIEBwYXJhbSBjZW50ZXJZIHkgcmVm
ZXJlbmNlIGZvciB0aGUgcmVjdGFuZ2xlIGluIENTUyBwaXhlbHMKKyAgICAgKiBAcGFyYW0gaFBh
ZGRpbmcgSG93IG11Y2ggdG8gZXhwYW5kIHRoZSByZWN0YW5nbGUgaG9yaXpvbnRhbGx5CisgICAg
ICogQHBhcmFtIHZQYWRkaW5nIEhvdyBtdWNoIHRvIGV4cGFuZCB0aGUgcmVjdGFuZ2xlIHZlcnRp
Y2FsbHkKKyAgICAgKiBAcGFyYW0gaWdub3JlQ2xpcHBpbmcgd2hldGhlciBvciBub3QgdG8gaWdu
b3JlIHRoZSByb290IHNjcm9sbCBmcmFtZSB3aGVuIHJldHJpZXZpbmcgdGhlIGVsZW1lbnQuCisg
ICAgICogICAgICAgIElmIGZhbHNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwgZm9yIGNvb3Jk
aW5hdGVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqLworICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3QoaW50IGNlbnRlclgsIGludCBjZW50ZXJZLCB1bnNpZ25l
ZCBoUGFkZGluZywgdW5zaWduZWQgdlBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcpIGNvbnN0
OwogICAgIEVsZW1lbnQqIGVsZW1lbnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdDsKICAg
ICBQYXNzUmVmUHRyPFJhbmdlPiBjYXJldFJhbmdlRnJvbVBvaW50KGludCB4LCBpbnQgeSk7CiAK
QEAgLTEwNTAsNiArMTA2Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbnF1ZXVlUG9wc3RhdGVF
dmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3QpOwogICAg
IHZvaWQgcGVuZGluZ0V2ZW50VGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKTsKIAorICAgIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IGhhbmRsZVplcm9QYWRkaW5nKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYpIGNvbnN0OworCiAgICAgT3duUHRyPENTU1N0eWxlU2VsZWN0b3I+
IG1fc3R5bGVTZWxlY3RvcjsKICAgICBib29sIG1fZGlkQ2FsY3VsYXRlU3R5bGVTZWxlY3RvcjsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsIGIvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaWRsCmluZGV4IDk1OTlkNzYuLjNhZTU1MWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKQEAgLTE4Niw2ICsx
ODYsMTEgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01TdHJpbmcgZGVmYXVsdENoYXJzZXQ7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRdIERP
TVN0cmluZyByZWFkeVN0YXRlOwogCisKKyAgICAgICAgTm9kZUxpc3QgICAgICAgICAgIG5vZGVz
RnJvbVJlY3QoaW4gbG9uZyB4LCBpbiBsb25nIHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIHVuc2lnbmVkIGxvbmcgaFBhZGRpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVuc2lnbmVkIGxvbmcgdlBhZGRpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gaWdub3Jl
Q2xpcHBpbmcpOwogICAgICAgICBFbGVtZW50ICAgICAgICAgICAgZWxlbWVudEZyb21Qb2ludChp
biBsb25nIHgsIGluIGxvbmcgeSk7CiAgICAgICAgIFJhbmdlICAgICAgICAgICAgICBjYXJldFJh
bmdlRnJvbVBvaW50KGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApp
bmRleCAyYjEwYzZkLi5lMTBhM2ExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODYzLDkgKzg2
Myw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjphbGxvd0RIVE1MRHJhZyhib29sJiBmbGFnREhUTUws
IGJvb2wmIGZsYWdVQSkgY29uc3QKIH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQog
ICAgIAotSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcsIEhpdFRlc3RTY3JvbGxiYXJzIHRlc3RTY3JvbGxiYXJzLCBIaXRUZXN0UmVxdWVz
dDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUpCitIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxl
cjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGFsbG93
U2hhZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZywgSGl0VGVzdFNjcm9sbGJhcnMgdGVz
dFNjcm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSwg
Y29uc3QgSW50U2l6ZSYgcGFkZGluZykKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2lu
dCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQsIHBhZGRpbmcpOwogICAgIGlmICgh
bV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
aWYgKGlnbm9yZUNsaXBwaW5nKQpAQCAtODg2LDcgKzg4Niw3IEBAIEhpdFRlc3RSZXN1bHQgRXZl
bnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJv
b2wgYWxsCiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHdpZGdldCk7CiAgICAgICAgIEludFBvaW50IHdpZGdldFBvaW50KHJlc3VsdC5sb2NhbFBvaW50
KCkueCgpICsgdmlldy0+c2Nyb2xsWCgpIC0gcmVuZGVyV2lkZ2V0LT5ib3JkZXJMZWZ0KCkgLSBy
ZW5kZXJXaWRnZXQtPnBhZGRpbmdMZWZ0KCksIAogICAgICAgICAgICAgcmVzdWx0LmxvY2FsUG9p
bnQoKS55KCkgKyB2aWV3LT5zY3JvbGxZKCkgLSByZW5kZXJXaWRnZXQtPmJvcmRlclRvcCgpIC0g
cmVuZGVyV2lkZ2V0LT5wYWRkaW5nVG9wKCkpOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdl
dEhpdFRlc3RSZXN1bHQod2lkZ2V0UG9pbnQpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHdpZGdl
dEhpdFRlc3RSZXN1bHQod2lkZ2V0UG9pbnQsIHBhZGRpbmcpOwogICAgICAgICBmcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSks
IHdpZGdldEhpdFRlc3RSZXN1bHQpOwogICAgICAgICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVz
dWx0OwogCkBAIC05MDgsNyArOTA4LDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6Omhp
dFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAg
ICAgICAgIGlmIChyZXN1bHRWaWV3ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAgICAgICAgSW50
UG9pbnQgd2luZG93UG9pbnQgPSByZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5w
b2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IG1haW5W
aWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWlu
RnJhbWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3Vs
dEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3JlQ2xpcHBp
bmcsIHRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlLCBwYWRkaW5nKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBi
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBhNDczMGJiLi4yNDI2MDFiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCkBAIC0xMDYsNyArMTA2LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlz
cGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEZsb2F0UXVhZCYpOwogCi0g
ICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJv
b2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2UsIEhpdFRl
c3RTY3JvbGxiYXJzIHNjcm9sbGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMsIEhpdFRlc3RS
ZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFk
T25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOworICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVz
dFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFsbG93U2hhZG93Q29udGVudCwg
Ym9vbCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRIaXRUZXN0U2Ny
b2xsYmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RS
ZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFk
T25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBwYWRkaW5nID0gSW50U2l6ZSgpKTsKIAogICAg
IGJvb2wgbW91c2VQcmVzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9tb3VzZVByZXNzZWQ7IH0KICAg
ICB2b2lkIHNldE1vdXNlUHJlc3NlZChib29sIHByZXNzZWQpIHsgbV9tb3VzZVByZXNzZWQgPSBw
cmVzc2VkOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggM2UxMzQyZi4uNjFjZDUy
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtMTEzLDkgKzExMywxMSBAQCBib29s
IEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiBJbnRSZWN0KHR4LCB0eSwgbV93aWR0aCwgbV9oZWlnaHQpLmNvbnRh
aW5zKHgsIHkpKSB7CisgICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIG1f
d2lkdGgsIG1faGVpZ2h0KTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5k
c1JlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAg
cmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwg
eSAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJlc3VsdC5hZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgYm91bmRz
UmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDUwOTMzYzYuLmRkOTZlMGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC00OSw5ICs0OSwyMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHBvaW50KQogICAgICwgbV9pc092ZXJX
aWRnZXQoZmFsc2UpCisgICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQogewogfQogCitIaXRUZXN0
UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50JiBjZW50ZXJQb2ludCwgY29uc3Qg
SW50U2l6ZSYgcGFkZGluZykKKyAgICA6IG1fcG9pbnQoY2VudGVyUG9pbnQpCisgICAgLCBtX2lz
T3ZlcldpZGdldChmYWxzZSkKK3sKKyAgICAvLyBJZiBhIHplcm8gcGFkZGluZyBpcyBwYXNzZWQg
aW4gb3IgZWl0aGVyIHdpZHRoIG9yIGhlaWdodCBpcyBuZWdhdGl2ZSwgdGhlbiBpdAorICAgIC8v
IGlzIG5vdCBhIHZhbGlkIHBhZGRpbmcgYW5kIGhlbmNlIG5vdCBhIHJlY3QgYmFzZWQgaGl0IHRl
c3QuCisgICAgbV9pc1JlY3RCYXNlZCA9ICEocGFkZGluZy5pc1plcm8oKSB8fCAocGFkZGluZy53
aWR0aCgpIDwgMCB8fCBwYWRkaW5nLmhlaWdodCgpIDwgMCkpOworICAgIG1fcGFkZGluZyA9IG1f
aXNSZWN0QmFzZWQgPyBwYWRkaW5nIDogSW50U2l6ZSgpOworfQorCiBIaXRUZXN0UmVzdWx0OjpI
aXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQogICAgIDogbV9pbm5lck5v
ZGUob3RoZXIuaW5uZXJOb2RlKCkpCiAgICAgLCBtX2lubmVyTm9uU2hhcmVkTm9kZShvdGhlci5p
bm5lck5vblNoYXJlZE5vZGUoKSkKQEAgLTYxLDYgKzcyLDEyIEBAIEhpdFRlc3RSZXN1bHQ6Okhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgLCBtX3Njcm9sbGJh
cihvdGhlci5zY3JvbGxiYXIoKSkKICAgICAsIG1faXNPdmVyV2lkZ2V0KG90aGVyLmlzT3Zlcldp
ZGdldCgpKQogeworICAgIC8vIE9ubHkgY29weSB0aGUgcGFkZGluZyBhbmQgTGlzdEhhc2hTZXQg
aW4gY2FzZSBvZiByZWN0IGhpdCB0ZXN0LgorICAgIC8vIENvcHlpbmcgdGhlIGxhdGVyIGlzIHJh
dGhlciBleHBlbnNpdmUuCisgICAgaWYgKChtX2lzUmVjdEJhc2VkID0gb3RoZXIuaXNSZWN0QmFz
ZWRUZXN0KCkpKSB7CisgICAgICAgIG1fcGFkZGluZyA9IG90aGVyLnBhZGRpbmcoKTsKKyAgICAg
ICAgbV9yZWN0QmFzZWRUZXN0UmVzdWx0ID0gb3RoZXIucmVjdEJhc2VkVGVzdFJlc3VsdCgpOwor
ICAgIH0KIH0KIAogSGl0VGVzdFJlc3VsdDo6fkhpdFRlc3RSZXN1bHQoKQpAQCAtNzYsNiArOTMs
MTIgQEAgSGl0VGVzdFJlc3VsdCYgSGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIG90aGVyKQogICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVu
dCgpOwogICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Nyb2xsYmFyKCk7CiAgICAgbV9pc092ZXJX
aWRnZXQgPSBvdGhlci5pc092ZXJXaWRnZXQoKTsKKyAgICAvLyBPbmx5IGNvcHkgdGhlIHBhZGRp
bmcgYW5kIExpc3RIYXNoU2V0IGluIGNhc2Ugb2YgcmVjdCBoaXQgdGVzdC4KKyAgICAvLyBDb3B5
aW5nIHRoZSBsYXRlciBpcyByYXRoZXIgZXhwZW5zaXZlLgorICAgIGlmICgobV9pc1JlY3RCYXNl
ZCA9IG90aGVyLmlzUmVjdEJhc2VkVGVzdCgpKSkgeworICAgICAgICBtX3BhZGRpbmcgPSBvdGhl
ci5wYWRkaW5nKCk7CisgICAgICAgIG1fcmVjdEJhc2VkVGVzdFJlc3VsdCA9IG90aGVyLnJlY3RC
YXNlZFRlc3RSZXN1bHQoKTsKKyAgICB9CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zNjIs
NCArMzg1LDQwIEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25z
dAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsK
IH0KIAorYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5v
ZGUqIG5vZGUsIGludCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBJ
ZiBpdCBpcyBub3QgYSByZWN0LWJhc2VkIGhpdCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUg
bm8tb3AuCisgICAgLy8gUmV0dXJuIGZhbHNlLCBzbyB0aGUgaGl0IHRlc3Qgc3RvcHMuCisgICAg
aWYgKCFpc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgbm9kZSBpcyBudWxsLCByZXR1cm4gdHJ1ZSBzbyB0aGUgaGl0IHRlc3QgY2FuIGNvbnRpbnVl
LgorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBub2RlID0gbm9k
ZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgbV9yZWN0QmFzZWRUZXN0UmVzdWx0LmFkZChu
b2RlKTsKKworICAgIHJldHVybiAhcmVjdC5jb250YWlucyhyZWN0RnJvbVBvaW50KHgsIHkpKTsK
K30KKwordm9pZCBIaXRUZXN0UmVzdWx0OjphcHBlbmQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3Ro
ZXIpCit7CisgICAgQVNTRVJUKGlzUmVjdEJhc2VkVGVzdCgpICYmIG90aGVyLmlzUmVjdEJhc2Vk
VGVzdCgpKTsKKworICAgIGlmICghbV9pbm5lck5vZGUgJiYgb3RoZXIuaW5uZXJOb2RlKCkpIHsK
KyAgICAgICAgbV9pbm5lck5vZGUgPSBvdGhlci5pbm5lck5vZGUoKTsKKyAgICAgICAgbV9pbm5l
ck5vblNoYXJlZE5vZGUgPSBvdGhlci5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICAgICAgbV9s
b2NhbFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOworICAgICAgICBtX2lubmVyVVJMRWxlbWVu
dCA9IG90aGVyLlVSTEVsZW1lbnQoKTsKKyAgICAgICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3Jv
bGxiYXIoKTsKKyAgICAgICAgbV9pc092ZXJXaWRnZXQgPSBvdGhlci5pc092ZXJXaWRnZXQoKTsK
KyAgICB9CisKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYgbGlzdCA9IG90
aGVyLnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4g
Pjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IGxpc3QuZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNl
dDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9
IGxhc3Q7ICsraXQpCisgICAgICAgIG1fcmVjdEJhc2VkVGVzdFJlc3VsdC5hZGQoaXQtPmdldCgp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5o
CmluZGV4IGQxOTA2YmEuLmY0N2UyYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAg
LTIxLDcgKzIxLDEwIEBACiAjZGVmaW5lIEhpdFRlc3RSZXN1bHRfaAogCiAjaW5jbHVkZSAiSW50
UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzQx
LDggQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgSGl0VGVzdFJlc3VsdCB7CiBwdWJsaWM6CiAgICAg
SGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYpOworICAgIC8vIFBhc3MgYSBub24tbmVnYXRp
dmUgSW50U2l6ZSB2YWx1ZSBhcyBwYWRkaW5nIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0
ZXN0LgorICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIGNlbnRlclBvaW50LCBjb25z
dCBJbnRTaXplJiBwYWRkaW5nKTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmKTsKICAgICB+SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9y
PShjb25zdCBIaXRUZXN0UmVzdWx0Jik7CkBAIC03Niw3ICs4MSwyMSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNv
bnN0OwogCisgICAgLy8gUmVjdC1iYXNlZCBoaXQgdGVzdCByZWxhdGVkIG1ldGhvZHMuCisgICAg
Ym9vbCBpc1JlY3RCYXNlZFRlc3QoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjdEJhc2VkOyB9Cisg
ICAgSW50UmVjdCByZWN0RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3Q7CisgICAgSW50UmVj
dCByZWN0RnJvbVBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50U2l6ZSBwYWRk
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nOyB9CisgICAgaW50IHBhZGRpbmdXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFkZGluZy53aWR0aCgpID49IDAgPyBtX3BhZGRpbmcud2lkdGgo
KSA6IDA7IH0KKyAgICBpbnQgcGFkZGluZ0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFkZGlu
Zy5oZWlnaHQoKSA+PSAwID8gbV9wYWRkaW5nLmhlaWdodCgpIDogMDsgfQorICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBpcyByZWN0LWJhc2VkIGhpdCB0ZXN0IGFuZCBuZWVkcyB0byBjb250aW51
ZSB1bnRpbCB0aGUgcmVjdCBpcyBmdWxseQorICAgIC8vIGVuY2xvc2VkIGJ5IHRoZSBib3VuZGFy
aWVzIG9mIGEgbm9kZS4KKyAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9k
ZSosIGludCB4LCBpbnQgeSwgY29uc3QgSW50UmVjdCYgcmVjdCA9IEludFJlY3QoKSk7CisgICAg
Y29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4mIHJlY3RCYXNlZFRlc3RSZXN1bHQoKSBj
b25zdCB7IHJldHVybiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQ7IH0KKyAgICB2b2lkIGFwcGVuZChj
b25zdCBIaXRUZXN0UmVzdWx0Jik7CisKIHByaXZhdGU6CisKICAgICBSZWZQdHI8Tm9kZT4gbV9p
bm5lck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb25TaGFyZWROb2RlOwogICAgIElu
dFBvaW50IG1fcG9pbnQ7CkBAIC04NSw4ICsxMDQsMzcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
RWxlbWVudD4gbV9pbm5lclVSTEVsZW1lbnQ7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3Jv
bGxiYXI7CiAgICAgYm9vbCBtX2lzT3ZlcldpZGdldDsgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGFy
ZSBvdmVyIGEgd2lkZ2V0IChhbmQgbm90IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhIG9mIGEg
UmVuZGVyV2lkZ2V0IGZvciBleGFtcGxlKS4KKyAgICBib29sIG1faXNSZWN0QmFzZWQ7CisgICAg
SW50U2l6ZSBtX3BhZGRpbmc7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9yZWN0
QmFzZWRUZXN0UmVzdWx0OwogfTsKIAoraW5saW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVj
dEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlY3RGcm9tUG9p
bnQoSW50UG9pbnQoeCwgeSkpOworfQorCisvLyBGb3JtdWxhOgorLy8geCA9IHAueCgpIC0gcGFk
ZGluZy53aWR0aCgpCisvLyB5ID0gcC55KCkgLSBwYWRkaW5nLmhlaWdodCgpCisvLyB3aWR0aCA9
IDIgKiBwYWRkaW5nLndpZHRoKCkgKyAxCisvLyBoZWlnaHQgPSAyICogbV9wYWRkaW5nLmhlaWdo
dCgpICsgMQoraW5saW5lIEludFJlY3QgSGl0VGVzdFJlc3VsdDo6cmVjdEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcmVhbFBvaW50KHBvaW50
KTsKKyAgICBJbnRTaXplIHJlYWxQYWRkaW5nKG1fcGFkZGluZyk7CisKKyAgICAvLyBSZWFsIElu
dFBvaW50IGZvciB0aGUgcmVjdC4KKyAgICByZWFsUGFkZGluZy5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7CisgICAgcmVhbFBvaW50IC09IHJlYWxQYWRkaW5nOworCisgICAgLy8gUmVhbCBJbnRTaXpl
IGZvciB0aGUgcmVjdC4KKyAgICByZWFsUGFkZGluZy5zY2FsZSgyKTsKKyAgICByZWFsUGFkZGlu
ZyArPSBJbnRTaXplKDEsIDEpOworCisgICAgcmV0dXJuIEludFJlY3QocmVhbFBvaW50LCByZWFs
UGFkZGluZyk7Cit9CisKIFN0cmluZyBkaXNwbGF5U3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0
IE5vZGUqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcAppbmRleCBmYmZlNTZkLi5kZmU3NTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcApAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiB7CiAg
ICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzaWJsZU92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVy
Zmxvd1JlY3QubW92ZSh0eCwgdHkpOwotICAgIGlmICghb3ZlcmZsb3dSZWN0LmNvbnRhaW5zKHgs
IHkpKQorICAgIGlmICghb3ZlcmZsb3dSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9p
bnQoeCwgeSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJl
biBmaXJzdC4KQEAgLTYyNCw5ICs2MjQsMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKIAog
ICAgIC8vIE5vdyBjaGVjayBvdXJzZWx2ZXMuCiAgICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0
eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5n
KCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5n
KCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHgsIHkpKSkgewogICAg
ICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBj
b29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVu
ZGVyZXIoKS0+bm9kZSgpLCB4LCB5LCByZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IDg1NDdmZTAuLjUwZjZjZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCkBAIC0yODcsOSArMjg3LDEwIEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGluCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1f
d2lkdGgsIGhlaWdodCgpKTsKLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlv
biAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5jb250YWlucyh4LCB5KSkgeworICAg
IGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeCwgeSkpKSB7CiAg
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
IC0gdHgsIHkgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1
bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHks
IHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBlOGI1ODIyLi45NTUwZWJmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zNzUyLDE5ICszNzUyLDIyIEBAIGJvb2wg
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55
dGhpbmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzaWJsZU92ZXJm
bG93UmVjdCgpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIGlm
ICghb3ZlcmZsb3dCb3guY29udGFpbnMoX3gsIF95KSkKKyAgICAgICAgaWYgKCFvdmVyZmxvd0Jv
eC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KF94LCBfeSkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0
QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNr
Z3JvdW5kKSAmJiBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wocmVzdWx0LCBfeCwgX3ksIHR4LCB0
eSkpIHsKICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0g
dHgsIF95IC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIEZJWE1FOiBp
c1BvaW50SW5PdmVyZmxvd0NvbnRyb2woKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIHRlc3Rz
IHlldC4KKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChu
b2RlKCksIF94LCBfeSkpCisgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8v
IElmIHdlIGhhdmUgY2xpcHBpbmcsIHRoZW4gd2UgY2FuJ3QgaGF2ZSBhbnkgc3BpbGxvdXQuCiAg
ICAgYm9vbCB1c2VPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzU2VsZlBh
aW50aW5nTGF5ZXIoKTsKICAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCB1
c2VPdmVyZmxvd0NsaXApOwotICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8ICho
YXNDb250cm9sQ2xpcCgpID8gY29udHJvbENsaXBSZWN0KHR4LCB0eSkuY29udGFpbnMoX3gsIF95
KSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyhfeCwgX3kpKTsKKyAgICBJbnRS
ZWN0IGhpdFRlc3RBcmVhKHJlc3VsdC5yZWN0RnJvbVBvaW50KF94LCBfeSkpOworICAgIGJvb2wg
Y2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9sQ2xpcCgpID8gY29udHJvbENs
aXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkgOiBvdmVyZmxvd0NsaXBSZWN0
KHR4LCB0eSkuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVu
KSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBpbnQg
c2Nyb2xsZWRYID0gdHg7CkBAIC0zODEyLDkgKzM4MTUsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3UKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91bmQKICAgICBpZiAoaGl0VGVz
dEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRlc3RBY3Rpb24gPT0gSGl0
VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIEludFJlY3QgYm91bmRzUmVjdCh0
eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94LCBfeSkpIHsKKyAgICAgICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9t
UG9pbnQoX3gsIF95KSkpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9k
ZSgpLCBfeCwgX3ksIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0zODM5LDEzICszODQzLDE2IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByCiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAg
ICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNvbFJlY3Qu
Y29udGFpbnMoeCwgeSkpIHsKKyAgICAgICAgaWYgKGNvbFJlY3QuaW50ZXJzZWN0cyhyZXN1bHQu
cmVjdEZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNp
ZGUgdGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAvLyBBZGp1c3QgdHggYW5kIHR5IHRvIGNoYW5n
ZSB3aGVyZSB3ZSBoaXQgdGVzdC4KICAgICAgICAgCiAgICAgICAgICAgICBpbnQgZmluYWxYID0g
dHggKyBjdXJyWE9mZnNldDsKICAgICAgICAgICAgIGludCBmaW5hbFkgPSB0eSArIGN1cnJZT2Zm
c2V0OwotICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQs
IHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkgJiYgIWNvbFJlY3QuY29udGFpbnMocmVzdWx0LnJlY3RG
cm9tUG9pbnQoeCwgeSkpKQorICAgICAgICAgICAgICAgIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0
LCByZXN1bHQsIHgsIHksIGZpbmFsWCwgZmluYWxZLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVlc3Qs
IHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rpb24pOwogICAgICAgICB9
CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAyMDIwMDAzLi5kYWY5NGVhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01
NTQsOSArNTU1LDExIEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0CiAKICAgICAvLyBDaGVjayBv
dXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNh
biBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0
cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgSW50UmVjdCh0
eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIElu
dFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7Cisg
ICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91
bmQgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQ
b3MpKSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBv
cyAtIHR4LCB5UG9zIC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
cmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBi
b3VuZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCA4ZTdkMTY1Li4yMDczNDc5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC0zNzcsMTAgKzM3NywxMCBAQCBIVE1M
TWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKIAogYm9vbCBSZW5kZXJJ
bWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQogewotICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQu
cG9pbnQoKSk7CisgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCBy
ZXN1bHQucGFkZGluZygpKTsKICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2Rl
QXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24p
OwogCi0gICAgaWYgKGluc2lkZSAmJiBub2RlKCkpIHsKKyAgICBpZiAodGVtcFJlc3VsdC5pbm5l
ck5vZGUoKSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAgPSBp
bWFnZU1hcCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50Qm94
UmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgem9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKQEAgLTM5MSw2ICszOTEsOCBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgICAgICB9
CiAgICAgfQogCisgICAgaWYgKCFpbnNpZGUgJiYgcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIGlmIChpbnNpZGUpCiAgICAg
ICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgcmV0dXJuIGluc2lkZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCBkNDBhNmY4Li4zNDE3ODY4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0yNzM5LDE0ICsyNzM5LDE2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHVzZVRlbXBvcmFyeUNsaXBS
ZWN0cyA9IGNvbXBvc2l0b3IoKS0+aW5Db21wb3NpdGluZ01vZGUoKTsKICNlbmRpZgotICAgIAor
CisgICAgSW50UmVjdCBoaXRUZXN0QXJlYSA9IHJlc3VsdC5yZWN0RnJvbVBvaW50KGhpdFRlc3RQ
b2ludCk7CisKICAgICAvLyBBcHBseSBhIHRyYW5zZm9ybSBpZiB3ZSBoYXZlIG9uZS4KICAgICBp
ZiAodHJhbnNmb3JtKCkgJiYgIWFwcGxpZWRUcmFuc2Zvcm0pIHsKICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3RzIGhhdmUgYmVlbiBjYWxjdWxhdGVkLgogICAgICAg
ICBpZiAocGFyZW50KCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3Jv
dW5kQ2xpcFJlY3Qocm9vdExheWVyLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgICAgICAg
ICAgLy8gR28gYWhlYWQgYW5kIHRlc3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KLSAgICAgICAg
ICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSkKKyAgICAgICAgICAgIGlm
ICghY2xpcFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0QXJlYSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KIApAQCAtMjg1OSwxNyArMjg2MSwyMSBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllciogY29udAogICAgIH0KIAogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1v
dXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgot
ICAgIGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xh
eWVyKCkpIHsKKyAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdEFyZWEpICYmIGlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAvLyBIaXQgdGVzdCB3aXRoIGEgdGVtcG9yYXJ5
IEhpdFRlc3RSZXN1bHQsIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGNvbW1pdCB0byAncmVzdWx0
JyBpZiB3ZSBrbm93IHdlJ3JlIGZyb250bW9zdC4KLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1w
UmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0
KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFkZGluZygpKTsKICAgICAgICAgaWYgKGhpdFRlc3RD
b250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVzdFBvaW50LCBI
aXRUZXN0RGVzY2VuZGFudHMpICYmCiAgICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBm
YWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdl
dCgpKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh0ZW1wUmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIC8vIEZvcmVncm91bmQgY2Fu
IGRlcHRoLXNvcnQgd2l0aCBkZXNjZW5kYW50IGxheWVycywgc28ga2VlcCB0aGlzIGFzIGEgY2Fu
ZGlkYXRlLgogICAgICAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSB0aGlzOwotICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3Vy
IG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCkBAIC0yODg1LDEzICsyODkxLDE3IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKGNhbmRpZGF0ZUxheWVyKQogICAgICAgICByZXR1
cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2lu
dCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVt
cFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKGhpdFRl
c3RBcmVhKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgSGl0VGVzdFJlc3Vs
dCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpLCByZXN1bHQucGFkZGluZygpKTsKICAgICAgICAg
aWYgKGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0
VGVzdFBvaW50LCBIaXRUZXN0U2VsZikgJiYKICAgICAgICAgICAgIGlzSGl0Q2FuZGlkYXRlKHRo
aXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3Rh
dGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OworICAgICAgICAg
ICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiAwOwpA
QCAtMjkwMyw4ICsyOTEzLDkgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLngoKSAtIHJlbmRlckJveFgoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkgLSByZW5kZXJCb3hZKCksIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhpdFRlc3RGaWx0ZXIpKSB7Ci0gICAgICAgIC8vIEl0
J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlkbid0
IGhpdCBhbnl0aGluZy4KLSAgICAgICAgQVNTRVJUKCFyZXN1bHQuaW5uZXJOb2RlKCkpOworICAg
ICAgICAvLyBJdCdzIHdyb25nIHRvIHNldCBpbm5lck5vZGUsIGJ1dCB0aGVuIGNsYWltIHRoYXQg
eW91IGRpZG4ndCBoaXQgYW55dGhpbmcsIHVubGVzcyBpdCBpcworICAgICAgICAvLyBhIHJlY3Qt
YmFzZWQgdGVzdC4KKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgKHJlc3Vs
dC5pc1JlY3RCYXNlZFRlc3QoKSAmJiByZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpLnNpemUo
KSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yOTM4LDE0ICsyOTQ5LDIx
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmVjdG9yPFJlbmRlckxh
eWVyKj4qIGxpc3QsIFJlbmRlckxheWVyKiByCiAgICAgZm9yIChpbnQgaSA9IGxpc3QtPnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBjaGlsZExheWVyID0g
bGlzdC0+YXQoaSk7CiAgICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7Ci0gICAgICAg
IEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSk7CisgICAgICAgIEhpdFRl
c3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQucG9pbnQoKSwgcmVzdWx0LnBhZGRpbmcoKSk7CiAg
ICAgICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQogICAgICAgICAgICAgaGl0TGF5
ZXIgPSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJl
cXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0
YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBo
aXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVl
c3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zv
cm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKKworICAgICAgICAvLyBJZiBpdCBhIHJl
Y3QtYmFzZWQgdGVzdCwgd2UgY2FuIHNhZmVseSBhcHBlbmQgdGhlIHRlbXBvcmFyeSByZXN1bHQg
c2luY2UgaXQgbWlnaHQgaGFkIGhpdAorICAgICAgICAvLyBub2RlcyBidXQgbm90IG5lY2Vzc2Vy
aWx5IGhhZCBoaXRMYXllciBzZXQuCisgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0
KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworCiAgICAgICAgIGlm
IChpc0hpdENhbmRpZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMsIHpPZmZzZXQs
IHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgICAgICByZXN1bHRMYXllciA9
IGhpdExheWVyOwotICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDA1LDcgKzMwMjMsNyBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhSZW5kZXJMYXll
ciogY2hpbGRMYXllciwgUmVuZAogICAgICAgICBJbnRSZWN0IGxvY2FsQ2xpcFJlY3QoaGl0VGVz
dFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xSZWN0KTsKICAgICAg
ICAgCi0gICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVj
dC5jb250YWlucyhoaXRUZXN0UG9pbnQpKSB7CisgICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5p
c0VtcHR5KCkgJiYgbG9jYWxDbGlwUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50
KGhpdFRlc3RQb2ludCkpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAw
OwogICAgICAgICAgICAgaWYgKCFjb2x1bW5JbmRleCkgewogICAgICAgICAgICAgICAgIC8vIEFw
cGx5IGEgdHJhbnNsYXRpb24gdHJhbnNmb3JtIHRvIGNoYW5nZSB3aGVyZSB0aGUgbGF5ZXIgcGFp
bnRzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmluZGV4IDJkMjc3NDgu
LjRkMGRjZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94
TGlzdC5oIgogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRl
eHRCb3guaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgpAQCAtMjQ1LDE0ICsyNDYsMTYgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVz
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXEKICAgICAv
LyBjb250YWluIHRoZSBwb2ludC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQg
d2UgY2FuIHRha2UgdG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCiAgICAgLy8gRklYTUU6IFRo
aXMgY2hlY2sgaXMgZmxhd2VkIGluIHRoZSBmb2xsb3dpbmcgZXh0cmVtZWx5IG9ic2N1cmUgd2F5
OgogICAgIC8vIGlmIHNvbWUgbGluZSBpbiB0aGUgbWlkZGxlIGhhcyBhIGh1Z2Ugb3ZlcmZsb3cs
IGl0IG1pZ2h0IGFjdHVhbGx5IGV4dGVuZCBiZWxvdyB0aGUgbGFzdCBsaW5lLgotICAgIGlmICgo
eSA+PSB0eSArIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkp
IHx8ICh5IDwgdHkgKyBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3co
KSkpCisgICAgaWYgKHkgLSByZXN1bHQucGFkZGluZ0hlaWdodCgpID49IHR5ICsgbGFzdExpbmVC
b3goKS0+cm9vdCgpLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKQorICAgICB8fCB5ICsgcmVzdWx0
LnBhZGRpbmdIZWlnaHQoKSA8IHR5ICsgZmlyc3RMaW5lQm94KCktPnJvb3QoKS0+dG9wVmlzaWJs
ZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSBpZiBvdXIg
cm9vdCBsaW5lcyBjb250YWluIHRoZSBwb2ludC4gIElmIHNvLCB0aGVuIHdlIGhpdCB0ZXN0CiAg
ICAgLy8gdGhlbSBmdXJ0aGVyLiAgTm90ZSB0aGF0IGJveGVzIGNhbiBlYXNpbHkgb3ZlcmxhcCwg
c28gd2UgY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMKICAgICAvLyBiYXNlZCBvZmYgcG9zaXRp
b25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIgbGFzdCBsaW5lIGJveC4KICAgICBmb3Ig
KElubGluZUZsb3dCb3gqIGN1cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+
cHJldkxpbmVCb3goKSkgewotICAgICAgICBpZiAoeSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9w
VmlzaWJsZU92ZXJmbG93KCkgJiYgeSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxl
T3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoeSArIHJlc3VsdC5wYWRkaW5nSGVpZ2h0KCkgPj0g
dHkgKyBjdXJyLT5yb290KCktPnRvcFZpc2libGVPdmVyZmxvdygpCisgICAgICAgICAmJiB5IC0g
cmVzdWx0LnBhZGRpbmdIZWlnaHQoKSA8IHR5ICsgY3Vyci0+cm9vdCgpLT5ib3R0b21WaXNpYmxl
T3ZlcmZsb3coKSkgewogICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRl
KSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNw
cAppbmRleCA3NzEzNDQ1Li5lMmRlZTVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTMxOSw2ICszMjAsOCBAQCBib29sIFJlbmRl
clNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZQogICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IENTUy9IVE1MIGFzc3VtZXMgdGhlIGxvY2FsIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRo
ZSBib3JkZXIgYm94LCByaWdodD8KICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBwb2ludEluQm9yZGVyQm94KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBub2RlQXRGbG9h
dFBvaW50KCkgZG9lc24ndCBoYW5kbGUgcmVjdC1iYXNlZCBoaXQgdGVzdHMgeWV0LgorICAgICAg
ICAgICAgcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwg
X3gsIF95KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IDY1OGZkOWMuLjNhNDBlZWUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTEx
MzUsNyArMTEzNiw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgdHkgKz0geSgpOwog
CiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8
IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmludGVyc2Vj
dHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeFBvcywgeVBvcykpKSB7CiAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9S
ZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJs
ZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pICYmCiAgICAgICAgICAgICAgICAgY2hp
bGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeFBvcywgeVBvcywgdHgsIHR5LCBhY3Rp
b24pKSB7CkBAIC0xMTQ2LDkgKzExNDcsMTEgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAg
ICB9CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuCi0gICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9u
ID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgSW50UmVjdCh0eCwgdHksIHdpZHRo
KCksIGhlaWdodCgpKS5jb250YWlucyh4UG9zLCB5UG9zKSkgeworICAgIEludFJlY3QgYm91bmRz
UmVjdCA9IEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwg
YWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQb3MpKSkgewogICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeFBvcyAtIHR4LCB5UG9zIC0gdHkpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RC
YXNlZFRlc3RSZXN1bHQobm9kZSgpLCB4UG9zLCB5UG9zLCBib3VuZHNSZWN0KSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDhjOGQxMzAuLjc0ZjQ0OTQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMTE5NSw3
ICsxMTk2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICB0eCArPSB4KCk7CiAgICAg
dHkgKz0geSgpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBS
ZWN0KHR4LCB0eSkuY29udGFpbnMoeFBvcywgeVBvcykpCisgICAgaWYgKGhhc092ZXJmbG93Q2xp
cCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZy
b21Qb2ludCh4UG9zLCB5UG9zKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
cHJldmlvdXNTaWJsaW5nKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IDZm
YjI3NDkuLjZlYzViNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMzk0LDcg
KzM5NCw3IEBAIGJvb2wgUmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzCiAgICAgYm9vbCBpbnNpZGUgPSBSZW5k
ZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGFj
dGlvbik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0
aGUgd2lkZ2V0IGl0c2VsZiAoYW5kIG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVh
KS4KLSAgICBpZiAoaW5zaWRlICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09
IG5vZGUoKSkKKyAgICBpZiAoKGluc2lkZSB8fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYm
ICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSkKICAgICAgICAgcmVz
dWx0LnNldElzT3ZlcldpZGdldChjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHJlc3VsdC5sb2Nh
bFBvaW50KCkpKTsKICAgICByZXR1cm4gaW5zaWRlOwogfQotLSAKMS43LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62761</attachid>
            <date>2010-07-27 15:53:45 -0700</date>
            <delta_ts>2010-07-29 06:57:37 -0700</delta_ts>
            <desc>(commit=r64272, r=hyatt )patch v7.1 - feature + tests</desc>
            <filename>0001-2010-07-21-Grace-Kloba-klobag-gmail.com-Antonio-Gome.patch</filename>
            <type>text/plain</type>
            <size>58838</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA5NmM5MzY3ZmU3ZTYzMWFkMmM1YmM3Y2M1NmE3ZTllZGJmYzU5MTdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogTW9uLCAxNCBKdW4gMjAxMCAxNTozNjo1NiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIDIw
MTAtMDctMjEgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPiAsIEFudG9uaW8gR29tZXMg
IDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgogICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUg
aW5zdGVhZCBvZiBhIHBvaW50CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwMTk3CgogICAgICAgIFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBjaGFuZ2Ug
aXMgdG8gcHJvdmlkZSBtZWNoYW5pc21zIGZvciBtb3JlIHByZWNpc2UgdGFwCiAgICAgICAgYWN0
aW9ucyBieSB0aGUgdXNlcnMgb24gbW9iaWxlIGRldmljZXMuCgogICAgICAgIFBhdGNoIGV4dGVu
ZHMgdGhlIGhpdCB0ZXN0aW5nIHN5c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3Vs
YXIgYXJlYQogICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgd2hlbiBhcHBsaWNh
YmxlLiBGb3IgdGhhdCwgdGhlIEhpdFRlc3RSZXN1bHQgY2xhc3MKICAgICAgICB3YXMgbW9kaWZp
ZWQgdG8gdGFrZSBhIHBhZGRpbmcgKEludFNpemUpLiBUaGUgcGFkZGluZyBzcGVjaWZpZXMgYSBm
dXp6eSByYW5nZSBmb3IKICAgICAgICBhY2NlcHRpbmcgaW5wdXQgZXZlbnRzIGluIHBpeGVscyBj
b29yZGluYXRlcyBmb3IgYm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAogICAgICAgIG9yaWVu
dGF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGl0IHRlbGxzIGhvdyBtdWNoIHRvIGV4cGFuZCB0aGUg
c2VhcmNoIHJlY3QKICAgICAgICBhcm91bmQgYSBzdXBwb3NlZCB0b3VjaCBwb2ludC4KCiAgICAg
ICAgSWYgaXQgbm9uLXBvc2l0aXZlLCBoaXQgdGVzdGluZyB3aWxsIGJlaGF2aW9yIGFzIHRoZSBj
dXJyZW50IHBvaW50IGJhc2VkIGhpdCB0ZXN0aW5nLAogICAgICAgIGFuZCBtZXRob2RzIGFyZSBu
by1vcCdlZCB0byBub3QgcmVncmVzcyB0aGlzIGNvbW1vbiBiZWhhdmlvciBwZXJmb3JtYW5jZS13
aXNlLgogICAgICAgIFdoZW4gcG9zaXRpdmUgSW50U2l6ZSBpcyBwcm92aWRlZCwgdGhlIGhpdCB0
ZXN0IHJlc3VsdCB3aWxsIGtlZXAgcmVjb3JkIG9mIGFsbAogICAgICAgIG5vZGVzIHRoYXQgaW50
ZXJzZWN0IHRoZSBidWlsdCB1cCB0ZXN0IGFyZWEuIFRoZSBsb2dpYyB3aWxsIGNvbnRpbnVlIHNl
YXJjaGluZyB3aGVuIGl0CiAgICAgICAgZmluZHMgYSBjYW5kaWRhdGUgdW50aWwgdGhlIHJlY3Rh
bmdsZSBpcyBmdWxseSBlbmNsb3NlZCBieSB0aGUgYm91bmRhcmllcyBvZiBhIGNhbmRpZGF0ZS4K
ICAgICAgICBUaGUgcmVzdWx0IHdpbGwgYmUgYSBsaXN0IG9mIG5vZGVzIGluIHRoZSB6LW9yZGVy
IHRoZXkgYXJlIGhpdC10ZXN0ZWQuCiAgICAgICAgQ2FsbGVyIHdpbGwgZGVjaWRlIGhvdyB0byBw
cm9jZXNzIHRoZW0uCgogICAgICAgIEluIG9yZGVyIHRvIGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0
eSwgdGhlIHBhdGNoOgoKICAgICAgICAtIEFkZHMgYSBub2Rlc0Zyb21SZWN0IG1ldGhvZCB0byB0
aGUgRG9jdW1lbnQgY2xhc3MsIGV4cG9zaW5nIHRoZSBmdW5jaW9uYWxpdHkKICAgICAgICB0byB0
aGUgRE9NLiBNZXRob2QgcmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYWxsIG5vZGVzIHRoYXQgaW50
ZXJzZWN0IHRoZSBnaXZlbgogICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KICAgICAgICAtIEV4dGVu
ZHMgaGl0VGVzdFJlc3VsdEF0UG9pbnQgbWV0aG9kIG9mIHRoZSBFdmVudEhhbmRsZXIgd2l0aCBh
biBleHRyYSAncGFkZGluZycKICAgICAgICBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gSW50U2l6
ZSgwLCAwKS4gVGhlIHJlY3QtYmFzZWQgaGl0IHRlc3QgaXMgcGVyZm9ybWVkIHdoZW4gYQogICAg
ICAgIHBvc2l0aXZlIHBhZGRpbmcgaXMgcGFzc2VkIGluLgoKICAgICAgICBUZXN0OiBmYXN0L2Rv
bS9ub2Rlc0Zyb21SZWN0LWJhc2ljLmh0bWwKCiAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgog
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVzRnJvbVJlY3QpOiBUaGlzIG1ldGhvZCBleHBvc2VzIHRoZSByZWN0IGJhc2VkIGZ1bmNpb25h
bGl0eSB0bwogICAgICAgIHRoZSBET00uIEl0IHdvcmtzIHNpbWlsYXJseSB0byBlbGVtZW50RnJv
bVBvaW50LCBob3dldmVyIHJlY2VpdmluZyBhIHJlY3Rhbmd1bGFyIGFyZWEKICAgICAgICBhcyBp
bnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIGFuZCByZXR1cm5pbmcgYSB6LWluZGV4IG9yZGVyZWQg
bGlzdCBvZiBub2RlcyAobm90IGVsZW1lbnRzKQogICAgICAgIHdob3NlIGFyZWEgaW50ZXJzZWN0
IHRoZSBoaXQgdGVzdCByZWN0LgogICAgICAgICogZG9tL0RvY3VtZW50Lmg6IERpdHRvLgogICAg
ICAgICogZG9tL0RvY3VtZW50LmlkbDogRGl0dG8uCiAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9p
bnQpOiBUaGUgZnVuY2lvbmFsaXR5IGlzIGFsc28gZXhwb3NlZCB0aHJvdWdoIHRoaXMKICAgICAg
ICBtZXRob2QuIFBhdGNoIGFkZHMgYSBhZGRpdGlvbmFsIEludFNpemUgcGFyYW1ldGVyIHRvIHdv
cmsgYXMgdGhlIHBhZGRpbmcgYXJlYSwgYnVpbGRpbmcgdXAKICAgICAgICB0aGUgaGl0IHRlc3Qg
cmVjdC4KICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IERpdHRvLgogICAgICAgICogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpIaXRUZXN0UmVzdWx0KTogUmVjdCBiYXNlZCBoaXQgdGVzdCBjb25zdHJ1Y3Rvci4gUmVjZWl2
ZXMgYQogICAgICAgIHBhZGRpbmcgSW50U2l6ZSBhcyBwYXJhbWV0ZXIuIEl0IGNhbiBiZSAoMCww
KS4KICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KTogTW9kaWZpZWQg
dG8gYXNzaWduIHRoZSBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgYXMgd2VsbC4KICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6YXBwZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJlc3VsdCBvYmpl
Y3RzIGluIGEgd2F5IHRoYXQgdGhlCiAgICAgICAgbGlzdCBub2RlJ3Mgb2YgYm90aCBvYmplY3Rz
IGdldCBhbWVuZGVkLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9S
ZWN0QmFzZWRUZXN0UmVzdWx0KTogQWRkcyBhIGdpdmVuIE5vZGUgdG8gdGhlIGxpc3Qgb2YKICAg
ICAgICBoaXQgbm9kZXMuCiAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgogICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpwYWRkaW5nKTogUmV0dXJucyB0aGUgcGFkZGlu
ZyBhcyBhbiBJbnRTaXplLgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc1JlY3RC
YXNlZFRlc3QpOiBSZXR1cm5zIGlmIHRoZSBIaXRUZXN0UmVzdWx0IGlzIHJlY3QgYmFzZWQgb3Ig
bm90LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjoucmVjdEJhc2VkVGVzdFJlc3Vs
dCk6IFJldHVybnMgdGhlIGxpc3Qgbm9kZXMgaGl0LgogICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0OjpyZWN0RnJvbVBvaW50KTogUmV0dXJucyB0aGUgaGl0IHRlc3QgcmVjdCBnaXZlbiB0
aGUgaGl0IHRlc3QgcG9pbnQKICAgICAgICBhbmQgcGFkZGluZy4KICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0
TGF5ZXIpOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgogICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKToKICAg
ICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CiAgICAgICAgKFdlYkNvcmU6OkVsbGlw
c2lzQm94Ojpub2RlQXRQb2ludCk6IE1ldGhvZCBpcyBtb2RpZmllZCB0byBzdXBwb3J0IHJlY3Qg
YmFzZWQgaGl0IHRlc3QgZXh0ZW5zaW9uLgogICAgICAgIE5vdyBpdCBub3QganVzdCBjaGVja3Mg
aWYgdGhlIGJvdW5kYXJ5IG9mIHRoZSBub2RlIGJlaW5nIGhpdC10ZXN0ZWQgY29udGFpbnMgYSBo
aXQgdGVzdCBwb2ludCwgYnV0CiAgICAgICAgaW5zdGVhZCBpdCBjaGVja3MgaWYgdGhlIGJvdW5k
YXJ5IG9mIHRoZSBub2RlIGludGVyc2VjdHMgYSBoaXQgdGVzdCByZWN0LiBJdCBpcyBpbXBsZW1l
bnRlZCBzbwogICAgICAgIHRoYXQgdGhlIGNvbW1vbiBjYXNlIChwb2ludCBiYXNlZCBoaXQgdGVz
dCkgd29ya3MgYXMgcHJldmlvdXNseS4KICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcDoKICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOiBEaXR0
by4KICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludCk6IERpdHRvLgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVt
bnMpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgogICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6bm9kZUF0
UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6
CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KToKICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHA6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6IERpdHRv
LgogICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CiAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOiBEaXR0by4KICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRn
ZXQ6Om5vZGVBdFBvaW50KTogRGl0dG8uCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICsrCiAuLi4vZmFzdC9kb20vV2luZG93L3dp
bmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCB8ICAgIDEgKwogLi4uL2Zhc3QvZG9tL25vZGVz
RnJvbVJlY3QtYmFzaWMtZXhwZWN0ZWQudHh0ICAgICAgfCAgIDI2ICsrKysrKwogTGF5b3V0VGVz
dHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sICAgICAgfCAgIDg5ICsrKysrKysr
KysrKysrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3Qu
Y3NzICAgfCAgIDQ0ICsrKysrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25v
ZGVzRnJvbVJlY3QuanMgICAgfCAgIDQ0ICsrKysrKysrKwogLi4uL2Zhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQgfCAgICAxICsKIFdlYkNvcmUvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5NCArKysrKysrKysrKysrKysr
KysrKwogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAyICstCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNTggKysrKysrKysrKysrCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKysrCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwogV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBXZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYkNvcmUvcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgICAgICAgICAgICAgICAgfCAgIDU5ICsrKysr
KysrKysrKwogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oICAgICAgICAgICAgICAg
ICAgfCAgIDQ4ICsrKysrKysrKysKIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
ICAgICAgICAgICAgICAgIHwgICAgNyArLQogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAgICAgICAgICAgICAgICAgfCAgICA1ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAgICAgICAgICAgICAgICAgICB8ICAgMjEgKysrLS0KIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgICAgICAgICAgICAgICAgICB8ICAgNDggKysrKysr
Ky0tLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwICAgICAgICAgICAg
fCAgICA3ICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCAgICAgICAgICAg
ICAgICB8ICAgIDMgKwogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwICAgICAgICAg
ICAgICAgICAgfCAgICA5ICsrLQogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmNwcCAgICAgICAgICAgfCAgICAzICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIDI4IGZpbGVzIGNoYW5nZWQsIDU4NyBpbnNl
cnRpb25zKCspLCA0NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2ljLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21S
ZWN0LmNzcwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNl
cy9ub2Rlc0Zyb21SZWN0LmpzCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDIzZWU5MGMuLjZlOTgyNjcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxMC0wNy0yMSBBbnRvbmlvIEdvbWVzICA8dG9uaWtpdG9vQHdlYmtpdC5v
cmc+ICwgR3JhY2UgS2xvYmEgIDxrbG9iYWdAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuaGFuY2UgdGhlIGhpdCB0ZXN0aW5nIHRv
IHRha2UgYSByZWN0YW5nbGUgaW5zdGVhZCBvZiBhIHBvaW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE5NworCisgICAgICAgICogZmFzdC9kb20v
bm9kZXNGcm9tUmVjdC1iYXNpYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMjcgIFN0ZXZl
IEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpl
cmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CmluZGV4IDliMDk5ODQuLmM5NzczNDEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9w
ZXJ0aWVzLWV4cGVjdGVkLnR4dApAQCAtNjI4LDYgKzYyOCw3IEBAIHdpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUuaXNTYW1lTm9kZSBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBl
LmlzU3VwcG9ydGVkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubG9va3Vw
TmFtZXNwYWNlVVJJIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubG9va3Vw
UHJlZml4IFtmdW5jdGlvbl0KK3dpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubm9kZXNGcm9tUmVj
dCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLm5vcm1hbGl6ZSBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZEVuYWJsZWQgW2Z1bmN0
aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRJbmRldGVybSBbZnVu
Y3Rpb25dCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJh
c2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFz
aWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjFl
YTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0
LWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91
bmQgZm9yIHJlY3QgWzUzLDcxXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQg
Zm9yIHJlY3QgWzUzLDcxXSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZv
ciByZWN0IFs1Myw3MV0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3Ig
cmVjdCBbNTMsNzFdLCBbMTAsMTBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFsxNTIsMTA1XSwgWzAsMTBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFsxNTIsMTA1XSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFsxNTIsMTA1XSwgWzEwLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3Ig
cmVjdCBbMTUzLDE5M10sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFsxNTMsMTkzXSwgWzIwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFsxNTMsMTkzXSwgWzAsMjBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciBy
ZWN0IFsxNDQsMTgzXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJl
Y3QgWzE0NCwxODNdLCBbMCwxXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVj
dCBbMTQ0LDE4M10sIFsxLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0
IFsxNDQsMTgzXSwgWzEsMV0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3Qg
Wzc3LDI0MF0sIFswLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFs3
NywyNDBdLCBbMTAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzc3
LDI0MF0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbNzcs
MjQwXSwgWzEwLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzks
MjEyXSwgWzAsMF0KK1BBU1MgQWxsIGNvcnJlY3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgWzM5LDIx
Ml0sIFswLDEwXQorUEFTUyBBbGwgY29ycmVjdCBub2RlcyBmb3VuZCBmb3IgcmVjdCBbMzksMjEy
XSwgWzEwLDBdCitQQVNTIEFsbCBjb3JyZWN0IG5vZGVzIGZvdW5kIGZvciByZWN0IFszOSwyMTJd
LCBbMTAsMTBdCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJl
Y3QtYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQwNjRhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1s
CkBAIC0wLDAgKzEsODkgQEAKKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5Eb2N1bWVudDo6bm9k
ZXNGcm9tUmVjdCB0ZXN0IC0gYnVnIDQwMTk3PC90aXRsZT4KKyAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4gQGltcG9ydCAicmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3NzIjsgPC9zdHlsZT4KKyAg
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cisg
IDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbm9kZXNGcm9tUmVjdC5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisgICAgZnVuY3Rpb24gcnVuVGVz
dCgpCisgICAgeworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgIH0KKworICAgICAgdmFyIGUgPSB7
fTsKKworICAgICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFjY2VzcyB0byBlbGVtZW50cworICAgICAg
ZVsnaHRtbCddID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXTsKKyAg
ICAgIFsnaDEnLCAnZDEnLCAnZDInLCAncDEnLCAncDInLCAncDMnLCAncDQnLCAncDUnLCAnc3Bh
bicsICdib2R5J10uZm9yRWFjaChmdW5jdGlvbihhKSB7CisgICAgICAgIGVbYV0gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICAgIH0pOworCisgICAgICB3aW5kb3cuc2Nyb2xsVG8o
MCwgMCk7CisKKyAgICAgIGNoZWNrKDUzLCA3MSwgMCwgMCwgW2UuYm9keV0pOworICAgICAgY2hl
Y2soNTMsIDcxLCAxMCwgMCwgW2UucDMsIGUuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAw
LCAxMCwgW2UuZDEsIGUuaDEsIGUuYm9keV0pOworICAgICAgY2hlY2soNTMsIDcxLCAxMCwgMTAs
IFtlLnAzLCBlLmQxLCBlLmgxLCBlLmJvZHldKTsKKworICAgICAgY2hlY2soMTUyLCAxMDUsIDAs
IDEwLCBbZS5wMywgZS5ib2R5XSk7CisgICAgICBjaGVjaygxNTIsIDEwNSwgMTAsIDAsIFtlLnA0
LCBlLmQxLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE1MiwgMTA1LCAxMCwgMTAsIFtlLnA0LCBl
LnAzLCBlLmQxLCBlLmJvZHldKTsKKworICAgICAgLy8gZS5wMSBpcyBpbnZpc2libGUgYW5kIHNo
b3VsZG4ndCBhcHBlYXI6CisgICAgICBjaGVjaygxNTMsMTkzLDAsMCxbZS5wNV0pOworICAgICAg
Ly8gTk9URTogW2UucDUsIGUuZDJdKSBzaG91bGQgYmUgcmV0dXJuZWQgaWYgd2UgZGlkIG5vdCBz
dG9wCisgICAgICAvLyBhdCBlLnA1LCB3aGljaCBmdWxseSBlbmNsb3NlcyB0aGUgdGFyZ2V0IHJl
Y3QuCisgICAgICBjaGVjaygxNTMsMTkzLDIwLDAsIFtlLnA1XSk7CisgICAgICBjaGVjaygxNTMs
MTkzLDAsMjAsIFtlLnA1LCBlLmJvZHldKTsKKworICAgICAgLy8gUHJlY2lzZSBwaXhlbCBjaGVj
a3M6CisgICAgICBjaGVjaygxNDQsIDE4MywgMCwgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2so
MTQ0LCAxODMsIDAsIDEsIFtlLnA1LCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDE0NCwgMTgzLCAx
LCAwLCBbZS5kMiwgZS5ib2R5XSk7CisgICAgICBjaGVjaygxNDQsIDE4MywgMSwgMSwgW2UucDUs
IGUuZDIsIGUuYm9keV0pOworICAgICAgY2hlY2soNzcsIDI0MCwgMCwgMCwgW2UucDJdKTsKKyAg
ICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAwLCBbZS5wMl0pOworICAgICAgY2hlY2soNzcsIDI0MCwg
MCwgMTAsIFtlLnA1LCBlLnNwYW4sIGUucDJdKTsKKyAgICAgIGNoZWNrKDc3LCAyNDAsIDEwLCAx
MCwgW2UucDUsIGUuc3BhbiwgZS5wMl0pOworCisgICAgICAvLyBFeHBhbmRpbmcgYXJlYSBjaGVj
a3M6CisgICAgICBjaGVjaygzOSwgMjEyLCAwLCAgMCwgW2UuYm9keV0pOworICAgICAgY2hlY2so
MzksIDIxMiwgMCwgMTAsIFtlLmQyLCBlLnAyLCBlLmJvZHldKTsKKyAgICAgIGNoZWNrKDM5LCAy
MTIsIDEwLCAwLCBbZS5wNSwgZS5ib2R5XSk7CisgICAgICBjaGVjaygzOSwgMjEyLCAxMCwgMTAs
IFtlLnA1LCBlLmQyLCBlLnAyLCBlLmJvZHldKTsKKworICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0KKworICAgIHdpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworICA8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKyAgPGgxIGlkPSJoMSI+PC9oMT4KKyAgPGRpdiBpZD0i
ZDEiPjwvZGl2PgorCisgIDwhLS0gZmxvYXRlZCBlbGVtZW50IC0tPgorICA8ZGl2IGlkPSJkMiIg
c3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj4KKworICA8IS0tIGhpZGRlbiBlbGVtZW50IC0tPgor
ICA8cCBpZD0icDEiIHN0eWxlPSJmbG9hdDogbGVmdDsgdmlzaWJpbGl0eTogaGlkZGVuIj48L3A+
CisKKyAgPHAgaWQ9InAyIiBzdHlsZT0iY2xlYXI6IGxlZnQiPjxzcGFuIGlkPSJzcGFuIj48L3Nw
YW4+PC9wPgorCisgIDwhLS0gYWJzb2x1dGUgcG9zaXRpb24gLS0+CisgIDxwIGlkPSJwMyIgc3R5
bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6IDEwcHg7IGxlZnQ6NTBweDsgaGVpZ2h0OjUwcHg7
Ij48L3A+CisKKyAgPCEtLSBmaXhlZCBwb3NpdGlvbiAtLT4KKyAgPHAgaWQ9InA0IiBzdHlsZT0i
cG9zaXRpb246IGZpeGVkOyB0b3A6IDMwcHg7IGxlZnQ6IDE1MHB4OyBoZWlnaHQ6IDUwcHg7IGJh
Y2tncm91bmQtY29sb3I6IGJsdWU7Ij48L3A+CisKKyAgPCEtLSByZWxhdGl2ZSBwb3NpdGlvbiAt
LT4KKyAgPHAgaWQ9InA1IiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDogLTEwMHB4OyBs
ZWZ0OiAzMHB4OyBtYXJnaW4tYm90dG9tOiAtNzBweDsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW4i
PjwvcD4KKworICA8c3BhbiBpZD0iY29uc29sZSI+PC9zcGFuPgorICA8c2NyaXB0IHNyYz0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21S
ZWN0LmNzcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmNz
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU2ZmMwCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuY3Nz
CkBAIC0wLDAgKzEsNDQgQEAKK2JvZHkgeworICBtYXJnaW46IDhweDsKKyAgcGFkZGluZzogMDsK
K30KKworaDEsIGRpdiwgcCwgaWZyYW1lIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAx
MDBweDsKKyAgaGVpZ2h0OiAzMHB4OworICBib3JkZXI6IDNweCBzb2xpZCBibGFjazsKKyAgcGFk
ZGluZzogMTBweDsKKyAgbWFyZ2luOiAxMHB4OworfQorCisjc3BhbiB7CisgIGRpc3BsYXk6IGJs
b2NrOworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMzBweDsKKyAgYm9yZGVyOiAzcHggc29s
aWQgYmxhY2s7CisgIHBhZGRpbmc6IDEwcHg7CisgIG1hcmdpbjogMTBweDsKKyAgZGlzcGxheTog
aW5saW5lLWJsb2NrOworfQorCisjaWZyYW1lMSB7CisgIGhlaWdodDogMTAwcHg7CisgIG1hcmdp
bi10b3A6IDYwcHg7Cit9CisKKyNwNiB7CisgIGhlaWdodDogNTBweDsKKyAgbWFyZ2luLXRvcDog
MzBweDsKK30KKworI3RyYW5zZiB7CisgIG1hcmdpbi10b3A6IDYwcHg7CisgIC13ZWJraXQtdHJh
bnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKK30KKworI2RlY2ltYWwgeworICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgIGxlZnQ6IDAuNXB4OworICB0b3A6IDUwLjVweDsKK30KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vcmVzb3VyY2VzL25vZGVzRnJvbVJlY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYmUwNmM2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3Jlc291cmNlcy9ub2Rlc0Zyb21SZWN0LmpzCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb250cmlidXRvcnM6CisgKiAgICAgKiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Vi
a2l0Lm9yZz4KKyAqKi8KKworZnVuY3Rpb24gY2hlY2soeCwgeSwgaFBhZGRpbmcsIHZQYWRkaW5n
LCBsaXN0KQoreworICAvKgorICAgIE5vZGVMaXN0IG5vZGVzRnJvbVJlY3QoaW4gbG9uZyB4LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9uZyB5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gbG9uZyBoUGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IGxvbmcgdlBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGln
bm9yZUNsaXBwaW5nKTsKKyAgKi8KKyAgdmFyIG5vZGVzID0gZG9jdW1lbnQubm9kZXNGcm9tUmVj
dCh4LCB5LCBoUGFkZGluZywgdlBhZGRpbmcsIHRydWUgLyogaWdub3JlQ2xpcHBpbmcgKi8pOwor
CisgIGlmIChub2Rlcy5sZW5ndGggIT0gbGlzdC5sZW5ndGgpIHsKKyAgICB0ZXN0RmFpbGVkKCJE
aWZmZXJlbnQgbnVtYmVyIG9mIG5vZGVzIGZvciByZWN0IiArCisgICAgICAgICAgICAgICJbIiAr
IHggKyAiLCIgKyB5ICsgIl0sICIgKworICAgICAgICAgICAgICAiWyIgKyBoUGFkZGluZyArICIs
IiArIHZQYWRkaW5nICsgIl06ICciICsgbGlzdC5sZW5ndGggKyAiJyB2cyAnIiArIG5vZGVzLmxl
bmd0aCArICInIik7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
b2Rlcy5sZW5ndGg7IGkrKykgeworICAgIGlmIChub2Rlc1tpXSAhPSBsaXN0W2ldKSB7CisgICAg
ICB0ZXN0RmFpbGVkKCJVbmV4cGVjdGVkIG5vZGUgIyIgKyBpICsgIiBmb3IgcmVjdCAiICsKKyAg
ICAgICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsgeSArICJdLCAiICsKKyAgICAgICAgICAgICAg
ICAiWyIgKyBoUGFkZGluZyArICIsIiArIHZQYWRkaW5nICsgIl0iICsgIiAtICIgKyBub2Rlc1tp
XSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgdGVzdFBhc3NlZCgiQWxsIGNvcnJl
Y3Qgbm9kZXMgZm91bmQgZm9yIHJlY3QgIiAgKworICAgICAgICAgICAiWyIgKyB4ICsgIiwiICsg
eSArICJdLCAiICsKKyAgICAgICAgICAgIlsiICsgaFBhZGRpbmcgKyAiLCIgKyB2UGFkZGluZyAr
ICJdIik7Cit9CisKK2Z1bmN0aW9uIGdldENlbnRlckZvcihlbGVtZW50KQoreworICB2YXIgcmVj
dCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgIHJldHVybiB7IHggOiBwYXJz
ZUludCgocmVjdC5sZWZ0ICsgcmVjdC5yaWdodCkgLyAyKSAsIHkgOiBwYXJzZUludCgocmVjdC50
b3AgKyByZWN0LmJvdHRvbSkgLyAyKX07Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggNDQ5
Mzc5Zi4uMmU5YTU4NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CkBAIC02MjgsNiArNjI4LDcgQEAgd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pc1NhbWVO
b2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaXNTdXBwb3J0ZWQgW2Z1
bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5sb29rdXBOYW1lc3BhY2VVUkkgW2Z1
bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5sb29rdXBQcmVmaXggW2Z1bmN0aW9u
XQord2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5ub2Rlc0Zyb21SZWN0IFtmdW5jdGlvbl0KIHdp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUubm9ybWFsaXplIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUucXVlcnlDb21tYW5kRW5hYmxlZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9j
dW1lbnQucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZEluZGV0ZXJtIFtmdW5jdGlvbl0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTUwZDBlMy4u
NTQzNTU5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw5NyBAQAorMjAxMC0wNy0yMSBHcmFjZSBLbG9iYSAgPGtsb2JhZ0Bn
bWFpbC5jb20+ICwgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuaGFuY2UgdGhlIGhp
dCB0ZXN0aW5nIHRvIHRha2UgYSByZWN0YW5nbGUgaW5zdGVhZCBvZiBhIHBvaW50CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE5NworCisgICAgICAg
IFRoZSBwcmltYXJ5IGdvYWwgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gcHJvdmlkZSBtZWNoYW5pc21z
IGZvciBtb3JlIHByZWNpc2UgdGFwCisgICAgICAgIGFjdGlvbnMgYnkgdGhlIHVzZXJzIG9uIG1v
YmlsZSBkZXZpY2VzLgorCisgICAgICAgIFBhdGNoIGV4dGVuZHMgdGhlIGhpdCB0ZXN0aW5nIHN5
c3RlbSB0byB3b3JrIGNvbnNpZGVyaW5nIGEgcmVjdGFuZ3VsYXIgYXJlYQorICAgICAgICBhcyBp
bnB1dCBpbnN0ZWFkIG9mIGEgcG9pbnQsIHdoZW4gYXBwbGljYWJsZS4gRm9yIHRoYXQsIHRoZSBI
aXRUZXN0UmVzdWx0IGNsYXNzCisgICAgICAgIHdhcyBtb2RpZmllZCB0byB0YWtlIGEgcGFkZGlu
ZyAoSW50U2l6ZSkuIFRoZSBwYWRkaW5nIHNwZWNpZmllcyBhIGZ1enp5IHJhbmdlIGZvcgorICAg
ICAgICBhY2NlcHRpbmcgaW5wdXQgZXZlbnRzIGluIHBpeGVscyBjb29yZGluYXRlcyBmb3IgYm90
aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAorICAgICAgICBvcmllbnRhdGlvbnMuIEluIG90aGVy
IHdvcmRzLCBpdCB0ZWxscyBob3cgbXVjaCB0byBleHBhbmQgdGhlIHNlYXJjaCByZWN0CisgICAg
ICAgIGFyb3VuZCBhIHN1cHBvc2VkIHRvdWNoIHBvaW50LgorCisgICAgICAgIElmIGl0IGlzIG5v
bi1wb3NpdGl2ZSBwYWRkaW5nIChlLmcuICgtMSwgLTEpLCAoNSwgLTEpLCAoMCwgMCkpLCBoaXQg
dGVzdGluZyB3aWxsIGJlaGF2aW9yCisgICAgICAgIGFzIHRoZSBjdXJyZW50IHBvaW50IGJhc2Vk
IGhpdCB0ZXN0aW5nOiBtZXRob2RzIGFyZSBuby1vcCdlZCB0byBub3QgcmVncmVzcyBpdCBwZXJm
b3JtYW5jZS13aXNlCisgICAgICAgIHNpbmNlIGl0IGlzIHRoZSBjb21tb24gYmVoYXZpb3IuIFdo
ZW4gcG9zaXRpdmUgcGFkZGluZyBpcyBwcm92aWRlZCwgdGhlIEhpdFRlc3RSZXN1bHQgY2xhc3Mg
d2lsbAorICAgICAgICBrZWVwIHJlY29yZCBvZiBhbGwgbm9kZXMgdGhhdCBpbnRlcnNlY3QgdGhl
IGJ1aWx0IHVwIHRlc3QgYXJlYS4gVGhlIGxvZ2ljIHdpbGwgY29udGludWUgc2VhcmNoaW5nCisg
ICAgICAgIHdoZW4gaXQgZmluZHMgYSBjYW5kaWRhdGUgdW50aWwgdGhlIGhpdCB0ZXN0IGFyZWEg
aXMgZnVsbHkgZW5jbG9zZWQgYnkgdGhlIGJvdW5kYXJpZXMgb2YgYSBjYW5kaWRhdGUuCisgICAg
ICAgIFRoZSByZXN1bHQgd2lsbCBiZSBhIGxpc3Qgb2Ygbm9kZXMgaW4gdGhlIHotb3JkZXIgdGhl
eSBhcmUgaGl0LXRlc3RlZC4gQ2FsbGVyIHdpbGwgZGVjaWRlIGhvdworICAgICAgICB0byBwcm9j
ZXNzIHRoZW0uCisKKyAgICAgICAgSW4gb3JkZXIgdG8gZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5
LCB0aGUgcGF0Y2g6CisKKyAgICAgICAgLSBBZGRzIGEgbm9kZXNGcm9tUmVjdCBtZXRob2QgdG8g
dGhlIERvY3VtZW50IGNsYXNzLCBleHBvc2luZyB0aGUgZnVuY2lvbmFsaXR5CisgICAgICAgIHRv
IHRoZSBET00uIE1ldGhvZCByZXR1cm5zIGEgTm9kZUxpc3Qgd2l0aCBhbGwgbm9kZXMgdGhhdCBp
bnRlcnNlY3QgdGhlIGdpdmVuCisgICAgICAgIGhpdC10ZXN0ZWQgYXJlYS4KKyAgICAgICAgLSBF
eHRlbmRzIGhpdFRlc3RSZXN1bHRBdFBvaW50IG1ldGhvZCBvZiB0aGUgRXZlbnRIYW5kbGVyIHdp
dGggYW4gZXh0cmEgJ3BhZGRpbmcnCisgICAgICAgIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBJ
bnRTaXplKC0xLCAtMSkuIFRoZSByZWN0LWJhc2VkIGhpdCB0ZXN0IGlzIHBlcmZvcm1lZCB3aGVu
IGEKKyAgICAgICAgbm9uLW5lZ2F0aXZlIHBhZGRpbmcgaXMgcGFzc2VkIGluLgorCisgICAgICAg
IFRlc3Q6IGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3QpOiBUaGlzIG1ldGhvZCBleHBvc2VzIHRoZSBy
ZWN0IGJhc2VkIGZ1bmNpb25hbGl0eSB0bworICAgICAgICB0aGUgRE9NLiBJdCB3b3JrcyBzaW1p
bGFybHkgdG8gZWxlbWVudEZyb21Qb2ludCwgaG93ZXZlciByZWNlaXZpbmcgYSByZWN0YW5ndWxh
ciBhcmVhCisgICAgICAgIGFzIGlucHV0IGluc3RlYWQgb2YgYSBwb2ludCwgYW5kIHJldHVybmlu
ZyBhIHotaW5kZXggb3JkZXJlZCBsaXN0IG9mIG5vZGVzIChub3QgZWxlbWVudHMpCisgICAgICAg
IHdob3NlIGFyZWEgaW50ZXJzZWN0IHRoZSBoaXQgdGVzdCByZWN0LgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOiBEaXR0by4KKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KTogVGhlIGZ1bmNpb25hbGl0eSBpcyBhbHNvIGV4
cG9zZWQgdGhyb3VnaCB0aGlzCisgICAgICAgIG1ldGhvZC4gUGF0Y2ggYWRkcyBhIGFkZGl0aW9u
YWwgSW50U2l6ZSBwYXJhbWV0ZXIgdG8gd29yayBhcyB0aGUgcGFkZGluZyBhcmVhLCBidWlsZGlu
ZyB1cAorICAgICAgICB0aGUgaGl0IHRlc3QgcmVjdC4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KTogUmVjdCBiYXNl
ZCBoaXQgdGVzdCBjb25zdHJ1Y3Rvci4gUmVjZWl2ZXMgYQorICAgICAgICBwYWRkaW5nIEludFNp
emUgYXMgcGFyYW1ldGVyLiBJdCBjYW4gYmUgKDAsMCkuCisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjpvcGVyYXRvcj0pOiBNb2RpZmllZCB0byBhc3NpZ24gdGhlIG1fcmVjdEJhc2Vk
VGVzdFJlc3VsdCBhcyB3ZWxsLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YXBw
ZW5kKTogTWVyZ2UgdG8gSGl0VGVzdFJlc3VsdCBvYmplY3RzIGluIGEgd2F5IHRoYXQgdGhlCisg
ICAgICAgIGxpc3Qgbm9kZSdzIG9mIGJvdGggb2JqZWN0cyBnZXQgYW1lbmRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQpOiBB
ZGRzIGEgZ2l2ZW4gTm9kZSB0byB0aGUgbGlzdCBvZgorICAgICAgICBoaXQgbm9kZXMuCisgICAg
ICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQ6OnBhZGRpbmcpOiBSZXR1cm5zIHRoZSBwYWRkaW5nIGFzIGFuIEludFNpemUuCisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojppc1JlY3RCYXNlZFRlc3QpOiBSZXR1cm5z
IGlmIHRoZSBIaXRUZXN0UmVzdWx0IGlzIHJlY3QgYmFzZWQgb3Igbm90LgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdDo6LnJlY3RCYXNlZFRlc3RSZXN1bHQpOiBSZXR1cm5zIHRoZSBs
aXN0IG5vZGVzIGhpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OnJlY3RGcm9t
UG9pbnQpOiBSZXR1cm5zIHRoZSBoaXQgdGVzdCByZWN0IGdpdmVuIHRoZSBoaXQgdGVzdCBwb2lu
dAorICAgICAgICBhbmQgcGFkZGluZy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6CisgICAgICAgICogcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpu
b2RlQXRQb2ludCk6IE1ldGhvZCBpcyBtb2RpZmllZCB0byBzdXBwb3J0IHJlY3QgYmFzZWQgaGl0
IHRlc3QgZXh0ZW5zaW9uLgorICAgICAgICBOb3cgaXQgbm90IGp1c3QgY2hlY2tzIGlmIHRoZSBi
b3VuZGFyeSBvZiB0aGUgbm9kZSBiZWluZyBoaXQtdGVzdGVkIGNvbnRhaW5zIGEgaGl0IHRlc3Qg
cG9pbnQsIGJ1dAorICAgICAgICBpbnN0ZWFkIGl0IGNoZWNrcyBpZiB0aGUgYm91bmRhcnkgb2Yg
dGhlIG5vZGUgaW50ZXJzZWN0cyBhIGhpdCB0ZXN0IHJlY3QuIEl0IGlzIGltcGxlbWVudGVkIHNv
CisgICAgICAgIHRoYXQgdGhlIGNvbW1vbiBjYXNlIChwb2ludCBiYXNlZCBoaXQgdGVzdCkgd29y
a3MgYXMgcHJldmlvdXNseS4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6IERpdHRvLgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1
bW5zKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpu
b2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBv
aW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KTogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KTogRGl0dG8uCisKIDIwMTAtMDctMjcgIFBy
YW5hdiBLZWRpYSAgPHByYW5hdmtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgppbmRleCBkZmJkMTUwLi4xOWU2OWQ1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTIxNyw3
ICsyMTcsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9sbEV2ZW50RXYK
IF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTZoYW5kbGVXaGVlbEV2ZW50RVJOU18xOFBsYXRm
b3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdzY3JvbGxSZWN1cnNp
dmVseUVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9k
ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoYW5kbGVUZXh0SW5wdXRFdmVudEVSS05T
XzZTdHJpbmdFUE5TXzVFdmVudEViYgotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRl
c3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0Vq
CitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU184
SW50UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJzRWpSS05TXzdJbnRTaXplRQogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NFdmVudEVSS05TXzE4UGxhdGZv
cm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyM2hhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjI3Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkRXYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxYzBl
NTdjLi44NDhhOWY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xMTksNiArMTE5LDcgQEAKICNpbmNsdWRlICJT
ZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCIKICNp
bmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2lu
Y2x1ZGUgIlRleHRFdmVudC5oIgpAQCAtMTAwNCw2ICsxMDA1LDYzIEBAIEtVUkwgRG9jdW1lbnQ6
OmJhc2VVUkkoKSBjb25zdAogICAgIHJldHVybiBtX2Jhc2VVUkw7CiB9CiAKKy8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGRpc2N1c3MgdGhlIERPTSBBUEkgaGVyZSBhdCBzb21lIHBvaW50LiBJZGVhczoK
Ky8vICogbWFraW5nIGl0IHJlY2VpdmUgYSByZWN0IGFzIHBhcmFtZXRlciwgaS5lLiBub2Rlc0Zy
b21SZWN0KHgsIHksIHcsIGgpOworLy8gKiBtYWtpbmcgaXQgcmVjZWl2ZSB0aGUgZXhwYWRpbmcg
c2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBzZXBhcmF0ZWx5LAorLy8gICBpLmUuIG5vZGVzRnJvbVJl
Y3QoeCwgeSwgdG9wU2l6ZSwgcmlnaHRTaXplLCBib3R0b21TaXplLCBsZWZ0U2l6ZSk7CitQYXNz
UmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9kZXNGcm9tUmVjdChpbnQgY2VudGVyWCwgaW50
IGNlbnRlclksIHVuc2lnbmVkIGhQYWRkaW5nLCB1bnNpZ25lZCB2UGFkZGluZywgYm9vbCBpZ25v
cmVDbGlwcGluZykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU2hhcmUgY29kZSBiZXR3ZWVuIHRo
aXMsIGVsZW1lbnRGcm9tUG9pbnQgYW5kIGNhcmV0UmFuZ2VGcm9tUG9pbnQuCisgICAgaWYgKCFy
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWVWaWV3LT5wYWdlWm9v
bUZhY3RvcigpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9p
bnQoY2VudGVyWCAqIHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFgoKSwgY2VudGVyWSAqIHpv
b21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOworICAgIEludFNpemUgcGFkZGluZyhoUGFk
ZGluZywgdlBhZGRpbmcpOworCisgICAgaW50IHR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9u
bHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworCisgICAgLy8gV2hlbiBpZ25vcmVDbGlwcGlu
ZyBpcyBmYWxzZSwgdGhpcyBtZXRob2QgcmV0dXJucyBudWxsIGZvciBjb29yZGluYXRlcyBvdXRz
aWRlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICBpZiAoaWdub3JlQ2xpcHBpbmcpCisgICAgICAgIHR5
cGUgfD0gSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nOworICAgIGVsc2UgaWYgKCFmcmFt
ZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmludGVyc2VjdHMoSW50UmVjdChwb2ludCwgcGFk
ZGluZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3Qo
dHlwZSk7CisKKyAgICAvLyBQYXNzaW5nIGEgemVybyBwYWRkaW5nIHdpbGwgdHJpZ2dlciBhIHJl
Y3QgaGl0IHRlc3QsIGhvd2V2ZXIgZm9yIHRoZSBwdXJwb3NlcyBvZiBub2Rlc0Zyb21SZWN0LAor
ICAgIC8vIHdlIHNwZWNpYWwgaGFuZGxlIHRoaXMgY2FzZSBpbiBvcmRlciB0byByZXR1cm4gYSB2
YWxpZCBOb2RlTGlzdC4KKyAgICBpZiAocGFkZGluZy5pc1plcm8oKSkgeworICAgICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7CisgICAgICAgIHJldHVybiBoYW5kbGVaZXJvUGFkZGlu
ZyhyZXF1ZXN0LCByZXN1bHQpOworICAgIH0KKworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBv
aW50LCBwYWRkaW5nKTsKKyAgICByZW5kZXJWaWV3KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVz
dCwgcmVzdWx0KTsKKworICAgIHJldHVybiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q6OmFkb3B0KHJl
c3VsdC5yZWN0QmFzZWRUZXN0UmVzdWx0KCkpOworfQorCitQYXNzUmVmUHRyPE5vZGVMaXN0PiBE
b2N1bWVudDo6aGFuZGxlWmVyb1BhZGRpbmcoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICByZW5kZXJWaWV3KCktPmxheWVy
KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKworICAgIE5vZGUqIG5vZGUgPSByZXN1bHQu
aW5uZXJOb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5v
ZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8
Tm9kZT4gPiBsaXN0OworICAgIGxpc3QuYWRkKG5vZGUpOworICAgIHJldHVybiBTdGF0aWNIYXNo
U2V0Tm9kZUxpc3Q6OmFkb3B0KGxpc3QpOworfQorCiBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVu
dEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNoYXJlIGNv
ZGUgYmV0d2VlbiB0aGlzIGFuZCBjYXJldFJhbmdlRnJvbVBvaW50LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZWU0NmY1
My4uOGU0MmFhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBIVE1MTWFwRWxlbWVudDsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKICAgICBj
bGFzcyBIaXRUZXN0UmVxdWVzdDsKKyAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNz
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiAgICAgY2xhc3MgSW50UG9pbnQ7CiAgICAgY2xhc3Mg
RE9NV3JhcHBlcldvcmxkOwpAQCAtMzAyLDYgKzMwMywxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdDsKICAgICBib29sIGNv
bnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJ
ZCkgeyByZXR1cm4gbV9kdXBsaWNhdGVJZHMuY29udGFpbnMoZWxlbWVudElkLmltcGwoKSk7IH0K
IAorICAgIC8qKgorICAgICAqIFJldHJpZXZlIGFsbCBub2RlcyB0aGF0IGludGVyc2VjdCBhIHJl
Y3QgaW4gdGhlIHdpbmRvdydzIGRvY3VtZW50LCB1bnRpbCBpdCBpcyBmdWxseSBlbmNsb3NlZCBi
eQorICAgICAqIHRoZSBib3VuZGFyaWVzIG9mIG5vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0g
Y2VudGVyWCB4IHJlZmVyZW5jZSBmb3IgdGhlIHJlY3RhbmdsZSBpbiBDU1MgcGl4ZWxzCisgICAg
ICogQHBhcmFtIGNlbnRlclkgeSByZWZlcmVuY2UgZm9yIHRoZSByZWN0YW5nbGUgaW4gQ1NTIHBp
eGVscworICAgICAqIEBwYXJhbSBoUGFkZGluZyBIb3cgbXVjaCB0byBleHBhbmQgdGhlIHJlY3Rh
bmdsZSBob3Jpem9udGFsbHkKKyAgICAgKiBAcGFyYW0gdlBhZGRpbmcgSG93IG11Y2ggdG8gZXhw
YW5kIHRoZSByZWN0YW5nbGUgdmVydGljYWxseQorICAgICAqIEBwYXJhbSBpZ25vcmVDbGlwcGlu
ZyB3aGV0aGVyIG9yIG5vdCB0byBpZ25vcmUgdGhlIHJvb3Qgc2Nyb2xsIGZyYW1lIHdoZW4gcmV0
cmlldmluZyB0aGUgZWxlbWVudC4KKyAgICAgKiAgICAgICAgSWYgZmFsc2UsIHRoaXMgbWV0aG9k
IHJldHVybnMgbnVsbCBmb3IgY29vcmRpbmF0ZXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQuCisg
ICAgICovCisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChpbnQgY2VudGVy
WCwgaW50IGNlbnRlclksIHVuc2lnbmVkIGhQYWRkaW5nLCB1bnNpZ25lZCB2UGFkZGluZywgYm9v
bCBpZ25vcmVDbGlwcGluZykgY29uc3Q7CiAgICAgRWxlbWVudCogZWxlbWVudEZyb21Qb2ludChp
bnQgeCwgaW50IHkpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2VGcm9t
UG9pbnQoaW50IHgsIGludCB5KTsKIApAQCAtMTA1MCw2ICsxMDYzLDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGVucXVldWVQb3BzdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzdGF0ZU9iamVjdCk7CiAgICAgdm9pZCBwZW5kaW5nRXZlbnRUaW1lckZpcmVkKFRpbWVy
PERvY3VtZW50PiopOwogCisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gaGFuZGxlWmVyb1BhZGRp
bmcoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JikgY29uc3Q7CisKICAgICBP
d25QdHI8Q1NTU3R5bGVTZWxlY3Rvcj4gbV9zdHlsZVNlbGVjdG9yOwogICAgIGJvb2wgbV9kaWRD
YWxjdWxhdGVTdHlsZVNlbGVjdG9yOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5pZGwgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggOTU5OWQ3Ni4uM2FlNTUxZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbApAQCAtMTg2LDYgKzE4NiwxMSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRdIERPTVN0cmlu
ZyBkZWZhdWx0Q2hhcnNldDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFN0cmluZ1RvPVVuZGVmaW5lZF0gRE9NU3RyaW5nIHJlYWR5U3RhdGU7CiAKKworICAgICAgICBO
b2RlTGlzdCAgICAgICAgICAgbm9kZXNGcm9tUmVjdChpbiBsb25nIHgsIGluIGxvbmcgeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5zaWduZWQgbG9uZyBo
UGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5z
aWduZWQgbG9uZyB2UGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiBpZ25vcmVDbGlwcGluZyk7CiAgICAgICAgIEVsZW1lbnQgICAgICAg
ICAgICBlbGVtZW50RnJvbVBvaW50KGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKICAgICAgICAgUmFu
Z2UgICAgICAgICAgICAgIGNhcmV0UmFuZ2VGcm9tUG9pbnQoaW4gbG9uZyB4LCBpbiBsb25nIHkp
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDJiMTBjNmQuLmUxMGEzYTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC04NjMsOSArODYzLDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmFsbG93REhU
TUxEcmFnKGJvb2wmIGZsYWdESFRNTCwgYm9vbCYgZmxhZ1VBKSBjb25zdAogfQogI2VuZGlmIC8v
IEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgCi1IaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6
aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGFsbG93U2hh
ZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZywgSGl0VGVzdFNjcm9sbGJhcnMgdGVzdFNj
cm9sbGJhcnMsIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSkKK0hp
dFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIGJvb2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5n
LCBIaXRUZXN0U2Nyb2xsYmFycyB0ZXN0U2Nyb2xsYmFycywgSGl0VGVzdFJlcXVlc3Q6OkhpdFRl
c3RSZXF1ZXN0VHlwZSBoaXRUeXBlLCBjb25zdCBJbnRTaXplJiBwYWRkaW5nKQogewotICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2lu
dCwgcGFkZGluZyk7CiAgICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICBpZiAoaWdub3JlQ2xpcHBpbmcpCkBAIC04ODYsNyArODg2
LDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bHRBdFBvaW50KGNv
bnN0IEludFBvaW50JiBwb2ludCwgYm9vbCBhbGwKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsKICAgICAgICAgSW50UG9pbnQgd2lkZ2V0
UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKS54KCkgKyB2aWV3LT5zY3JvbGxYKCkgLSByZW5kZXJX
aWRnZXQtPmJvcmRlckxlZnQoKSAtIHJlbmRlcldpZGdldC0+cGFkZGluZ0xlZnQoKSwgCiAgICAg
ICAgICAgICByZXN1bHQubG9jYWxQb2ludCgpLnkoKSArIHZpZXctPnNjcm9sbFkoKSAtIHJlbmRl
cldpZGdldC0+Ym9yZGVyVG9wKCkgLSByZW5kZXJXaWRnZXQtPnBhZGRpbmdUb3AoKSk7Ci0gICAg
ICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3aWRnZXRQb2ludCk7CisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3aWRnZXRQb2ludCwgcGFkZGlu
Zyk7CiAgICAgICAgIGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChI
aXRUZXN0UmVxdWVzdChoaXRUeXBlKSwgd2lkZ2V0SGl0VGVzdFJlc3VsdCk7CiAgICAgICAgIHJl
c3VsdCA9IHdpZGdldEhpdFRlc3RSZXN1bHQ7CiAKQEAgLTkwOCw3ICs5MDgsNyBAQCBIaXRUZXN0
UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQm
IHBvaW50LCBib29sIGFsbAogICAgICAgICAgICAgaWYgKHJlc3VsdFZpZXcgJiYgbWFpblZpZXcp
IHsKICAgICAgICAgICAgICAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IHJlc3VsdFZpZXctPmNv
bnRlbnRzVG9XaW5kb3cocmVzdWx0LnBvaW50KCkpOwogICAgICAgICAgICAgICAgIEludFBvaW50
IG1haW5GcmFtZVBvaW50ID0gbWFpblZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQp
OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhp
dFRlc3RSZXN1bHRBdFBvaW50KG1haW5GcmFtZVBvaW50LCBhbGxvd1NoYWRvd0NvbnRlbnQsIGln
bm9yZUNsaXBwaW5nKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFk
b3dDb250ZW50LCBpZ25vcmVDbGlwcGluZywgdGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHBhZGRp
bmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4
IGE0NzMwYmIuLjI0MjYwMWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTEwNiw3ICsxMDYsMTAgQEAg
cHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQo
Y29uc3QgRmxvYXRRdWFkJik7CiAKLSAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRBdFBv
aW50KGNvbnN0IEludFBvaW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3Jl
Q2xpcHBpbmcgPSBmYWxzZSwgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFycyA9IERvbnRIaXRU
ZXN0U2Nyb2xsYmFycywgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBl
ID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7Cisg
ICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJv
b2wgYWxsb3dTaGFkb3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0U2Nyb2xsYmFycyBzY3Jv
bGxiYXJzID0gRG9udEhpdFRlc3RTY3JvbGxiYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBl
ID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHBhZGRp
bmcgPSBJbnRTaXplKCkpOwogCiAgICAgYm9vbCBtb3VzZVByZXNzZWQoKSBjb25zdCB7IHJldHVy
biBtX21vdXNlUHJlc3NlZDsgfQogICAgIHZvaWQgc2V0TW91c2VQcmVzc2VkKGJvb2wgcHJlc3Nl
ZCkgeyBtX21vdXNlUHJlc3NlZCA9IHByZXNzZWQ7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNw
cAppbmRleCAzZTEzNDJmLi42MWNkNTI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBA
IC0xMTMsOSArMTEzLDExIEBAIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIEludFJlY3QodHgsIHR5LCBt
X3dpZHRoLCBtX2hlaWdodCkuY29udGFpbnMoeCwgeSkpIHsKKyAgICBJbnRSZWN0IGJvdW5kc1Jl
Y3QgPSBJbnRSZWN0KHR4LCB0eSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGlmICh2aXNpYmxl
VG9IaXRUZXN0aW5nKCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBv
aW50KHgsIHkpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIo
KS0+bm9kZSgpLCB4LCB5LCBib3VuZHNSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAK
aW5kZXggNTA5MzNjNi4uZGQ5NmUwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAK
QEAgLTQ5LDkgKzQ5LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBIaXRUZXN0UmVz
dWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICA6IG1fcG9pbnQo
cG9pbnQpCiAgICAgLCBtX2lzT3ZlcldpZGdldChmYWxzZSkKKyAgICAsIG1faXNSZWN0QmFzZWQo
ZmFsc2UpCiB7CiB9CiAKK0hpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9p
bnQmIGNlbnRlclBvaW50LCBjb25zdCBJbnRTaXplJiBwYWRkaW5nKQorICAgIDogbV9wb2ludChj
ZW50ZXJQb2ludCkKKyAgICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQoreworICAgIC8vIElmIGEg
emVybyBwYWRkaW5nIGlzIHBhc3NlZCBpbiBvciBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IGlzIG5l
Z2F0aXZlLCB0aGVuIGl0CisgICAgLy8gaXMgbm90IGEgdmFsaWQgcGFkZGluZyBhbmQgaGVuY2Ug
bm90IGEgcmVjdCBiYXNlZCBoaXQgdGVzdC4KKyAgICBtX2lzUmVjdEJhc2VkID0gIShwYWRkaW5n
LmlzWmVybygpIHx8IChwYWRkaW5nLndpZHRoKCkgPCAwIHx8IHBhZGRpbmcuaGVpZ2h0KCkgPCAw
KSk7CisgICAgbV9wYWRkaW5nID0gbV9pc1JlY3RCYXNlZCA/IHBhZGRpbmcgOiBJbnRTaXplKCk7
Cit9CisKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYg
b3RoZXIpCiAgICAgOiBtX2lubmVyTm9kZShvdGhlci5pbm5lck5vZGUoKSkKICAgICAsIG1faW5u
ZXJOb25TaGFyZWROb2RlKG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpKQpAQCAtNjEsNiArNzIs
MTIgQEAgSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBv
dGhlcikKICAgICAsIG1fc2Nyb2xsYmFyKG90aGVyLnNjcm9sbGJhcigpKQogICAgICwgbV9pc092
ZXJXaWRnZXQob3RoZXIuaXNPdmVyV2lkZ2V0KCkpCiB7CisgICAgLy8gT25seSBjb3B5IHRoZSBw
YWRkaW5nIGFuZCBMaXN0SGFzaFNldCBpbiBjYXNlIG9mIHJlY3QgaGl0IHRlc3QuCisgICAgLy8g
Q29weWluZyB0aGUgbGF0ZXIgaXMgcmF0aGVyIGV4cGVuc2l2ZS4KKyAgICBpZiAoKG1faXNSZWN0
QmFzZWQgPSBvdGhlci5pc1JlY3RCYXNlZFRlc3QoKSkpIHsKKyAgICAgICAgbV9wYWRkaW5nID0g
b3RoZXIucGFkZGluZygpOworICAgICAgICBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgPSBvdGhlci5y
ZWN0QmFzZWRUZXN0UmVzdWx0KCk7CisgICAgfQogfQogCiBIaXRUZXN0UmVzdWx0Ojp+SGl0VGVz
dFJlc3VsdCgpCkBAIC03Niw2ICs5MywxMiBAQCBIaXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0
OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiAgICAgbV9pbm5lclVSTEVs
ZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7CiAgICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3Jv
bGxiYXIoKTsKICAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgpOworICAg
IC8vIE9ubHkgY29weSB0aGUgcGFkZGluZyBhbmQgTGlzdEhhc2hTZXQgaW4gY2FzZSBvZiByZWN0
IGhpdCB0ZXN0LgorICAgIC8vIENvcHlpbmcgdGhlIGxhdGVyIGlzIHJhdGhlciBleHBlbnNpdmUu
CisgICAgaWYgKChtX2lzUmVjdEJhc2VkID0gb3RoZXIuaXNSZWN0QmFzZWRUZXN0KCkpKSB7Cisg
ICAgICAgIG1fcGFkZGluZyA9IG90aGVyLnBhZGRpbmcoKTsKKyAgICAgICAgbV9yZWN0QmFzZWRU
ZXN0UmVzdWx0ID0gb3RoZXIucmVjdEJhc2VkVGVzdFJlc3VsdCgpOworICAgIH0KICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTM2Miw0ICszODUsNDAgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojpp
c0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCitib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgaW50IHgsIGludCB5LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIC8vIElmIGl0IGlzIG5vdCBhIHJlY3QtYmFzZWQgaGl0IHRlc3Qs
IHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4KKyAgICAvLyBSZXR1cm4gZmFsc2UsIHNvIHRo
ZSBoaXQgdGVzdCBzdG9wcy4KKyAgICBpZiAoIWlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiBub2RlIGlzIG51bGwsIHJldHVybiB0cnVlIHNvIHRo
ZSBoaXQgdGVzdCBjYW4gY29udGludWUuCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIG5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBtX3Jl
Y3RCYXNlZFRlc3RSZXN1bHQuYWRkKG5vZGUpOworCisgICAgcmV0dXJuICFyZWN0LmNvbnRhaW5z
KHJlY3RGcm9tUG9pbnQoeCwgeSkpOworfQorCit2b2lkIEhpdFRlc3RSZXN1bHQ6OmFwcGVuZChj
b25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlcikKK3sKKyAgICBBU1NFUlQoaXNSZWN0QmFzZWRUZXN0
KCkgJiYgb3RoZXIuaXNSZWN0QmFzZWRUZXN0KCkpOworCisgICAgaWYgKCFtX2lubmVyTm9kZSAm
JiBvdGhlci5pbm5lck5vZGUoKSkgeworICAgICAgICBtX2lubmVyTm9kZSA9IG90aGVyLmlubmVy
Tm9kZSgpOworICAgICAgICBtX2lubmVyTm9uU2hhcmVkTm9kZSA9IG90aGVyLmlubmVyTm9uU2hh
cmVkTm9kZSgpOworICAgICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7Cisg
ICAgICAgIG1faW5uZXJVUkxFbGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgpOworICAgICAgICBt
X3Njcm9sbGJhciA9IG90aGVyLnNjcm9sbGJhcigpOworICAgICAgICBtX2lzT3ZlcldpZGdldCA9
IG90aGVyLmlzT3ZlcldpZGdldCgpOworICAgIH0KKworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJl
ZlB0cjxOb2RlPiA+JiBsaXN0ID0gb3RoZXIucmVjdEJhc2VkVGVzdFJlc3VsdCgpOworICAgIExp
c3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBsYXN0ID0gbGlzdC5lbmQo
KTsKKyAgICBmb3IgKExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gbGFzdDsgKytpdCkKKyAgICAgICAgbV9yZWN0QmFzZWRU
ZXN0UmVzdWx0LmFkZChpdC0+Z2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXggZDE5MDZiYS4uZjQ3ZTJhNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtMjEsNyArMjEsMTAgQEAKICNkZWZpbmUgSGl0VGVzdFJl
c3VsdF9oCiAKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzgsNiArNDEsOCBAQCBjbGFzcyBTdHJpbmc7CiBjbGFzcyBIaXRUZXN0
UmVzdWx0IHsKIHB1YmxpYzoKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50Jik7Cisg
ICAgLy8gUGFzcyBhIG5vbi1uZWdhdGl2ZSBJbnRTaXplIHZhbHVlIGFzIHBhZGRpbmcgdG8gcGVy
Zm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCisgICAgSGl0VGVzdFJlc3VsdChjb25zdCBJbnRQ
b2ludCYgY2VudGVyUG9pbnQsIGNvbnN0IEludFNpemUmIHBhZGRpbmcpOwogICAgIEhpdFRlc3RS
ZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwogICAgIH5IaXRUZXN0UmVzdWx0KCk7CiAgICAg
SGl0VGVzdFJlc3VsdCYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKQEAgLTc2LDcg
KzgxLDIxIEBAIHB1YmxpYzoKICAgICBib29sIGlzTGl2ZUxpbmsoKSBjb25zdDsKICAgICBib29s
IGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAKKyAgICAvLyBSZWN0LWJhc2VkIGhpdCB0ZXN0
IHJlbGF0ZWQgbWV0aG9kcy4KKyAgICBib29sIGlzUmVjdEJhc2VkVGVzdCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZWN0QmFzZWQ7IH0KKyAgICBJbnRSZWN0IHJlY3RGcm9tUG9pbnQoaW50IHgsIGlu
dCB5KSBjb25zdDsKKyAgICBJbnRSZWN0IHJlY3RGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKKyAgICBJbnRTaXplIHBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0K
KyAgICBpbnQgcGFkZGluZ1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9wYWRkaW5nLndpZHRoKCkg
Pj0gMCA/IG1fcGFkZGluZy53aWR0aCgpIDogMDsgfQorICAgIGludCBwYWRkaW5nSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWRkaW5nLmhlaWdodCgpID49IDAgPyBtX3BhZGRpbmcuaGVpZ2h0
KCkgOiAwOyB9CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHJlY3QtYmFzZWQgaGl0IHRl
c3QgYW5kIG5lZWRzIHRvIGNvbnRpbnVlIHVudGlsIHRoZSByZWN0IGlzIGZ1bGx5CisgICAgLy8g
ZW5jbG9zZWQgYnkgdGhlIGJvdW5kYXJpZXMgb2YgYSBub2RlLgorICAgIGJvb2wgYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgaW50IHgsIGludCB5LCBjb25zdCBJbnRSZWN0JiBy
ZWN0ID0gSW50UmVjdCgpKTsKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiYg
cmVjdEJhc2VkVGVzdFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdEJhc2VkVGVzdFJlc3Vs
dDsgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKKwogcHJpdmF0ZToK
KwogICAgIFJlZlB0cjxOb2RlPiBtX2lubmVyTm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9pbm5l
ck5vblNoYXJlZE5vZGU7CiAgICAgSW50UG9pbnQgbV9wb2ludDsKQEAgLTg1LDggKzEwNCwzNyBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxFbGVtZW50PiBtX2lubmVyVVJMRWxlbWVudDsKICAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiBtX3Njcm9sbGJhcjsKICAgICBib29sIG1faXNPdmVyV2lkZ2V0OyAv
LyBSZXR1cm5zIHRydWUgaWYgd2UgYXJlIG92ZXIgYSB3aWRnZXQgKGFuZCBub3QgaW4gdGhlIGJv
cmRlci9wYWRkaW5nIGFyZWEgb2YgYSBSZW5kZXJXaWRnZXQgZm9yIGV4YW1wbGUpLgorICAgIGJv
b2wgbV9pc1JlY3RCYXNlZDsKKyAgICBJbnRTaXplIG1fcGFkZGluZzsKKyAgICBMaXN0SGFzaFNl
dDxSZWZQdHI8Tm9kZT4gPiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQ7CiB9OwogCitpbmxpbmUgSW50
UmVjdCBIaXRUZXN0UmVzdWx0OjpyZWN0RnJvbVBvaW50KGludCB4LCBpbnQgeSkgY29uc3QKK3sK
KyAgICByZXR1cm4gcmVjdEZyb21Qb2ludChJbnRQb2ludCh4LCB5KSk7Cit9CisKKy8vIEZvcm11
bGE6CisvLyB4ID0gcC54KCkgLSBwYWRkaW5nLndpZHRoKCkKKy8vIHkgPSBwLnkoKSAtIHBhZGRp
bmcuaGVpZ2h0KCkKKy8vIHdpZHRoID0gMiAqIHBhZGRpbmcud2lkdGgoKSArIDEKKy8vIGhlaWdo
dCA9IDIgKiBtX3BhZGRpbmcuaGVpZ2h0KCkgKyAxCitpbmxpbmUgSW50UmVjdCBIaXRUZXN0UmVz
dWx0OjpyZWN0RnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJ
bnRQb2ludCByZWFsUG9pbnQocG9pbnQpOworICAgIEludFNpemUgcmVhbFBhZGRpbmcobV9wYWRk
aW5nKTsKKworICAgIC8vIFJlYWwgSW50UG9pbnQgZm9yIHRoZSByZWN0LgorICAgIHJlYWxQYWRk
aW5nLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICByZWFsUG9pbnQgLT0gcmVhbFBhZGRpbmc7
CisKKyAgICAvLyBSZWFsIEludFNpemUgZm9yIHRoZSByZWN0LgorICAgIHJlYWxQYWRkaW5nLnNj
YWxlKDIpOworICAgIHJlYWxQYWRkaW5nICs9IEludFNpemUoMSwgMSk7CisKKyAgICByZXR1cm4g
SW50UmVjdChyZWFsUG9pbnQsIHJlYWxQYWRkaW5nKTsKK30KKwogU3RyaW5nIGRpc3BsYXlTdHJp
bmcoY29uc3QgU3RyaW5nJiwgY29uc3QgTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IGZiZmU1NmQuLmRmZTc1NjEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC02MTEsNyArNjExLDcgQEAgYm9vbCBJ
bmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmUKIHsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXNpYmxlT3Zl
cmZsb3dSZWN0KCkpOwogICAgIG92ZXJmbG93UmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFv
dmVyZmxvd1JlY3QuY29udGFpbnMoeCwgeSkpCisgICAgaWYgKCFvdmVyZmxvd1JlY3QuaW50ZXJz
ZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludCh4LCB5KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIENoZWNrIGNoaWxkcmVuIGZpcnN0LgpAQCAtNjI0LDkgKzYyNCwxMCBAQCBib29s
IElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZQogCiAgICAgLy8gTm93IGNoZWNrIG91cnNlbHZlcy4KICAgICBJ
bnRSZWN0IHJlY3QodHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7Ci0gICAg
aWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmNvbnRhaW5zKHgsIHkpKSB7CisgICAg
aWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RG
cm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94
IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNw
YWNlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIHJlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggODU0N2ZlMC4uNTBmNmNmYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTI4Nyw5ICsyODcsMTAgQEAgYm9vbCBJbmxp
bmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50UmVjdCByZWN0
KHR4ICsgbV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOwotICAgIGlmIChtX3RydW5j
YXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0
LmNvbnRhaW5zKHgsIHkpKSB7CisgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRp
b24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVj
dEZyb21Qb2ludCh4LCB5KSkpIHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJl
bmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgcmVjdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IGU4YjU4MjIuLjk1NTBlYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTM3
NTIsMTkgKzM3NTIsMjIgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAgICAgIEludFJlY3Qgb3Zl
cmZsb3dCb3ggPSB2aXNpYmxlT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1v
dmUodHgsIHR5KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5jb250YWlucyhfeCwgX3kpKQor
ICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQo
X3gsIF95KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKCho
aXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9
PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJv
bChyZXN1bHQsIF94LCBfeSwgdHgsIHR5KSkgewogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgSW50UG9pbnQoX3ggLSB0eCwgX3kgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgLy8gRklYTUU6IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCgpIGRvZXNuJ3Qg
aGFuZGxlIHJlY3QtYmFzZWQgdGVzdHMgeWV0LgorICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgX3gsIF95KSkKKyAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4n
dCBoYXZlIGFueSBzcGlsbG91dC4KICAgICBib29sIHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJm
bG93Q2xpcCgpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9
IChoYXNDb250cm9sQ2xpcCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAgYm9vbCBjaGVja0No
aWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRyb2xDbGlwKCkgPyBjb250cm9sQ2xpcFJlY3Qo
dHgsIHR5KS5jb250YWlucyhfeCwgX3kpIDogb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRh
aW5zKF94LCBfeSkpOworICAgIEludFJlY3QgaGl0VGVzdEFyZWEocmVzdWx0LnJlY3RGcm9tUG9p
bnQoX3gsIF95KSk7CisgICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0Nv
bnRyb2xDbGlwKCkgPyBjb250cm9sQ2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKGhpdFRlc3RB
cmVhKSA6IG92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5pbnRlcnNlY3RzKGhpdFRlc3RBcmVhKSk7
CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0IHRlc3QgZGVzY2VuZGFu
dHMgZmlyc3QuCiAgICAgICAgIGludCBzY3JvbGxlZFggPSB0eDsKQEAgLTM4MTIsOSArMzgxNSwx
MCBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFj
a2dyb3VuZAogICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQg
fHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAg
ICAgSW50UmVjdCBib3VuZHNSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgICAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuY29udGFpbnMoX3gsIF95
KSkgeworICAgICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludChfeCwgX3kpKSkgewogICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KF94IC0gdHgsIF95IC0gdHkpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIF94LCBfeSwgYm91bmRzUmVjdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM4MzksMTMgKzM4
NDMsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHIKICAgICAgICAgY3VycllPZmZzZXQgKz0g
Y29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoY29sUmVjdC5jb250YWlucyh4LCB5KSkgeworICAgICAgICBpZiAoY29s
UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHgsIHkpKSkgewogICAgICAgICAg
ICAgLy8gVGhlIHBvaW50IGlzIGluc2lkZSB0aGlzIGNvbHVtbi4KICAgICAgICAgICAgIC8vIEFk
anVzdCB0eCBhbmQgdHkgdG8gY2hhbmdlIHdoZXJlIHdlIGhpdCB0ZXN0LgogICAgICAgICAKICAg
ICAgICAgICAgIGludCBmaW5hbFggPSB0eCArIGN1cnJYT2Zmc2V0OwogICAgICAgICAgICAgaW50
IGZpbmFsWSA9IHR5ICsgY3VycllPZmZzZXQ7Ci0gICAgICAgICAgICByZXR1cm4gaGl0VGVzdENv
bnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhpdFRlc3RBY3Rp
b24pOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSAmJiAhY29sUmVj
dC5jb250YWlucyhyZXN1bHQucmVjdEZyb21Qb2ludCh4LCB5KSkpCisgICAgICAgICAgICAgICAg
aGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgZmluYWxYLCBmaW5hbFksIGhp
dFRlc3RBY3Rpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBo
aXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCBmaW5hbFgsIGZpbmFsWSwgaGl0
VGVzdEFjdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmlu
ZGV4IDIwMjAwMDMuLmRhZjk0ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKQEAgLTU1NCw5ICs1NTUsMTEgQEAgYm9vbCBSZW5kZXJCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQKIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBh
bHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVn
cm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1h
Z2VzKS4KLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0
Rm9yZWdyb3VuZCAmJiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5z
KHhQb3MsIHlQb3MpKSB7CisgICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHks
IHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFj
dGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0
LnJlY3RGcm9tUG9pbnQoeFBvcywgeVBvcykpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBJbnRQb2ludCh4UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3Vs
dChub2RlKCksIHhQb3MsIHlQb3MsIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CmluZGV4IDhlN2QxNjUuLjIwNzM0NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAg
LTM3NywxMCArMzc3LDEwIEBAIEhUTUxNYXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAo
KSBjb25zdAogCiBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgSGl0VGVzdFJl
c3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICBIaXRUZXN0UmVzdWx0IHRlbXBS
ZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRkaW5nKCkpOwogICAgIGJvb2wgaW5zaWRl
ID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRlbXBSZXN1bHQsIHgsIHks
IHR4LCB0eSwgaGl0VGVzdEFjdGlvbik7CiAKLSAgICBpZiAoaW5zaWRlICYmIG5vZGUoKSkgewor
ICAgIGlmICh0ZW1wUmVzdWx0LmlubmVyTm9kZSgpICYmIG5vZGUoKSkgewogICAgICAgICBpZiAo
SFRNTE1hcEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKICAgICAgICAgICAgIEludFJlY3Qg
Y29udGVudEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgICAgICAgICBmbG9hdCB6b29tID0g
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwpAQCAtMzkxLDYgKzM5MSw4IEBAIGJvb2wgUmVuZGVy
SW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWluc2lkZSAmJiByZXN1
bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7
CiAgICAgaWYgKGluc2lkZSkKICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICByZXR1
cm4gaW5zaWRlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ0MGE2ZjguLjM0MTc4
NjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI3MzksMTQgKzI3MzksMTYgQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzID0gY29tcG9zaXRvcigpLT5pbkNvbXBvc2l0aW5n
TW9kZSgpOwogI2VuZGlmCi0gICAgCisKKyAgICBJbnRSZWN0IGhpdFRlc3RBcmVhID0gcmVzdWx0
LnJlY3RGcm9tUG9pbnQoaGl0VGVzdFBvaW50KTsKKwogICAgIC8vIEFwcGx5IGEgdHJhbnNmb3Jt
IGlmIHdlIGhhdmUgb25lLgogICAgIGlmICh0cmFuc2Zvcm0oKSAmJiAhYXBwbGllZFRyYW5zZm9y
bSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHBhcmVudCdzIGNsaXAgcmVjdHMgaGF2ZSBi
ZWVuIGNhbGN1bGF0ZWQuCiAgICAgICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAgICAgSW50
UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHVzZVRlbXBvcmFy
eUNsaXBSZWN0cyk7CiAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9z
aW5nIGNsaXAgbm93LgotICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5jb250YWlucyhoaXRUZXN0
UG9pbnQpKQorICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RBcmVh
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCkBAIC0yODU5LDE3ICsy
ODYxLDIxIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgfQogCiAgICAgLy8gTmV4dCB3
ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVy
T2JqZWN0cyBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKGZnUmVjdC5jb250YWlucyhoaXRUZXN0UG9p
bnQpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0
cyhoaXRUZXN0QXJlYSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgIC8vIEhp
dCB0ZXN0IHdpdGggYSB0ZW1wb3JhcnkgSGl0VGVzdFJlc3VsdCwgYmVjYXVzZSB3ZSBvbmx5IHdh
bnQgdG8gY29tbWl0IHRvICdyZXN1bHQnIGlmIHdlIGtub3cgd2UncmUgZnJvbnRtb3N0LgotICAg
ICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCkpOworICAgICAgICBI
aXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3VsdC5wYWRkaW5nKCkp
OwogICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVy
Qm91bmRzLCBoaXRUZXN0UG9pbnQsIEhpdFRlc3REZXNjZW5kYW50cykgJiYKICAgICAgICAgICAg
IGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxh
dHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0ZW1w
UmVzdWx0OworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICBpZiAoIWRl
cHRoU29ydERlc2NlbmRhbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAg
ICAgICAgLy8gRm9yZWdyb3VuZCBjYW4gZGVwdGgtc29ydCB3aXRoIGRlc2NlbmRhbnQgbGF5ZXJz
LCBzbyBrZWVwIHRoaXMgYXMgYSBjYW5kaWRhdGUuCiAgICAgICAgICAgICBjYW5kaWRhdGVMYXll
ciA9IHRoaXM7Ci0gICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFz
ZWRUZXN0KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0K
IAogICAgIC8vIE5vdyBjaGVjayBvdXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KQEAgLTI4
ODUsMTMgKzI4OTEsMTcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICBpZiAoY2FuZGlk
YXRlTGF5ZXIpCiAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMYXllcjsKIAotICAgIGlmIChiZ1Jl
Y3QuY29udGFpbnMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKLSAg
ICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgpKTsKKyAgICBpZiAo
YmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdEFyZWEpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkg
eworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnBvaW50KCksIHJlc3Vs
dC5wYWRkaW5nKCkpOwogICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBS
ZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0UG9pbnQsIEhpdFRlc3RTZWxmKSAmJgogICAgICAg
ICAgICAgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwg
dW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IHRlbXBSZXN1bHQ7CisgICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVjdEJh
c2VkVGVzdCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICB9
CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC0yOTAzLDggKzI5MTMsOSBAQCBib29sIFJlbmRlckxh
eWVyOjpoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueCgpIC0g
cmVuZGVyQm94WCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnko
KSAtIHJlbmRlckJveFkoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0VGVzdEZp
bHRlcikpIHsKLSAgICAgICAgLy8gSXQncyB3cm9uZyB0byBzZXQgaW5uZXJOb2RlLCBidXQgdGhl
biBjbGFpbSB0aGF0IHlvdSBkaWRuJ3QgaGl0IGFueXRoaW5nLgotICAgICAgICBBU1NFUlQoIXJl
c3VsdC5pbm5lck5vZGUoKSk7CisgICAgICAgIC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9k
ZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlkbid0IGhpdCBhbnl0aGluZywgdW5sZXNzIGl0
IGlzCisgICAgICAgIC8vIGEgcmVjdC1iYXNlZCB0ZXN0LgorICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5pbm5lck5vZGUoKSB8fCAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpICYmIHJlc3VsdC5yZWN0
QmFzZWRUZXN0UmVzdWx0KCkuc2l6ZSgpKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTI5MzgsMTQgKzI5NDksMjEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRU
ZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHIKICAgICBm
b3IgKGludCBpID0gbGlzdC0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgUmVu
ZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsaXN0LT5hdChpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIq
IGhpdExheWVyID0gMDsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5w
b2ludCgpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5wb2ludCgp
LCByZXN1bHQucGFkZGluZygpKTsKICAgICAgICAgaWYgKGNoaWxkTGF5ZXItPmlzUGFnaW5hdGVk
KCkpCiAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKGNo
aWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhp
dFRlc3RQb2ludCwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0VGVzdExheWVy
KHJvb3RMYXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRl
c3RQb2ludCwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwor
CisgICAgICAgIC8vIElmIGl0IGEgcmVjdC1iYXNlZCB0ZXN0LCB3ZSBjYW4gc2FmZWx5IGFwcGVu
ZCB0aGUgdGVtcG9yYXJ5IHJlc3VsdCBzaW5jZSBpdCBtaWdodCBoYWQgaGl0CisgICAgICAgIC8v
IG5vZGVzIGJ1dCBub3QgbmVjZXNzZXJpbHkgaGFkIGhpdExheWVyIHNldC4KKyAgICAgICAgaWYg
KHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVt
cFJlc3VsdCk7CisKICAgICAgICAgaWYgKGlzSGl0Q2FuZGlkYXRlKGhpdExheWVyLCBkZXB0aFNv
cnREZXNjZW5kYW50cywgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZSkpIHsKICAg
ICAgICAgICAgIHJlc3VsdExheWVyID0gaGl0TGF5ZXI7Ci0gICAgICAgICAgICByZXN1bHQgPSB0
ZW1wUmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIGlmICghZGVw
dGhTb3J0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTMwMDUsNyArMzAyMyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxk
TGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAgICAgIEludFJl
Y3QgbG9jYWxDbGlwUmVjdChoaXRUZXN0UmVjdCk7CiAgICAgICAgIGxvY2FsQ2xpcFJlY3QuaW50
ZXJzZWN0KGNvbFJlY3QpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFsb2NhbENsaXBSZWN0Lmlz
RW1wdHkoKSAmJiBsb2NhbENsaXBSZWN0LmNvbnRhaW5zKGhpdFRlc3RQb2ludCkpIHsKKyAgICAg
ICAgaWYgKCFsb2NhbENsaXBSZWN0LmlzRW1wdHkoKSAmJiBsb2NhbENsaXBSZWN0LmludGVyc2Vj
dHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoaGl0VGVzdFBvaW50KSkpIHsKICAgICAgICAgICAgIFJl
bmRlckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgICAgICBpZiAoIWNvbHVtbkluZGV4KSB7
CiAgICAgICAgICAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0gdG8gY2hh
bmdlIHdoZXJlIHRoZSBsYXllciBwYWludHMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94
TGlzdC5jcHAKaW5kZXggMmQyNzc0OC4uNGQwZGNkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCiAKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yNDUsMTQgKzI0NiwxNiBAQCBib29sIFJl
bmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgSGl0VGVzdFJlcQogICAgIC8vIGNvbnRhaW4gdGhlIHBvaW50LiAgVGhpcyBpcyBhIHF1
aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFueSBs
aW5lcy4KICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBmbGF3ZWQgaW4gdGhlIGZvbGxvd2lu
ZyBleHRyZW1lbHkgb2JzY3VyZSB3YXk6CiAgICAgLy8gaWYgc29tZSBsaW5lIGluIHRoZSBtaWRk
bGUgaGFzIGEgaHVnZSBvdmVyZmxvdywgaXQgbWlnaHQgYWN0dWFsbHkgZXh0ZW5kIGJlbG93IHRo
ZSBsYXN0IGxpbmUuCi0gICAgaWYgKCh5ID49IHR5ICsgbGFzdExpbmVCb3goKS0+cm9vdCgpLT5i
b3R0b21WaXNpYmxlT3ZlcmZsb3coKSkgfHwgKHkgPCB0eSArIGZpcnN0TGluZUJveCgpLT5yb290
KCktPnRvcFZpc2libGVPdmVyZmxvdygpKSkKKyAgICBpZiAoeSAtIHJlc3VsdC5wYWRkaW5nSGVp
Z2h0KCkgPj0gdHkgKyBsYXN0TGluZUJveCgpLT5yb290KCktPmJvdHRvbVZpc2libGVPdmVyZmxv
dygpCisgICAgIHx8IHkgKyByZXN1bHQucGFkZGluZ0hlaWdodCgpIDwgdHkgKyBmaXJzdExpbmVC
b3goKS0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gU2VlIGlmIG91ciByb290IGxpbmVzIGNvbnRhaW4gdGhlIHBvaW50LiAgSWYg
c28sIHRoZW4gd2UgaGl0IHRlc3QKICAgICAvLyB0aGVtIGZ1cnRoZXIuICBOb3RlIHRoYXQgYm94
ZXMgY2FuIGVhc2lseSBvdmVybGFwLCBzbyB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucwog
ICAgIC8vIGJhc2VkIG9mZiBwb3NpdGlvbnMgb2Ygb3VyIGZpcnN0IGxpbmUgYm94IG9yIG91ciBs
YXN0IGxpbmUgYm94LgogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKSB7Ci0gICAgICAgIGlmICh5ID49
IHR5ICsgY3Vyci0+cm9vdCgpLT50b3BWaXNpYmxlT3ZlcmZsb3coKSAmJiB5IDwgdHkgKyBjdXJy
LT5yb290KCktPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKSB7CisgICAgICAgIGlmICh5ICsgcmVz
dWx0LnBhZGRpbmdIZWlnaHQoKSA+PSB0eSArIGN1cnItPnJvb3QoKS0+dG9wVmlzaWJsZU92ZXJm
bG93KCkKKyAgICAgICAgICYmIHkgLSByZXN1bHQucGFkZGluZ0hlaWdodCgpIDwgdHkgKyBjdXJy
LT5yb290KCktPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBib29sIGlu
c2lkZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsK
ICAgICAgICAgICAgIGlmIChpbnNpZGUpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlci0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDc3MTM0NDUuLmUyZGVlNWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUm9vdC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzE5
LDYgKzMyMCw4IEBAIGJvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIGlmIChjaGlsZC0+
bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rp
b24pKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9jYWwg
cG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwogICAgICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOworICAgICAgICAg
ICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2Vk
IGhpdCB0ZXN0cyB5ZXQuCisgICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChjaGlsZC0+bm9kZSgpLCBfeCwgX3kpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggNjU4ZmQ5
Yy4uM2E0MGVlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91dC5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlclRhYmxlQ2VsbC5oIgpAQCAtMTEzNSw3ICsxMTM2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3UKICAgICB0eSArPSB5KCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgb3ZlcmZsb3dDbGlwUmVjdCh0eCwgdHkpLmNvbnRhaW5z
KHhQb3MsIHlQb3MpKSB7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCBvdmVyZmxvd0Ns
aXBSZWN0KHR4LCB0eSkuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZyb21Qb2ludCh4UG9zLCB5UG9z
KSkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYg
KGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikg
JiYKICAgICAgICAgICAgICAgICBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4
UG9zLCB5UG9zLCB0eCwgdHksIGFjdGlvbikpIHsKQEAgLTExNDYsOSArMTE0NywxMSBAQCBib29s
IFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIH0KIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4
dC4KLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJs
b2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAm
JiBJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpLmNvbnRhaW5zKHhQb3MsIHlQb3Mp
KSB7CisgICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhl
aWdodCgpKTsKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0
VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3Jv
dW5kKSAmJiBib3VuZHNSZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeFBvcywg
eVBvcykpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4
UG9zIC0gdHgsIHlQb3MgLSB0eSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHhQb3MsIHlQb3Ms
IGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXgg
OGM4ZDEzMC4uNzRmNDQ5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlQ29sLmgiCkBAIC0xMTk1LDcgKzExOTYsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bAogICAgIHR4ICs9IHgoKTsKICAgICB0eSArPSB5KCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5jb250YWlucyh4UG9zLCB5UG9zKSkK
KyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QodHgsIHR5KS5p
bnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHhQb3MsIHlQb3MpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5jcHAKaW5kZXggNmZiMjc0OS4uNmVjNWI3MCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCkBAIC0zOTQsNyArMzk0LDcgQEAgYm9vbCBSZW5kZXJXaWRnZXQ6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXMK
ICAgICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKTsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUg
aWYgd2UgYXJlIHJlYWxseSBvdmVyIHRoZSB3aWRnZXQgaXRzZWxmIChhbmQgbm90IGp1c3QgaW4g
dGhlIGJvcmRlci9wYWRkaW5nIGFyZWEpLgotICAgIGlmIChpbnNpZGUgJiYgIWhhZFJlc3VsdCAm
JiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpKQorICAgIGlmICgoaW5zaWRlIHx8IHJlc3Vs
dC5pc1JlY3RCYXNlZFRlc3QoKSkgJiYgIWhhZFJlc3VsdCAmJiByZXN1bHQuaW5uZXJOb2RlKCkg
PT0gbm9kZSgpKQogICAgICAgICByZXN1bHQuc2V0SXNPdmVyV2lkZ2V0KGNvbnRlbnRCb3hSZWN0
KCkuY29udGFpbnMocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgIHJldHVybiBpbnNpZGU7CiB9
Ci0tIAoxLjcuMC40Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>