<?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>135639</bug_id>
          
          <creation_ts>2014-08-05 22:47:44 -0700</creation_ts>
          <short_desc>CSS: Refactor :visited handling in SelectorChecker</short_desc>
          <delta_ts>2014-08-30 06:43:46 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027094</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-05 22:47:44 -0700</bug_when>
    <thetext>In bug 135293, we found that we can simplify current SelectorChecker&apos;s :visited handling code.
It makes CSS JIT :visited code simpler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027145</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-06 06:45:36 -0700</bug_when>
    <thetext>For non-style cases (querySelector etc) we should just filter out :visited rules after parsing as they can never match. This should be trivial using SelectorChecker::determineLinkMatchType().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027188</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-06 10:14:10 -0700</bug_when>
    <thetext>Hi Antti and Benjamin,

After our discussion, I investigated why the nested link and adjacents are handled specially.
And maybe I&apos;ve figure out why it is!
At first, I think these handling don&apos;t protect from any attacks. This is because all attacks are already protected by linkMatchType.

I&apos;ll describe my understanding of WebKit :visited handling. And I&apos;ll suggest how to simplify the current implementation.
Since I&apos;m a new commer to this :visited handling, if I miss something, please point it :)

WebKit :visited rendering is following.

  1.
  SelectorChecker::determineLinkMatchType clasifies selector into 4 types. MatchLink = 1:(01), MatchVisited = 2:(10), MatchAll = 3:(11) and neither = 0:(00).

  2.
  Perform selector matching on the element. (SelectorChecker)

  3.
  When the selector is matched, apply the properties to the element&apos;s style.
  In this time, elements have 3 css values per property.

  cssValue[0] =&gt; neither
  cssValue[1] =&gt; link
  cssValue[2] =&gt; visited

  Basically, we apply cssValue[linkMatchType] = newValue; But when the type is MatchAll, we apply cssValue[0..3] = newValue;

  4. (maybe)
  When rendering, we calculate linkState of the element, which is clasified into 3 types, NotInsideLink, InsideUnvisitedLink and InsideVisitedLink.
  We propagate this value from the parent to the child.
  If the element is link, we override this value with the element link&apos;s linkState.
  otherwise the linkState is inherited from the parent.

  5.
  At last, by using linkState, we choose the cssValue and render the element with it.
  But only white listed properties use cssValue[1 or 2]. Such as background-color.

OK, so let&apos;s describe the important questions.

Q1: Is it protected from any attacks?

  I think yes. For example, getComputedStyle always reads cssValue[0]. And cssValue[0] is not modified with :visited/:link selectors.
  So the element always returns the non-link-dependent value.
  And when rendering the element, reading cssValue[1 or 2] is only allowed for white listed properties, it doens&apos;t have effect on layouts (for example, &quot;height&quot; cannot be used).
  As the result, there&apos;s no way to read :visited dependent values programmably.

Q2: So why adjacent selectors are disabled? (:visited)

  This is not for security issues. It&apos;s already solved.

  In the phase 4, we calculate the linkState from the parent. So the linkState doesn&apos;t consider the adjacent linkStates.
  For example, provided the selector &quot;:visited + span&quot;
  
  &lt;p&gt;
      &lt;a href=&quot;visited&quot;&gt;
          &lt;a href=&quot;link&quot;&gt;&lt;/a&gt;
          &lt;span&gt;target&lt;/span&gt;
      &lt;/a&gt;
  &lt;/p&gt;
  
  In this HTML, if we don&apos;t disable adjacent :visited, &lt;span&gt; would be matched to the selector in the phase 2.
  This is because SelectorChecker doesn&apos;t see the link&apos;s status.
  And after that, in the phase 4, since the parent &lt;a&gt; is :visited, the linkState of the &lt;span&gt; becomes :visited.
  So span is matched and the style is applied to this element.
  
  Calculating the depending adjacent&apos;s link state is too high cost, the current semantics is taken I think.

Q3: So why the nested links are disabled? (:visited)

  This is not for security issues. It&apos;s already solved.

  In the phase 4, we calculate the linkState from the parent and overrides it with the current element&apos;s linkState. (In StyleResolver)
  As the result, the linkState of the element is the linkState of the closest link.
  If the link is nested, the closest link&apos;s linkState only becomes effective.
  This is why introducing the semantics, &quot;the closest link&apos;s :visited is only effective&quot;.

Suggestion: How to simplify it?

  Considering these things, I think we can simplify SelectorChecker&apos;s isLink check for :visited and handles it in the StyleResolver side.
  Currently, in phase 4, we always overrides linkState with the current element&apos;s linkState, like

      if (element-&gt;isLink) {
          linkState = lookupLinkState(element);
      }

  Instead, by changing it to

      if (element-&gt;isLink) {
          previousLinkState = linkState;
          if (previousLinkState is InsideUnvisitedLink or InsideVisitedLink)
              linkState = NotInsideLinkForced
      }

  I think we can handle nested link check in StyleResolver side.
  What do you think about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027214</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-06 10:55:17 -0700</bug_when>
    <thetext>(In reply to comment #2)

Errata.
&gt;   5.
&gt;   At last, by using linkState, we choose the cssValue and render the element with it.
&gt;   But only white listed properties use cssValue[1 or 2]. Such as background-color.

Constructing regular / visited property values from these values in StyleResolver::CachedProperties::Property::apply.


&gt; Q1: Is it protected from any attacks?
&gt; 
&gt;   I think yes. For example, getComputedStyle always reads cssValue[0]. And cssValue[0] is not modified with :visited/:link selectors.
&gt;   So the element always returns the non-link-dependent value.
&gt;   And when rendering the element, reading cssValue[1 or 2] is only allowed for white listed properties, it doens&apos;t have effect on layouts (for example, &quot;height&quot; cannot be used).
&gt;   As the result, there&apos;s no way to read :visited dependent values programmably.

getComputedStyle will lookup with allowVisitedStyle = false. So CSSComputedStyleDeclaration doesn&apos;t use visitedDependentColor. These visitedDependentColor is stored in the style separately. And they are set by DeprecatedStyleBuilder&apos;s handlers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027233</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-06 11:20:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Suggestion: How to simplify it?
&gt; 

Oooooops! I&apos;ve missed the pattern.
Considering the all patterns, we cannot remove this isLink() check...
Here&apos;s 2 examples,

&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;title&gt;&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
.ok span {
    color: green;
}
.ok:visited span {
    color: red;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;&lt;a href=&quot;file:///prpr&quot; class=&quot;ok&quot; id=&quot;out&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
// https://apple.com should be visited.
var a = document.createElement(&apos;a&apos;);a.href=&quot;https://apple.com/&quot;;a.innerHTML = &apos;&lt;span&gt;hello&lt;/span&gt;&apos;; document.getElementById(&apos;out&apos;).appendChild(a);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;


In this HTML, we constructed the tree,

&lt;p&gt;
  &lt;a href=&quot;file:///prpr&quot; class=&quot;ok&quot; id=&quot;out&quot;&gt;
    &lt;a href=&quot;https://apple.com/&quot;&gt;
      &lt;span&gt;hello&lt;/span&gt;
    &lt;/a&gt;
  &lt;/a&gt;
&lt;/p&gt;

On Firefox, link becomes green, but on WebKit, link becomes red. Since .ok should not be matched to &lt;a href=&quot;file:///prpr&quot; class=&quot;ok&quot; id=&quot;out&quot;&gt;, I think it should be green.


And the example 2,

&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;title&gt;&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
.ok span {
    color: green;
}
:visited span {
    color: red;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;&lt;a href=&quot;file:///prpr&quot; class=&quot;ok&quot; id=&quot;out&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var a = document.createElement(&apos;a&apos;);a.href=&quot;https://apple.com/&quot;;a.innerHTML = &apos;&lt;span&gt;hello&lt;/span&gt;&apos;; document.getElementById(&apos;out&apos;).appendChild(a);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

In this HTML, we constructed the same tree, but the selector &quot;:visited span&quot; is different.
In this example, both WebKit / Firefox show the red link and it is correct.
But my proposal breaks it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027572</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 13:14:04 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; For non-style cases (querySelector etc) we should just filter out :visited rules after parsing as they can never match. This should be trivial using SelectorChecker::determineLinkMatchType().

Thank you for your advice! It looks very nice.
I think &quot;:-webkit-any(:visited, others)&quot; causes problems.
Currently, :-webkit-any + :visited behavior is,

+ linkMatchType becomes MatchAll (so, :visited information is discarded)
+ in selector matching, &quot;VisitedMatchDisabled&quot; has effect on :visited inside :-webkit-any.

To make it consistent, I suggest that treating :visited and :link inside :-webkit-any as :-webkit-any-link. (Since the linkMatchType is MatchAll currently)
Do you think about this plan?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027688</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-07 16:38:08 -0700</bug_when>
    <thetext>The case of nested links is incredibly annoying.

I agree with you, SelectorChecker is broken in the example you gave.

For the JIT, I don&apos;t think we should maintain a live state during all matching. This would add a lot of complexity for an uncommon case.

What do you think of:
1) On entry, push the element on the stack.
2) Reserve stack space for one more pointer. Let&apos;s call it &quot;alpha&quot;.
3) Perform the selector matching. Every time &quot;:visited&quot; is encountered, push the current element register to &quot;alpha&quot;.
4) In case of successful matching. Do a tree walking from the start point saved in (1). If any isLink() is encountered before &quot;alpha&quot;, fail. Otherwise succeed.

(In reply to comment #5)
&gt; (In reply to comment #1)
&gt; &gt; For non-style cases (querySelector etc) we should just filter out :visited rules after parsing as they can never match. This should be trivial using SelectorChecker::determineLinkMatchType().
&gt; 
&gt; Thank you for your advice! It looks very nice.
&gt; I think &quot;:-webkit-any(:visited, others)&quot; causes problems.
&gt; Currently, :-webkit-any + :visited behavior is,
&gt; 
&gt; + linkMatchType becomes MatchAll (so, :visited information is discarded)
&gt; + in selector matching, &quot;VisitedMatchDisabled&quot; has effect on :visited inside :-webkit-any.
&gt; 
&gt; To make it consistent, I suggest that treating :visited and :link inside :-webkit-any as :-webkit-any-link. (Since the linkMatchType is MatchAll currently)
&gt; Do you think about this plan?

Yep, that sounds like a good idea. Combining :-webkit-any() and :visited is not worth the headache :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027727</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 18:33:31 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The case of nested links is incredibly annoying.
&gt; 
&gt; I agree with you, SelectorChecker is broken in the example you gave.
&gt; 
&gt; For the JIT, I don&apos;t think we should maintain a live state during all matching. This would add a lot of complexity for an uncommon case.
&gt; 
&gt; What do you think of:
&gt; 1) On entry, push the element on the stack.
&gt; 2) Reserve stack space for one more pointer. Let&apos;s call it &quot;alpha&quot;.
&gt; 3) Perform the selector matching. Every time &quot;:visited&quot; is encountered, push the current element register to &quot;alpha&quot;.
&gt; 4) In case of successful matching. Do a tree walking from the start point saved in (1). If any isLink() is encountered before &quot;alpha&quot;, fail. Otherwise succeed.

Sounds nice! I think it works correctly for :visited :)

One corner case is :not(:link). :not(:link) behaves

  if (element-&gt;isLink() &amp;&amp; VisitedMatchDisabled)
      return false;
  return true;

So if we remove VisitedMatchDisabled check at traversing phase, this predicate becomes,

  return true;

So, in phase (4), we cannot determine the matching is succeeded or not.

For example, provided &quot;.ok &gt; :not(:link) .target&quot; and the tree

&lt;body.ok&gt;&lt;div.ok&gt;&lt;a&gt;&lt;a&gt;&lt;span.target&gt;

Since :not(:link) always matches at phase (3), matching succeeds and the result becomes,
&lt;body.ok&gt;
&lt;div.ok&gt;  =&gt; .ok&gt;
&lt;a&gt;       =&gt; :not(:link)
&lt;a&gt;
&lt;span&gt;    =&gt; .target
But it failes at (4).

However this matching should succeed like that,
&lt;body.ok&gt; =&gt; .ok&gt;
&lt;div.ok&gt;  =&gt; :not(:link)
&lt;a&gt;      
&lt;a&gt;
&lt;span&gt;    =&gt; .target


Possibly, since :not(:link) is very rare case, I think we need not to pay cost to speed up :not(:link) case.
So I suggest treating it with a special function call.
For example, when :not(:link) is executed in phase (3), we call such a function to calculate (4) at (3) dynamically,

bool matchesNotLink(Element* target, Element* start, bool* cachedDisabled) {
  if (!target-&gt;isLink())
    return true;
  if (*cachedDisabled)
    return false;
  for (Element* cursor = start; cursor != target; cursor = cursor-&gt;parentElement()) {
    if (cursor-&gt;isLink()) {
      *cachedDisabled = true;
      return false;
    }
  }
  return true;
}

What do you think about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030972</commentid>
    <comment_count>8</comment_count>
      <attachid>237046</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-24 09:55:15 -0700</bug_when>
    <thetext>Created attachment 237046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030973</commentid>
    <comment_count>9</comment_count>
      <attachid>237046</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-24 10:09:20 -0700</bug_when>
    <thetext>Comment on attachment 237046
Patch

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

WIP

&gt; Source/WebCore/css/SelectorChecker.cpp:-131
&gt; -SelectorChecker::SelectorChecker(Document&amp; document, Mode mode)

Move mode from SelectorChecker to Context. It makes context layout more similar to CSS JIT Context.

&gt; Source/WebCore/css/SelectorChecker.cpp:172
&gt; +static SelectorChecker::SelectorCheckingContext walkToParentElement(const SelectorChecker::SelectorCheckingContext&amp; context)

Not to forget to check current element `isLink` when walking to the parent node, extracted it to this function.

&gt; Source/WebCore/css/SelectorChecker.cpp:237
&gt; +        if (relation != CSSSelector::Descendant &amp;&amp; relation != CSSSelector::Child)

Don&apos;t check `isLink` here.

&gt; Source/WebCore/css/SelectorChecker.cpp:248
&gt; +        for (; nextContext.element; nextContext = walkToParentElement(nextContext)) {

Use `walkToParentElement` in descendant traversing.

&gt; Source/WebCore/css/SelectorChecker.cpp:705
&gt; +                return eleemnt-&gt;isLink();

When `:-webkit-any(:visited)` case, treat it as `:-webkit-any(:-any-link)`. It keeps consistent between selector matching behavior and linkMatchType.

&gt; Source/WebCore/css/SelectorChecker.h:-58
&gt; -        SelectorCheckingContext(const CSSSelector* selector, Element* element, VisitedMatchType visitedMatchType)

Hide VisitedMatchType from public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031038</commentid>
    <comment_count>10</comment_count>
      <attachid>237059</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-24 23:16:11 -0700</bug_when>
    <thetext>Created attachment 237059
Patch

Patch: 1st version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031067</commentid>
    <comment_count>11</comment_count>
      <attachid>237059</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-25 01:25:13 -0700</bug_when>
    <thetext>Comment on attachment 237059
Patch

This is the first version of this patch. In this patch, we don&apos;t apply aggressive changes because :visited filtering out version still requires some dirty code... I&apos;ll attach the second version later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031068</commentid>
    <comment_count>12</comment_count>
      <attachid>237065</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-25 01:29:51 -0700</bug_when>
    <thetext>Created attachment 237065
Patch

Patch: 2st version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031069</commentid>
    <comment_count>13</comment_count>
      <attachid>237065</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-25 01:35:05 -0700</bug_when>
    <thetext>Comment on attachment 237065
Patch

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

Added comments on 2nd version. In this version, because of :not(:link), we cannot clean up adjacentFound flag... That&apos;s why I attached the simple 1st patch separately.

&gt; Source/WebCore/css/ElementRuleCollector.cpp:340
&gt; +        if (ruleData.visitedNeverMatches())

We can filter out some cases. But some cases cannot be filter out. So still `adjacentFound` exists...

&gt; Source/WebCore/css/SelectorChecker.cpp:239
&gt; +        if (relation != CSSSelector::Descendant &amp;&amp; relation != CSSSelector::Child)

Still need to track adjacentFound...

&gt; Source/WebCore/css/SelectorChecker.cpp:506
&gt; +                    if (subContext.selector-&gt;pseudoClassType() == CSSSelector::PseudoClassLink &amp;&amp; subContext.resolvingMode != Mode::QueryingRules &amp;&amp; !subContext.adjacentFound &amp;&amp; isFirstFoundLink(subContext.element, subContext.matchingStartElement))

`adjacentFound` is used here.

&gt; Source/WebCore/css/SelectorChecker.cpp:712
&gt; +            RELEASE_ASSERT_WITH_MESSAGE(!context.adjacentFound, &quot;Adjacent case never matches with :visited and it is filtered out before the matching.&quot;);

Here, since QueryingRules are filtered out above and :visited with adjacent cases are also filtered out, we can guarantee this assertion.

&gt; Source/WebCore/css/SelectorChecker.cpp:938
&gt; +                    neverMatches = true;

Find neverMatches case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031618</commentid>
    <comment_count>14</comment_count>
      <attachid>237059</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-27 01:12:49 -0700</bug_when>
    <thetext>Comment on attachment 237059
Patch

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

&gt; Source/WebCore/css/SelectorChecker.cpp:172
&gt; +static SelectorChecker::SelectorCheckingContext walkToParentElement(const SelectorChecker::SelectorCheckingContext&amp; context)

The name walkToParentElement() is a bit too generic in this context.

What about? checkingContextForParent()

&gt; Source/WebCore/css/SelectorChecker.cpp:703
&gt; +            // Inside functional pseudo class except for :not, :visited is treated as :-any-link since linkMatchType becomes MatchAll.
&gt; +            if (context.inFunctionalPseudoClass)

We should make sure there are tests for that.

&gt; LayoutTests/fast/history/nested-visited-test-override.html:5
&gt; +jsTestIsAsync = true;

You should also call description() to explain what you are testing with this test.

&gt; LayoutTests/fast/history/visited-inside-any.html:23
&gt; +        oneStyle = internals.computedStyleIncludingVisitedInfo(document.getElementById(&quot;one&quot;).firstChild);
&gt; +        twoStyle = internals.computedStyleIncludingVisitedInfo(document.getElementById(&quot;two&quot;));
&gt; +        shouldBecomeEqualToString(&quot;oneStyle.color&quot;, &quot;rgb(0, 128, 0)&quot;, finish);
&gt; +        shouldBecomeEqualToString(&quot;twoStyle.color&quot;, &quot;rgb(0, 128, 0)&quot;, finish);

Hum, seeing this test, it looks like treating :-webkit-any(:visited) as :any-link could be counter intuitive for web developers.

Maybe :visited should never match instead. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031619</commentid>
    <comment_count>15</comment_count>
      <attachid>237065</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-27 01:27:09 -0700</bug_when>
    <thetext>Comment on attachment 237065
Patch

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

&gt;&gt; Source/WebCore/css/ElementRuleCollector.cpp:340
&gt;&gt; +        if (ruleData.visitedNeverMatches())
&gt; 
&gt; We can filter out some cases. But some cases cannot be filter out. So still `adjacentFound` exists...

I don&apos;t think filtering ahead is worth the trouble. The pseudo class :visited is quite uncommon, even more so on complex selectors.

&gt; Source/WebCore/css/SelectorChecker.cpp:131
&gt; +static inline bool isFirstFoundLink(const Element* lastVisitedMatched, const Element* start)

The name could be super verbose here, something like 
    lastVisistedElementIsFirstLink()
or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031622</commentid>
    <comment_count>16</comment_count>
      <attachid>237059</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-27 01:32:55 -0700</bug_when>
    <thetext>Comment on attachment 237059
Patch

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

Thank you for your detailed review!

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:172
&gt;&gt; +static SelectorChecker::SelectorCheckingContext walkToParentElement(const SelectorChecker::SelectorCheckingContext&amp; context)
&gt; 
&gt; The name walkToParentElement() is a bit too generic in this context.
&gt; 
&gt; What about? checkingContextForParent()

`checkingContextForParent` looks quite nice.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:703
&gt;&gt; +            if (context.inFunctionalPseudoClass)
&gt; 
&gt; We should make sure there are tests for that.

Right. I&apos;ll add :not(:visited) and ::cue test cases.

&gt;&gt; LayoutTests/fast/history/nested-visited-test-override.html:5
&gt;&gt; +jsTestIsAsync = true;
&gt; 
&gt; You should also call description() to explain what you are testing with this test.

Thank you! I&apos;ll add it.

&gt;&gt; LayoutTests/fast/history/visited-inside-any.html:23
&gt;&gt; +        shouldBecomeEqualToString(&quot;twoStyle.color&quot;, &quot;rgb(0, 128, 0)&quot;, finish);
&gt; 
&gt; Hum, seeing this test, it looks like treating :-webkit-any(:visited) as :any-link could be counter intuitive for web developers.
&gt; 
&gt; Maybe :visited should never match instead. What do you think?

Agree with you.
In the case of :-webkit-any(:visited, ...), we cannot determine appropriate linkMatchType for this deterministically, so currently this linkMatchType becomes MatchAll. But it is counter intuitive. So simply disabling :-webkit-any(:visited) matching sounds nice.

And I think we also need to consider about :-webkit-any(:link). Currently it is also treated as :-webkit-any(:any-link) since linkMatchType is MatchAll and :link only checks isLink. What do you think about this?
I think disabling :-webkit-any(:link) too provides consistent behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031623</commentid>
    <comment_count>17</comment_count>
      <attachid>237065</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-27 01:40:28 -0700</bug_when>
    <thetext>Comment on attachment 237065
Patch

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

&gt;&gt;&gt; Source/WebCore/css/ElementRuleCollector.cpp:340
&gt;&gt;&gt; +        if (ruleData.visitedNeverMatches())
&gt;&gt; 
&gt;&gt; We can filter out some cases. But some cases cannot be filter out. So still `adjacentFound` exists...
&gt; 
&gt; I don&apos;t think filtering ahead is worth the trouble. The pseudo class :visited is quite uncommon, even more so on complex selectors.

Make sense. Checking adjacentFound in :visited check is more straightforward and easy to understand the code flow.
In the CSS JIT phase, we can statically check this and make the selector CannotMatchAnything :)

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:131
&gt;&gt; +static inline bool isFirstFoundLink(const Element* lastVisitedMatched, const Element* start)
&gt; 
&gt; The name could be super verbose here, something like 
&gt;     lastVisistedElementIsFirstLink()
&gt; or something like that.

lastVisistedElementIsFirstLink is quite expressive. I&apos;ll take `lastVisistedElementIsFirstLink` name when implementing CSS JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032068</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-28 13:52:08 -0700</bug_when>
    <thetext>I cleared the flags to let you update.

I let you decide which version you want to go with, they are both reasonable approaches. You can always change your mind later and refactor the code as needed, your test ensure we avoid regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032187</commentid>
    <comment_count>19</comment_count>
      <attachid>237356</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-29 10:29:51 -0700</bug_when>
    <thetext>Created attachment 237356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032192</commentid>
    <comment_count>20</comment_count>
      <attachid>237356</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-29 10:59:06 -0700</bug_when>
    <thetext>Comment on attachment 237356
Patch

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

&gt; Source/WebCore/css/SelectorChecker.cpp:707
&gt; +                return false;

This changes :-webkit-any(:visited). But :-webkit-any(:link) behavior is not changed.
What do you think?
Since still we need to consider what is the best behavior about :-webkit-any and :visited, :link, in this time, I don&apos;t change :-webkit-any(:link) behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032337</commentid>
    <comment_count>21</comment_count>
      <attachid>237356</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-29 20:54:45 -0700</bug_when>
    <thetext>Comment on attachment 237356
Patch

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

Some comments but it is minor. I trust you with the update, but if you want I can also review it.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Fix :-webkit-any(:visited) consistency in linkMatchType and actual selector matching.
&gt; +        And fix disabling :visited matching when the first link comes.

It would be good to have a more descriptive changelog.

A lot of important information is on the bug report itself. It is a good idea to also repeat that in the changelog. With such information, someone can figure out what your patch does and why you are taking this approach.

Changelog are especially useful when trying to find the reasoning behind a change that was very far in the past. Sometime we have to investigate issue related to code that is over 10 years old.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:707
&gt;&gt; +                return false;
&gt; 
&gt; This changes :-webkit-any(:visited). But :-webkit-any(:link) behavior is not changed.
&gt; What do you think?
&gt; Since still we need to consider what is the best behavior about :-webkit-any and :visited, :link, in this time, I don&apos;t change :-webkit-any(:link) behavior.

I am okay with this as a temporary measure. I think you should also disable :link for consistency (:link would always match inside a functional pseudo class).

We need big changes for :not() and :-webkit-any()/:matches(), that&apos;s gonna be painful :(

&gt; Source/WebCore/css/SelectorChecker.h:58
&gt; -        SelectorCheckingContext(const CSSSelector* selector, Element* element, VisitedMatchType visitedMatchType)
&gt; +        SelectorCheckingContext(const CSSSelector* selector, Element* element, Mode resolvingMode)

Can you move &quot;VisitedMatchType&quot; inside SelectorChecker.cpp now? Or is it still referenced somewhere?

&gt; LayoutTests/ChangeLog:9
&gt; +        Fix :-webkit-any(:visited) consistency in linkMatchType and actual selector matching.
&gt; +        And fix disabling :visited matching when the first link comes.

You don&apos;t need to repeat the changelog for test. Usually here you describe the tests when they are not obvious.

&gt; LayoutTests/ChangeLog:16
&gt; +        * fast/history/nested-visited-test-override-expected.txt: Added.
&gt; +        * fast/history/nested-visited-test-override.html: Added.
&gt; +        * fast/history/visited-inside-any-expected.txt: Added.
&gt; +        * fast/history/visited-inside-any.html: Added.
&gt; +        * fast/history/visited-inside-not-expected.txt: Added.
&gt; +        * fast/history/visited-inside-not.html: Added.

It is very good to have this. I would duplicate all of that for :link since they are opposite.

&gt; LayoutTests/fast/history/nested-visited-test-override.html:12
&gt; +    description(&quot;:visited is only effective when the target is first encountered link element.&quot;);

We usually put the description() call at the beginning of the &lt;script&gt;, outside the test function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032346</commentid>
    <comment_count>22</comment_count>
      <attachid>237356</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 06:41:03 -0700</bug_when>
    <thetext>Comment on attachment 237356
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        And fix disabling :visited matching when the first link comes.
&gt; 
&gt; It would be good to have a more descriptive changelog.
&gt; 
&gt; A lot of important information is on the bug report itself. It is a good idea to also repeat that in the changelog. With such information, someone can figure out what your patch does and why you are taking this approach.
&gt; 
&gt; Changelog are especially useful when trying to find the reasoning behind a change that was very far in the past. Sometime we have to investigate issue related to code that is over 10 years old.

Thank you! I&apos;ll add more detailed comments here.

&gt;&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:707
&gt;&gt;&gt; +                return false;
&gt;&gt; 
&gt;&gt; This changes :-webkit-any(:visited). But :-webkit-any(:link) behavior is not changed.
&gt;&gt; What do you think?
&gt;&gt; Since still we need to consider what is the best behavior about :-webkit-any and :visited, :link, in this time, I don&apos;t change :-webkit-any(:link) behavior.
&gt; 
&gt; I am okay with this as a temporary measure. I think you should also disable :link for consistency (:link would always match inside a functional pseudo class).
&gt; 
&gt; We need big changes for :not() and :-webkit-any()/:matches(), that&apos;s gonna be painful :(

Ah, currently, since :link doesn&apos;t see visitedMatchType in SelectorChecker, :-webkit-any(:link) behaves :-webkit-any(:any-link). And I think it is consistent behavior. (It matches `(:link would always match inside a functional pseudo class).`, I think :-webkit-any(:link) should check isLink at least.)

To ensure that, I&apos;ve added more tests about :link :)

&gt;&gt; Source/WebCore/css/SelectorChecker.h:58
&gt;&gt; +        SelectorCheckingContext(const CSSSelector* selector, Element* element, Mode resolvingMode)
&gt; 
&gt; Can you move &quot;VisitedMatchType&quot; inside SelectorChecker.cpp now? Or is it still referenced somewhere?

Since &quot;VisitedMatchType&quot; is also used in `SelectorCheckerFastPath.h`, it requires more cleanups. I&apos;ll do it in https://bugs.webkit.org/show_bug.cgi?id=135255 :)

&gt;&gt; LayoutTests/ChangeLog:16
&gt;&gt; +        * fast/history/visited-inside-not.html: Added.
&gt; 
&gt; It is very good to have this. I would duplicate all of that for :link since they are opposite.

Sounds nice. I&apos;ll add :link tests.

&gt;&gt; LayoutTests/fast/history/nested-visited-test-override.html:12
&gt;&gt; +    description(&quot;:visited is only effective when the target is first encountered link element.&quot;);
&gt; 
&gt; We usually put the description() call at the beginning of the &lt;script&gt;, outside the test function.

Thanks! I&apos;ll move it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032347</commentid>
    <comment_count>23</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-30 06:43:46 -0700</bug_when>
    <thetext>Committed r173138: &lt;http://trac.webkit.org/changeset/173138&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237046</attachid>
            <date>2014-08-24 09:55:15 -0700</date>
            <delta_ts>2014-08-24 23:16:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135639-20140825015539.patch</filename>
            <type>text/plain</type>
            <size>24691</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWIxYTg5ZWRlNzMyNjIw
ZTI0YjkwNzMzNWQxYWY1N2YzNGM3MzdmNi4uYmI4YWEzZWEzZWU4ZWQyYzZhNjVhNWUyYjBlY2Rh
ZWQ2YWYzNzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTA4LTI0ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzogUmVmYWN0
b3IgOnZpc2l0ZWQgaGFuZGxpbmcgaW4gU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggOi13ZWJraXQtYW55KDp2aXNpdGVk
KSBjb25zaXN0ZW5jeSBpbiBsaW5rTWF0Y2hUeXBlIGFuZCBhY3R1YWwgc2VsZWN0b3IgbWF0Y2hp
bmcuCisgICAgICAgIEFuZCBmaXggZGlzYWJsaW5nIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gdGhl
IGZpcnN0IGxpbmsgY29tZXMuCisKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVz
KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6d2Fsa1RvUGFyZW50RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZl
bHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5RdWlya3NNb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tS
ZWdpb25TZWxlY3Rvcik6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKToKKwogMjAxNC0w
OC0yMyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmFuZG9t
IEdhbWVwYWQgY2xlYW51cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRS
dWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rv
ci5jcHAKaW5kZXggOTVlYTZmZmFhOWJmNjNmYTY5ZTBjNTY0YmM4NWFkOWJkYjYxNTNhMi4uZGFk
NGEyMjYzMTFhMjI5ZDM4NjIxZGFkNDI1NzBkYjUxYTBlMTIwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC0zMjAsOCArMzIwLDggQEAgaW5saW5l
IGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBy
dWxlRGF0YSkKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKIAogICAgIC8vIFNs
b3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKG1fZWxlbWVudC5k
b2N1bWVudCgpLCBtX21vZGUpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCAmbV9lbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxl
Y3RvckNoZWNrZXIobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCAmbV9l
bGVtZW50LCBtX21vZGUpOwogICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHlsZTsKICAg
ICBjb250ZXh0LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7CiAgICAg
Y29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDM5NDI1M2VhMTU3NTE0MDNmMDY4
YWY5ZGE5NDE2OGM1NDEwYzIzOWYuLjQxZjVlZmFjMGM4NGFkNDgyMTkxNTUyOTk0MDNmYTgxYzg1
YThjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC0xMjgsMTAg
KzEyOCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25z
dCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpCiAgICAgcmV0dXJuIGNvdW50OwogfQog
Ci1TZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQsIE1v
ZGUgbW9kZSkKK1NlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50JiBkb2N1
bWVudCkKICAgICA6IG1fc3RyaWN0UGFyc2luZyghZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkpCiAg
ICAgLCBtX2RvY3VtZW50SXNIVE1MKGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBt
X21vZGUobW9kZSkKIHsKIH0KIApAQCAtMTQzLDcgKzE0Miw3IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QK
ICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBjb250ZXh0LnBzZXVkb0lk
ICE9IHBzZXVkb0lkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNvbnRleHQucHNl
dWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRvSWQgIT0gTk9QU0VVRE8pIHsKLSAgICAgICAgaWYg
KG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwc2V1ZG9JZCA8IEZJUlNUX0lOVEVS
TkFMX1BTRVVET0lEKQorICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCiAg
ICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUocHNldWRv
SWQpOwogCiAgICAgICAgIC8vIFdoZW4gaWdub3JpbmcgdmlydHVhbCBwc2V1ZG8gZWxlbWVudHMs
IHRoZSBjb250ZXh0J3MgcHNldWRvIHNob3VsZCBhbHNvIGJlIE5PUFNFVURPIGJ1dCB0aGF0IGRv
ZXMKQEAgLTE3MCw2ICsxNjksMTYgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBz
ZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICByZXR1
cm4gZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSOwogfQogICAgIAorc3RhdGljIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgd2Fsa1RvUGFyZW50RWxlbWVudChjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KQoreworICAg
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgdXBkYXRlZENvbnRleHQo
Y29udGV4dCk7CisgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHNlZSB0
aGUgZmlyc3QgbGluay4KKyAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc0xpbmsoKSkKKyAgICAg
ICAgdXBkYXRlZENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6Vmlz
aXRlZE1hdGNoRGlzYWJsZWQ7CisgICAgdXBkYXRlZENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQu
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIHJldHVybiB1cGRhdGVkQ29udGV4dDsKK30K
KwogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBhbmQgY29tYmluYXRvcnMKIC8vIEl0
IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFsdWVzOgogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAg
ICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCkBAIC0xODUsNyArMTk0
LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkgewogICAgICAgICAvLyBJbiBT
ZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxlbWVudCBpbnNpZGUgYSBmdW5jdGlvbmFsIHBz
ZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3VlIDcpLgogICAgICAgICAvLyBNYWtlIGl0IGFz
IG1hdGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xhcmlmaWVzIHRoaXMgY2FzZS4KLSAg
ICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MpCisgICAgICAgIGlmIChj
b250ZXh0LmZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyAhPSBGdW5jdGlvbmFsUHNldWRvQ2xhc3M6Ok5v
bmUpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAKICAgICAg
ICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPmlzQ3VzdG9tUHNldWRvRWxlbWVudCgpKSB7CkBAIC0x
OTgsNyArMjA3LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1l
bnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIG1fbW9k
ZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgfHwgbV9tb2RlID09IE1vZGU6OlF1ZXJ5aW5nUnVs
ZXMpCisgICAgICAgICAgICBpZiAoKCFjb250ZXh0LmVsZW1lbnRTdHlsZSAmJiBjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHx8IGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzTG9jYWxseTsKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NT
ZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7
CkBAIC0yMjQsOCArMjMzLDggQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVk
b0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAgaWYg
KGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5wc2V1ZG9JZCAhPSBkeW5h
bWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5Owog
Ci0gICAgICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZp
cnN0IGxpbmsgb3IgdHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMu
Ci0gICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPmlzTGluaygpIHx8IChyZWxhdGlvbiAhPSBD
U1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQp
KQorICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRvIG1h
dGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCisgICAgICAgIGlmIChyZWxhdGlv
biAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoRGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBOT1BTRVVE
TzsKQEAgLTIzMywxMCArMjQyLDEwIEBAIGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQ
c2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVjCiAKICAgICBz
d2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpOworICAgICAgICBuZXh0Q29udGV4dCA9IHdhbGtUb1BhcmVudEVsZW1lbnQobmV4dENvbnRl
eHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5l
eHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAw
OwotICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVu
dCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBmb3Ig
KDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSB3YWxrVG9QYXJlbnRFbGVtZW50
KG5leHRDb250ZXh0KSkgewogICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRjaFJl
Y3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKICAgICAgICAgICAg
IGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwpAQCAtMjQ1LDcgKzI1NCw3
IEBAIGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVjCiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGls
ZDoKICAgICAgICAgewotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQu
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICAgICAgbmV4dENvbnRleHQgPSB3YWxr
VG9QYXJlbnRFbGVtZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRl
eHQuZWxlbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9
IG5leHRDb250ZXh0LnNlbGVjdG9yOwpAQCAtMjU3LDcgKzI2Niw3IEBAIGlubGluZSBzdGF0aWMg
Ym9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVjCiAgICAgICAgIH0KIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFj
ZW50OgotICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAg
ICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsK
ICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gY29udGV4dC5lbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAgICAgICB9CkBAIC0yNjks
NyArMjc4LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAgcmV0dXJuIG1hdGNo
UmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogCiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKG1fbW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFy
ZW50RWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKQogICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKICAgICAgICAgfQpAQCAtMjg5LDcgKzI5OCw3IEBAIGlubGluZSBzdGF0aWMg
Ym9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVjCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgogICAg
ICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9F
bGVtZW50KGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICBuZXh0Q29udGV4dC5oYXNT
ZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVDVElPTjsKLSAgICAgICAgaWYg
KChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBtX21vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVz
KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPCisgICAgICAgIGlmICgoY29udGV4dC5lbGVt
ZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxl
cykgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETwogICAgICAgICAgICAgJiYgIW5leHRDb250
ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5oYXNT
Y3JvbGxiYXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29t
cGxldGVseTsKQEAgLTQwMSw3ICs0MTAsNyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JB
Y3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZQogICAg
IC8vICAgIHNlbGVjdG9yIGRvZXMgbm90IHVzZSBhIHBzZXVkby1jbGFzcyBzZWxlY3RvciBvdGhl
ciB0aGFuICc6YWN0aXZlJyBhbmQgJzpob3ZlcicuCiAgICAgLy8gICAgc2VsZWN0b3IgZG9lcyBu
b3QgdXNlIGEgcHNldWRvLWVsZW1lbnQgc2VsZWN0b3IuCiAgICAgLy8gICAgc2VsZWN0b3IgaXMg
bm90IHBhcnQgb2YgYW4gYXJndW1lbnQgdG8gYSBmdW5jdGlvbmFsIHBzZXVkby1jbGFzcyBvciBw
c2V1ZG8tZWxlbWVudC4KLSAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykK
KyAgICBpZiAoY29udGV4dC5mdW5jdGlvbmFsUHNldWRvQ2xhc3MgIT0gU2VsZWN0b3JDaGVja2Vy
OjpGdW5jdGlvbmFsUHNldWRvQ2xhc3M6Ok5vbmUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBjb250ZXh0LmZpcnN0U2VsZWN0
b3JPZlRoZUZyYWdtZW50OyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9y
eSgpKSB7CkBAIC00ODAsNyArNDg5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQgc3ViQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAgIHN1YkNvbnRleHQuaW5GdW5jdGlv
bmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICAgICAgc3ViQ29udGV4dC5mdW5jdGlvbmFs
UHNldWRvQ2xhc3MgPSBGdW5jdGlvbmFsUHNldWRvQ2xhc3M6Ok5vdDsKICAgICAgICAgICAgIHN1
YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzZWxlY3Rvckxpc3QtPmZpcnN0
KCk7CiAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3Qt
PmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzdWJD
b250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3Vi
Q29udGV4dC5zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsK
QEAgLTUyMiw3ICs1MzEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5
bGUpIHsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1w
dHkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUo
cmVzdWx0KTsKQEAgLTUzMyw3ICs1NDIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVs
ZW1lbnQKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBpc0ZpcnN0
Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9k
ZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVs
ZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUpCkBAIC01NDYsNyAr
NTU1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlw
ZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNGaXJzdE9mVHlwZShlbGVtZW50LCBlbGVtZW50
LT50YWdRTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29s
dmluZ1N0eWxlKQorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQt
PnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQpAQCAtNTU1LDcgKzU2NCw3IEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIC8vIGxhc3QtY2hpbGQgbWF0Y2hlcyB0
aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAgICAgICAgIGlmIChFbGVtZW50
KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlm
IChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5
bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RD
aGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgY2hpbGRTdHls
ZSkKQEAgLTU2Nyw3ICs1NzYsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29u
c3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGxhc3Qt
b2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmlu
Z1N0eWxlKQogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIGlmICgh
cGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NzgsNyArNTg3LDcgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5w
YXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBpc0Zp
cnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxk
ID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hp
bGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJl
bkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwpAQCAtNTkzLDcgKzYwMiw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5T2ZU
eXBlOgogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93Lgog
ICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmlu
Z1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50
LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE1LDcgKzYyNCw3IEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNCZWZvcmUoZWxl
bWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHls
ZSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxk
U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hp
bGRJbmRleChjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQpAQCAt
NjMyLDcgKzY0MSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxl
bWVudHNPZlR5cGVCZWZvcmUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQog
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlG
b3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3It
Pm1hdGNoTnRoKGNvdW50KSkKQEAgLTY0Myw3ICs2NTIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKQorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01v
ZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVs
ZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY1Niw3ICs2NjUs
NyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJz
ZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVsZW1lbnQq
IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50
LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTY3Myw3ICs2ODIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55OgogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7Ci0g
ICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7
CisgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5mdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSBGdW5j
dGlvbmFsUHNldWRvQ2xhc3M6OkFueTsKICAgICAgICAgICAgICAgICBQc2V1ZG9JZCBpZ25vcmVE
eW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAgICAgICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0
LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250ZXh0
LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1
YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwpAQCAtNjkwLDkg
KzY5OSwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dC0+aXNMaW5rKCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRl
ZDoKICAgICAgICAgICAgIC8vIC4uLmV4Y2VwdCBpZiA6dmlzaXRlZCBtYXRjaGluZyBpcyBkaXNh
YmxlZCBmb3IgYW5jZXN0b3Ivc2libGluZyBtYXRjaGluZy4KKworICAgICAgICAgICAgLy8gSW5z
aWRlIDotd2Via2l0LWFueSBwc2V1ZG8gY2xhc3MsIDp2aXNpdGVkIGlzIHRyZWF0ZWQgYXMgOi1h
bnktbGluayBzaW5jZSBsaW5rTWF0Y2hUeXBlIGJlY29tZXMgTWF0Y2hBbGwuCisgICAgICAgICAg
ICBpZiAoY29udGV4dC5mdW5jdGlvbmFsUHNldWRvQ2xhc3MgPT0gRnVuY3Rpb25hbFBzZXVkb0Ns
YXNzOjpBbnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZWVtbnQtPmlzTGluaygpOwogICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNo
VHlwZSA9PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0RyYWc6Ci0gICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmlu
Z1N0eWxlKSB7CisgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0
eWxlKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0
ZWRCeURyYWcoKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC03MDUsNyArNzE4LDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0Ns
YXNzKGVsZW1lbnQpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVy
OgogICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8
fCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVy
KCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTcxNyw3ICs3MzAsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NBY3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8
IGVsZW1lbnQtPmlzTGluaygpIHx8IGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShj
b250ZXh0KSkgewotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVs
ZW1lbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
LT5zZXRBZmZlY3RlZEJ5QWN0aXZlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTgy
MCw3ICs4MzMsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgIGNvbnN0IENTU1NlbGVj
dG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKICAgICAgICAgZm9yIChz
dWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBz
dWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0
OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBzdWJDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3ViQ29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAg
ICAgIHN1YkNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICAg
ICAgc3ViQ29udGV4dC5mdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSBGdW5jdGlvbmFsUHNldWRvQ2xh
c3M6OkN1ZTsKICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGln
bm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmlu
ZGV4IDIzZmNkOGU4NGY2NjkyYWNlNzY5ZDBiMmEyYzBjNjg5ZDRjOTcxMDYuLjVjNWYzNjcyNDM2
ZmZlMTM2YTA3MTU3NjVmYmQ4ODQ2ODI3YTIyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmgKQEAgLTUwLDI3ICs1MCwzMiBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAg
IGVudW0gY2xhc3MgTW9kZSA6IHVuc2lnbmVkIGNoYXIgewogICAgICAgICBSZXNvbHZpbmdTdHls
ZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNl
dWRvRWxlbWVudHMsIFF1ZXJ5aW5nUnVsZXMKICAgICB9OworICAgIGVudW0gY2xhc3MgRnVuY3Rp
b25hbFBzZXVkb0NsYXNzIDogdW5zaWduZWQgY2hhciB7CisgICAgICAgIE5vbmUgPSAwLCBBbnks
IE5vdCwgQ3VlCisgICAgfTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYsIE1vZGUp
OworICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYpOwogCiAgICAgc3RydWN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0IHsKICAgICAgICAgLy8gSW5pdGlhbCBzZWxlY3RvciBjb25zdHJ1Y3Rv
cgotICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dChjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlw
ZSkKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBNb2RlIHJlc29sdmluZ01vZGUpCiAgICAgICAgICAg
ICA6IHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCByZXNvbHZpbmdNb2RlKHJlc29s
dmluZ01vZGUpCiAgICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKICAgICAgICAgICAgICwg
c2NvcGUobnVsbHB0cikKLSAgICAgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0
Y2hUeXBlKQorICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaERpc2FibGVkIDogVmlzaXRlZE1hdGNo
RW5hYmxlZCkKICAgICAgICAgICAgICwgcHNldWRvSWQoTk9QU0VVRE8pCiAgICAgICAgICAgICAs
IGVsZW1lbnRTdHlsZShudWxscHRyKQogICAgICAgICAgICAgLCBzY3JvbGxiYXIobnVsbHB0cikK
ICAgICAgICAgICAgICwgZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQoc2VsZWN0b3IpCiAgICAg
ICAgICAgICAsIHNjcm9sbGJhclBhcnQoTm9QYXJ0KQotICAgICAgICAgICAgLCBpbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgICAgICwgZnVuY3Rpb25hbFBzZXVkb0NsYXNz
KEZ1bmN0aW9uYWxQc2V1ZG9DbGFzczo6Tm9uZSkKICAgICAgICAgICAgICwgaGFzU2Nyb2xsYmFy
UHNldWRvKGZhbHNlKQogICAgICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCiAg
ICAgICAgIHsgfQogCiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcjsKKyAgICAg
ICAgTW9kZSByZXNvbHZpbmdNb2RlOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50OwogICAgICAg
ICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKICAgICAgICAgVmlzaXRlZE1hdGNoVHlwZSB2
aXNpdGVkTWF0Y2hUeXBlOwpAQCAtNzksNyArODQsNyBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIg
ewogICAgICAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhcjsKICAgICAgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50OwogICAgICAgICBTY3JvbGxiYXJQ
YXJ0IHNjcm9sbGJhclBhcnQ7Ci0gICAgICAgIGJvb2wgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3M7
CisgICAgICAgIEZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyBmdW5jdGlvbmFsUHNldWRvQ2xhc3M7CiAg
ICAgICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAgICAgICBib29sIGhhc1NlbGVjdGlv
blBzZXVkbzsKICAgICB9OwpAQCAtMTAyLDcgKzEwNyw2IEBAIGNsYXNzIFNlbGVjdG9yQ2hlY2tl
ciB7CiAKICAgICBib29sIG1fc3RyaWN0UGFyc2luZzsKICAgICBib29sIG1fZG9jdW1lbnRJc0hU
TUw7Ci0gICAgTW9kZSBtX21vZGU7CiB9OwogCiBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAyZmE1YzllM2MyNDNhMTZkNjE2M2E5
NGY0YzA4YmY5YzBmNTBlODBiLi42MjJjNzdkYWY5NmMxODQ3YWIyNDg1NTg4YmQ2N2YzMTkzMjhk
MDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTU3MCw5ICs1NzAsOSBAQCBp
bmxpbmUgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25T
ZWxlY3RvciwgRWxlbWVudCogcmVnaQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lv
bkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIocmVnaW9uRWxlbWVudC0+ZG9jdW1lbnQoKSwgU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVj
a2VyKHJlZ2lvbkVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkg
ewotICAgICAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0KHMsIHJlZ2lvbkVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6Vmlz
aXRlZE1hdGNoRGlzYWJsZWQpOworICAgICAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHMsIHJlZ2lvbkVsZW1lbnQsIFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CiAgICAgICAgIGlmIChzZWxlY3Rv
ckNoZWNrZXIubWF0Y2goc2VsZWN0b3JDaGVja2luZ0NvbnRleHQpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCmluZGV4IDEw
ZWYwMmY0ODQyMDg4MWI2Zjc5OGVlNjdmZjNlZjMzZDBjY2FiNWIuLjVjM2Y5YmNhMTcxYWRjOTU5
NWI4ZDE5ZWRjMGQ5NTlkODY4YWNlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
ZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5j
cHAKQEAgLTEyMSw4ICsxMjEsOCBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckRhdGFMaXN0OjpzZWxl
Y3Rvck1hdGNoZXMoY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEsCiAgICAgICAgIHJl
dHVybiBzZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5tYXRjaGVzKCk7CiAgICAgfQogCi0gICAgU2Vs
ZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCksIFNlbGVjdG9y
Q2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChzZWxlY3RvckRhdGEu
c2VsZWN0b3IsICZlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVk
KTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQuZG9jdW1lbnQo
KSk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzZWxlY3Rv
ckNoZWNraW5nQ29udGV4dChzZWxlY3RvckRhdGEuc2VsZWN0b3IsICZlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIHNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5v
ZGU7CiAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29u
dGV4dCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237059</attachid>
            <date>2014-08-24 23:16:11 -0700</date>
            <delta_ts>2014-08-29 10:29:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135639-20140825151637.patch</filename>
            <type>text/plain</type>
            <size>26674</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWIxYTg5ZWRlNzMyNjIw
ZTI0YjkwNzMzNWQxYWY1N2YzNGM3MzdmNi4uNmYzYzg3ZTMxOTFiMmMyNTg2NGYwNzE5ZDdkMzIz
YzFiNWQ2ZDAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTA4LTI0ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzogUmVmYWN0
b3IgOnZpc2l0ZWQgaGFuZGxpbmcgaW4gU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggOi13ZWJraXQtYW55KDp2aXNpdGVk
KSBjb25zaXN0ZW5jeSBpbiBsaW5rTWF0Y2hUeXBlIGFuZCBhY3R1YWwgc2VsZWN0b3IgbWF0Y2hp
bmcuCisgICAgICAgIEFuZCBmaXggZGlzYWJsaW5nIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gdGhl
IGZpcnN0IGxpbmsgY29tZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvaGlzdG9yeS9uZXN0ZWQt
dmlzaXRlZC10ZXN0LW92ZXJyaWRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvaGlzdG9yeS92
aXNpdGVkLWluc2lkZS1hbnkuaHRtbAorCisgICAgICAgICogY3NzL0VsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OndhbGtUb1BhcmVu
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vy
c2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgor
ICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6
Y2hlY2tSZWdpb25TZWxlY3Rvcik6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKToKKwog
MjAxNC0wOC0yMyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmFuZG9tIEdhbWVwYWQgY2xlYW51cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAKaW5kZXggOTVlYTZmZmFhOWJmNjNmYTY5ZTBjNTY0YmM4NWFkOWJkYjYxNTNh
Mi4uZGFkNGEyMjYzMTFhMjI5ZDM4NjIxZGFkNDI1NzBkYjUxYTBlMTIwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC0zMjAsOCArMzIwLDggQEAg
aW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVE
YXRhJiBydWxlRGF0YSkKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKIAogICAg
IC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKG1fZWxl
bWVudC5kb2N1bWVudCgpLCBtX21vZGUpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCAmbV9lbGVtZW50LCBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOworICAgIFNlbGVjdG9yQ2hlY2tl
ciBzZWxlY3RvckNoZWNrZXIobV9lbGVtZW50LmRvY3VtZW50KCkpOworICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3Rvcigp
LCAmbV9lbGVtZW50LCBtX21vZGUpOwogICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gbV9zdHls
ZTsKICAgICBjb250ZXh0LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7
CiAgICAgY29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxiYXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDM5NDI1M2VhMTU3NTE0
MDNmMDY4YWY5ZGE5NDE2OGM1NDEwYzIzOWYuLjFmMTVkYWFiYTY1YzY3Y2JlY2YxNWU1NDU2MjEy
YjkyNTViNTNhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC0x
MjgsMTAgKzEyOCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRl
cihjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpCiAgICAgcmV0dXJuIGNvdW50
OwogfQogCi1TZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1l
bnQsIE1vZGUgbW9kZSkKK1NlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50
JiBkb2N1bWVudCkKICAgICA6IG1fc3RyaWN0UGFyc2luZyghZG9jdW1lbnQuaW5RdWlya3NNb2Rl
KCkpCiAgICAgLCBtX2RvY3VtZW50SXNIVE1MKGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0g
ICAgLCBtX21vZGUobW9kZSkKIHsKIH0KIApAQCAtMTQzLDEyICsxNDIsMTIgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQu
cHNldWRvSWQgIT0gcHNldWRvSWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoY29u
dGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1ZG9JZCAhPSBOT1BTRVVETykgewotICAg
ICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkIDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQpCisgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VV
RE9JRCkKICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRIYXNQc2V1ZG9TdHls
ZShwc2V1ZG9JZCk7CiAKICAgICAgICAgLy8gV2hlbiBpZ25vcmluZyB2aXJ0dWFsIHBzZXVkbyBl
bGVtZW50cywgdGhlIGNvbnRleHQncyBwc2V1ZG8gc2hvdWxkIGFsc28gYmUgTk9QU0VVRE8gYnV0
IHRoYXQgZG9lcwogICAgICAgICAvLyBub3QgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICByZXR1
cm4gbV9tb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0Vs
ZW1lbnRzOworICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNv
bGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTE3MCw2ICsxNjksMTYgQEAgaW5saW5lIHN0YXRpYyBib29sIGhh
c1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWMKICAgICByZXR1cm4gZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSOwogfQogICAgIAorc3RhdGlj
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgd2Fsa1RvUGFyZW50RWxl
bWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0KQoreworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgdXBk
YXRlZENvbnRleHQoY29udGV4dCk7CisgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3
aGVuIHdlIHNlZSB0aGUgZmlyc3QgbGluay4KKyAgICBpZiAoY29udGV4dC5lbGVtZW50LT5pc0xp
bmsoKSkKKyAgICAgICAgdXBkYXRlZENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFNlbGVjdG9y
Q2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQ7CisgICAgdXBkYXRlZENvbnRleHQuZWxlbWVu
dCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIHJldHVybiB1cGRhdGVk
Q29udGV4dDsKK30KKwogLy8gUmVjdXJzaXZlIGNoZWNrIG9mIHNlbGVjdG9ycyBhbmQgY29tYmlu
YXRvcnMKIC8vIEl0IGNhbiByZXR1cm4gNCBkaWZmZXJlbnQgdmFsdWVzOgogLy8gKiBTZWxlY3Rv
ck1hdGNoZXMgICAgICAgICAgLSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCkBA
IC0xOTgsNyArMjA3LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0Vs
ZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIG1f
bW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgfHwgbV9tb2RlID09IE1vZGU6OlF1ZXJ5aW5n
UnVsZXMpCisgICAgICAgICAgICBpZiAoKCFjb250ZXh0LmVsZW1lbnRTdHlsZSAmJiBjb250ZXh0
LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHx8IGNvbnRleHQucmVzb2x2
aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQogICAgICAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzTG9jYWxseTsKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBD
U1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSk7CkBAIC0yMjQsOCArMjMzLDggQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBz
ZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAg
aWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5wc2V1ZG9JZCAhPSBk
eW5hbWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OwogCi0gICAgICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhl
IGZpcnN0IGxpbmsgb3IgdHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3Rv
cnMuCi0gICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPmlzTGluaygpIHx8IChyZWxhdGlvbiAh
PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hp
bGQpKQorICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRv
IG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCisgICAgICAgIGlmIChyZWxh
dGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rv
cjo6Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlz
aXRlZE1hdGNoRGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBOT1BT
RVVETzsKQEAgLTIzMywxMCArMjQyLDEwIEBAIGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxi
YXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVjCiAKICAg
ICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoK
LSAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpOworICAgICAgICBuZXh0Q29udGV4dCA9IHdhbGtUb1BhcmVudEVsZW1lbnQobmV4dENv
bnRleHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9
IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUg
PSAwOwotICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxl
bWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBm
b3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSB3YWxrVG9QYXJlbnRFbGVt
ZW50KG5leHRDb250ZXh0KSkgewogICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRj
aFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKICAgICAgICAg
ICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwpAQCAtMjQ1LDcgKzI1
NCw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVjCiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpD
aGlsZDoKICAgICAgICAgewotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRl
eHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICAgICAgbmV4dENvbnRleHQgPSB3
YWxrVG9QYXJlbnRFbGVtZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENv
bnRleHQuZWxlbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBs
ZXRlbHk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwpAQCAtMjU3LDcgKzI2Niw3IEBAIGlubGluZSBzdGF0
aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVjCiAgICAgICAgIH0KIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFk
amFjZW50OgotICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7Cisg
ICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
IHsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gY29udGV4dC5lbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAgICAgICB9CkBAIC0y
NjksNyArMjc4LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1l
bnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAgcmV0dXJuIG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogCiAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKG1fbW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdN
b2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKQogICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3Np
dGlvbmFsUnVsZXMoKTsKICAgICAgICAgfQpAQCAtMjg5LDcgKzI5OCw3IEBAIGlubGluZSBzdGF0
aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVjCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgog
ICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1
ZG9FbGVtZW50KGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICBuZXh0Q29udGV4dC5o
YXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVDVElPTjsKLSAgICAgICAg
aWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBtX21vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1
bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPCisgICAgICAgIGlmICgoY29udGV4dC5l
bGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdS
dWxlcykgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETwogICAgICAgICAgICAgJiYgIW5leHRD
b250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5o
YXNTY3JvbGxiYXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKQEAgLTUyMiw3ICs1MzEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHls
ZSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVB
ZmZlY3RlZEJ5RW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVu
dFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNl
dEVtcHR5U3RhdGUocmVzdWx0KTsKQEAgLTUzMyw3ICs1NDIsNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAgICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0
aGF0IGlzIGFuIGVsZW1lbnQKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hp
bGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxkU3R5bGUp
CkBAIC01NDYsNyArNTU1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgLy8g
Zmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNGaXJzdE9mVHlwZShlbGVt
ZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlKQorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIHBh
cmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQpAQCAtNTU1
LDcgKzU2NCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIC8vIGxhc3QtY2hp
bGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAg
ICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4
dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZm
ZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQg
JiYgY2hpbGRTdHlsZSkKQEAgLTU2Nyw3ICs1NzYsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFzdE9mVHlwZToKICAgICAgICAg
ICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUK
ICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSkKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAg
ICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NzgsNyArNTg3LDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQg
PSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0
Q2hpbGQgPSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJv
b2wgb25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFy
c2luZ0NoaWxkcmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAg
ICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7
CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5l
bGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50
LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcygpOwpAQCAtNTkzLDcgKzYwMiw3
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NPbmx5T2ZUeXBlOgogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMg
dmVyeSBzbG93LgogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2
aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVz
KCk7CiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0
ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjA0
LDcgKzYxMyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIGJyZWFrOwogI2lm
IEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NQbGFjZWhvbGRlclNob3duOgotICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgIGlmIChSZW5k
ZXJTdHlsZSogc3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKSkKICAgICAgICAgICAgICAgICAgICAgc3R5bGUt
PnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgfQpAQCAtNjE1LDcgKzYyNCw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNCZWZvcmUoZWxlbWVudCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBj
b250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRJbmRleChj
b3VudCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQpAQCAtNjMyLDcgKzY0
MSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5
cGVCZWZvcmUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRo
KGNvdW50KSkKQEAgLTY0Myw3ICs2NTIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmlu
Z1N0eWxlKQorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNl
dENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY1Niw3ICs2NjUsNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0Zpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTY5MCw5ICs2OTksMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQtPmlzTGluaygpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1Zpc2l0ZWQ6CiAgICAgICAgICAgICAvLyAuLi5leGNlcHQgaWYgOnZpc2l0ZWQgbWF0Y2hp
bmcgaXMgZGlzYWJsZWQgZm9yIGFuY2VzdG9yL3NpYmxpbmcgbWF0Y2hpbmcuCisgICAgICAgICAg
ICAvLyBJbnNpZGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgZXhjZXB0IGZvciA6bm90LCA6dmlz
aXRlZCBpcyB0cmVhdGVkIGFzIDotYW55LWxpbmsgc2luY2UgbGlua01hdGNoVHlwZSBiZWNvbWVz
IE1hdGNoQWxsLgorICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xh
c3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpOwogICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
PSBWaXNpdGVkTWF0Y2hFbmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0RyYWc6Ci0gICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KSB7CisgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29s
dmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURy
YWcoKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC03MDUsNyArNzE3LDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVs
ZW1lbnQpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgogICAg
ICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8fCBjYW5N
YXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTcxNyw3ICs3MjksNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NBY3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGVsZW1l
bnQtPmlzTGluaygpIHx8IGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb250ZXh0
KSkgewotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJl
c29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRT
dHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRB
ZmZlY3RlZEJ5QWN0aXZlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAyM2ZjZDhlODRmNjY5MmFjZTc2OWQwYjJhMmMwYzY4
OWQ0Yzk3MTA2Li5mNDM5M2YzMjI2M2MxMjQwN2Q1NDg5ZWE1YTllMWMwOWYwYjY0ZWJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC01MSwxNSArNTEsMTYgQEAgY2xhc3Mg
U2VsZWN0b3JDaGVja2VyIHsKICAgICAgICAgUmVzb2x2aW5nU3R5bGUgPSAwLCBDb2xsZWN0aW5n
UnVsZXMsIENvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzLCBRdWVy
eWluZ1J1bGVzCiAgICAgfTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYsIE1vZGUp
OworICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYpOwogCiAgICAgc3RydWN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0IHsKICAgICAgICAgLy8gSW5pdGlhbCBzZWxlY3RvciBjb25zdHJ1Y3Rv
cgotICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dChjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlw
ZSkKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBNb2RlIHJlc29sdmluZ01vZGUpCiAgICAgICAgICAg
ICA6IHNlbGVjdG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCByZXNvbHZpbmdNb2RlKHJlc29s
dmluZ01vZGUpCiAgICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKICAgICAgICAgICAgICwg
c2NvcGUobnVsbHB0cikKLSAgICAgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0
Y2hUeXBlKQorICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29sdmluZ01vZGUgPT0g
TW9kZTo6UXVlcnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaERpc2FibGVkIDogVmlzaXRlZE1hdGNo
RW5hYmxlZCkKICAgICAgICAgICAgICwgcHNldWRvSWQoTk9QU0VVRE8pCiAgICAgICAgICAgICAs
IGVsZW1lbnRTdHlsZShudWxscHRyKQogICAgICAgICAgICAgLCBzY3JvbGxiYXIobnVsbHB0cikK
QEAgLTcxLDYgKzcyLDcgQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICAgICAgeyB9CiAK
ICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOworICAgICAgICBNb2RlIHJlc29s
dmluZ01vZGU7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CiAgICAgICAgIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlOwogICAgICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5
cGU7CkBAIC0xMDIsNyArMTA0LDYgQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKIAogICAgIGJv
b2wgbV9zdHJpY3RQYXJzaW5nOwogICAgIGJvb2wgbV9kb2N1bWVudElzSFRNTDsKLSAgICBNb2Rl
IG1fbW9kZTsKIH07CiAKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1
ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCmluZGV4IDJmYTVjOWUzYzI0M2ExNmQ2MTYzYTk0ZjRjMDhiZjljMGY1
MGU4MGIuLjYyMmM3N2RhZjk2YzE4NDdhYjI0ODU1ODhiZDY3ZjMxOTMyOGQwNzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNTcwLDkgKzU3MCw5IEBAIGlubGluZSBib29sIGNo
ZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVt
ZW50KiByZWdpCiAgICAgaWYgKCFyZWdpb25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tl
cihyZWdpb25FbGVtZW50LT5kb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5
aW5nUnVsZXMpOworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIocmVnaW9uRWxl
bWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lv
blNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7Ci0gICAgICAgIFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQocywgcmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNh
YmxlZCk7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQg
c2VsZWN0b3JDaGVja2luZ0NvbnRleHQocywgcmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRj
aChzZWxlY3RvckNoZWNraW5nQ29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggMTBlZjAyZjQ4NDIwODgx
YjZmNzk4ZWU2N2ZmM2VmMzNkMGNjYWI1Yi4uNWMzZjliY2ExNzFhZGM5NTk1YjhkMTllZGMwZDk1
OWQ4NjhhY2U2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtMTIxLDgg
KzEyMSw4IEBAIGlubGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyhj
b25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSwKICAgICAgICAgcmV0dXJuIHNlbGVjdG9y
Q2hlY2tlckZhc3RQYXRoLm1hdGNoZXMoKTsKICAgICB9CiAKLSAgICBTZWxlY3RvckNoZWNrZXIg
c2VsZWN0b3JDaGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSwgU2VsZWN0b3JDaGVja2VyOjpNb2Rl
OjpRdWVyeWluZ1J1bGVzKTsKLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgIFNlbGVj
dG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsKKyAgICBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0KHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6TW9k
ZTo6UXVlcnlpbmdSdWxlcyk7CiAgICAgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQuc2NvcGUgPSBy
b290Tm9kZS5pc0RvY3VtZW50Tm9kZSgpID8gbnVsbHB0ciA6ICZyb290Tm9kZTsKICAgICByZXR1
cm4gc2VsZWN0b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KTsKIH0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA3YWQ0MTc3NDJkMDgzYTAzZGUwMTk1MmM0ZjEyMjA0OWE3YzQwMzViLi45N2UxZjBhZGRk
ZjI2NGMyY2M1Nzg5NzIzYzYxZDc4ODcwMDZmMTQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTQtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgQ1NTOiBSZWZhY3RvciA6dmlzaXRlZCBoYW5kbGluZyBpbiBTZWxlY3RvckNoZWNrZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTYzOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCA6LXdlYmtp
dC1hbnkoOnZpc2l0ZWQpIGNvbnNpc3RlbmN5IGluIGxpbmtNYXRjaFR5cGUgYW5kIGFjdHVhbCBz
ZWxlY3RvciBtYXRjaGluZy4KKyAgICAgICAgQW5kIGZpeCBkaXNhYmxpbmcgOnZpc2l0ZWQgbWF0
Y2hpbmcgd2hlbiB0aGUgZmlyc3QgbGluayBjb21lcy4KKworICAgICAgICAqIGZhc3QvaGlzdG9y
eS9uZXN0ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLWFueS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1hbnkuaHRt
bDogQWRkZWQuCisKIDIwMTQtMDgtMjIgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW0VGTF1bV0syXSBSZW1vdmUgZmFzdC9jc3MzLXRleHQvY3NzMy10ZXh0
LWFsaWduLWxhc3QvdGV4dC1hbGlnbi1sYXN0LXdpdGgtdGV4dC1hbGlnbi1qdXN0aWZ5Lmh0bWwg
ZnJvbSBza2lwcGVkIGxpc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9u
ZXN0ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvaGlzdG9yeS9uZXN0ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40OGRkY2RjZDJmNDljOGJhMTM2YTRmNDg5MTA4MDEyNGMzZGE2OTc2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qt
b3ZlcnJpZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhpcyBsaW5rIHNob3VsZCBi
ZSBncmVlbjoKKworT25lCisKK1BBU1Mgc3R5bGUuY29sb3IgYmVjYW1lICJyZ2IoMCwgMTI4LCAw
KSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvbmVzdGVkLXZpc2l0ZWQtdGVzdC1v
dmVycmlkZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRl
c3Qtb3ZlcnJpZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODFlNzA1ZGRjNWRhYzU0NzkwYmMwOWMzZDZj
ZjE3YWQyNGE5MzdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5
L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgoranNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB3aW5kb3cudGVzdFJ1bm5lci5rZWVwV2ViSGlzdG9yeSgpOworCitm
dW5jdGlvbiBjb21wYXJlU3R5bGVzKCkKK3sKKyAgICB2YXIgYW5jaG9yID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiYSIpOworICAgIGFuY2hvci5ocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCI7
CisgICAgYW5jaG9yLnNldEF0dHJpYnV0ZSgiaWQiLCAib25lIik7CisgICAgYW5jaG9yLmlubmVy
SFRNTCA9ICI8c3Bhbj5PbmU8L3NwYW4+IjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZW5jbG9zdXJlIikuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzKSB7CisgICAgICAgIHN0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25lIikuZmlyc3RDaGlsZCk7Cisg
ICAgICAgIHNob3VsZEJlY29tZUVxdWFsVG9TdHJpbmcoInN0eWxlLmNvbG9yIiwgInJnYigwLCAx
MjgsIDApIiwgZmluaXNoSlNUZXN0KTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4KKy5v
ayBzcGFuIHsgY29sb3I6IGdyZWVuOyB9Cisub2s6dmlzaXRlZCBzcGFuIHsgY29sb3I6IHJlZDsg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iY29tcGFyZVN0eWxlcygpIj4KKzxp
ZnJhbWUgc3JjPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9p
ZnJhbWU+CisKKzxwPlRoaXMgbGluayBzaG91bGQgYmUgZ3JlZW46PC9wPgorPHA+Cis8YSBpZD0i
ZW5jbG9zdXJlIiBjbGFzcz0ib2siIGhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5jb20iPjwvYT4K
KzwvcD4KKworPGRpdiBpZD1jb25zb2xlPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLWFueS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtYW55LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iZDM4YzQ4Y2RiMTBlOTA3ZDljNTliYjIyOGMyNjdhNDdmOTA1
M2MxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQt
aW5zaWRlLWFueS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorT25lIGFuZCBUd28gbGlu
a3Mgc2hvdWxkIGJlIGdyZWVuOgorCitPbmUKKworYW5kIFR3bworUEFTUyBvbmVTdHlsZS5jb2xv
ciBiZWNhbWUgInJnYigwLCAxMjgsIDApIgorUEFTUyB0d29TdHlsZS5jb2xvciBiZWNhbWUgInJn
YigwLCAxMjgsIDApIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWlu
c2lkZS1hbnkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1h
bnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yODgyYTE4NmE0MjBjYjQ1ZWE1MmIwNDQ5YjMzOTExOWM1NDZl
YjQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQt
aW5zaWRlLWFueS5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHdp
bmRvdy50ZXN0UnVubmVyLmtlZXBXZWJIaXN0b3J5KCk7CisKK3ZhciBjb3VudCA9IDA7CitmdW5j
dGlvbiBmaW5pc2goKQoreworICAgIGlmICgrK2NvdW50ID09PSAyKQorICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKK30KKworZnVuY3Rpb24gY29tcGFyZVN0eWxlcygpCit7CisgICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpIHsKKyAgICAgICAgb25lU3R5bGUgPSBpbnRlcm5hbHMuY29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvbmUiKS5maXJz
dENoaWxkKTsKKyAgICAgICAgdHdvU3R5bGUgPSBpbnRlcm5hbHMuY29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0d28iKSk7CisgICAgICAg
IHNob3VsZEJlY29tZUVxdWFsVG9TdHJpbmcoIm9uZVN0eWxlLmNvbG9yIiwgInJnYigwLCAxMjgs
IDApIiwgZmluaXNoKTsKKyAgICAgICAgc2hvdWxkQmVjb21lRXF1YWxUb1N0cmluZygidHdvU3R5
bGUuY29sb3IiLCAicmdiKDAsIDEyOCwgMCkiLCBmaW5pc2gpOworICAgIH0KK30KKzwvc2NyaXB0
PgorPHN0eWxlPgorYSB7IGNvbG9yOiByZWQ7IH0KKyNvbmUgOi13ZWJraXQtYW55KDp2aXNpdGVk
KSB7CisgICAgY29sb3I6IGdyZWVuOworfQorI29uZSArIDotd2Via2l0LWFueSg6dmlzaXRlZCkg
KyBhIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJjb21wYXJlU3R5bGVzKCkiPgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9kdW1teS5odG1s
IiBzdHlsZT0iZGlzcGxheTpub25lIj48L2lmcmFtZT4KKworPHA+T25lIGFuZCBUd28gbGlua3Mg
c2hvdWxkIGJlIGdyZWVuOjwvcD4KKzxwPgorPHAgaWQ9Im9uZSI+PGEgaHJlZj0iaHR0cDovL21h
ZGV1cC5zaXRlLmNvbSI+T25lPC9hPjwvcD4KKzxhIGhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5j
b20iPmFuZDwvYT4KKzxhIGlkPSJ0d28iaHJlZj0iaHR0cDovL21hZGV1cC5zaXRlLmNvbSI+VHdv
PC9hPgorPC9wPgorCis8ZGl2IGlkPWNvbnNvbGU+PC9kaXY+Cis8L2JvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237065</attachid>
            <date>2014-08-25 01:29:51 -0700</date>
            <delta_ts>2014-08-29 10:29:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135639-20140825173017.patch</filename>
            <type>text/plain</type>
            <size>42001</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWIxYTg5ZWRlNzMyNjIw
ZTI0YjkwNzMzNWQxYWY1N2YzNGM3MzdmNi4uNDdiMDMyOWI3ZmQ5Zjg4MDdiNjNhY2UwNWM1OTQz
N2ZkMTEyY2MyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE0LTA4LTI1ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9y
dCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM1NjM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRml4IDotd2Via2l0LWFueSg6dmlzaXRlZCkgY29uc2lzdGVuY3kgaW4g
bGlua01hdGNoVHlwZSBhbmQgYWN0dWFsIHNlbGVjdG9yIG1hdGNoaW5nLgorICAgICAgICBBbmQg
Zml4IGRpc2FibGluZyA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHRoZSBmaXJzdCBsaW5rIGNvbWVz
LgorCisgICAgICAgIFRlc3RzOiBmYXN0L2hpc3RvcnkvbmVzdGVkLXZpc2l0ZWQtdGVzdC1vdmVy
cmlkZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtYW55
Lmh0bWwKKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dCk6CisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURh
dGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZURhdGE6OnZpc2l0ZWROZXZlck1hdGNoZXMpOgorICAgICAgICAqIGNzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGaXJzdEZvdW5kTGluayk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAg
ICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRh
dGFMaXN0OjpzZWxlY3Rvck1hdGNoZXMpOgorCiAyMDE0LTA4LTIzICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSYW5kb20gR2FtZXBhZCBjbGVhbnVwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAppbmRleCA5NWVhNmZmYWE5
YmY2M2ZhNjllMGM1NjRiYzg1YWQ5YmRiNjE1M2EyLi4xZmRjYTAxNmZlN2E1ZDgzOTJmNjBlMGM3
OThmNTc5NTNmYzRhNTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxl
Y3Rvci5jcHAKQEAgLTMyMCw4ICszMjAsOCBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVsZUNvbGxl
Y3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQogI2VuZGlmIC8vIEVO
QUJMRShDU1NfU0VMRUNUT1JfSklUKQogCiAgICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9y
Q2hlY2tlciBzZWxlY3RvckNoZWNrZXIobV9lbGVtZW50LmRvY3VtZW50KCksIG1fbW9kZSk7Ci0g
ICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVE
YXRhLnNlbGVjdG9yKCksICZtX2VsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNo
RW5hYmxlZCk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihtX2VsZW1lbnQu
ZG9jdW1lbnQoKSk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksICZtX2VsZW1lbnQsIG1fbW9kZSk7CiAgICAg
Y29udGV4dC5lbGVtZW50U3R5bGUgPSBtX3N0eWxlOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBt
X3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZDsKICAgICBjb250ZXh0LnNjcm9sbGJhciA9IG1f
cHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhcjsKQEAgLTMzNyw2ICszMzcsOSBAQCB2b2lkIEVs
ZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiogcgogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxlcy0+
c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSA9IHJ1bGVzLT5kYXRhKClbaV07CiAKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnZpc2l0ZWROZXZl
ck1hdGNoZXMoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlmICghcnVsZURh
dGEuY2FuTWF0Y2hQc2V1ZG9FbGVtZW50KCkgJiYgbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRv
SWQgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwCmluZGV4IGVlNDE3NWRlYjA2YjY5ZjA2OWJlYzk0MzA5NWM2YjY4Yjc4N2JmMGMuLjc0YTAz
M2E5YTVlMWQwNjNhMmIxNmI2ZTU3MzIyNzBmZTc3MzI2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5j
cHAKQEAgLTE1MywxNCArMTUzLDE4IEBAIHN0YXRpYyBpbmxpbmUgUHJvcGVydHlXaGl0ZWxpc3RU
eXBlIGRldGVybWluZVByb3BlcnR5V2hpdGVsaXN0VHlwZShjb25zdCBBZGRSdWxlCiAgICAgLCBt
X2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0
b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKnNlbGVjdG9yKCkpKQogICAgICwgbV9jYW5N
YXRjaFBzZXVkb0VsZW1lbnQoc2VsZWN0b3JDYW5NYXRjaFBzZXVkb0VsZW1lbnQoKnNlbGVjdG9y
KCkpKQogICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6
Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQotICAgICwgbV9s
aW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxl
Y3RvcigpKSkKKyAgICAsIG1fbGlua01hdGNoVHlwZSgpCiAgICAgLCBtX3Byb3BlcnR5V2hpdGVs
aXN0VHlwZShkZXRlcm1pbmVQcm9wZXJ0eVdoaXRlbGlzdFR5cGUoYWRkUnVsZUZsYWdzLCBzZWxl
Y3RvcigpKSkKKyAgICAsIG1fdmlzaXRlZE5ldmVyTWF0Y2hlcyhmYWxzZSkKICNpZiBFTkFCTEUo
Q1NTX1NFTEVDVE9SX0pJVCkgJiYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAsIG1f
Y29tcGlsZWRTZWxlY3RvclVzZUNvdW50KDApCiAjZW5kaWYKIHsKICAgICBBU1NFUlQobV9wb3Np
dGlvbiA9PSBwb3NpdGlvbik7CiAgICAgQVNTRVJUKG1fc2VsZWN0b3JJbmRleCA9PSBzZWxlY3Rv
ckluZGV4KTsKKyAgICBib29sIHZpc2l0ZWROZXZlck1hdGNoZXMgPSBmYWxzZTsKKyAgICBtX2xp
bmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2Vs
ZWN0b3IoKSwgdmlzaXRlZE5ldmVyTWF0Y2hlcyk7CisgICAgbV92aXNpdGVkTmV2ZXJNYXRjaGVz
ID0gdmlzaXRlZE5ldmVyTWF0Y2hlczsKICAgICBTZWxlY3RvckZpbHRlcjo6Y29sbGVjdElkZW50
aWZpZXJIYXNoZXMoc2VsZWN0b3IoKSwgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFz
aGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKaW5kZXgg
YTNkYzQwZTEyYTY3OTIxN2FhYzNhNWUyODA3ZDhjZmUxZjE5MjI5OS4uMDkzMDJmODY3MmNiNWJm
OTdkYmU3YWI2NWE5Y2E2ZTA5MmYyZmQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1J1bGVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCkBAIC03MCw2ICs3
MCw3IEBAIGNsYXNzIFJ1bGVEYXRhIHsKICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yOyB9CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nw
ZWNpZmljaXR5OyB9CiAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlua01hdGNoVHlwZTsgfQorICAgIGJvb2wgdmlzaXRlZE5ldmVyTWF0Y2hlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzaXRlZE5ldmVyTWF0Y2hlczsgfQogICAgIGJvb2wgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bjsgfQogICAgIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUoYm9v
bCBpc01hdGNoaW5nVUFSdWxlcyA9IGZhbHNlKSBjb25zdCB7IHJldHVybiBpc01hdGNoaW5nVUFS
dWxlcyA/IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSA6IHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVs
aXN0VHlwZT4obV9wcm9wZXJ0eVdoaXRlbGlzdFR5cGUpOyB9CiAgICAgLy8gVHJ5IHRvIGJhbGFu
Y2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9i
amVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4KQEAgLTEwNyw2ICsxMDgsNyBA
QCBjbGFzcyBSdWxlRGF0YSB7CiAgICAgdW5zaWduZWQgbV9jb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IgOiAxOwogICAgIHVuc2lnbmVkIG1fbGlua01hdGNoVHlwZSA6IDI7IC8vICBT
ZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sKICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5V2hp
dGVsaXN0VHlwZSA6IDI7CisgICAgdW5zaWduZWQgbV92aXNpdGVkTmV2ZXJNYXRjaGVzIDogMTsK
ICAgICAvLyBVc2UgcGxhaW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBt
ZW1vcnkgb3ZlcmhlYWQuCiAgICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlm
aWVySGFzaGVzW21heGltdW1JZGVudGlmaWVyQ291bnRdOwogI2lmIEVOQUJMRShDU1NfU0VMRUNU
T1JfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAzOTQyNTNl
YTE1NzUxNDAzZjA2OGFmOWRhOTQxNjhjNTQxMGMyMzlmLi4yNWUwNjc0NDRhMDMwZTZiNDI2NDg0
NTBkNTc3ZjIyNGRjYWM4NjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cApAQCAtMTI4LDI3ICsxMjgsMzggQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09m
VHlwZUFmdGVyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmkKICAgICByZXR1
cm4gY291bnQ7CiB9CiAKLVNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50
JiBkb2N1bWVudCwgTW9kZSBtb2RlKQorc3RhdGljIGlubGluZSBib29sIGlzRmlyc3RGb3VuZExp
bmsoY29uc3QgRWxlbWVudCogbGFzdFZpc2l0ZWRNYXRjaGVkLCBjb25zdCBFbGVtZW50KiBzdGFy
dCkKK3sKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIGN1cnJlbnQgPSBzdGFydDsgY3VycmVudCAm
JiBjdXJyZW50ICE9IGxhc3RWaXNpdGVkTWF0Y2hlZDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVu
dEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aXNMaW5rKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX3N0cmlj
dFBhcnNpbmcoIWRvY3VtZW50LmluUXVpcmtzTW9kZSgpKQogICAgICwgbV9kb2N1bWVudElzSFRN
TChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKQotICAgICwgbV9tb2RlKG1vZGUpCiB7CiB9CiAK
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IE5PUFNFVURPOwot
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkKSAhPSBTZWxlY3Rvck1h
dGNoZXMpCisgICAgY29uc3QgRWxlbWVudCogbGFzdFZpc2l0ZWRNYXRjaGVkID0gbnVsbHB0cjsK
KyAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250ZXh0LCBwc2V1ZG9JZCwgbGFzdFZpc2l0ZWRN
YXRjaGVkKSAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobGFzdFZpc2l0ZWRNYXRjaGVkICYmICFpc0ZpcnN0Rm91bmRMaW5rKGxhc3RWaXNpdGVkTWF0
Y2hlZCwgY29udGV4dC5tYXRjaGluZ1N0YXJ0RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBjb250ZXh0LnBzZXVk
b0lkICE9IHBzZXVkb0lkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNvbnRleHQu
cHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRvSWQgIT0gTk9QU0VVRE8pIHsKLSAgICAgICAg
aWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwc2V1ZG9JZCA8IEZJUlNUX0lO
VEVSTkFMX1BTRVVET0lEKQorICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQp
CiAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUocHNl
dWRvSWQpOwogCiAgICAgICAgIC8vIFdoZW4gaWdub3JpbmcgdmlydHVhbCBwc2V1ZG8gZWxlbWVu
dHMsIHRoZSBjb250ZXh0J3MgcHNldWRvIHNob3VsZCBhbHNvIGJlIE5PUFNFVURPIGJ1dCB0aGF0
IGRvZXMKICAgICAgICAgLy8gbm90IGNhdXNlIGEgZmFpbHVyZS4KLSAgICAgICAgcmV0dXJuIG1f
bW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50
czsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0
aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50czsKICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC0xNzYsMTAgKzE4NywxMCBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Ny
b2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlYwog
Ly8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRo
ZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9y
IGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5j
ZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNo
UmVjdXJzaXZlbHkoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvKSBjb25zdAorU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3Rv
ckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQm
IGNvbnRleHQsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBjb25zdCBFbGVtZW50KiYgbGFzdFZp
c2l0ZWRNYXRjaGVkKSBjb25zdAogewogICAgIC8vIFRoZSBmaXJzdCBzZWxlY3RvciBoYXMgdG8g
bWF0Y2guCi0gICAgaWYgKCFjaGVja09uZShjb250ZXh0KSkKKyAgICBpZiAoIWNoZWNrT25lKGNv
bnRleHQsIGxhc3RWaXNpdGVkTWF0Y2hlZCkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
TG9jYWxseTsKIAogICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50KSB7CkBAIC0xOTgsNyArMjA5LDcgQEAgaW5saW5lIHN0YXRpYyBi
b29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWMKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgoIWNv
bnRleHQuZWxlbWVudFN0eWxlICYmIG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgfHwg
bV9tb2RlID09IE1vZGU6OlF1ZXJ5aW5nUnVsZXMpCisgICAgICAgICAgICBpZiAoKCFjb250ZXh0
LmVsZW1lbnRTdHlsZSAmJiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUpIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQog
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKIAogICAgICAgICAg
ICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxl
Y3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CkBAIC0yMjQsMjAgKzIzNSwyMCBAQCBpbmxpbmUg
c3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlYwogICAgICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVE
TyAmJiBjb250ZXh0LnBzZXVkb0lkICE9IGR5bmFtaWNQc2V1ZG8pCiAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAKLSAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRl
ZCBtYXRjaGluZyB3aGVuIHdlIHNlZSB0aGUgZmlyc3QgbGluayBvciB0cnkgdG8gbWF0Y2ggYW55
dGhpbmcgZWxzZSB0aGFuIGFuIGFuY2VzdG9ycy4KLSAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVu
dC0+aXNMaW5rKCkgfHwgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJl
bGF0aW9uICE9IENTU1NlbGVjdG9yOjpDaGlsZCkpCi0gICAgICAgICAgICBuZXh0Q29udGV4dC52
aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRlZE1hdGNoRGlzYWJsZWQ7CisgICAgICAgIC8vIERpc2Fi
bGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSB0cnkgdG8gbWF0Y2ggYW55dGhpbmcgZWxzZSB0
aGFuIGFuIGFuY2VzdG9ycy4KKyAgICAgICAgaWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpE
ZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpDaGlsZCkKKyAgICAgICAgICAg
IG5leHRDb250ZXh0LmFkamFjZW50Rm91bmQgPSB0cnVlOwogCiAgICAgICAgIG5leHRDb250ZXh0
LnBzZXVkb0lkID0gTk9QU0VVRE87CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxhdGlvbikgewog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIG5leHRDb250ZXh0LmVs
ZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgbmV4dENv
bnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAg
ICAgICAgbmV4dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4
dC5zZWxlY3RvcjsKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKICAgICAg
ICAgZm9yICg7IG5leHRDb250ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0LmVsZW1lbnQgPSBuZXh0
Q29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIE1hdGNoIG1h
dGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1Bz
ZXVkbyk7CisgICAgICAgICAgICBNYXRjaCBtYXRjaCA9IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHko
bmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGxhc3RWaXNpdGVkTWF0Y2hlZCk7CiAg
ICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5KQogICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAg
ICAgfQpAQCAtMjQ1LDE5ICsyNTYsMTkgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJh
clBzZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKIAogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRleHQuZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpOwogICAgICAgICAgICAgaWYgKCFuZXh0Q29udGV4dC5lbGVtZW50KQogICAgICAgICAg
ICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgICAgIG5leHRD
b250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7
CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwotICAgICAg
ICAgICAgTWF0Y2ggbWF0Y2ggPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0Y2hSZWN1cnNpdmVs
eShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgbGFzdFZpc2l0ZWRNYXRjaGVkKTsK
ICAgICAgICAgICAgIGlmIChtYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKICAgICAgICAgfQogCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIGlmIChtX21vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgaWYgKEVsZW1lbnQq
IHBhcmVudEVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkKICAgICAg
ICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGph
Y2VudFJ1bGVzKCk7CiAgICAgICAgIH0KQEAgLTI2NiwxMCArMjc3LDEwIEBAIGlubGluZSBzdGF0
aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVjCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdz
OwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRD
b250ZXh0LnNlbGVjdG9yOwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwot
ICAgICAgICByZXR1cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1p
Y1BzZXVkbyk7CisgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBp
Z25vcmVEeW5hbWljUHNldWRvLCBsYXN0VmlzaXRlZE1hdGNoZWQpOwogCiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkgeworICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxl
bWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKQogICAgICAgICAgICAgICAg
IHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVs
ZXMoKTsKICAgICAgICAgfQpAQCAtMjc3LDcgKzI4OCw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBo
YXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVjCiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CiAgICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50
ID0gbmV4dENvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAg
ICAgICAgICBNYXRjaCBtYXRjaCA9IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQs
IGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5t
YXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBsYXN0Vmlz
aXRlZE1hdGNoZWQpOwogICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgICB9
OwpAQCAtMjg5LDExICszMDAsMTEgQEAgaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBz
ZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWMKICAgICAgICAg
Ly8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCiAgICAgICAgIG5leHRDb250ZXh0Lmhh
c1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29udGV4dCwgZHlu
YW1pY1BzZXVkbyk7CiAgICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5
bmFtaWNQc2V1ZG8gPT0gU0VMRUNUSU9OOwotICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0
eWxlIHx8IG1fbW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFtaWNQc2V1ZG8g
IT0gTk9QU0VVRE8KKyAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0
LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRv
ICE9IE5PUFNFVURPCiAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNl
dWRvCiAgICAgICAgICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBu
ZXh0Q29udGV4dC5zZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
KQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICBy
ZXR1cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAg
ICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvLCBs
YXN0VmlzaXRlZE1hdGNoZWQpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2Vu
ZGFudDoKICAgICAgICAgewpAQCAtMzAzLDcgKzMxNCw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBo
YXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVjCiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hhZG93SG9zdE5vZGU7CiAg
ICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRD
b250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0g
MDsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25v
cmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5l
eHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBsYXN0VmlzaXRlZE1hdGNoZWQpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC00NDMsNyArNDU0LDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hI
b3Zlck9yQWN0aXZlSW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRWxlbWVudComIGxhc3RWaXNpdGVkTWF0Y2hlZCkgY29uc3QKIHsKICAgICBF
bGVtZW50KiBjb25zdCAmIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7CiAgICAgY29uc3QgQ1NT
U2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAtNDg5LDEw
ICs1MDAsMTMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAvLyB0
aGUgcGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhpcyBuZXZlciBvY2N1cnMKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpICE9IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNl
bGVjdCBiZXR3ZWVuIDp2aXNpdGVkIGFuZCA6bGluayB3aGVuIGFwcGx5aW5nLiBXZSBkb24ndCBr
bm93IHdoaWNoIG9uZSBhcHBsaWVkIChvciBub3QpIHlldC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1Zpc2l0ZWQgfHwgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNz
VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmsgJiYgc3ViQ29udGV4dC52aXNp
dGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaEVuYWJsZWQpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ViQ29udGV4dC5zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICAvLyA6bGluayBpbnNpZGUgOm5vdCBzcGVjaWFsbHkg
aGFuZGxlZC4gRW5zdXJlIHRoYXQgdGhpcyB0YXJnZXQgaXMgdGhlIGZpcnN0IGZvdW5kIGxpbmsg
aGVyZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRleHQuc2VsZWN0b3ItPnBzZXVk
b0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbmsgJiYgc3ViQ29udGV4
dC5yZXNvbHZpbmdNb2RlICE9IE1vZGU6OlF1ZXJ5aW5nUnVsZXMgJiYgIXN1YkNvbnRleHQuYWRq
YWNlbnRGb3VuZCAmJiBpc0ZpcnN0Rm91bmRMaW5rKHN1YkNvbnRleHQuZWxlbWVudCwgc3ViQ29u
dGV4dC5tYXRjaGluZ1N0YXJ0RWxlbWVudCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09u
ZShzdWJDb250ZXh0KSkKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YkNvbnRleHQs
IGxhc3RWaXNpdGVkTWF0Y2hlZCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQuaGFzU2Nyb2xsYmFyUHNl
dWRvKSB7CkBAIC01MjIsNyArNTM2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29s
dmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxlQWZmZWN0
ZWRCeUVtcHR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHls
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRFbXB0
eVN0YXRlKHJlc3VsdCk7CkBAIC01MzMsNyArNTQ3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBp
cyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
aXNGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29u
dGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVs
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQpAQCAt
NTQ2LDcgKzU2MCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIC8vIGZpcnN0
LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGlzRmlyc3RPZlR5cGUoZWxlbWVudCwg
ZWxlbWVudC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdN
b2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgICAgICAgICBwYXJlbnRF
bGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTU1NSw3ICs1
NjksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1h
dGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAo
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewog
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxl
bWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVk
QnlMYXN0Q2hpbGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNo
aWxkU3R5bGUpCkBAIC01NjcsNyArNTgxLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAv
LyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5
bGUpCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTc4LDcgKzU5Miw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxk
ID0gaXNGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBib29sIG9u
bHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdD
aGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAgICAg
ICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVu
dFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwog
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlG
aXJzdENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKQEAgLTU5Myw3ICs2MDcsNyBAQCBi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
T25seU9mVHlwZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkg
c2xvdy4KICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+
cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01v
ZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwog
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KQEAgLTYwNCw3ICs2
MTgsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFC
TEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzUGxhY2Vob2xkZXJTaG93bjoKLSAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6
UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyU3R5
bGUqIHN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRV
bmlxdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTYxNSw3ICs2MjksNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIGludCBjb3VudCA9IDEgKyBjb3VudEVsZW1lbnRzQmVmb3JlKGVsZW1lbnQpOwotICAgICAg
ICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4
dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldENoaWxkSW5kZXgoY291bnQp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRTdHlsZSkKQEAgLTYzMiw3ICs2NDYsNyBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBjb3VudEVsZW1lbnRzT2ZUeXBlQmVm
b3JlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9u
YWxSdWxlcygpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3Vu
dCkpCkBAIC02NDMsNyArNjU3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAg
aWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHls
ZSkKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJl
c29sdmluZ1N0eWxlKQogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGls
ZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAg
IGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NTYsNyArNjcwLDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9k
ZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5y
ZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxS
dWxlcygpOwogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBh
cnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02
NzcsNyArNjkxLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIFBzZXVk
b0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgICAgICAgICBmb3Ig
KHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7
IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxp
c3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgc3Vi
Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGln
bm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywg
bGFzdFZpc2l0ZWRNYXRjaGVkKSA9PSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC02OTAsOSArNzA0LDE4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIHJldHVy
biBlbGVtZW50LT5pc0xpbmsoKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NWaXNpdGVkOgogICAgICAgICAgICAgLy8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1hdGNoaW5n
IGlzIGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5nIG1hdGNoaW5nLgotICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBW
aXNpdGVkTWF0Y2hFbmFibGVkOworICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9k
ZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIC8vIEluc2lkZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzcyBleGNlcHQgZm9y
IDpub3QsIDp2aXNpdGVkIGlzIHRyZWF0ZWQgYXMgOi1hbnktbGluayBzaW5jZSBsaW5rTWF0Y2hU
eXBlIGJlY29tZXMgTWF0Y2hBbGwuCisgICAgICAgICAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIWNvbnRleHQuYWRqYWNl
bnRGb3VuZCwgIkFkamFjZW50IGNhc2UgbmV2ZXIgbWF0Y2hlcyB3aXRoIDp2aXNpdGVkIGFuZCBp
dCBpcyBmaWx0ZXJlZCBvdXQgYmVmb3JlIHRoZSBtYXRjaGluZy4iKTsKKyAgICAgICAgICAgIGlm
ICghZWxlbWVudC0+aXNMaW5rKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgbGFzdFZpc2l0ZWRNYXRjaGVkID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6Ci0gICAg
ICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQogICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWcoKTsKICAgICAgICAg
ICAgICAgICBlbHNlCkBAIC03MDUsNyArNzI4LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpOwogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgogICAgICAgICAgICAgaWYgKG1f
c3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8fCBjYW5NYXRjaEhvdmVyT3JBY3Rp
dmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVz
b2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKQEAgLTcxNyw3ICs3NDAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6
CiAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGVsZW1lbnQtPmlzTGluaygpIHx8
IGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb250ZXh0KSkgewotICAgICAgICAg
ICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTgyMSw3ICs4NDQsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9y
LT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4
dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkg
ewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1
YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBzdWJDb250ZXh0LmluRnVuY3Rpb25hbFBz
ZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAg
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8s
IGxhc3RWaXNpdGVkTWF0Y2hlZCkgPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg3MSw1
MSArODk0LDU3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0Ns
YXNzKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjCiAgICAgfQogfQogCi11bnNpZ25l
ZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yKQordW5zaWduZWQgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0
Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCYgbmV2ZXJNYXRjaGVzKQog
ewogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBNYXRjaEFsbDsKKyAgICBib29sIGFkamFj
ZW50Rm91bmQgPSBmYWxzZTsKIAogICAgIC8vIFN0YXRpY2FsbHkgZGV0ZXJtaW5lIGlmIHRoaXMg
c2VsZWN0b3Igd2lsbCBtYXRjaCBhIGxpbmsgaW4gdmlzaXRlZCwgdW52aXNpdGVkIG9yIGFueSBz
dGF0ZSwgb3IgbmV2ZXIuCiAgICAgLy8gOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcyBvdGhlciBlbGVt
ZW50cyB0aGFuIHRoZSBpbm5lcm1vc3QgbGluayBlbGVtZW50LgogICAgIGZvciAoOyBzZWxlY3Rv
cjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIDpub3QoOnZpc2l0ZWQpIGlzIGVxdWl2YWxlbnQgdG8gOmxpbmsuIFBh
cnNlciBlbmZvcmNlcyB0aGF0IDpub3QgY2FuJ3QgbmVzdC4KLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci0+c2VsZWN0b3JM
aXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0KQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWFkamFjZW50Rm91bmQpIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm90OgorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyA6bm90KDp2aXNpdGVk
KSBpcyBlcXVpdmFsZW50IHRvIDpsaW5rLiBQYXJzZXIgZW5mb3JjZXMgdGhhdCA6bm90IGNhbid0
IG5lc3QuCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNl
bGVjdG9yTGlzdCA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc2VsZWN0b3JMaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YlNl
bGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJTZWxlY3Rvcjsgc3ViU2VsZWN0b3Ig
PSBzdWJTZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3ViU2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBz
dWJUeXBlID0gc3ViU2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdWJUeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0
ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgJj0gflNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHN1YlR5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua01hdGNoVHlwZSAmPSB+U2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbms7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1Nl
bGVjdG9yKiBzdWJTZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3ViU2VsZWN0b3I7
IHN1YlNlbGVjdG9yID0gc3ViU2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWJTZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzVHlwZSBzdWJUeXBlID0gc3ViU2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlw
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViVHlwZSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua01hdGNoVHlwZSAmPSB+U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1YlR5cGUgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzTGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtNYXRjaFR5cGUgJj0gflNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbms6CisgICAgICAgICAgICAg
ICAgICAgIGxpbmtNYXRjaFR5cGUgJj0gflNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGxpbmtNYXRjaFR5
cGUgJj0gflNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IDpsaW5rIGFuZCA6dmlzaXRlZCBpbnNpZGUgOi13ZWJraXQtYW55Lgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCkgeworICAgICAgICAgICAgICAg
ICAgICBuZXZlck1hdGNoZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlu
a01hdGNoVHlwZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbms6Ci0gICAgICAgICAg
ICAgICAgbGlua01hdGNoVHlwZSAmPSB+U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Zpc2l0ZWQ6Ci0gICAgICAgICAgICAgICAgbGlua01hdGNoVHlwZSAmPSB+U2VsZWN0
b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgOmxpbmsgYW5k
IDp2aXNpdGVkIGluc2lkZSA6LXdlYmtpdC1hbnkuCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJl
bGF0aW9uID0gc2VsZWN0b3ItPnJlbGF0aW9uKCk7CiAgICAgICAgIGlmIChyZWxhdGlvbiA9PSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENT
U1NlbGVjdG9yOjpDaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBsaW5rTWF0Y2hUeXBlOwotICAg
ICAgICBpZiAobGlua01hdGNoVHlwZSAhPSBNYXRjaEFsbCkKLSAgICAgICAgICAgIHJldHVybiBs
aW5rTWF0Y2hUeXBlOworICAgICAgICAgICAgYWRqYWNlbnRGb3VuZCA9IHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBsaW5rTWF0Y2hUeXBlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCmluZGV4IDIzZmNkOGU4NGY2NjkyYWNlNzY5ZDBiMmEyYzBjNjg5ZDRjOTcxMDYuLjdjZDcz
ZGQ2MDQ2ZTExMDI1MmFjZDU2N2I2YWJlOTlkNmJhN2NhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmgKQEAgLTUxLDE1ICs1MSwxNiBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIg
ewogICAgICAgICBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgQ29sbGVjdGlu
Z1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIFF1ZXJ5aW5nUnVsZXMKICAgICB9
OwogCi0gICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50JiwgTW9kZSk7CisgICAgU2VsZWN0b3JD
aGVja2VyKERvY3VtZW50Jik7CiAKICAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQg
ewogICAgICAgICAvLyBJbml0aWFsIHNlbGVjdG9yIGNvbnN0cnVjdG9yCi0gICAgICAgIFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCog
ZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQq
IGVsZW1lbnQsIE1vZGUgcmVzb2x2aW5nTW9kZSkKICAgICAgICAgICAgIDogc2VsZWN0b3Ioc2Vs
ZWN0b3IpCisgICAgICAgICAgICAsIHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkKICAgICAg
ICAgICAgICwgZWxlbWVudChlbGVtZW50KQorICAgICAgICAgICAgLCBtYXRjaGluZ1N0YXJ0RWxl
bWVudChlbGVtZW50KQogICAgICAgICAgICAgLCBzY29wZShudWxscHRyKQotICAgICAgICAgICAg
LCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5cGUpCiAgICAgICAgICAgICAsIHBzZXVk
b0lkKE5PUFNFVURPKQogICAgICAgICAgICAgLCBlbGVtZW50U3R5bGUobnVsbHB0cikKICAgICAg
ICAgICAgICwgc2Nyb2xsYmFyKG51bGxwdHIpCkBAIC02OCwxMiArNjksMTQgQEAgY2xhc3MgU2Vs
ZWN0b3JDaGVja2VyIHsKICAgICAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFs
c2UpCiAgICAgICAgICAgICAsIGhhc1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKICAgICAgICAgICAg
ICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQorICAgICAgICAgICAgLCBhZGphY2VudEZvdW5k
KGZhbHNlKQogICAgICAgICB7IH0KIAogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3I7CisgICAgICAgIE1vZGUgcmVzb2x2aW5nTW9kZTsKICAgICAgICAgRWxlbWVudCogZWxlbWVu
dDsKKyAgICAgICAgY29uc3QgRWxlbWVudCogbWF0Y2hpbmdTdGFydEVsZW1lbnQ7CiAgICAgICAg
IGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwotICAgICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZp
c2l0ZWRNYXRjaFR5cGU7CiAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkOwogICAgICAgICBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgICAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJh
cjsKQEAgLTgyLDYgKzg1LDcgQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICAgICAgYm9v
bCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzczsKICAgICAgICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1
ZG87CiAgICAgICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOworICAgICAgICBib29sIGFkamFj
ZW50Rm91bmQ7CiAgICAgfTsKIAogICAgIGJvb2wgbWF0Y2goY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmKSBjb25zdDsKQEAgLTkyLDE3ICs5NiwxNiBAQCBjbGFzcyBTZWxlY3RvckNoZWNr
ZXIgewogICAgIHN0YXRpYyBib29sIGNoZWNrRXhhY3RBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCos
IGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1
dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSk7CiAKICAgICBlbnVtIExpbmtN
YXRjaE1hc2sgeyBNYXRjaExpbmsgPSAxLCBNYXRjaFZpc2l0ZWQgPSAyLCBNYXRjaEFsbCA9IE1h
dGNoTGluayB8IE1hdGNoVmlzaXRlZCB9OwotICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRlcm1pbmVM
aW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CisgICAgc3RhdGljIHVuc2lnbmVkIGRl
dGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqLCBib29sJiBuZXZlck1hdGNo
ZWQpOwogCiBwcml2YXRlOgotICAgIE1hdGNoIG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tPbmUo
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmKSBjb25zdDsKKyAgICBNYXRjaCBtYXRjaFJl
Y3Vyc2l2ZWx5KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBjb25z
dCBFbGVtZW50KiYgbGFzdFZpc2l0ZWRNYXRjaGVkKSBjb25zdDsKKyAgICBib29sIGNoZWNrT25l
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgY29uc3QgRWxlbWVudComIGxhc3RWaXNp
dGVkTWF0Y2hlZCkgY29uc3Q7CiAKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Mo
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0
OwogCiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmc7CiAgICAgYm9vbCBtX2RvY3VtZW50SXNIVE1M
OwotICAgIE1vZGUgbV9tb2RlOwogfTsKIAogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpp
c0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggMmZhNWM5ZTNjMjQzYTE2ZDYxNjNhOTRm
NGMwOGJmOWMwZjUwZTgwYi4uNjIyYzc3ZGFmOTZjMTg0N2FiMjQ4NTU4OGJkNjdmMzE5MzI4ZDA3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC01NzAsOSArNTcwLDkgQEAgaW5s
aW5lIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2Vs
ZWN0b3IsIEVsZW1lbnQqIHJlZ2kKICAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25F
bGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxlY3RvckNoZWNrZXIgc2Vs
ZWN0b3JDaGVja2VyKHJlZ2lvbkVsZW1lbnQtPmRvY3VtZW50KCksIFNlbGVjdG9yQ2hlY2tlcjo6
TW9kZTo6UXVlcnlpbmdSdWxlcyk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tl
cihyZWdpb25FbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9y
KiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpIHsK
LSAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBzZWxlY3Rv
ckNoZWNraW5nQ29udGV4dChzLCByZWdpb25FbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0
ZWRNYXRjaERpc2FibGVkKTsKKyAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChzLCByZWdpb25FbGVtZW50LCBTZWxl
Y3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgICAgICBpZiAoc2VsZWN0b3JD
aGVja2VyLm1hdGNoKHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1
ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRleCAxMGVm
MDJmNDg0MjA4ODFiNmY3OThlZTY3ZmYzZWYzM2QwY2NhYjViLi41YzNmOWJjYTE3MWFkYzk1OTVi
OGQxOWVkYzBkOTU5ZDg2OGFjZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Vs
ZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3Bw
CkBAIC0xMjEsOCArMTIxLDggQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0
b3JNYXRjaGVzKGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhLAogICAgICAgICByZXR1
cm4gc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgubWF0Y2hlcygpOwogICAgIH0KIAotICAgIFNlbGVj
dG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpLCBTZWxlY3RvckNo
ZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQoc2VsZWN0b3JEYXRhLnNl
bGVjdG9yLCAmZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCk7
CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCkp
OworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JD
aGVja2luZ0NvbnRleHQoc2VsZWN0b3JEYXRhLnNlbGVjdG9yLCAmZWxlbWVudCwgU2VsZWN0b3JD
aGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzKTsKICAgICBzZWxlY3RvckNoZWNraW5nQ29udGV4
dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2Rl
OwogICAgIHJldHVybiBzZWxlY3RvckNoZWNrZXIubWF0Y2goc2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQpOwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDdhZDQxNzc0MmQwODNhMDNkZTAxOTUyYzRmMTIyMDQ5YTdjNDAzNWIu
LmRlM2I1N2Q5MTM3NTFjNzVmMjg4MmUwNDUxMTI1ZGQzYmM3Zjk5MjcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAxNC0wOC0yNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTYzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCA6LXdlYmtpdC1hbnko
OnZpc2l0ZWQpIGNvbnNpc3RlbmN5IGluIGxpbmtNYXRjaFR5cGUgYW5kIGFjdHVhbCBzZWxlY3Rv
ciBtYXRjaGluZy4KKyAgICAgICAgQW5kIGZpeCBkaXNhYmxpbmcgOnZpc2l0ZWQgbWF0Y2hpbmcg
d2hlbiB0aGUgZmlyc3QgbGluayBjb21lcy4KKworICAgICAgICAqIGZhc3QvaGlzdG9yeS9uZXN0
ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLWFueS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1hbnkuaHRtbDogQWRk
ZWQuCisKIDIwMTQtMDgtMjIgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW0VGTF1bV0syXSBSZW1vdmUgZmFzdC9jc3MzLXRleHQvY3NzMy10ZXh0LWFsaWdu
LWxhc3QvdGV4dC1hbGlnbi1sYXN0LXdpdGgtdGV4dC1hbGlnbi1qdXN0aWZ5Lmh0bWwgZnJvbSBz
a2lwcGVkIGxpc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9uZXN0ZWQt
dmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvaGlz
dG9yeS9uZXN0ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40OGRkY2RjZDJmNDljOGJhMTM2YTRmNDg5MTA4MDEyNGMzZGE2OTc2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJp
ZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhpcyBsaW5rIHNob3VsZCBiZSBncmVl
bjoKKworT25lCisKK1BBU1Mgc3R5bGUuY29sb3IgYmVjYW1lICJyZ2IoMCwgMTI4LCAwKSIKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvbmVzdGVkLXZpc2l0ZWQtdGVzdC1vdmVycmlk
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3Zl
cnJpZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODFlNzA1ZGRjNWRhYzU0NzkwYmMwOWMzZDZjZjE3YWQy
NGE5MzdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3Rl
ZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgoranNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB3aW5kb3cudGVzdFJ1bm5lci5rZWVwV2ViSGlzdG9yeSgpOworCitmdW5jdGlv
biBjb21wYXJlU3R5bGVzKCkKK3sKKyAgICB2YXIgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYSIpOworICAgIGFuY2hvci5ocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCI7CisgICAg
YW5jaG9yLnNldEF0dHJpYnV0ZSgiaWQiLCAib25lIik7CisgICAgYW5jaG9yLmlubmVySFRNTCA9
ICI8c3Bhbj5PbmU8L3NwYW4+IjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5jbG9z
dXJlIikuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
CisgICAgICAgIHN0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25lIikuZmlyc3RDaGlsZCk7CisgICAgICAg
IHNob3VsZEJlY29tZUVxdWFsVG9TdHJpbmcoInN0eWxlLmNvbG9yIiwgInJnYigwLCAxMjgsIDAp
IiwgZmluaXNoSlNUZXN0KTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4KKy5vayBzcGFu
IHsgY29sb3I6IGdyZWVuOyB9Cisub2s6dmlzaXRlZCBzcGFuIHsgY29sb3I6IHJlZDsgfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iY29tcGFyZVN0eWxlcygpIj4KKzxpZnJhbWUg
c3JjPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+
CisKKzxwPlRoaXMgbGluayBzaG91bGQgYmUgZ3JlZW46PC9wPgorPHA+Cis8YSBpZD0iZW5jbG9z
dXJlIiBjbGFzcz0ib2siIGhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5jb20iPjwvYT4KKzwvcD4K
KworPGRpdiBpZD1jb25zb2xlPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLWFueS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtYW55LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZDM4YzQ4Y2RiMTBlOTA3ZDljNTliYjIyOGMyNjdhNDdmOTA1M2MxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRl
LWFueS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorT25lIGFuZCBUd28gbGlua3Mgc2hv
dWxkIGJlIGdyZWVuOgorCitPbmUKKworYW5kIFR3bworUEFTUyBvbmVTdHlsZS5jb2xvciBiZWNh
bWUgInJnYigwLCAxMjgsIDApIgorUEFTUyB0d29TdHlsZS5jb2xvciBiZWNhbWUgInJnYigwLCAx
MjgsIDApIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1h
bnkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1hbnkuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yODgyYTE4NmE0MjBjYjQ1ZWE1MmIwNDQ5YjMzOTExOWM1NDZlYjQzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRl
LWFueS5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citqc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHdpbmRvdy50
ZXN0UnVubmVyLmtlZXBXZWJIaXN0b3J5KCk7CisKK3ZhciBjb3VudCA9IDA7CitmdW5jdGlvbiBm
aW5pc2goKQoreworICAgIGlmICgrK2NvdW50ID09PSAyKQorICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworZnVuY3Rpb24gY29tcGFyZVN0eWxlcygpCit7CisgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpIHsKKyAgICAgICAgb25lU3R5bGUgPSBpbnRlcm5hbHMuY29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvbmUiKS5maXJzdENoaWxk
KTsKKyAgICAgICAgdHdvU3R5bGUgPSBpbnRlcm5hbHMuY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0d28iKSk7CisgICAgICAgIHNob3Vs
ZEJlY29tZUVxdWFsVG9TdHJpbmcoIm9uZVN0eWxlLmNvbG9yIiwgInJnYigwLCAxMjgsIDApIiwg
ZmluaXNoKTsKKyAgICAgICAgc2hvdWxkQmVjb21lRXF1YWxUb1N0cmluZygidHdvU3R5bGUuY29s
b3IiLCAicmdiKDAsIDEyOCwgMCkiLCBmaW5pc2gpOworICAgIH0KK30KKzwvc2NyaXB0PgorPHN0
eWxlPgorYSB7IGNvbG9yOiByZWQ7IH0KKyNvbmUgOi13ZWJraXQtYW55KDp2aXNpdGVkKSB7Cisg
ICAgY29sb3I6IGdyZWVuOworfQorI29uZSArIDotd2Via2l0LWFueSg6dmlzaXRlZCkgKyBhIHsK
KyAgICBjb2xvcjogZ3JlZW47Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJj
b21wYXJlU3R5bGVzKCkiPgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9kdW1teS5odG1sIiBzdHls
ZT0iZGlzcGxheTpub25lIj48L2lmcmFtZT4KKworPHA+T25lIGFuZCBUd28gbGlua3Mgc2hvdWxk
IGJlIGdyZWVuOjwvcD4KKzxwPgorPHAgaWQ9Im9uZSI+PGEgaHJlZj0iaHR0cDovL21hZGV1cC5z
aXRlLmNvbSI+T25lPC9hPjwvcD4KKzxhIGhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5jb20iPmFu
ZDwvYT4KKzxhIGlkPSJ0d28iaHJlZj0iaHR0cDovL21hZGV1cC5zaXRlLmNvbSI+VHdvPC9hPgor
PC9wPgorCis8ZGl2IGlkPWNvbnNvbGU+PC9kaXY+Cis8L2JvZHk+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237356</attachid>
            <date>2014-08-29 10:29:51 -0700</date>
            <delta_ts>2014-08-30 06:41:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135639-20140830023036.patch</filename>
            <type>text/plain</type>
            <size>30011</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VkMjZlYzg4Y2RkNzJk
YjU3YTRiOTA1MzcxYWJmZTRkNDkxMWQ5Mi4uOGY5MWI5NjNlNGE2Mjk2YzVlM2IwMmEyNTcyMmEz
ODE0N2ZmMGNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA4LTI5ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzogUmVmYWN0
b3IgOnZpc2l0ZWQgaGFuZGxpbmcgaW4gU2VsZWN0b3JDaGVja2VyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggOi13ZWJraXQtYW55KDp2aXNpdGVk
KSBjb25zaXN0ZW5jeSBpbiBsaW5rTWF0Y2hUeXBlIGFuZCBhY3R1YWwgc2VsZWN0b3IgbWF0Y2hp
bmcuCisgICAgICAgIEFuZCBmaXggZGlzYWJsaW5nIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gdGhl
IGZpcnN0IGxpbmsgY29tZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvaGlzdG9yeS9uZXN0ZWQt
dmlzaXRlZC10ZXN0LW92ZXJyaWRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvaGlzdG9yeS92
aXNpdGVkLWluc2lkZS1hbnkuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9oaXN0b3J5L3Zpc2l0
ZWQtaW5zaWRlLW5vdC5odG1sCisKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVz
KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6aGFzU2Nyb2xsYmFyUHNl
dWRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAq
IGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KToKKyAg
ICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tSZWdp
b25TZWxlY3Rvcik6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0b3JNYXRjaGVzKToKKwogMjAxNC0wOC0y
OSAgRXZhIEJhbGF6c2ZhbHZpICA8ZXZhYi51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtFRkxdIFJlbW92ZSBub24gQ29vcmRpbmF0ZWQgR3JhcGhpY3MgY29kZSBwYXRo
IGZyb20gY21ha2UgYnVpbGQgc3lzdGVtIGFmdGVyIHIxNDIxNjkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IDk1ZWE2ZmZhYTliZjYzZmE2OWUwYzU2
NGJjODVhZDliZGI2MTUzYTIuLmRhZDRhMjI2MzExYTIyOWQzODYyMWRhZDQyNTcwZGI1MWEwZTEy
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcApAQCAt
MzIwLDggKzMyMCw4IEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0
Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxF
Q1RPUl9KSVQpCiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVj
dG9yQ2hlY2tlcihtX2VsZW1lbnQuZG9jdW1lbnQoKSwgbV9tb2RlKTsKLSAgICBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3Io
KSwgJm1fZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAg
ICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKG1fZWxlbWVudC5kb2N1bWVudCgpKTsK
KyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVs
ZURhdGEuc2VsZWN0b3IoKSwgJm1fZWxlbWVudCwgbV9tb2RlKTsKICAgICBjb250ZXh0LmVsZW1l
bnRTdHlsZSA9IG1fc3R5bGU7CiAgICAgY29udGV4dC5wc2V1ZG9JZCA9IG1fcHNldWRvU3R5bGVS
ZXF1ZXN0LnBzZXVkb0lkOwogICAgIGNvbnRleHQuc2Nyb2xsYmFyID0gbV9wc2V1ZG9TdHlsZVJl
cXVlc3Quc2Nyb2xsYmFyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRl
eCBkNmYxMGI2MDdkZjc1NWM1ZTQ4YjdmOTU4YzM0NmUwMjBiNzEzYmI3Li4zZmM5ZGM5NmY4NWVk
NzZlZmU2YWU2MTU2ZTQ4ODQ4ZDVkOGE2ZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcApAQCAtMTI4LDEwICsxMjgsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVs
ZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQog
ICAgIHJldHVybiBjb3VudDsKIH0KIAotU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNrZXIo
RG9jdW1lbnQmIGRvY3VtZW50LCBNb2RlIG1vZGUpCitTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX3N0cmljdFBhcnNpbmcoIWRvY3Vt
ZW50LmluUXVpcmtzTW9kZSgpKQogICAgICwgbV9kb2N1bWVudElzSFRNTChkb2N1bWVudC5pc0hU
TUxEb2N1bWVudCgpKQotICAgICwgbV9tb2RlKG1vZGUpCiB7CiB9CiAKQEAgLTE0MywxMiArMTQy
LDEyIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BT
RVVETyAmJiBjb250ZXh0LnBzZXVkb0lkICE9IHBzZXVkb0lkKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRvSWQgIT0g
Tk9QU0VVRE8pIHsKLSAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAm
JiBwc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkIDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQpCiAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+
c2V0SGFzUHNldWRvU3R5bGUocHNldWRvSWQpOwogCiAgICAgICAgIC8vIFdoZW4gaWdub3Jpbmcg
dmlydHVhbCBwc2V1ZG8gZWxlbWVudHMsIHRoZSBjb250ZXh0J3MgcHNldWRvIHNob3VsZCBhbHNv
IGJlIE5PUFNFVURPIGJ1dCB0aGF0IGRvZXMKICAgICAgICAgLy8gbm90IGNhdXNlIGEgZmFpbHVy
ZS4KLSAgICAgICAgcmV0dXJuIG1fbW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmlu
Z1ZpcnR1YWxQc2V1ZG9FbGVtZW50czsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50
czsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjQsMTIgKzE2MywyMiBAQCBpbmxp
bmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlYwogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRl
eHQuc2Nyb2xsYmFyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAg
Ly8gUkVTSVpFUiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIHNjcm9sbGJhciBidXQgaXQgaXMgYSBz
Y3JvbGxiYXItbGlrZSBwc2V1ZG8gZWxlbWVudAogICAgIC8vIGJlY2F1c2UgaXQgY2FuIGhhdmUg
bW9yZSB0aGFuIG9uZSBwc2V1ZG8gZWxlbWVudC4KICAgICByZXR1cm4gZHluYW1pY1BzZXVkbyA9
PSBSRVNJWkVSOwogfQotICAgIAorCitzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QgU2VsZWN0b3JDaGVj
a2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHVwZGF0ZWRDb250ZXh0KGNvbnRleHQpOwor
ICAgIC8vIERpc2FibGUgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZpcnN0IGxp
bmsuCisgICAgaWYgKGNvbnRleHQuZWxlbWVudC0+aXNMaW5rKCkpCisgICAgICAgIHVwZGF0ZWRD
b250ZXh0LnZpc2l0ZWRNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERp
c2FibGVkOworICAgIHVwZGF0ZWRDb250ZXh0LmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBh
cmVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gdXBkYXRlZENvbnRleHQ7Cit9CisKIC8vIFJlY3Vy
c2l2ZSBjaGVjayBvZiBzZWxlY3RvcnMgYW5kIGNvbWJpbmF0b3JzCiAvLyBJdCBjYW4gcmV0dXJu
IDQgZGlmZmVyZW50IHZhbHVlczoKIC8vICogU2VsZWN0b3JNYXRjaGVzICAgICAgICAgIC0gdGhl
IHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQpAQCAtMTk4LDcgKzIwNyw3IEBAIGlubGlu
ZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVjCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoKCFjb250ZXh0LmVsZW1lbnRTdHlsZSAmJiBtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUpIHx8IG1fbW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQorICAgICAgICAgICAgaWYg
KCghY29udGV4dC5lbGVtZW50U3R5bGUgJiYgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlJlc29sdmluZ1N0eWxlKSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlp
bmdSdWxlcykKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAK
ICAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGNv
bnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwpAQCAtMjI0LDggKzIzMyw4IEBA
IGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0IFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVjCiAgICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9
IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKIAotICAgICAgICAvLyBEaXNhYmxl
IDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ugc2VlIHRoZSBmaXJzdCBsaW5rIG9yIHRyeSB0byBt
YXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgotICAgICAgICBpZiAoY29udGV4
dC5lbGVtZW50LT5pc0xpbmsoKSB8fCAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRh
bnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSkKKyAgICAgICAgLy8gRGlzYWJs
ZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRo
YW4gYW4gYW5jZXN0b3JzLgorICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRl
c2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKQogICAgICAgICAgICAg
bmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2FibGVkOwogCiAg
ICAgICAgIG5leHRDb250ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87CkBAIC0yMzMsMTAgKzI0Miwx
MCBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlYwogCiAgICAgc3dpdGNoIChyZWxhdGlvbikgewog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6Ci0gICAgICAgIG5leHRDb250ZXh0LmVs
ZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICAgICAgbmV4dENv
bnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICBu
ZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVj
dG9yOwogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICBmb3Ig
KDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0
LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQu
ZWxlbWVudDsgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRl
eHQpKSB7CiAgICAgICAgICAgICBNYXRjaCBtYXRjaCA9IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHko
bmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgaWYgKG1hdGNo
ID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CkBAIC0yNDUsNyArMjU0LDcgQEAgaW5saW5l
IHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3QgU2VsZWN0b3JDaGVj
a2VyOjpTZWxlY3RvckNoZWMKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAg
ICB7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4
dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIW5leHRDb250ZXh0LmVs
ZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5Owog
ICAgICAgICAgICAgbmV4dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0
Q29udGV4dC5zZWxlY3RvcjsKQEAgLTI1Nyw3ICsyNjYsNyBAQCBpbmxpbmUgc3RhdGljIGJvb2wg
aGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlYwogICAgICAgICB9CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoK
LSAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAgICAgICBp
ZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CiAgICAg
ICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVu
QWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKICAgICAgICAgfQpAQCAtMjY5LDcgKzI3
OCw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVjCiAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vy
c2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKIAogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6
UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CiAgICAgICAgIH0KQEAgLTI4OSw3ICsyOTgsNyBAQCBpbmxpbmUgc3RhdGljIGJvb2wg
aGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlYwogICAgICAgICAvLyB0byBmb2xsb3cgdGhlIHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAg
bmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvID0gaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVu
dChjb250ZXh0LCBkeW5hbWljUHNldWRvKTsKICAgICAgICAgbmV4dENvbnRleHQuaGFzU2VsZWN0
aW9uUHNldWRvID0gZHluYW1pY1BzZXVkbyA9PSBTRUxFQ1RJT047Ci0gICAgICAgIGlmICgoY29u
dGV4dC5lbGVtZW50U3R5bGUgfHwgbV9tb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYg
ZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETworICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0
eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYm
IGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8KICAgICAgICAgICAgICYmICFuZXh0Q29udGV4dC5o
YXNTZWxlY3Rpb25Qc2V1ZG8KICAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Nyb2xs
YmFyUHNldWRvICYmIG5leHRDb250ZXh0LnNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CkBAIC01MjIsNyArNTMxLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmlu
Z1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldFN0eWxlQWZmZWN0ZWRC
eUVtcHR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRFbXB0eVN0
YXRlKHJlc3VsdCk7CkBAIC01MzMsNyArNTQyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAg
ICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBh
biBlbGVtZW50CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNG
aXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVz
b2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4
dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZFN0eWxlKQpAQCAtNTQ2
LDcgKzU1NSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIC8vIGZpcnN0LW9m
LXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAgICAg
aWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
ICAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGlzRmlyc3RPZlR5cGUoZWxlbWVudCwgZWxl
bWVudC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVt
ZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTU1NSw3ICs1NjQs
NyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNo
ZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdD
aGlsZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAgICAg
ICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVu
dFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwog
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIGNoaWxk
U3R5bGUpCkBAIC01NjcsNyArNTc2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBs
YXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAg
ICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTc4LDcgKzU4Nyw3IEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4
dCkgY29uc3QKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0g
aXNGaXJzdENoaWxkRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBib29sIG9ubHlD
aGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpICYmIGlzTGFzdENoaWxkRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBp
ZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0
eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGaXJz
dENoaWxkUnVsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC0+c2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKQEAgLTU5Myw3ICs2MDIsNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzT25s
eU9mVHlwZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9yIGlzIHZlcnkgc2xv
dy4KICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNr
d2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KQEAgLTYwNSw3ICs2MTQs
NyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0
KQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNlaG9sZGVyU2hvd246
CiAgICAgICAgICAgICBpZiAoaXNIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgqZWxlbWVudCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxl
ID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQt
PnJlbmRlclN0eWxlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VW5pcXVl
KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE4LDcgKzYyNyw3IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNCZWZvcmUoZWxlbWVudCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
IHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0
LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5
bGUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0Q2hpbGRJbmRleChjb3VudCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFN0eWxlKQpAQCAtNjM1LDcgKzY0NCw3IEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIGNvdW50RWxlbWVudHNPZlR5cGVCZWZv
cmUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
bW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRFbGVtZW50LT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50
KSkKQEAgLTY0Niw3ICs2NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29u
c3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBp
ZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KQorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVz
b2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQtPnNldENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY1OSw3ICs2NjgsNyBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQg
PSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEVsZW1lbnQtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFy
c2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY5
Myw5ICs3MDIsMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQtPmlzTGluaygpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zp
c2l0ZWQ6CiAgICAgICAgICAgICAvLyAuLi5leGNlcHQgaWYgOnZpc2l0ZWQgbWF0Y2hpbmcgaXMg
ZGlzYWJsZWQgZm9yIGFuY2VzdG9yL3NpYmxpbmcgbWF0Y2hpbmcuCisgICAgICAgICAgICAvLyBJ
bnNpZGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgZXhjZXB0IGZvciA6bm90LCA6dmlzaXRlZCBu
ZXZlciBtYXRjaGVzLgorICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVk
TWF0Y2hFbmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6
Ci0gICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQogICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeURyYWcoKTsKICAg
ICAgICAgICAgICAgICBlbHNlCkBAIC03MDgsNyArNzIwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpOwog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgogICAgICAgICAgICAg
aWYgKG1fc3RyaWN0UGFyc2luZyB8fCBlbGVtZW50LT5pc0xpbmsoKSB8fCBjYW5NYXRjaEhvdmVy
T3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9t
b2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKQEAgLTcyMCw3ICs3MzIsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmUoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NB
Y3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGVsZW1lbnQtPmlzTGlu
aygpIHx8IGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb250ZXh0KSkgewotICAg
ICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0
eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnRTdHlsZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5
QWN0aXZlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaAppbmRleCAyM2ZjZDhlODRmNjY5MmFjZTc2OWQwYjJhMmMwYzY4OWQ0Yzk3MTA2
Li5mNDM5M2YzMjI2M2MxMjQwN2Q1NDg5ZWE1YTllMWMwOWYwYjY0ZWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC01MSwxNSArNTEsMTYgQEAgY2xhc3MgU2VsZWN0b3JD
aGVja2VyIHsKICAgICAgICAgUmVzb2x2aW5nU3R5bGUgPSAwLCBDb2xsZWN0aW5nUnVsZXMsIENv
bGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzLCBRdWVyeWluZ1J1bGVz
CiAgICAgfTsKIAotICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCYsIE1vZGUpOworICAgIFNl
bGVjdG9yQ2hlY2tlcihEb2N1bWVudCYpOwogCiAgICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0IHsKICAgICAgICAgLy8gSW5pdGlhbCBzZWxlY3RvciBjb25zdHJ1Y3RvcgotICAgICAg
ICBTZWxlY3RvckNoZWNraW5nQ29udGV4dChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVs
ZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAg
ICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBF
bGVtZW50KiBlbGVtZW50LCBNb2RlIHJlc29sdmluZ01vZGUpCiAgICAgICAgICAgICA6IHNlbGVj
dG9yKHNlbGVjdG9yKQorICAgICAgICAgICAgLCByZXNvbHZpbmdNb2RlKHJlc29sdmluZ01vZGUp
CiAgICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKICAgICAgICAgICAgICwgc2NvcGUobnVs
bHB0cikKLSAgICAgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hUeXBlKQor
ICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVl
cnlpbmdSdWxlcyA/IFZpc2l0ZWRNYXRjaERpc2FibGVkIDogVmlzaXRlZE1hdGNoRW5hYmxlZCkK
ICAgICAgICAgICAgICwgcHNldWRvSWQoTk9QU0VVRE8pCiAgICAgICAgICAgICAsIGVsZW1lbnRT
dHlsZShudWxscHRyKQogICAgICAgICAgICAgLCBzY3JvbGxiYXIobnVsbHB0cikKQEAgLTcxLDYg
KzcyLDcgQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICAgICAgeyB9CiAKICAgICAgICAg
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOworICAgICAgICBNb2RlIHJlc29sdmluZ01vZGU7
CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlOwogICAgICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CkBAIC0x
MDIsNyArMTA0LDYgQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKIAogICAgIGJvb2wgbV9zdHJp
Y3RQYXJzaW5nOwogICAgIGJvb2wgbV9kb2N1bWVudElzSFRNTDsKLSAgICBNb2RlIG1fbW9kZTsK
IH07CiAKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Qc2V1ZG9DbGFzc1Nl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCmluZGV4IDFhN2FmZTU4NzZlOTAzOTQ5NTk1ODlhNzM3MDdkNmVlZGU0MTI1ODMuLjZl
YTY3MDY4MGU2ODdkMjMzMDBmOTI0ZjE4YTBiYmFhODA1MDkyZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaApAQCAtNTcyLDkgKzU3Miw5IEBAIGlubGluZSBib29sIGNoZWNrUmVnaW9u
U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdp
CiAgICAgaWYgKCFyZWdpb25TZWxlY3RvciB8fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihyZWdpb25F
bGVtZW50LT5kb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMp
OworICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIocmVnaW9uRWxlbWVudC0+ZG9j
dW1lbnQoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9y
OyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7Ci0gICAgICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQocywg
cmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCk7Cisg
ICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JD
aGVja2luZ0NvbnRleHQocywgcmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpR
dWVyeWluZ1J1bGVzKTsKICAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggMTBlZjAyZjQ4NDIwODgxYjZmNzk4ZWU2
N2ZmM2VmMzNkMGNjYWI1Yi4uNWMzZjliY2ExNzFhZGM5NTk1YjhkMTllZGMwZDk1OWQ4NjhhY2U2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApAQCAtMTIxLDggKzEyMSw4IEBA
IGlubGluZSBib29sIFNlbGVjdG9yRGF0YUxpc3Q6OnNlbGVjdG9yTWF0Y2hlcyhjb25zdCBTZWxl
Y3RvckRhdGEmIHNlbGVjdG9yRGF0YSwKICAgICAgICAgcmV0dXJuIHNlbGVjdG9yQ2hlY2tlckZh
c3RQYXRoLm1hdGNoZXMoKTsKICAgICB9CiAKLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JD
aGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWlu
Z1J1bGVzKTsKLSAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQsIFNl
bGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgIFNlbGVjdG9yQ2hlY2tl
ciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsKKyAgICBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbGVj
dG9yRGF0YS5zZWxlY3RvciwgJmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlp
bmdSdWxlcyk7CiAgICAgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQuc2NvcGUgPSByb290Tm9kZS5p
c0RvY3VtZW50Tm9kZSgpID8gbnVsbHB0ciA6ICZyb290Tm9kZTsKICAgICByZXR1cm4gc2VsZWN0
b3JDaGVja2VyLm1hdGNoKHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KTsKIH0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0YjFk
N2Q1ZGVkZDE5MjZmNTBhZjU3NjE4YjgxZDBmZjdjMzZlZDcxLi4wMGNmNTM1YmE4ODFhMzE1NDhm
YjJiYjhhZTc3NjRjY2ZiY2YxNDhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTQtMDgtMjkg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgQ1NTOiBS
ZWZhY3RvciA6dmlzaXRlZCBoYW5kbGluZyBpbiBTZWxlY3RvckNoZWNrZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTYzOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCA6LXdlYmtpdC1hbnkoOnZp
c2l0ZWQpIGNvbnNpc3RlbmN5IGluIGxpbmtNYXRjaFR5cGUgYW5kIGFjdHVhbCBzZWxlY3RvciBt
YXRjaGluZy4KKyAgICAgICAgQW5kIGZpeCBkaXNhYmxpbmcgOnZpc2l0ZWQgbWF0Y2hpbmcgd2hl
biB0aGUgZmlyc3QgbGluayBjb21lcy4KKworICAgICAgICAqIGZhc3QvaGlzdG9yeS9uZXN0ZWQt
dmlzaXRlZC10ZXN0LW92ZXJyaWRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLWFueS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1hbnkuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1ub3QuaHRtbDog
QWRkZWQuCisKIDIwMTQtMDgtMjggIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogV3JpdGUgdGVzdHMgZm9yIFNjcmlwdFN5bnRheFRyZWUg
YW5kIGZpeCBidWdzIGluIHRoZSBkYXRhIHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3RlZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzZjhiM2RlYTQ3NGUzMWQwZGFjMDY4OTVhOGM0OTQy
YjI1MmM3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvbmVz
dGVkLXZpc2l0ZWQtdGVzdC1vdmVycmlkZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNCBAQAor
VGhpcyBsaW5rIHNob3VsZCBiZSBncmVlbjoKKworT25lCisKKzp2aXNpdGVkIGlzIG9ubHkgZWZm
ZWN0aXZlIHdoZW4gdGhlIHRhcmdldCBpcyBmaXJzdCBlbmNvdW50ZXJlZCBsaW5rIGVsZW1lbnQu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN0eWxlLmNvbG9yIGJlY2Ft
ZSAicmdiKDAsIDEyOCwgMCkiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L25lc3Rl
ZC12aXNpdGVkLXRlc3Qtb3ZlcnJpZGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9u
ZXN0ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTEzOWRkMjA1OTBj
N2Y4MWM0YWY4NzYyYTJiNjZlMmViNjY4NDgxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9uZXN0ZWQtdmlzaXRlZC10ZXN0LW92ZXJyaWRlLmh0bWwKQEAgLTAs
MCArMSw0MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2pzVGVzdElzQXN5bmMgPSB0cnVl
OworCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgd2luZG93LnRlc3RSdW5uZXIua2VlcFdl
Ykhpc3RvcnkoKTsKKworZnVuY3Rpb24gY29tcGFyZVN0eWxlcygpCit7CisgICAgZGVzY3JpcHRp
b24oIjp2aXNpdGVkIGlzIG9ubHkgZWZmZWN0aXZlIHdoZW4gdGhlIHRhcmdldCBpcyBmaXJzdCBl
bmNvdW50ZXJlZCBsaW5rIGVsZW1lbnQuIik7CisKKyAgICB2YXIgYW5jaG9yID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiYSIpOworICAgIGFuY2hvci5ocmVmPSJyZXNvdXJjZXMvZHVtbXkuaHRt
bCI7CisgICAgYW5jaG9yLnNldEF0dHJpYnV0ZSgiaWQiLCAib25lIik7CisgICAgYW5jaG9yLmlu
bmVySFRNTCA9ICI8c3Bhbj5PbmU8L3NwYW4+IjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZW5jbG9zdXJlIikuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKworICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CisgICAgICAgIHN0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNsdWRp
bmdWaXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25lIikuZmlyc3RDaGlsZCk7
CisgICAgICAgIHNob3VsZEJlY29tZUVxdWFsVG9TdHJpbmcoInN0eWxlLmNvbG9yIiwgInJnYigw
LCAxMjgsIDApIiwgZmluaXNoSlNUZXN0KTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4K
Ky5vayBzcGFuIHsgY29sb3I6IGdyZWVuOyB9Cisub2s6dmlzaXRlZCBzcGFuIHsgY29sb3I6IHJl
ZDsgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iY29tcGFyZVN0eWxlcygpIj4K
KzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZHVtbXkuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+
PC9pZnJhbWU+CisKKzxwPlRoaXMgbGluayBzaG91bGQgYmUgZ3JlZW46PC9wPgorPHA+Cis8YSBp
ZD0iZW5jbG9zdXJlIiBjbGFzcz0ib2siIGhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5jb20iPjwv
YT4KKzwvcD4KKworPGRpdiBpZD1jb25zb2xlPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLWFueS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtYW55LWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMjg1YTA4ZDVlOGU5Mzg0NTA0OGYzYmE1ODRiMjlkOGE4
YmNkYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0
ZWQtaW5zaWRlLWFueS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorT25lIGFuZCBUd28g
bGlua3Mgc2hvdWxkIGJlIGdyZWVuOgorCitPbmUKKworYW5kIFR3bworOnZpc2l0ZWQgaW5zaWRl
IDotd2Via2l0LWFueSBzaG91bGQgbm90IGJlIGVmZmVjdGl2ZS4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgb25lU3R5bGUuY29sb3IgYmVjYW1lICJyZ2IoMCwgMTI4LCAw
KSIKK1BBU1MgdHdvU3R5bGUuY29sb3IgYmVjYW1lICJyZ2IoMCwgMTI4LCAwKSIKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtYW55Lmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtYW55Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I2
Y2JjYTQxNWVkMTYzOTUwYzdhNzllMTJlYzZjNzMyNTgwMjAyNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1hbnkuaHRtbApAQCAtMCww
ICsxLDUxIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoranNUZXN0SXNBc3luYyA9IHRydWU7
CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB3aW5kb3cudGVzdFJ1bm5lci5rZWVwV2Vi
SGlzdG9yeSgpOworCit2YXIgY291bnQgPSAwOworZnVuY3Rpb24gZmluaXNoKCkKK3sKKyAgICBp
ZiAoKytjb3VudCA9PT0gMikKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IGNvbXBhcmVTdHlsZXMoKQoreworICAgIGRlc2NyaXB0aW9uKCI6dmlzaXRlZCBpbnNpZGUgOi13
ZWJraXQtYW55IHNob3VsZCBub3QgYmUgZWZmZWN0aXZlLiIpOworICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CisgICAgICAgIG9uZVN0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNs
dWRpbmdWaXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25lIikuZmlyc3RDaGls
ZCk7CisgICAgICAgIHR3b1N0eWxlID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHdvIikpOworICAgICAgICBzaG91
bGRCZWNvbWVFcXVhbFRvU3RyaW5nKCJvbmVTdHlsZS5jb2xvciIsICJyZ2IoMCwgMTI4LCAwKSIs
IGZpbmlzaCk7CisgICAgICAgIHNob3VsZEJlY29tZUVxdWFsVG9TdHJpbmcoInR3b1N0eWxlLmNv
bG9yIiwgInJnYigwLCAxMjgsIDApIiwgZmluaXNoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxz
dHlsZT4KK2EgeyBjb2xvcjogZ3JlZW47IH0KKyNvbmUgOi13ZWJraXQtYW55KDp2aXNpdGVkKSB7
CisgICAgY29sb3I6IHJlZDsKK30KKyNvbmUgKyA6LXdlYmtpdC1hbnkoOnZpc2l0ZWQpICsgYSB7
CisgICAgY29sb3I6IHJlZDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImNv
bXBhcmVTdHlsZXMoKSI+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2R1bW15Lmh0bWwiIHN0eWxl
PSJkaXNwbGF5Om5vbmUiPjwvaWZyYW1lPgorCis8cD5PbmUgYW5kIFR3byBsaW5rcyBzaG91bGQg
YmUgZ3JlZW46PC9wPgorPHA+Cis8cCBpZD0ib25lIj48YSBocmVmPSJodHRwOi8vbWFkZXVwLnNp
dGUuY29tIj5PbmU8L2E+PC9wPgorPGEgaHJlZj0iaHR0cDovL21hZGV1cC5zaXRlLmNvbSI+YW5k
PC9hPgorPGEgaWQ9InR3byJocmVmPSJodHRwOi8vbWFkZXVwLnNpdGUuY29tIj5Ud288L2E+Cis8
L3A+CisKKzxkaXYgaWQ9Y29uc29sZT48L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWluc2lkZS1ub3QtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDcwMzhiNzViYjVlODA1YjM0OTQyZGJiNGRiNDA0ZTExNjI5YTBk
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS92aXNpdGVkLWlu
c2lkZS1ub3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK2NvbG9yIG9mIE9uZSBhbmQg
VHdvIHNob3VsZCBiZSBncmVlbjoKKworT25lCisKK1R3bworCis6dmlzaXRlZCBpbnNpZGUgOm5v
dCBzaG91bGQgYmUgYWx3YXlzIG1hdGNoZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG9uZVN0eWxlLmNvbG9yIGJlY2FtZSAicmdiKDAsIDEyOCwgMCkiCitQQVNTIHR3
b1N0eWxlLmNvbG9yIGJlY2FtZSAicmdiKDAsIDEyOCwgMCkiCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L3Zpc2l0ZWQtaW5zaWRlLW5vdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMTJhNzZmODRmY2My
Mzc1MTJlMDk1MThiZDQyMTIwN2Y0MTk5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2hpc3RvcnkvdmlzaXRlZC1pbnNpZGUtbm90Lmh0bWwKQEAgLTAsMCArMSw1MCBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgd2luZG93LnRlc3RSdW5uZXIua2VlcFdlYkhpc3RvcnkoKTsK
KwordmFyIGNvdW50ID0gMDsKK2Z1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICBpZiAoKytjb3VudCA9
PT0gMikgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNv
bXBhcmVTdHlsZXMoKQoreworICAgIGRlc2NyaXB0aW9uKCI6dmlzaXRlZCBpbnNpZGUgOm5vdCBz
aG91bGQgYmUgYWx3YXlzIG1hdGNoZWQuIik7CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsK
KyAgICAgICAgb25lU3R5bGUgPSBpbnRlcm5hbHMuY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvbmUiKSk7CisgICAgICAgIHR3b1N0eWxl
ID0gaW50ZXJuYWxzLmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidHdvIikpOworICAgICAgICBzaG91bGRCZWNvbWVFcXVhbFRvU3RyaW5n
KCJvbmVTdHlsZS5jb2xvciIsICJyZ2IoMCwgMTI4LCAwKSIsIGZpbmlzaCk7CisgICAgICAgIHNo
b3VsZEJlY29tZUVxdWFsVG9TdHJpbmcoInR3b1N0eWxlLmNvbG9yIiwgInJnYigwLCAxMjgsIDAp
IiwgZmluaXNoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzxzdHlsZT4KK2EgeyBjb2xvcjogcmVk
OyB9CisjYXJlYTEgYTpub3QoOnZpc2l0ZWQpIHsKKyAgICBjb2xvcjogZ3JlZW47Cit9CisjYXJl
YTIgOm5vdCg6dmlzaXRlZCkgeworICAgIGNvbG9yOiBncmVlbjsKK30KKzwvc3R5bGU+Cis8L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9ImNvbXBhcmVTdHlsZXMoKSI+Cis8aWZyYW1lIHNyYz0icmVzb3Vy
Y2VzL2R1bW15Lmh0bWwiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvaWZyYW1lPgorCis8cD5jb2xv
ciBvZiBPbmUgYW5kIFR3byBzaG91bGQgYmUgZ3JlZW46PC9wPgorPHA+Cis8cCBpZD0iYXJlYTEi
PjxhIGlkPSJvbmUiIGhyZWY9Imh0dHA6Ly9tYWRldXAuc2l0ZS5jb20iPk9uZTwvYT48L3A+Cis8
cD48YSBocmVmPSJodHRwOi8vbWFkZXVwLnNpdGUuY29tIj48c3BhbiBpZD0iYXJlYTIiPjxzcGFu
IGlkPSJ0d28iPlR3bzwvc3Bhbj48L3NwYW4+PC9hPjwvcD4KKzwvcD4KKworPGRpdiBpZD1jb25z
b2xlPjwvZGl2PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="262086"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>