<?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>138214</bug_id>
          
          <creation_ts>2014-10-30 10:37:35 -0700</creation_ts>
          <short_desc>CSS4 Selectors: Add multiple pseudo elements support to :matches</short_desc>
          <delta_ts>2015-05-24 02:28:57 -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>New Bugs</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>buildbot</cc>
    
    <cc>esprehn</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045056</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-30 10:37:35 -0700</bug_when>
    <thetext>CSS4 Selectors: Add multiple pseudo elements support to :matches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045057</commentid>
    <comment_count>1</comment_count>
      <attachid>240681</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-30 10:42:59 -0700</bug_when>
    <thetext>Created attachment 240681
Patch

Added initial patch. In this patch, we support it in SelectorChecker, and makes CannotCompile on CSS JIT. I&apos;ll add the tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045059</commentid>
    <comment_count>2</comment_count>
      <attachid>240682</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-30 10:49:59 -0700</bug_when>
    <thetext>Created attachment 240682
Patch

rev2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045060</commentid>
    <comment_count>3</comment_count>
      <attachid>240683</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-10-30 10:54:00 -0700</bug_when>
    <thetext>Created attachment 240683
Patch

rev3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045525</commentid>
    <comment_count>4</comment_count>
      <attachid>240791</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-01 11:36:12 -0700</bug_when>
    <thetext>Created attachment 240791
Patch

rev3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045619</commentid>
    <comment_count>5</comment_count>
      <attachid>240817</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-02 10:59:07 -0800</bug_when>
    <thetext>Created attachment 240817
Patch

rev4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045620</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-02 10:59:40 -0800</bug_when>
    <thetext>I&apos;ll add tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045629</commentid>
    <comment_count>7</comment_count>
      <attachid>240819</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-02 11:47:25 -0800</bug_when>
    <thetext>Created attachment 240819
Patch

rev5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046713</commentid>
    <comment_count>8</comment_count>
      <attachid>240819</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-05 21:36:08 -0800</bug_when>
    <thetext>Comment on attachment 240819
Patch

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

The patch is brilliant. I did not find any correctness issue.

I have some minor comments. I r- because it is complex change, I&apos;d like a chance to do a second round.

&gt; Source/WebCore/ChangeLog:11
&gt; +        * css/SelectorChecker.cpp:

It&apos;s about time you add your copyright on this one :)

&gt; Source/WebCore/css/SelectorChecker.cpp:182
&gt; +    if (context.pseudoId != NOPSEUDO &amp;&amp; !(pseudoIdSet &amp; (1 &lt;&lt; context.pseudoId)))

I would make a nice little function to get the PseudoIdSet corresponding to a PseudoId, that seems useful.

Maybe even a constructor to PseudoIdSet taking PseudoId and use stronger typing for PseudoIdSet?

&gt; Source/WebCore/css/SelectorChecker.cpp:232
&gt;          // In Selectors Level 4, a pseudo element inside a functional pseudo class is undefined (issue 7).
&gt; -        // Make it as matching failure until the spec clarifies this case.
&gt; -        if (context.inFunctionalPseudoClass)
&gt; -            return SelectorFailsCompletely;
&gt; +        // Make it as matching failure until the spec clarifies this case, except for :matches.
&gt; +        // In WebKit, we specially handles pseudo-elements in :matches.

Let&apos;s remove the comments.

I have talked about your patch with Tab (the spec editor), the spec will be updated.

&gt; Source/WebCore/css/SelectorChecker.cpp:289
&gt; +                return MatchResult::update(result, matchToNonPseudoElement);

&quot;update&quot; is a bit generic, I am not sure what would make a good name... :(

&gt; Source/WebCore/css/SelectorChecker.cpp:688
&gt; +                    PseudoIdSet localDynamicPseudoIdSet = NOPSEUDO;

I am not a fan of mixing PseudoIdSet and PseudoId (NOPSEUDO).

I think readers might get confused, localDynamicPseudoIdSet = 0 may be better.

&gt; Source/WebCore/css/SelectorChecker.cpp:693
&gt; +                            // When pseudo elements are not effective in this fragment (e.g. it&apos;s not righmost fragment),
&gt; +                            // it&apos;s not necessary to check all selectors to collect pseudo element ids.

If I am not mistaken, we can assert that localDynamicPseudoIdSet is still 0/NOPSEUDO here?

If we matched a virtual pseudo element in a non-rightmost selector, something is wrong.

&gt; Source/WebCore/css/SelectorChecker.h:52
&gt; +    enum class MatchToNonPseudoElement {
&gt; +        Matches,
&gt; +        Fails,
&gt; +    };

Since this is a subproperty of Match, maybe this should be a match type instead?
enum class MatchType {
    VirtualPseudoElementOnly,
    Element
}

&gt; Source/WebCore/css/SelectorChecker.h:63
&gt; +            return {
&gt; +                Match::SelectorMatches,
&gt; +                matchToNonPseudoElement
&gt; +            };

I would put this on one line, it is simple enough.

&gt; Source/WebCore/css/SelectorChecker.h:64
&gt; +

Extra blank line.

&gt; Source/WebCore/css/SelectorChecker.h:79
&gt; +            return {
&gt; +                match,
&gt; +                MatchToNonPseudoElement::Fails
&gt; +            };

I&apos;d use one line here too.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:375
&gt; +static FunctionType constructFragments(const CSSSelector* rootSelector, SelectorContext, SelectorFragmentList&amp; selectorFragments, FragmentsLevel, FragmentPositionInRootFragments, bool visitedMatchEnabled, VisitedMode&amp;, bool pseudoElementEffective);

Here we could improve readability with an enumeration.

What do you think of?:
enum class PseudoElementMatchingBehavior {
    CanMatch,
    NeverMatch
}

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:887
&gt;              // In Selectors Level 4, a pseudo element inside a functional pseudo class is undefined (issue 7).
&gt;              // Make it as matching failure until the spec clarifies this case.

Let&apos;s remove the comment here too.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:888
&gt; -            if (fragmentLevel == FragmentsLevel::InFunctionalPseudoType)
&gt; +            if (fragmentLevel == FragmentsLevel::InFunctionalPseudoType &amp;&amp; !pseudoElementEffective)

Wouldn&apos;t it be enough to have:
    if (!pseudoElementEffective)
?

&gt; Source/WebCore/rendering/style/RenderStyle.h:239
&gt; +            ASSERT(pseudo != NOPSEUDO);

Is it a bit odd to compare a PseudoIdSet with a PseudoId. Maybe this should be ASSERT(pseudo)?

&gt; Source/WebCore/rendering/style/RenderStyle.h:241
&gt; +            static_assert(pseudoBitsOffset &gt;= 1, &quot;(pseudoBitsOffset - 1) should be valid.&quot;);

Nice addition.

&gt; LayoutTests/ChangeLog:9
&gt; +        * fast/selectors/pseudo-element-inside-matches-expected.html: Added.
&gt; +        * fast/selectors/pseudo-element-inside-matches.html: Added.

Smart way to test this.

I like that you included a test for each of the big 4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046728</commentid>
    <comment_count>9</comment_count>
      <attachid>240819</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-05 23:31:12 -0800</bug_when>
    <thetext>Comment on attachment 240819
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        * css/SelectorChecker.cpp:
&gt; 
&gt; It&apos;s about time you add your copyright on this one :)

Yay. I&apos;ve added :)

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:182
&gt;&gt; +    if (context.pseudoId != NOPSEUDO &amp;&amp; !(pseudoIdSet &amp; (1 &lt;&lt; context.pseudoId)))
&gt; 
&gt; I would make a nice little function to get the PseudoIdSet corresponding to a PseudoId, that seems useful.
&gt; 
&gt; Maybe even a constructor to PseudoIdSet taking PseudoId and use stronger typing for PseudoIdSet?

Introducing stronger typing sounds nice.
I&apos;ll wrap the unsigned flags with class and provides some methods, `has`, `add`, `merge`.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:232
&gt;&gt; +        // In WebKit, we specially handles pseudo-elements in :matches.
&gt; 
&gt; Let&apos;s remove the comments.
&gt; 
&gt; I have talked about your patch with Tab (the spec editor), the spec will be updated.

Yeah! I&apos;ll drop this comment :)

&gt; Source/WebCore/css/SelectorChecker.cpp:233
&gt; +        if (context.inFunctionalPseudoClass &amp;&amp; !context.pseudoElementEffective)

Makes it to `if (!context.pseudoElementEffective)`

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:289
&gt;&gt; +                return MatchResult::update(result, matchToNonPseudoElement);
&gt; 
&gt; &quot;update&quot; is a bit generic, I am not sure what would make a good name... :(

What do you think of changing it to `updateWithMatchType`?

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:688
&gt;&gt; +                    PseudoIdSet localDynamicPseudoIdSet = NOPSEUDO;
&gt; 
&gt; I am not a fan of mixing PseudoIdSet and PseudoId (NOPSEUDO).
&gt; 
&gt; I think readers might get confused, localDynamicPseudoIdSet = 0 may be better.

Looks nice. I&apos;ll rewrite it.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:693
&gt;&gt; +                            // it&apos;s not necessary to check all selectors to collect pseudo element ids.
&gt; 
&gt; If I am not mistaken, we can assert that localDynamicPseudoIdSet is still 0/NOPSEUDO here?
&gt; 
&gt; If we matched a virtual pseudo element in a non-rightmost selector, something is wrong.

Previously, SelectorChecker simply ignores the virtual pseudo elements selectors inside non-rightmost fragments.
So here, we may see pseudo elements. In that case, we ignore it.

But what do you think of simply making pseudo-elements inside non-rightmost fragment unmatched?

&gt;&gt; Source/WebCore/css/SelectorChecker.h:52
&gt;&gt; +    };
&gt; 
&gt; Since this is a subproperty of Match, maybe this should be a match type instead?
&gt; enum class MatchType {
&gt;     VirtualPseudoElementOnly,
&gt;     Element
&gt; }

Sounds nice. Your suggestion clarify the meaning of this property :)
And since it states the property&apos;s job clearly, I think the above comment becomes necessary. I&apos;ve removed it.

&gt;&gt; Source/WebCore/css/SelectorChecker.h:63
&gt;&gt; +            };
&gt; 
&gt; I would put this on one line, it is simple enough.

Fixed.

&gt;&gt; Source/WebCore/css/SelectorChecker.h:64
&gt;&gt; +
&gt; 
&gt; Extra blank line.

Oops. Thank you.

&gt;&gt; Source/WebCore/css/SelectorChecker.h:79
&gt;&gt; +            };
&gt; 
&gt; I&apos;d use one line here too.

Yes, done :)

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:375
&gt;&gt; +static FunctionType constructFragments(const CSSSelector* rootSelector, SelectorContext, SelectorFragmentList&amp; selectorFragments, FragmentsLevel, FragmentPositionInRootFragments, bool visitedMatchEnabled, VisitedMode&amp;, bool pseudoElementEffective);
&gt; 
&gt; Here we could improve readability with an enumeration.
&gt; 
&gt; What do you think of?:
&gt; enum class PseudoElementMatchingBehavior {
&gt;     CanMatch,
&gt;     NeverMatch
&gt; }

Looks nice. It improves readability very much :)

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:888
&gt;&gt; +            if (fragmentLevel == FragmentsLevel::InFunctionalPseudoType &amp;&amp; !pseudoElementEffective)
&gt; 
&gt; Wouldn&apos;t it be enough to have:
&gt;     if (!pseudoElementEffective)
&gt; ?

Yes. We can do so. I&apos;ll change it :)

&gt;&gt; Source/WebCore/rendering/style/RenderStyle.h:239
&gt;&gt; +            ASSERT(pseudo != NOPSEUDO);
&gt; 
&gt; Is it a bit odd to compare a PseudoIdSet with a PseudoId. Maybe this should be ASSERT(pseudo)?

Yes. I&apos;ll change it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046913</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-06 14:39:07 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt;&gt; Source/WebCore/css/SelectorChecker.cpp:289
&gt; &gt;&gt; +                return MatchResult::update(result, matchToNonPseudoElement);
&gt; &gt; 
&gt; &gt; &quot;update&quot; is a bit generic, I am not sure what would make a good name... :(
&gt; 
&gt; What do you think of changing it to `updateWithMatchType`?

Yep, that&apos;s better.

&gt; &gt;&gt; Source/WebCore/css/SelectorChecker.cpp:693
&gt; &gt;&gt; +                            // it&apos;s not necessary to check all selectors to collect pseudo element ids.
&gt; &gt; 
&gt; &gt; If I am not mistaken, we can assert that localDynamicPseudoIdSet is still 0/NOPSEUDO here?
&gt; &gt; 
&gt; &gt; If we matched a virtual pseudo element in a non-rightmost selector, something is wrong.
&gt; 
&gt; Previously, SelectorChecker simply ignores the virtual pseudo elements
&gt; selectors inside non-rightmost fragments.
&gt; So here, we may see pseudo elements. In that case, we ignore it.
&gt; 
&gt; But what do you think of simply making pseudo-elements inside non-rightmost
&gt; fragment unmatched?

For virtual pseudo element, failing a match is indeed the correct thing to do.

For custom pseudo elements, they can appear anywhere in the selector (for example video::-webkit-media-controls-panel button for styling the shadow tree of &lt;video&gt;).

Do we not handle this correctly today? I think this code
    if (relation != CSSSelector::SubSelector) {
        // Bail-out if this selector is irrelevant for the pseudoId
        if (context.pseudoId != NOPSEUDO &amp;&amp; context.pseudoId != dynamicPseudo)
            return SelectorFailsCompletely;
was supposed to take care of the problem.

In any case, we should make sure we have good test coverage for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047046</commentid>
    <comment_count>11</comment_count>
      <attachid>241167</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 01:53:45 -0800</bug_when>
    <thetext>Created attachment 241167
Patch

rev6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047048</commentid>
    <comment_count>12</comment_count>
      <attachid>241169</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 02:01:41 -0800</bug_when>
    <thetext>Created attachment 241169
Patch

rev7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047051</commentid>
    <comment_count>13</comment_count>
      <attachid>241169</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 02:10:25 -0800</bug_when>
    <thetext>Comment on attachment 241169
Patch

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

Updated the patch :)

&gt; Source/WebCore/ChangeLog:13
&gt; +        framgnet, it is ignored. This patch changes it to unmatched.

In this patch, I&apos;ve changed the pseudo element semantics.
Previously, if there&apos;s pseudo element in the non-rightmost fragment, it simply ignored.
This patch changes it to unmatched. What do you think about it?

&gt; Source/WebCore/css/SelectorChecker.cpp:197
&gt; +    PseudoIdSet scrollbarIdSet = { SCROLLBAR, SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER };

Constructing PseudoIdSet with initializer_list :)

&gt; Source/WebCore/css/SelectorChecker.cpp:275
&gt; +        // Virtual pseudo element is only effective in the rightmost fragment.

Make pseudoElementEffective false when the fragment is not rightmost fragment.

&gt; Source/WebCore/css/SelectorChecker.cpp:693
&gt; +                            ASSERT(!localDynamicPseudoIdSet);

Added assertion. It is now ensured.

&gt; Source/WebCore/css/SelectorChecker.h:59
&gt; +        static MatchResult updateWithMatchType(MatchResult result, MatchType matchType)

I&apos;ve renamed it to updatedWithMatchType.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:966
&gt; +        pseudoElementMatchingBehavior = PseudoElementMatchingBehavior::NeverMatch;

Make the pseudoElementMatchingBehavior NeverMatch when it is in the non-rightmost fragment.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:-3560
&gt; -    }

This path is dropped, since we make the selector CannotMatchAnything when we found the pseudo element in the non-rightmost fragment.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:3562
&gt; +    ASSERT_WITH_MESSAGE(fragmentMatchesTheRightmostElement(m_selectorContext, fragment), &quot;Virtual pseudo elements handling is only effective in the rightmost fragment. If the current fragment is not rightmost fragment, CSS JIT compiler makes it CannotMatchAnything in fragment construction phase, so never reach here.&quot;);

Added assertion.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:85
&gt; +class PseudoIdSet {

Introduce strongly typed PseudoIdSet.
It supports several operations, &quot;has&quot;, &quot;add&quot;, &quot;merge&quot;, &quot;&amp;&quot;, &quot;|&quot;.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:128
&gt; +    explicit operator bool() const

Leverage C++11 explicit bool conversion operator.
It allows
    if (pseudoIdSet) ...;
    ASSERT(pseudoIdSet);
But it makes the following compile error :)
    unsigned value = pseudoIdSet;
    PseudoId pseudoId = pseudoIdSet;

&gt; LayoutTests/fast/selectors/pseudo-element-inside-matches-expected.html:71
&gt; +    &lt;p id=&quot;target14&quot;&gt;&lt;p&gt;non-rightmost pseudo element has no effect.&lt;/p&gt;&lt;/p&gt;

Added :matches(non-rightmost pseudo elements) cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047063</commentid>
    <comment_count>14</comment_count>
      <attachid>241174</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 05:39:36 -0800</bug_when>
    <thetext>Created attachment 241174
Patch

rev8, fix unused parameter warnings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047064</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 05:40:24 -0800</bug_when>
    <thetext>Rev8: Use ASSERT_UNUSED / ASSERT_WITH_MESSAGE_UNUSED to suppress unused parameter warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047081</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 08:01:41 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; &gt;&gt; Source/WebCore/css/SelectorChecker.cpp:693
&gt; &gt; &gt;&gt; +                            // it&apos;s not necessary to check all selectors to collect pseudo element ids.
&gt; &gt; &gt; 
&gt; &gt; &gt; If I am not mistaken, we can assert that localDynamicPseudoIdSet is still 0/NOPSEUDO here?
&gt; &gt; &gt; 
&gt; &gt; &gt; If we matched a virtual pseudo element in a non-rightmost selector, something is wrong.
&gt; &gt; 
&gt; &gt; Previously, SelectorChecker simply ignores the virtual pseudo elements
&gt; &gt; selectors inside non-rightmost fragments.
&gt; &gt; So here, we may see pseudo elements. In that case, we ignore it.
&gt; &gt; 
&gt; &gt; But what do you think of simply making pseudo-elements inside non-rightmost
&gt; &gt; fragment unmatched?
&gt; 
&gt; For virtual pseudo element, failing a match is indeed the correct thing to
&gt; do.

Agreed. I&apos;ll take this semantics.

&gt; For custom pseudo elements, they can appear anywhere in the selector (for
&gt; example video::-webkit-media-controls-panel button for styling the shadow
&gt; tree of &lt;video&gt;).

Yup. Need to handle it.
And I&apos;ll add comment to SelectorCompiler to clarify handling custom pseudo elements.

&gt; Do we not handle this correctly today? I think this code
&gt;     if (relation != CSSSelector::SubSelector) {
&gt;         // Bail-out if this selector is irrelevant for the pseudoId
&gt;         if (context.pseudoId != NOPSEUDO &amp;&amp; context.pseudoId !=
&gt; dynamicPseudo)
&gt;             return SelectorFailsCompletely;

I think it&apos;s currently handled in the code,

    if ((!context.elementStyle &amp;&amp; context.resolvingMode == Mode::ResolvingStyle) || context.resolvingMode == Mode::QueryingRules)
        return MatchResult::fails(Match::SelectorFailsLocally);

In this code, context.elementStyle becomes nullptr if the context is in a non-rightmost fragment.
When resolvingMode is ResolvingStyle or QueryingRules, virtual pseudo elements in a non-rightmost fragment are ignored.
So when viewing the html,

&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&gt;
    .OK::after span {
        background-color: red;
    }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p class=&quot;OK&quot;&gt;&lt;span&gt;Hello World&lt;/span&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;

Collecting rules for span collects `.OK::after span` rule(We can see it in the inspector). Is it an expected behavior?

And I think that `if (context.pseudoId != NOPSEUDO &amp;&amp; context.pseudoId != dynamicPseudo)` meets when &quot;span::selection::before&quot; selector case.
Is it correct? Need to investigate more...


&gt; 
&gt; In any case, we should make sure we have good test coverage for this.

Oops. I need to care it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047082</commentid>
    <comment_count>17</comment_count>
      <attachid>241183</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-07 08:04:27 -0800</bug_when>
    <thetext>Created attachment 241183
Patch

rev9, fix care for custom pseudo elements. Need to add tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047127</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-07 11:28:14 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; Do we not handle this correctly today? I think this code
&gt; &gt;     if (relation != CSSSelector::SubSelector) {
&gt; &gt;         // Bail-out if this selector is irrelevant for the pseudoId
&gt; &gt;         if (context.pseudoId != NOPSEUDO &amp;&amp; context.pseudoId !=
&gt; &gt; dynamicPseudo)
&gt; &gt;             return SelectorFailsCompletely;
&gt; 
&gt; I think it&apos;s currently handled in the code,
&gt; 
&gt;     if ((!context.elementStyle &amp;&amp; context.resolvingMode ==
&gt; Mode::ResolvingStyle) || context.resolvingMode == Mode::QueryingRules)
&gt;         return MatchResult::fails(Match::SelectorFailsLocally);

Right.

&gt; In this code, context.elementStyle becomes nullptr if the context is in a
&gt; non-rightmost fragment.
&gt; When resolvingMode is ResolvingStyle or QueryingRules, virtual pseudo
&gt; elements in a non-rightmost fragment are ignored.
&gt; So when viewing the html,
&gt; 
&gt; &lt;!DOCTYPE HTML&gt;
&gt; &lt;html lang=&quot;en&quot;&gt;
&gt; &lt;head&gt;
&gt; 	&lt;meta charset=&quot;UTF-8&quot;&gt;
&gt; 	&lt;title&gt;&lt;/title&gt;
&gt;     &lt;style&gt;
&gt;     .OK::after span {
&gt;         background-color: red;
&gt;     }
&gt;     &lt;/style&gt;
&gt; &lt;/head&gt;
&gt; &lt;body&gt;
&gt; &lt;p class=&quot;OK&quot;&gt;&lt;span&gt;Hello World&lt;/span&gt;&lt;/p&gt;
&gt; &lt;/body&gt;
&gt; &lt;/html&gt;
&gt; 
&gt; Collecting rules for span collects `.OK::after span` rule(We can see it in
&gt; the inspector). Is it an expected behavior?

Damn, that looks like a bug :(
Matching such rule makes no sense.

The bug should not affect styling because the selector would never match when resolving style.

The problem are
-The rule is considered in the ruleset for no reason.
-It will be shown incorrectly in the inspector.

&gt; And I think that `if (context.pseudoId != NOPSEUDO &amp;&amp; context.pseudoId !=
&gt; dynamicPseudo)` meets when &quot;span::selection::before&quot; selector case.
&gt; Is it correct? Need to investigate more...

I was thinking of style resolution in my comment.

When resolving the style for ::after, context.pseudoId would be set and &quot;.OK::after span&quot; would fail.
But when collecting rules, context.pseudoId must NOPSEUDO and nothing protects the invalid case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047292</commentid>
    <comment_count>19</comment_count>
      <attachid>241231</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-08 10:58:35 -0800</bug_when>
    <thetext>Created attachment 241231
Patch

rev10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047294</commentid>
    <comment_count>20</comment_count>
      <attachid>241231</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-08 11:09:52 -0800</bug_when>
    <thetext>Comment on attachment 241231
Patch

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

Thank you for your comment, Benjamin.
I&apos;ve updated the patch. In this patch,
+ I take care for custom pseudo elements.
+ Disabling virtual pseudo elements inside non-rightmost fragments completely (even if collecting rules)

&gt; Source/WebCore/css/SelectorChecker.cpp:231
&gt;          if (context.selector-&gt;isCustomPseudoElement()) {

We take care for custom pseudo elements inside non-rightmost fragment; custom pseudo element inside non-rightmost fragment is effective.
But I cannot come into my mind about any good test cases for this...
What do you think about this, Benjamin?
It seems that selectors such as &quot;video::-webkit-media-controls-panel &gt; *&quot; don&apos;t work well now.

&gt; Source/WebCore/css/SelectorChecker.cpp:234
&gt; +                return MatchResult::fails(Match::SelectorFailsCompletely);

Inside functional pseudo class, disable custom pseudo elements in the meantime.

&gt; Source/WebCore/css/SelectorChecker.cpp:244
&gt; +            if (!context.pseudoElementEffective)

Disable virtual pseudo element matching completely when pseudoElementEffective is false.

&gt; Source/WebCore/css/SelectorChecker.cpp:279
&gt; +        nextContext.pseudoElementEffective = false;

Make pseudoElementEffective false when evaluating non-rightmost fragments.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:85
&gt; +class PseudoIdSet {

Introduce strongly typed PseudoIdSet.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:128
&gt; +    explicit operator bool() const

Use C++11 explicit bool conversion operator.

&gt; LayoutTests/fast/selectors/ignore-pseudo-element-inside-non-rightmost-fragments.html:31
&gt; +shouldBe(&quot;window.getMatchedCSSRules(document.getElementById(&apos;testcase2&apos;))&quot;, &quot;null&quot;);

Ensure the selector that has virtual pseudo element inside non-rightmost fragment doesn&apos;t match when collecting rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047453</commentid>
    <comment_count>21</comment_count>
      <attachid>241271</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-09 21:25:31 -0800</bug_when>
    <thetext>Created attachment 241271
Patch

rev11, fix merge conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047454</commentid>
    <comment_count>22</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-09 21:28:21 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; I was thinking of style resolution in my comment.
&gt; 
&gt; When resolving the style for ::after, context.pseudoId would be set and
&gt; &quot;.OK::after span&quot; would fail.
&gt; But when collecting rules, context.pseudoId must NOPSEUDO and nothing
&gt; protects the invalid case.

Ah, I&apos;ve misunderstood.
I considered that selector matching with pseudo element request only occurs when the target node is marked with the requested pseudo elements.
But we can explicitly query selector matching with pseudo element request even if the target node doesn&apos;t have pseudo elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047655</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-10 15:07:53 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Comment on attachment 241231 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241231&amp;action=review
&gt; 
&gt; Thank you for your comment, Benjamin.
&gt; I&apos;ve updated the patch. In this patch,
&gt; + I take care for custom pseudo elements.
&gt; + Disabling virtual pseudo elements inside non-rightmost fragments
&gt; completely (even if collecting rules)
&gt; 
&gt; &gt; Source/WebCore/css/SelectorChecker.cpp:231
&gt; &gt;          if (context.selector-&gt;isCustomPseudoElement()) {
&gt; 
&gt; We take care for custom pseudo elements inside non-rightmost fragment;
&gt; custom pseudo element inside non-rightmost fragment is effective.
&gt; But I cannot come into my mind about any good test cases for this...
&gt; What do you think about this, Benjamin?
&gt; It seems that selectors such as &quot;video::-webkit-media-controls-panel &gt; *&quot;
&gt; don&apos;t work well now.

Hum, yeah. The problem is those pseudo elements inside the shadow DOM can only be styled through the user agent stylesheet.

I don&apos;t think we have the right infrastructure to test that. On the other hand, the impact of a mistake is much lower than for the other cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047702</commentid>
    <comment_count>24</comment_count>
      <attachid>241271</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-10 17:11:12 -0800</bug_when>
    <thetext>Comment on attachment 241271
Patch

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

Some minor issues below.

My only real concern is &quot;if (!context.inFunctionalPseudoClass)&quot; in the isCustomPseudoElement() branch.

&gt; Source/WebCore/ChangeLog:12
&gt; +        Previously when pseudo element selector appear in the non-rightmost

appear -&gt; appeared

&gt; Source/WebCore/ChangeLog:13
&gt; +        framgnet, it is ignored. This patch changes it to unmatched.

typo: framgnet

&quot;is ignored&quot; -&gt; &quot;was ignored&quot;

&gt; Source/WebCore/css/SelectorChecker.cpp:236
&gt; +            if (!context.inFunctionalPseudoClass)
&gt; +                return MatchResult::fails(Match::SelectorFailsCompletely);

This does not look right. This always fail if not in a functional pseudo class.

Shouldn&apos;t it be &quot;if (context.inFunctionalPseudoClass)&quot;?

At some point we should just drop this condition entirely for :matches(). Sure, that&apos;s just for us internally but people love :matches().

&gt; Source/WebCore/css/SelectorChecker.cpp:291
&gt; +            MatchResult result = matchRecursively(nextContext, ignoreDynamicPseudo);

Should this assert !ignoreDynamicPseudo? We should get a failure if we have one right?

&gt; Source/WebCore/css/SelectorChecker.cpp:305
&gt; +            MatchResult result = matchRecursively(nextContext, ignoreDynamicPseudo);

ditto

&gt; Source/WebCore/css/SelectorChecker.cpp:325
&gt; +            return MatchResult::updateWithMatchType(matchRecursively(nextContext, ignoreDynamicPseudo), matchType);

ditto

&gt; Source/WebCore/css/SelectorChecker.cpp:338
&gt; +            MatchResult result = matchRecursively(nextContext, ignoreDynamicPseudo);

ditto

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:85
&gt; +class PseudoIdSet {

Very neat little helper.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:89
&gt; +    { }

For functions, we generally use
    {
    }
instead of {}.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:110
&gt; +        m_data |= (1 &lt;&lt; pseudoId);

We should probably assert (1 &lt;&lt; pseudoId) does not overflow m_data&apos;s size.

&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:137
&gt; +    { }

Style:
    {
    }

&gt; LayoutTests/fast/selectors/ignore-pseudo-element-inside-non-rightmost-fragments.html:31
&gt; +shouldBe(&quot;window.getMatchedCSSRules(document.getElementById(&apos;testcase1&apos;))&quot;, &quot;null&quot;);
&gt; +shouldBe(&quot;window.getMatchedCSSRules(document.getElementById(&apos;testcase2&apos;))&quot;, &quot;null&quot;);

This could be extended to test getMatchedCSSRules() with the pseudo elements &quot;before&quot;, &quot;after&quot;, etc.

&gt; LayoutTests/fast/selectors/pseudo-element-inside-matches.html:68
&gt; +#target14:matches(::after) &gt; p{

Missing space before the curly bracket.

&gt; LayoutTests/fast/selectors/pseudo-element-inside-matches.html:72
&gt; +#target15:matches(::after &gt; p) &gt; p{

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047791</commentid>
    <comment_count>25</comment_count>
      <attachid>241271</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-11 00:23:20 -0800</bug_when>
    <thetext>Comment on attachment 241271
Patch

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

Thank you for your great review! I&apos;ve fixed and updated soon :)

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        Previously when pseudo element selector appear in the non-rightmost
&gt; 
&gt; appear -&gt; appeared

Oops. Thank you!

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        framgnet, it is ignored. This patch changes it to unmatched.
&gt; 
&gt; typo: framgnet
&gt; 
&gt; &quot;is ignored&quot; -&gt; &quot;was ignored&quot;

done.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:236
&gt;&gt; +                return MatchResult::fails(Match::SelectorFailsCompletely);
&gt; 
&gt; This does not look right. This always fail if not in a functional pseudo class.
&gt; 
&gt; Shouldn&apos;t it be &quot;if (context.inFunctionalPseudoClass)&quot;?
&gt; 
&gt; At some point we should just drop this condition entirely for :matches(). Sure, that&apos;s just for us internally but people love :matches().

Right! Thank you. I&apos;ve mis-coded.

And yes,it should be just dropped. I&apos;ve added FIXME comment here.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:291
&gt;&gt; +            MatchResult result = matchRecursively(nextContext, ignoreDynamicPseudo);
&gt; 
&gt; Should this assert !ignoreDynamicPseudo? We should get a failure if we have one right?

Yes. When reaching here, `nextContext.pseudoElementEffective` should be `false`.
So `ignoreDynamicPseudo` should be empty.
I&apos;ve inserted `ASSERT(!nextContext.pseudoElementEffective &amp;&amp; !ignoreDynamicPseudo)`.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:305
&gt;&gt; +            MatchResult result = matchRecursively(nextContext, ignoreDynamicPseudo);
&gt; 
&gt; ditto

done.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:325
&gt;&gt; +            return MatchResult::updateWithMatchType(matchRecursively(nextContext, ignoreDynamicPseudo), matchType);
&gt; 
&gt; ditto

done.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:338
&gt;&gt; +            MatchResult result = matchRecursively(nextContext, ignoreDynamicPseudo);
&gt; 
&gt; ditto

done.

&gt;&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:89
&gt;&gt; +    { }
&gt; 
&gt; For functions, we generally use
&gt;     {
&gt;     }
&gt; instead of {}.

Thanks. fixed :)

&gt;&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:110
&gt;&gt; +        m_data |= (1 &lt;&lt; pseudoId);
&gt; 
&gt; We should probably assert (1 &lt;&lt; pseudoId) does not overflow m_data&apos;s size.

Sounds nice.
I&apos;ve inserted `ASSERT((sizeof(m_data) * 8) &gt; pseudoId)`

&gt;&gt; Source/WebCore/rendering/style/RenderStyleConstants.h:137
&gt;&gt; +    { }
&gt; 
&gt; Style:
&gt;     {
&gt;     }

done.

&gt;&gt; LayoutTests/fast/selectors/ignore-pseudo-element-inside-non-rightmost-fragments.html:31
&gt;&gt; +shouldBe(&quot;window.getMatchedCSSRules(document.getElementById(&apos;testcase2&apos;))&quot;, &quot;null&quot;);
&gt; 
&gt; This could be extended to test getMatchedCSSRules() with the pseudo elements &quot;before&quot;, &quot;after&quot;, etc.

Sounds very nice! I&apos;ve added them :)

&gt;&gt; LayoutTests/fast/selectors/pseudo-element-inside-matches.html:68
&gt;&gt; +#target14:matches(::after) &gt; p{
&gt; 
&gt; Missing space before the curly bracket.

done.

&gt;&gt; LayoutTests/fast/selectors/pseudo-element-inside-matches.html:72
&gt;&gt; +#target15:matches(::after &gt; p) &gt; p{
&gt; 
&gt; ditto

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047795</commentid>
    <comment_count>26</comment_count>
      <attachid>241342</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-11 00:50:17 -0800</bug_when>
    <thetext>Created attachment 241342
Patch

rev12</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047808</commentid>
    <comment_count>27</comment_count>
      <attachid>241342</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-11 01:57:07 -0800</bug_when>
    <thetext>Comment on attachment 241342
Patch

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

Only minor comments. Let&apos;s do it!

&gt; Source/WebCore/css/SelectorChecker.cpp:199
&gt; +    PseudoIdSet scrollbarIdSet = { SCROLLBAR, SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER };

This is just incredibly elegant. It is really neat what we can do with C++11.

&gt; Source/WebCore/css/SelectorChecker.cpp:570
&gt; +                // Since :not cannot contain pseudo elements, there&apos;s no effect on matchedToNonPseudoElement.
&gt; +                MatchType ignoreMatchType = MatchType::Element;

Looks like stale code.

The comment mention &quot;matchedToNonPseudoElement&quot;. &quot;ignoreMatchType&quot; is not used.

&gt; Source/WebCore/css/SelectorChecker.cpp:703
&gt; +                            ASSERT(!localDynamicPseudoIdSet);
&gt; +                            return true;

Shouldn&apos;t you reset matchType to MatchType::Element in this case?

Otherwise wouldn&apos;t it make &quot;return context.resolvingMode == Mode::CollectingRulesIgnoringVirtualPseudoElements || result.matchType == MatchType::Element;&quot; fail?
If that&apos;s the case, let&apos;s add a test for it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047821</commentid>
    <comment_count>28</comment_count>
      <attachid>241342</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-11 03:08:03 -0800</bug_when>
    <thetext>Comment on attachment 241342
Patch

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

Great! Thank you for your detailed review. I&apos;ll fix and land it :)

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:570
&gt;&gt; +                MatchType ignoreMatchType = MatchType::Element;
&gt; 
&gt; Looks like stale code.
&gt; 
&gt; The comment mention &quot;matchedToNonPseudoElement&quot;. &quot;ignoreMatchType&quot; is not used.

Oops. I&apos;ve missed to take care of !CSS_SELECTOR_LEVEL4 case.
The comment should be, &quot;Since :not cannot contain pseudo elements, there&apos;s no effect on matchType&quot;.
And I&apos;ve replaced ignoreMatchedToNonPseudoElement to ignoreMatchType.

&gt;&gt; Source/WebCore/css/SelectorChecker.cpp:703
&gt;&gt; +                            return true;
&gt; 
&gt; Shouldn&apos;t you reset matchType to MatchType::Element in this case?
&gt; 
&gt; Otherwise wouldn&apos;t it make &quot;return context.resolvingMode == Mode::CollectingRulesIgnoringVirtualPseudoElements || result.matchType == MatchType::Element;&quot; fail?
&gt; If that&apos;s the case, let&apos;s add a test for it :)

Oh thank you! You&apos;re completely right.
To make the flow clearly, I&apos;ve introduced localMatchType and assign localMatchType to matchType only when the result becomes true.
And I&apos;ve introduced tests for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047822</commentid>
    <comment_count>29</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-11-11 03:14:11 -0800</bug_when>
    <thetext>Committed r175889: &lt;http://trac.webkit.org/changeset/175889&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097146</commentid>
    <comment_count>30</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2015-05-24 02:28:57 -0700</bug_when>
    <thetext>This patch violates the spec, pseudo elements are not supposed to be valid in :matches:
http://dev.w3.org/csswg/selectors-4/#matches</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240681</attachid>
            <date>2014-10-30 10:42:59 -0700</date>
            <delta_ts>2014-10-30 10:49:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141031024307.patch</filename>
            <type>text/plain</type>
            <size>38921</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWIzOGUzYzRjZmJjZjE0
Y2RiODc2ZTYxM2RmYjc3M2JmZjE4NjBkMC4uNDljMzk3MjNkYmI3NWFhZWRlN2VkMmRjNjA0NjA0
YTk3NzVjMGFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTEwLTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptb3N0UmVzdHJpY3RpdmVGcmFnbWVu
dHNMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNTY3Jv
bGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5NYXRjaEhvdmVyT3JBY3Rp
dmVJblF1aXJrc01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JM
aXN0KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0OjpmYWlscyk6CisgICAgICAgICogY3Nz
aml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6bW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6YWRkUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OmNvbnN0cnVjdEZyYWdtZW50cyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6
c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGVDb25zdGFudHMuaDoKKwogMjAxNC0xMC0yNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gVmlkZW8gcmVzb2x1dGlvbiBjaGFu
Z2VzIHRyaWdnZXIgYSBjcmFzaCBpbiB0aGUgVGV4dHVyZU1hcHBlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjMzVkZDZkOTFhZjNmODE2NWM2NGQ1NWFlOWY1ZDhl
OWE1YzI4YmQ5Li40YmU0ODU2YzEwNTA2M2E4M2Q3MDhhMjBhYmQzZWFkM2RkYzUxZTMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjMsNiArNjMsMTcgQEAgZW51
bSBjbGFzcyBWaXNpdGVkTWF0Y2hUeXBlIDogdW5zaWduZWQgY2hhciB7CiAgICAgRGlzYWJsZWQs
IEVuYWJsZWQKIH07CiAKK2VudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwgeworICAgIFJvb3QgPSAw
LAorICAgIEluTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMSwKKyAgICBJbk5vbk1hdGNo
ZXNGdW5jdGlvbmFsUHNldWRvVHlwZSA9IDIsCit9OworCitzdGF0aWMgRnJhZ21lbnRzTGV2ZWwg
bW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRzTGV2ZWwgbGhzLCBGcmFnbWVu
dHNMZXZlbCByaHMpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGxocywgcmhzKTsKK30KKwogc3Ry
dWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCB7CiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdD
b250ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgICAgIDogU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0
KQpAQCAtNzAsMTggKzgxLDIwIEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwg
ZWxlbWVudChlbGVtZW50KQogICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9k
ZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hU
eXBlOjpEaXNhYmxlZCA6IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQoc2VsZWN0b3IpCi0gICAgICAgICwgaW5GdW5jdGlvbmFs
UHNldWRvQ2xhc3MoZmFsc2UpCisgICAgICAgICwgZnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRzTGV2
ZWw6OlJvb3QpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQogICAgICAgICAs
IGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKKyAgICAgICAgLCBpblJpZ2h0bW9zdCh0cnVlKQog
ICAgIHsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwogICAgIEVsZW1lbnQq
IGVsZW1lbnQ7CiAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKLSAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzOworICAgIEZyYWdtZW50c0xldmVsIGZyYWdtZW50c0xldmVs
OwogICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNl
dWRvOworICAgIGJvb2wgaW5SaWdodG1vc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNG
aXJzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpAQCAtMTcxLDM2ICsxODQs
MzEgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmkKIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRj
aChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENo
ZWNraW5nQ29udGV4dCYgcHJvdmlkZWRDb250ZXh0KSBjb25zdAogewogICAgIENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY29udGV4dChwcm92aWRlZENvbnRleHQsIHNlbGVjdG9yLCBlbGVtZW50
KTsKLSAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IE5PUFNFVURPOwotICAgIGlmIChtYXRjaFJlY3Vy
c2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkKSAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgUHNldWRv
SWRTZXQgcHNldWRvSWRTZXQgPSBOT1BTRVVETzsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0KTsKKyAgICBpZiAocmVzdWx0Lm1h
dGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChj
b250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRv
SWQpCisgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIShwc2V1ZG9JZFNl
dCAmICgxIDw8IGNvbnRleHQucHNldWRvSWQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURP
KSB7Ci0gICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUgJiYgcHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAg
IGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAg
aWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQgIT0gTk9QU0VV
RE8pIHsKKyAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSAmJiBwc2V1ZG9JZFNldCAmIFBVQkxJQ19QU0VVRE9JRF9NQVNLKQorICAgICAgICAg
ICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7
CiAKICAgICAgICAgLy8gV2hlbiBpZ25vcmluZyB2aXJ0dWFsIHBzZXVkbyBlbGVtZW50cywgdGhl
IGNvbnRleHQncyBwc2V1ZG8gc2hvdWxkIGFsc28gYmUgTk9QU0VVRE8gYnV0IHRoYXQgZG9lcwog
ICAgICAgICAvLyBub3QgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICByZXR1cm4gY29udGV4dC5y
ZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVk
b0VsZW1lbnRzOworICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5t
YXRjaFRvTm9uUHNldWRvRWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hl
czsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNT
Y3JvbGxiYXJQc2V1ZG9FbGVtZW50KFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKQoraW5saW5lIHN0
YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3QgUHNldWRvSWRTZXQmIGR5
bmFtaWNQc2V1ZG9JZFNldCkKIHsKLSAgICBpZiAoZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVIK
LSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVEhVTUIKLSAgICAgICAgfHwg
ZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQlVUVE9OCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1
ZG8gPT0gU0NST0xMQkFSX1RSQUNLCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xM
QkFSX1RSQUNLX1BJRUNFCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NP
Uk5FUikgeworICAgIGlmIChkeW5hbWljUHNldWRvSWRTZXQgJiAoKDEgPDwgU0NST0xMQkFSKSB8
ICgxIDw8IFNDUk9MTEJBUl9USFVNQikgfCAoMSA8PCBTQ1JPTExCQVJfQlVUVE9OKSB8ICgxIDw8
IFNDUk9MTEJBUl9UUkFDSykgfCAoMSA8PCBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UpIHwgKDEgPDwg
U0NST0xMQkFSX0NPUk5FUikpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAv
LyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNj
cm9sbGJhci1saWtlIHBzZXVkbyBlbGVtZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBt
b3JlIHRoYW4gb25lIHBzZXVkbyBlbGVtZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09
IFJFU0laRVI7CisgICAgcmV0dXJuIGR5bmFtaWNQc2V1ZG9JZFNldCAmICgxIDw8IFJFU0laRVIp
OwogfQogCiBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpCkBAIC0yMTksMzQgKzIyNywzOCBAQCBzdGF0aWMg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4
dEZvclBhcmVudChjb25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2Vs
ZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAq
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQg
YW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25z
dCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1p
Y1BzZXVkb0lkU2V0KSBjb25zdAogeworICAgIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IG1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisK
ICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hlY2tP
bmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICBp
ZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQpKQorICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFp
bHNMb2NhbGx5KTsKIAogICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0
LCBhIHBzZXVkbyBlbGVtZW50IGluc2lkZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVu
ZGVmaW5lZCAoaXNzdWUgNykuCi0gICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcgZmFpbHVy
ZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAgICAgICBpZiAoY29udGV4
dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKKyAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVu
dGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UsIGV4Y2VwdCBmb3IgOm1hdGNoZXMuCisg
ICAgICAgIC8vIEluIFdlYktpdCwgd2Ugc3BlY2lhbGx5IGhhbmRsZXMgcHNldWRvLWVsZW1lbnRz
IGluIDptYXRjaGVzLgorICAgICAgICBpZiAoY29udGV4dC5mcmFnbWVudHNMZXZlbCA9PSBGcmFn
bWVudHNMZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIAog
ICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gY29udGV4dC5lbGVtZW50LT5jb250
YWluaW5nU2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSAhPSBjb250ZXh0LnNlbGVjdG9yLT52YWx1ZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0xvY2FsbHkpOwog
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYgcm9vdC0+dHlw
ZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9j
YWxseSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKCFjb250ZXh0LmVsZW1l
bnRTdHlsZSAmJiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
IHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQotICAgICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAg
ICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5z
ZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBpZiAocHNldWRvSWQg
IT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwor
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldCB8PSAoMSA8PCBwc2V1ZG9JZCk7Cisg
ICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50OjpGYWlsczsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDQ3ICsyNjgsNDkgQEAgc3Rh
dGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQoY29uc3QKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKICAgICBj
b25zdCBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxlY3Rvci0+dGFn
SGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKQotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JNYXRjaGVzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNoZXMobWF0Y2hU
b05vblBzZXVkb0VsZW1lbnQpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBuZXh0
Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxl
Y3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAg
ICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAgICAgICAgIC8v
IEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb0lk
Ci0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNl
dWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYg
ISgoMSA8PCBjb250ZXh0LnBzZXVkb0lkKSAmIGR5bmFtaWNQc2V1ZG9JZFNldCkpCisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsK
IAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRvIG1h
dGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxhdGlv
biAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBO
T1BTRVVETzsKKyAgICAgICAgbmV4dENvbnRleHQuaW5SaWdodG1vc3QgPSBmYWxzZTsKICAgICB9
CiAKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudDoKICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4
dENvbnRleHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAg
ICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7Ci0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9
IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
OwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Cisg
ICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQs
IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6
CiAgICAgICAgIHsKICAgICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9y
UGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRleHQuZWxlbWVu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVu
dFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0Y2hSZWN1cnNp
dmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAo
bWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVE
eW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQg
PSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5t
YXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6
CkBAIC0zMDYsNTYgKzMyMCw2MSBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogCiAgICAgICAg
ICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQWxsU2libGluZ3Mp
OwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNldEFmZmVjdHNOZXh0
U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9
IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZl
bHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENv
bnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGln
bm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJl
c3VsdDo6dXBkYXRlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3Rv
ckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKHJlc3VsdCwg
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogICAgICAgICB9OwotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcjoKKyAgICAgICAgewogICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYg
c29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFu
IGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQg
b2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxv
dyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQ
c2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG8pOwotICAgICAg
ICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVD
VElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5P
UFNFVURPCisgICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9s
bGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgbmV4dENvbnRl
eHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkb0lkU2V0ICYgKDEgPDwgU0VMRUNU
SU9OKTsKKyAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvSWRTZXQg
IT0gTk9QU0VVRE8KICAgICAgICAgICAgICYmICFuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1
ZG8KICAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvICYmIG5l
eHRDb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykp
Ci0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIHJl
dHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKKyAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
OworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShtYXRjaFJlY3Vyc2l2ZWx5KG5l
eHRDb250ZXh0LCBkeW5hbWljUHNldWRvSWRTZXQpLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7
CisgICAgICAgIH0KIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0gY29udGV4dC5l
bGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3ROb2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENv
bnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAw
OwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNoUmVj
dXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFRvTm9uUHNl
dWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1hdGNo
UmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiB9CiAKIHN0YXRpYyBib29s
IGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkKQEAgLTQ0OCw3ICs0NjcsNyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRj
aEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbgogICAgIC8vICAgIHNlbGVjdG9yIGRvZXMgbm90IHVzZSBhIHBzZXVkby1jbGFzcyBzZWxl
Y3RvciBvdGhlciB0aGFuICc6YWN0aXZlJyBhbmQgJzpob3ZlcicuCiAgICAgLy8gICAgc2VsZWN0
b3IgZG9lcyBub3QgdXNlIGEgcHNldWRvLWVsZW1lbnQgc2VsZWN0b3IuCiAgICAgLy8gICAgc2Vs
ZWN0b3IgaXMgbm90IHBhcnQgb2YgYW4gYXJndW1lbnQgdG8gYSBmdW5jdGlvbmFsIHBzZXVkby1j
bGFzcyBvciBwc2V1ZG8tZWxlbWVudC4KLSAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1
ZG9DbGFzcykKKyAgICBpZiAoY29udGV4dC5mcmFnbWVudHNMZXZlbCAhPSBGcmFnbWVudHNMZXZl
bDo6Um9vdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciA9IGNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQ7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKQEAgLTQ5MCw3ICs1MDks
NyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmIGNvbnRleHQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQ
c2V1ZG9JZFNldCwgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQmIG1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50KSBjb25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxl
bWVudDsKICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQu
c2VsZWN0b3I7CkBAIC01MjksMTMgKzU0OCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKIAog
ICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4
dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgc3ViY29u
dGV4dC5mcmFnbWVudHNMZXZlbCA9IEZyYWdtZW50c0xldmVsOjpJbk5vbk1hdGNoZXNGdW5jdGlv
bmFsUHNldWRvVHlwZTsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vi
c2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SU19MRVZFTDQpCi0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgeworICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pLm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcykgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC01NDksMTEgKzU2OCwx
MiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmNv
bnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJjb250ZXh0KSkK
KyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLmZpcnN0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgog
ICAgICAgICAgICAgfQogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKKyAgICAgICAg
ICAgIC8vIFNpbmNlIDpub3QgY2Fubm90IGNvbnRhaW4gcHNldWRvIGVsZW1lbnRzLCB0aGVyZSdz
IG5vIGVmZmVjdCBvbiBtYXRjaGVkVG9Ob25Qc2V1ZG9FbGVtZW50LgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lmhhc1Njcm9sbGJh
clBzZXVkbykgewpAQCAtNjY1LDE2ICs2ODUsMzQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAg
ICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKLSAgICAgICAgICAgIGZv
ciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlz
dCgpLT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3Vic2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQu
aW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YmNvbnRl
eHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAg
UHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09
IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBoYXNNYXRjaGVkQW55dGhpbmcgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Q
c2V1ZG9FbGVtZW50OjpGYWlsczsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVj
dG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vi
c2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9y
KSkgeworICAgICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNv
bnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuZnJhZ21lbnRz
TGV2ZWwgPSBtb3N0UmVzdHJpY3RpdmVGcmFnbWVudHNMZXZlbChjb250ZXh0LmZyYWdtZW50c0xl
dmVsLCBGcmFnbWVudHNMZXZlbDo6SW5NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUpOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CisgICAg
ICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBz
dWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgbG9jYWxEeW5hbWlj
UHNldWRvSWRTZXQgPSBOT1BTRVVETzsKKyAgICAgICAgICAgICAgICAgICAgTWF0Y2hSZXN1bHQg
cmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBsb2NhbER5bmFtaWNQc2V1ZG9J
ZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JN
YXRjaGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YmNvbnRleHQuaW5SaWdo
dG1vc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGVuY291bnRlcmlu
ZyBwc2V1ZG8tZWxlbWVudCBpbiB0aGUgbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCwgY29uc2lkZXIg
YXMgdW5tYXRjaGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbER5bmFt
aWNQc2V1ZG9JZFNldCAhPSBOT1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgY3Vy
cmVudCBmcmFnbWVudCBpcyBub24tcmlnaHRtb3N0IGZyYWdtZW50LCBpdCdzIG5vdCBuZWNlc3Nh
cnkgdG8gY2hlY2sgYWxsIHNlbGVjdG9ycyB0byBjb2xsZWN0IHBzZXVkbyBlbGVtZW50IGlkcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaFRv
Tm9uUHNldWRvRWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlcykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50OjpNYXRjaGVzOworCisgICAgICAgICAgICAgICAgICAgICAgICBk
eW5hbWljUHNldWRvSWRTZXQgfD0gbG9jYWxEeW5hbWljUHNldWRvSWRTZXQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNNYXRjaGVkQW55dGhpbmcgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBoYXNNYXRj
aGVkQW55dGhpbmc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQbGFjZWhvbGRlclNob3duOgog
ICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkp
IHsKQEAgLTc2OSwxMSArODA3LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShj
b25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueToKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7Ci0g
ICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURP
OworICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuZnJhZ21lbnRzTGV2ZWwgPSBGcmFnbWVudHNM
ZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGU7CiAgICAgICAgICAgICAgICAg
Zm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJz
dCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0
b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0
LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAg
ICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdub3JlRHlu
YW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
NzkwLDcgKzgyOCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAgICAgICAgICAgICAvLyAuLi5leGNlcHQgaWYg
OnZpc2l0ZWQgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIGFuY2VzdG9yL3NpYmxpbmcgbWF0Y2hp
bmcuCiAgICAgICAgICAgICAvLyBJbnNpZGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgZXhjZXB0
IGZvciA6bm90LCA6dmlzaXRlZCBuZXZlciBtYXRjaGVzLgotICAgICAgICAgICAgaWYgKGNvbnRl
eHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MpCisgICAgICAgICAgICBpZiAoY29udGV4dC5mcmFn
bWVudHNMZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNMaW5rKCkgJiYgY29udGV4
dC52aXNpdGVkTWF0Y2hUeXBlID09IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQ7CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRHJhZzoKQEAgLTkxOCwxMiArOTU2LDEyIEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgUHNldWRvSWQgaWdu
b3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAgICBjb25zdCBDU1NTZWxlY3Rvciog
Y29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3ViQ29u
dGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29u
dGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNl
bGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBz
dWJDb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlm
IChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNl
bGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgIHN1YkNvbnRleHQuZnJhZ21lbnRzTGV2ZWwgPSBG
cmFnbWVudHNMZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGU7CisgICAgICAg
ICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAg
ICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRv
KS5tYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTM5LDEwICs5NzcsMTAgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMmIGJhc2VDb24KICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyBzdWJjb250ZXh0KGJhc2VDb250ZXh0KTsKICAgICAgICAgc3ViY29udGV4dC5lbGVtZW50ID0g
JmVsZW1lbnQ7CiAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKLSAg
ICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAg
IHN1YmNvbnRleHQuZnJhZ21lbnRzTGV2ZWwgPSBGcmFnbWVudHNMZXZlbDo6SW5Ob25NYXRjaGVz
RnVuY3Rpb25hbFBzZXVkb1R5cGU7CiAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9m
VGhlRnJhZ21lbnQgPSBzdWJzZWxlY3RvcjsKLSAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAg
UHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9
PSBTZWxlY3Rvck1hdGNoZXMpIHsKICAgICAgICAgICAgIEFTU0VSVChpZ25vcmVEeW5hbWljUHNl
dWRvID09IE5PUFNFVURPKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggODA3NzcxNzQ0NWVhMzY4NTc0NjQ5
YzE0NTEzM2Q4NzdjMzY3YTI2Yy4uNGNjYzhhYjc4ZmZjZjYyYmZiZWViOTAwNTBiMmI1NTMwOWVi
OGVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNDUsNiArNDUsNDEg
QEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWxl
Y3RvckNoZWNrZXIpOwogICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9y
RmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5IH07CiAKKyAgICAvLyBXaGV0aGVyIHRoZSBzdWNjZWVkZWQgbWF0Y2hpbmcgcmVzdWx0
IGlzIGVmZmVjdGl2ZSBvbiBub24tcHNldWRvLWVsZW1lbnRzLgorICAgIGVudW0gY2xhc3MgTWF0
Y2hUb05vblBzZXVkb0VsZW1lbnQgeworICAgICAgICBNYXRjaGVzLAorICAgICAgICBGYWlscywK
KyAgICB9OworCisgICAgc3RydWN0IE1hdGNoUmVzdWx0IHsKKyAgICAgICAgTWF0Y2ggbWF0Y2g7
CisgICAgICAgIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50
OworCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBtYXRjaGVzKE1hdGNoVG9Ob25Qc2V1ZG9F
bGVtZW50IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMsCisgICAgICAg
ICAgICAgICAgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCB1cGRhdGUoTWF0Y2hSZXN1bHQgcmVz
dWx0LCBNYXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID09IE1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50OjpGYWlscykKKyAgICAgICAgICAgICAgICByZXN1bHQubWF0Y2hU
b05vblBzZXVkb0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHM7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE1hdGNo
UmVzdWx0IGZhaWxzKE1hdGNoIG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIG1hdGNoLAorICAgICAgICAgICAgICAgIE1hdGNoVG9Ob25Qc2V1
ZG9FbGVtZW50OjpGYWlscworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH07CisKIHB1
YmxpYzoKICAgICBlbnVtIGNsYXNzIE1vZGUgOiB1bnNpZ25lZCBjaGFyIHsKICAgICAgICAgUmVz
b2x2aW5nU3R5bGUgPSAwLCBDb2xsZWN0aW5nUnVsZXMsIENvbGxlY3RpbmdSdWxlc0lnbm9yaW5n
VmlydHVhbFBzZXVkb0VsZW1lbnRzLCBRdWVyeWluZ1J1bGVzCkBAIC04Myw4ICsxMTgsOCBAQCBj
bGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRlcm1pbmVMaW5r
TWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CiAKIHByaXZhdGU6Ci0gICAgTWF0Y2ggbWF0
Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWQm
KSBjb25zdDsKLSAgICBib29sIGNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmKSBjb25zdDsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYpIGNvbnN0OworICAgIGJvb2wgY2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkU2V0JiwgTWF0
Y2hUb05vblBzZXVkb0VsZW1lbnQmKSBjb25zdDsKICAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0
KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBFbGVtZW50JiwgY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0JikgY29uc3Q7CiAKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3Mo
Y29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIGNvbnN0IENTU1NlbGVjdG9yKikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggNjhm
MjFhMzYyNDc4ZGFlN2E3N2ZlMTg5ZThlZjRhZTU5MmEwY2Q1NC4uYjY3ZDQ4NTlkZjY0YTY5ZWZl
NTc0YzlmYTlmMThhNjkyMjVlZmE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmNwcApAQCAtNjIsNyArNjIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIFNlbGVjdG9yQ29tcGlsZXIgewogCi0jZGVmaW5lIENTU19TRUxFQ1RPUl9KSVRfREVC
VUdHSU5HIDAKKyNkZWZpbmUgQ1NTX1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcgMQogCiBlbnVtIGNs
YXNzIEJhY2t0cmFja2luZ0FjdGlvbiB7CiAgICAgTm9CYWNrdHJhY2tpbmcsCkBAIC0zNjksOSAr
MzY5LDE1IEBAIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAKIGVudW0gY2xhc3MgRnJh
Z21lbnRzTGV2ZWwgewogICAgIFJvb3QgPSAwLAotICAgIEluRnVuY3Rpb25hbFBzZXVkb1R5cGUg
PSAxCisgICAgSW5NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUgPSAxLAorICAgIEluTm9uTWF0
Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMiwKIH07CiAKK3N0YXRpYyBGcmFnbWVudHNMZXZl
bCBtb3N0UmVzdHJpY3RpdmVGcmFnbWVudHNMZXZlbChGcmFnbWVudHNMZXZlbCBsaHMsIEZyYWdt
ZW50c0xldmVsIHJocykKK3sKKyAgICByZXR1cm4gc3RkOjptYXgobGhzLCByaHMpOworfQorCiBz
dGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciog
cm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxl
Y3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFn
bWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmKTsKIAogc3RhdGlj
IHZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9yRnJhZ21lbnRMaXN0
JiBzZWxlY3RvckZyYWdtZW50cywgdW5zaWduZWQgbGV2ZWwgPSAwKTsKQEAgLTU4Myw3ICs1ODks
NyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3Qg
Q1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogCiAgICAgICAgIC8vIEluc2lkZSBmdW5jdGlv
bmFsIHBzZXVkbyBjbGFzcyBleGNlcHQgZm9yIDpub3QsIDp2aXNpdGVkIG5ldmVyIG1hdGNoZXMu
CiAgICAgICAgIC8vIEFuZCBpbiB0aGUgY2FzZSBpbnNpZGUgOm5vdCwgcmV0dXJuaW5nIENhbm5v
dE1hdGNoQW55dGhpbmcgaW5kaWNhdGVzIHRoYXQgOm5vdCg6dmlzaXRlZCkgY2FuIG1hdGNoIG92
ZXIgYW55dGhpbmcuCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09IEZyYWdtZW50c0xldmVs
OjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCAhPSBG
cmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNh
bm5vdE1hdGNoQW55dGhpbmc7CiAKICAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQo
dHlwZSk7CkBAIC02MzYsNyArNjQyLDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRk
UHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9y
TGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0
OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdt
ZW50TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICAgICAgVmlzaXRlZE1v
ZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAg
ICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJz
ZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgICAg
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0
b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJ
bk5vbk1hdGNoZXNGdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMs
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9k
ZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBj
bGFzc2VzIik7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZnVuY3Rpb25UeXBlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNr
ZXI6CkBAIC02NzEsNyArNjc3LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNl
dWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAg
ICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5m
aXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQo
c3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2Vs
ZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRl
ZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUg
bG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9u
YWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2Nh
bEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JD
b250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1
bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRl
ZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAg
ICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNzIGZpbHRlciwgQ2Fu
bm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBwYXNzZXMuCkBAIC02
OTUsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAo
Y29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yTGlzdCgp
LT5maXJzdCgpOyByb290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChyb290U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExp
c3QgZnJhZ21lbnRMaXN0OwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0
ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBl
IHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNl
dWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGln
bm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3ViRnVuY3Rp
b25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0
LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbk5vbk1hdGNoZXNGdW5jdGlvbmFsUHNl
dWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGln
bm9yZVZpc2l0ZWRNb2RlKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGln
bm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJs
ZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAg
IC8vIFNpbmNlIHRoaXMgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2ggYWdhaW5zdCB0aGUgZWxlbWVu
dCwgZG9uJ3QgaW5zZXJ0IGl0IHRvIGFueUZyYWdtZW50cy4KQEAgLTc1NCw3ICs3NjAsNyBAQCBz
dGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rv
ciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJz
ZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAg
ICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAg
ICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25l
OwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0
cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdt
ZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5S
b290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7Cisg
ICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0
RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRz
LCBtb3N0UmVzdHJpY3RpdmVGcmFnbWVudHNMZXZlbChGcmFnbWVudHNMZXZlbDo6SW5NYXRjaGVz
RnVuY3Rpb25hbFBzZXVkb1R5cGUsIGZyYWdtZW50TGV2ZWwpLCBwb3NpdGlvbkluUm9vdEZyYWdt
ZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOwogICAgICAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1v
ZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8g
Y2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBmcmFnbWVudCBuZXZl
ciBtYXRjaGVzIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBtYXRjaGVz
TGlzdC4KQEAgLTc2NCw2ICs3NzAsOSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQ
c2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAg
ICAgICAgICAgIGlmIChsb2NhbEZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENv
bXBpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdENv
bXBpbGU7CiAKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JGcmFnbWVudHMuZmlyc3QoKS5w
c2V1ZG9FbGVtZW50U2VsZWN0b3IpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OkNhbm5vdENvbXBpbGU7CisKICAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBt
b3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBsb2NhbEZ1bmN0aW9uVHlw
ZSk7CiAgICAgICAgICAgICAgICAgbWF0Y2hlc0xpc3QuYXBwZW5kKHNlbGVjdG9yRnJhZ21lbnRz
KTsKICAgICAgICAgICAgIH0KQEAgLTg4MSw3ICs4OTAsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBl
IGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxl
Y3RvcgogCiAgICAgICAgICAgICAvLyBJbiBTZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxl
bWVudCBpbnNpZGUgYSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3Vl
IDcpLgogICAgICAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRo
ZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRMZXZl
bCA9PSBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSkKKyAgICAgICAgICAg
IGlmIChmcmFnbWVudExldmVsID09IEZyYWdtZW50c0xldmVsOjpJbk5vbk1hdGNoZXNGdW5jdGlv
bmFsUHNldWRvVHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5u
b3RNYXRjaEFueXRoaW5nOwogCiAgICAgICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9F
bGVtZW50VHlwZSgpKSB7CkBAIC05NTgsNyArOTY3LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBj
b25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0
b3IKICAgICAgICAgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbklu
Um9vdEZyYWdtZW50czsKICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFn
bWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVs
ID09IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAo
ZnJhZ21lbnRMZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdt
ZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0
b3JGcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3Rv
ckZyYWdtZW50KCk7CkBAIC0yODQ1LDcgKzI4NTQsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVy
YXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0
JgogICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJl
dHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewog
ICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxs
b2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggOTg2Mzk1MDdmNTU1MjBlNTBiM2QyZjA3OWUzYzI0YzRh
NWE2ODQ5OS4uYmQwMzUwNjE2YjMzZmJlMDJlMmZhZmVjNWJiYjJmYThhZTg3ZGJjOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTIzNCw2ICsy
MzQsMTMgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRlclN0eWxl
PiB7CiAgICAgICAgICAgICBBU1NFUlQocHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQp
OwogICAgICAgICAgICAgbV9mbGFncyB8PSBvbmVCaXRNYXNrIDw8IChwc2V1ZG9CaXRzT2Zmc2V0
IC0gMSArIHBzZXVkbyk7CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHls
ZXMoUHNldWRvSWRTZXQgcHNldWRvKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocHNl
dWRvICE9IE5PUFNFVURPKTsKKyAgICAgICAgICAgIEFTU0VSVCgocHNldWRvICYgUFVCTElDX1BT
RVVET0lEX01BU0spID09IHBzZXVkbyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHBzZXVk
b0JpdHNPZmZzZXQgPj0gMSwgIihwc2V1ZG9CaXRzT2Zmc2V0IC0gMSkgc2hvdWxkIGJlIHZhbGlk
LiIpOworICAgICAgICAgICAgbV9mbGFncyB8PSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHBzZXVk
bykgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSk7CisgICAgICAgIH0KIAogICAgICAgICBFVGFi
bGVMYXlvdXQgdGFibGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGFibGVM
YXlvdXQ+KGdldFZhbHVlKHRhYmxlTGF5b3V0Qml0TWFzaywgdGFibGVMYXlvdXRPZmZzZXQpKTsg
fQogICAgICAgICB2b2lkIHNldFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB0YWJsZUxheW91dCkg
eyB1cGRhdGVWYWx1ZSh0YWJsZUxheW91dCwgdGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91
dE9mZnNldCk7IH0KQEAgLTU2MSw2ICs1NjgsNyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGlj
IFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBib29sIGhhc0FueVB1YmxpY1BzZXVkb1N0
eWxlcygpIGNvbnN0OwogICAgIGJvb2wgaGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKSBj
b25zdDsKICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbyk7CisgICAg
dm9pZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQpOwogICAgIGJvb2wgaGFzVW5pcXVl
UHNldWRvU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIGF0dHJpYnV0ZSBnZXR0ZXIgbWV0aG9kcwpA
QCAtMjE1NSw2ICsyMTYzLDExIEBAIGlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pCiAgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1Bz
ZXVkb1N0eWxlKHBzZXVkbyk7CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQ
c2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvKQoreworICAgIG5vbmluaGVyaXRlZF9mbGFn
cy5zZXRIYXNQc2V1ZG9TdHlsZXMocHNldWRvKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gUmVuZGVyU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAppbmRleCAyYTRhZWY1YmU3NDgw
ZTIwMDM2MWIzODIyYWIwODNkNzVjMGEzNThkLi42ODg0OTAxNjJhMzhjMDhkMzU5ZGM3NGE0NDhi
MWUyMjAyMzM1MGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGVDb25zdGFudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaApAQCAtODAsNiArODAsOCBAQCBlbnVtIFBzZXVkb0lk
IDogdW5zaWduZWQgY2hhciB7CiAgICAgUFVCTElDX1BTRVVET0lEX01BU0sgPSAoKDEgPDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQpIC0gMSkgJiB+KCgxIDw8IEZJUlNUX1BVQkxJQ19QU0VVRE9J
RCkgLSAxKQogfTsKIAordHlwZWRlZiB1bnNpZ25lZCBQc2V1ZG9JZFNldDsKKwogZW51bSBDb2x1
bW5GaWxsIHsgQ29sdW1uRmlsbEJhbGFuY2UsIENvbHVtbkZpbGxBdXRvIH07CiAKIGVudW0gQ29s
dW1uU3BhbiB7IENvbHVtblNwYW5Ob25lID0gMCwgQ29sdW1uU3BhbkFsbCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240682</attachid>
            <date>2014-10-30 10:49:59 -0700</date>
            <delta_ts>2014-10-30 10:53:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141031025007.patch</filename>
            <type>text/plain</type>
            <size>38937</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWIzOGUzYzRjZmJjZjE0
Y2RiODc2ZTYxM2RmYjc3M2JmZjE4NjBkMC4uNDljMzk3MjNkYmI3NWFhZWRlN2VkMmRjNjA0NjA0
YTk3NzVjMGFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTEwLTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptb3N0UmVzdHJpY3RpdmVGcmFnbWVu
dHNMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNTY3Jv
bGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5NYXRjaEhvdmVyT3JBY3Rp
dmVJblF1aXJrc01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JM
aXN0KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0OjpmYWlscyk6CisgICAgICAgICogY3Nz
aml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6bW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6YWRkUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OmNvbnN0cnVjdEZyYWdtZW50cyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6
c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGVDb25zdGFudHMuaDoKKwogMjAxNC0xMC0yNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gVmlkZW8gcmVzb2x1dGlvbiBjaGFu
Z2VzIHRyaWdnZXIgYSBjcmFzaCBpbiB0aGUgVGV4dHVyZU1hcHBlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjMzVkZDZkOTFhZjNmODE2NWM2NGQ1NWFlOWY1ZDhl
OWE1YzI4YmQ5Li40ZDRlNTEzNTA2ZjU0MzFmN2Y5OGE2MGYxMDc4YjdiYTI5ZGFmODFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjMsNiArNjMsMTcgQEAgZW51
bSBjbGFzcyBWaXNpdGVkTWF0Y2hUeXBlIDogdW5zaWduZWQgY2hhciB7CiAgICAgRGlzYWJsZWQs
IEVuYWJsZWQKIH07CiAKK2VudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwgeworICAgIFJvb3QgPSAw
LAorICAgIEluTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMSwKKyAgICBJbk5vbk1hdGNo
ZXNGdW5jdGlvbmFsUHNldWRvVHlwZSA9IDIsCit9OworCitzdGF0aWMgRnJhZ21lbnRzTGV2ZWwg
bW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRzTGV2ZWwgbGhzLCBGcmFnbWVu
dHNMZXZlbCByaHMpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGxocywgcmhzKTsKK30KKwogc3Ry
dWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCB7CiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdD
b250ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgICAgIDogU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0
KQpAQCAtNzAsMTggKzgxLDIwIEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwg
ZWxlbWVudChlbGVtZW50KQogICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9k
ZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hU
eXBlOjpEaXNhYmxlZCA6IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQoc2VsZWN0b3IpCi0gICAgICAgICwgaW5GdW5jdGlvbmFs
UHNldWRvQ2xhc3MoZmFsc2UpCisgICAgICAgICwgZnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRzTGV2
ZWw6OlJvb3QpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQogICAgICAgICAs
IGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKKyAgICAgICAgLCBpblJpZ2h0bW9zdCh0cnVlKQog
ICAgIHsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwogICAgIEVsZW1lbnQq
IGVsZW1lbnQ7CiAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKLSAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzOworICAgIEZyYWdtZW50c0xldmVsIGZyYWdtZW50c0xldmVs
OwogICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNl
dWRvOworICAgIGJvb2wgaW5SaWdodG1vc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNG
aXJzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpAQCAtMTcxLDM2ICsxODQs
MzEgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmkKIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRj
aChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENo
ZWNraW5nQ29udGV4dCYgcHJvdmlkZWRDb250ZXh0KSBjb25zdAogewogICAgIENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY29udGV4dChwcm92aWRlZENvbnRleHQsIHNlbGVjdG9yLCBlbGVtZW50
KTsKLSAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IE5PUFNFVURPOwotICAgIGlmIChtYXRjaFJlY3Vy
c2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkKSAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgUHNldWRv
SWRTZXQgcHNldWRvSWRTZXQgPSBOT1BTRVVETzsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0KTsKKyAgICBpZiAocmVzdWx0Lm1h
dGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChj
b250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRv
SWQpCisgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIShwc2V1ZG9JZFNl
dCAmICgxIDw8IGNvbnRleHQucHNldWRvSWQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURP
KSB7Ci0gICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUgJiYgcHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAg
IGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAg
aWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQgIT0gTk9QU0VV
RE8pIHsKKyAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSAmJiBwc2V1ZG9JZFNldCAmIFBVQkxJQ19QU0VVRE9JRF9NQVNLKQorICAgICAgICAg
ICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7
CiAKICAgICAgICAgLy8gV2hlbiBpZ25vcmluZyB2aXJ0dWFsIHBzZXVkbyBlbGVtZW50cywgdGhl
IGNvbnRleHQncyBwc2V1ZG8gc2hvdWxkIGFsc28gYmUgTk9QU0VVRE8gYnV0IHRoYXQgZG9lcwog
ICAgICAgICAvLyBub3QgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICByZXR1cm4gY29udGV4dC5y
ZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVk
b0VsZW1lbnRzOworICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5t
YXRjaFRvTm9uUHNldWRvRWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hl
czsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNT
Y3JvbGxiYXJQc2V1ZG9FbGVtZW50KFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKQoraW5saW5lIHN0
YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3QgUHNldWRvSWRTZXQmIGR5
bmFtaWNQc2V1ZG9JZFNldCkKIHsKLSAgICBpZiAoZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVIK
LSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVEhVTUIKLSAgICAgICAgfHwg
ZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQlVUVE9OCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1
ZG8gPT0gU0NST0xMQkFSX1RSQUNLCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xM
QkFSX1RSQUNLX1BJRUNFCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NP
Uk5FUikgeworICAgIGlmIChkeW5hbWljUHNldWRvSWRTZXQgJiAoKDEgPDwgU0NST0xMQkFSKSB8
ICgxIDw8IFNDUk9MTEJBUl9USFVNQikgfCAoMSA8PCBTQ1JPTExCQVJfQlVUVE9OKSB8ICgxIDw8
IFNDUk9MTEJBUl9UUkFDSykgfCAoMSA8PCBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UpIHwgKDEgPDwg
U0NST0xMQkFSX0NPUk5FUikpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAv
LyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNj
cm9sbGJhci1saWtlIHBzZXVkbyBlbGVtZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBt
b3JlIHRoYW4gb25lIHBzZXVkbyBlbGVtZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09
IFJFU0laRVI7CisgICAgcmV0dXJuIGR5bmFtaWNQc2V1ZG9JZFNldCAmICgxIDw8IFJFU0laRVIp
OwogfQogCiBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpCkBAIC0yMTksMzQgKzIyNywzOCBAQCBzdGF0aWMg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4
dEZvclBhcmVudChjb25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2Vs
ZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAq
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQg
YW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25z
dCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1p
Y1BzZXVkb0lkU2V0KSBjb25zdAogeworICAgIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IG1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisK
ICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hlY2tP
bmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICBp
ZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQpKQorICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFp
bHNMb2NhbGx5KTsKIAogICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0
LCBhIHBzZXVkbyBlbGVtZW50IGluc2lkZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVu
ZGVmaW5lZCAoaXNzdWUgNykuCi0gICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcgZmFpbHVy
ZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAgICAgICBpZiAoY29udGV4
dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKKyAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVu
dGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UsIGV4Y2VwdCBmb3IgOm1hdGNoZXMuCisg
ICAgICAgIC8vIEluIFdlYktpdCwgd2Ugc3BlY2lhbGx5IGhhbmRsZXMgcHNldWRvLWVsZW1lbnRz
IGluIDptYXRjaGVzLgorICAgICAgICBpZiAoY29udGV4dC5mcmFnbWVudHNMZXZlbCA9PSBGcmFn
bWVudHNMZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIAog
ICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gY29udGV4dC5lbGVtZW50LT5jb250
YWluaW5nU2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSAhPSBjb250ZXh0LnNlbGVjdG9yLT52YWx1ZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0xvY2FsbHkpOwog
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYgcm9vdC0+dHlw
ZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9j
YWxseSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKCFjb250ZXh0LmVsZW1l
bnRTdHlsZSAmJiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
IHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQotICAgICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAg
ICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5z
ZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBpZiAocHNldWRvSWQg
IT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwor
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldCB8PSAoMSA8PCBwc2V1ZG9JZCk7Cisg
ICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50OjpGYWlsczsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDQ3ICsyNjgsNDkgQEAgc3Rh
dGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQoY29uc3QKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKICAgICBj
b25zdCBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxlY3Rvci0+dGFn
SGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKQotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JNYXRjaGVzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNoZXMobWF0Y2hU
b05vblBzZXVkb0VsZW1lbnQpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBuZXh0
Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxl
Y3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAg
ICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAgICAgICAgIC8v
IEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb0lk
Ci0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNl
dWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYg
ISgoMSA8PCBjb250ZXh0LnBzZXVkb0lkKSAmIGR5bmFtaWNQc2V1ZG9JZFNldCkpCisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsK
IAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRvIG1h
dGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxhdGlv
biAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBO
T1BTRVVETzsKKyAgICAgICAgbmV4dENvbnRleHQuaW5SaWdodG1vc3QgPSBmYWxzZTsKICAgICB9
CiAKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudDoKICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4
dENvbnRleHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAg
ICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7Ci0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9
IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
OwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Cisg
ICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQs
IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6
CiAgICAgICAgIHsKICAgICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9y
UGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRleHQuZWxlbWVu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVu
dFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0Y2hSZWN1cnNp
dmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAo
bWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVE
eW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQg
PSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5t
YXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6
CkBAIC0zMDYsNTYgKzMyMCw2MSBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogCiAgICAgICAg
ICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQWxsU2libGluZ3Mp
OwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNldEFmZmVjdHNOZXh0
U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9
IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZl
bHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENv
bnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGln
bm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJl
c3VsdDo6dXBkYXRlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3Rv
ckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKHJlc3VsdCwg
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogICAgICAgICB9OwotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcjoKKyAgICAgICAgewogICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYg
c29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFu
IGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQg
b2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxv
dyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQ
c2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG8pOwotICAgICAg
ICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVD
VElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5P
UFNFVURPCisgICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9s
bGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgbmV4dENvbnRl
eHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkb0lkU2V0ICYgKDEgPDwgU0VMRUNU
SU9OKTsKKyAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvSWRTZXQg
IT0gTk9QU0VVRE8KICAgICAgICAgICAgICYmICFuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1
ZG8KICAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvICYmIG5l
eHRDb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykp
Ci0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIHJl
dHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKKyAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
OworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShtYXRjaFJlY3Vyc2l2ZWx5KG5l
eHRDb250ZXh0LCBkeW5hbWljUHNldWRvSWRTZXQpLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7
CisgICAgICAgIH0KIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0gY29udGV4dC5l
bGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3ROb2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENv
bnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAw
OwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNoUmVj
dXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFRvTm9uUHNl
dWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1hdGNo
UmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiB9CiAKIHN0YXRpYyBib29s
IGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkKQEAgLTQ0OCw3ICs0NjcsNyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRj
aEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbgogICAgIC8vICAgIHNlbGVjdG9yIGRvZXMgbm90IHVzZSBhIHBzZXVkby1jbGFzcyBzZWxl
Y3RvciBvdGhlciB0aGFuICc6YWN0aXZlJyBhbmQgJzpob3ZlcicuCiAgICAgLy8gICAgc2VsZWN0
b3IgZG9lcyBub3QgdXNlIGEgcHNldWRvLWVsZW1lbnQgc2VsZWN0b3IuCiAgICAgLy8gICAgc2Vs
ZWN0b3IgaXMgbm90IHBhcnQgb2YgYW4gYXJndW1lbnQgdG8gYSBmdW5jdGlvbmFsIHBzZXVkby1j
bGFzcyBvciBwc2V1ZG8tZWxlbWVudC4KLSAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1
ZG9DbGFzcykKKyAgICBpZiAoY29udGV4dC5mcmFnbWVudHNMZXZlbCAhPSBGcmFnbWVudHNMZXZl
bDo6Um9vdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciA9IGNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQ7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKQEAgLTQ5MCw3ICs1MDks
NyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmIGNvbnRleHQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQ
c2V1ZG9JZFNldCwgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQmIG1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50KSBjb25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxl
bWVudDsKICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQu
c2VsZWN0b3I7CkBAIC01MjksMTMgKzU0OCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKIAog
ICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4
dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgc3ViY29u
dGV4dC5mcmFnbWVudHNMZXZlbCA9IEZyYWdtZW50c0xldmVsOjpJbk5vbk1hdGNoZXNGdW5jdGlv
bmFsUHNldWRvVHlwZTsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vi
c2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SU19MRVZFTDQpCi0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgeworICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pLm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcykgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC01NDksNyArNTY4LDkg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdp
dGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJjb250
ZXh0LnNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NWaXNpdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCkpCisg
ICAgICAgICAgICAgICAgLy8gU2luY2UgOm5vdCBjYW5ub3QgY29udGFpbiBwc2V1ZG8gZWxlbWVu
dHMsIHRoZXJlJ3Mgbm8gZWZmZWN0IG9uIG1hdGNoZWRUb05vblBzZXVkb0VsZW1lbnQuCisgICAg
ICAgICAgICAgICAgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgaWdub3JlTWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNoZWNrT25lKHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGlnbm9y
ZU1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKICAgICAgICAgICAgIH0KQEAgLTY2NSwxNiArNjg2LDM0IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0KSBjb25zdAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RP
UlNfTEVWRUw0KQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6
Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVj
dG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAg
ICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAg
ICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwot
ICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgaGFzTWF0Y2hl
ZEFueXRoaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHM7CisgICAgICAgICAgICAgICAgZm9y
IChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJzZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LmZyYWdtZW50c0xldmVsID0gbW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoY29u
dGV4dC5mcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRzTGV2ZWw6OkluTWF0Y2hlc0Z1bmN0aW9uYWxQ
c2V1ZG9UeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1
YnNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIFBzZXVkb0lk
U2V0IGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0ID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAg
ICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9j
YWxEeW5hbWljUHNldWRvSWRTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1h
dGNoID09IFNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dWJjb250ZXh0LmluUmlnaHRtb3N0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2hlbiBlbmNvdW50ZXJpbmcgcHNldWRvLWVsZW1lbnQgaW4gdGhlIG5vbi1yaWdodG1vc3QgZnJh
Z21lbnQsIGNvbnNpZGVyIGFzIHVubWF0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobG9jYWxEeW5hbWljUHNldWRvSWRTZXQgIT0gTk9QU0VVRE8pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIGN1cnJlbnQgZnJhZ21lbnQgaXMgbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCwg
aXQncyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1
ZG8gZWxlbWVudCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQubWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPT0gTWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQ6Ok1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkb0lkU2V0IHw9IGxvY2FsRHluYW1pY1BzZXVkb0lk
U2V0OworICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2hlZEFueXRoaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gaGFzTWF0Y2hlZEFueXRoaW5nOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGxh
Y2Vob2xkZXJTaG93bjoKICAgICAgICAgICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudD4oKmVsZW1lbnQpKSB7CkBAIC03NjksMTEgKzgwOCwxMSBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkg
Y29uc3QKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250
ZXh0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaW5GdW5jdGlvbmFsUHNl
dWRvQ2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmZyYWdtZW50c0xl
dmVsID0gRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlOwog
ICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxl
Y3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxl
Y3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAg
ICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3ViQ29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJz
aXZlbHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVz
KQorICAgICAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcykKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTc5MCw3ICs4MjksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkOgogICAgICAgICAgICAg
Ly8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1hdGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rv
ci9zaWJsaW5nIG1hdGNoaW5nLgogICAgICAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9uYWwgcHNl
dWRvIGNsYXNzIGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4KLSAgICAg
ICAgICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQorICAgICAgICAgICAg
aWYgKGNvbnRleHQuZnJhZ21lbnRzTGV2ZWwgIT0gRnJhZ21lbnRzTGV2ZWw6OlJvb3QpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlz
TGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hUeXBlOjpF
bmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6CkBAIC05
MTgsMTIgKzk1NywxMiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICBpZiAoc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVk
b0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKICAgICAg
ICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCi0gICAg
ICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwogICAg
ICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgIHN1
YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9y
OwotICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7
Ci0gICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5h
bWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBzdWJDb250ZXh0LmZy
YWdtZW50c0xldmVsID0gRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1
ZG9UeXBlOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5P
UFNFVURPOworICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkz
OSwxMCArOTc4LDEwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNlbGVjdG9yTGlzdChj
b25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBiYXNlQ29uCiAgICAgICAgIENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChiYXNlQ29udGV4dCk7CiAgICAgICAgIHN1YmNv
bnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0g
c3Vic2VsZWN0b3I7Ci0gICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3Mg
PSB0cnVlOworICAgICAgICBzdWJjb250ZXh0LmZyYWdtZW50c0xldmVsID0gRnJhZ21lbnRzTGV2
ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlOwogICAgICAgICBzdWJjb250ZXh0
LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgIFBzZXVk
b0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgaWYgKG1hdGNoUmVj
dXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRj
aGVzKSB7CisgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVE
TzsKKyAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1p
Y1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKSB7CiAgICAgICAgICAgICBBU1NFUlQo
aWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDgwNzc3
MTc0NDVlYTM2ODU3NDY0OWMxNDUxMzNkODc3YzM2N2EyNmMuLjRjY2M4YWI3OGZmY2Y2MmJmYmVl
YjkwMDUwYjJiNTUzMDllYjhlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgK
QEAgLTQ1LDYgKzQ1LDQxIEBAIGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2VsZWN0b3JDaGVja2VyKTsKICAgICBlbnVtIE1hdGNoIHsgU2VsZWN0b3JN
YXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OwogCisgICAgLy8gV2hldGhlciB0aGUgc3VjY2VlZGVk
IG1hdGNoaW5nIHJlc3VsdCBpcyBlZmZlY3RpdmUgb24gbm9uLXBzZXVkby1lbGVtZW50cy4KKyAg
ICBlbnVtIGNsYXNzIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IHsKKyAgICAgICAgTWF0Y2hlcywK
KyAgICAgICAgRmFpbHMsCisgICAgfTsKKworICAgIHN0cnVjdCBNYXRjaFJlc3VsdCB7CisgICAg
ICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRv
Tm9uUHNldWRvRWxlbWVudDsKKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgbWF0Y2hlcyhN
YXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBNYXRjaDo6U2VsZWN0b3JN
YXRjaGVzLAorICAgICAgICAgICAgICAgIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50CisgICAgICAg
ICAgICB9OworCisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgdXBkYXRl
KE1hdGNoUmVzdWx0IHJlc3VsdCwgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtYXRjaFRvTm9uUHNldWRv
RWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHMpCisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQ6OkZhaWxzOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBmYWlscyhNYXRjaCBtYXRjaCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICAgICAg
ICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHMKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICB9OworCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIDogdW5zaWduZWQgY2hh
ciB7CiAgICAgICAgIFJlc29sdmluZ1N0eWxlID0gMCwgQ29sbGVjdGluZ1J1bGVzLCBDb2xsZWN0
aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cywgUXVlcnlpbmdSdWxlcwpAQCAt
ODMsOCArMTE4LDggQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICBzdGF0aWMgdW5zaWdu
ZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCiBwcml2YXRl
OgotICAgIE1hdGNoIG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYsIFBzZXVkb0lkJikgY29uc3Q7Ci0gICAgYm9vbCBjaGVja09uZShjb25zdCBDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzJikgY29uc3Q7CisgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZWN1cnNp
dmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmKSBjb25z
dDsKKyAgICBib29sIGNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQ
c2V1ZG9JZFNldCYsIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBt
YXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVu
dCYsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpIGNvbnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9s
bGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBD
U1NTZWxlY3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1Nl
bGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCmluZGV4IDY4ZjIxYTM2MjQ3OGRhZTdhNzdmZTE4OWU4ZWY0YWU1OTJhMGNkNTQuLmI2
N2Q0ODU5ZGY2NGE2OWVmZTU3NGM5ZmE5ZjE4YTY5MjI1ZWZhNDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTYyLDcgKzYyLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTZWxlY3RvckNvbXBpbGVyIHsKIAotI2RlZmluZSBDU1Nf
U0VMRUNUT1JfSklUX0RFQlVHR0lORyAwCisjZGVmaW5lIENTU19TRUxFQ1RPUl9KSVRfREVCVUdH
SU5HIDEKIAogZW51bSBjbGFzcyBCYWNrdHJhY2tpbmdBY3Rpb24gewogICAgIE5vQmFja3RyYWNr
aW5nLApAQCAtMzY5LDkgKzM2OSwxNSBAQCBjbGFzcyBTZWxlY3RvckNvZGVHZW5lcmF0b3Igewog
CiBlbnVtIGNsYXNzIEZyYWdtZW50c0xldmVsIHsKICAgICBSb290ID0gMCwKLSAgICBJbkZ1bmN0
aW9uYWxQc2V1ZG9UeXBlID0gMQorICAgIEluTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlID0g
MSwKKyAgICBJbk5vbk1hdGNoZXNGdW5jdGlvbmFsUHNldWRvVHlwZSA9IDIsCiB9OwogCitzdGF0
aWMgRnJhZ21lbnRzTGV2ZWwgbW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRz
TGV2ZWwgbGhzLCBGcmFnbWVudHNMZXZlbCByaHMpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGxo
cywgcmhzKTsKK30KKwogc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29u
c3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZy
YWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRN
b2RlJik7CiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxl
Y3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIHVuc2lnbmVkIGxldmVsID0gMCk7
CkBAIC01ODMsNyArNTg5LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRv
Q2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKIAogICAgICAgICAv
LyBJbnNpZGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgZXhjZXB0IGZvciA6bm90LCA6dmlzaXRl
ZCBuZXZlciBtYXRjaGVzLgogICAgICAgICAvLyBBbmQgaW4gdGhlIGNhc2UgaW5zaWRlIDpub3Qs
IHJldHVybmluZyBDYW5ub3RNYXRjaEFueXRoaW5nIGluZGljYXRlcyB0aGF0IDpub3QoOnZpc2l0
ZWQpIGNhbiBtYXRjaCBvdmVyIGFueXRoaW5nLgotICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCA9
PSBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSkKKyAgICAgICAgaWYgKGZy
YWdtZW50TGV2ZWwgIT0gRnJhZ21lbnRzTGV2ZWw6OlJvb3QpCiAgICAgICAgICAgICByZXR1cm4g
RnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogCiAgICAgICAgIGZyYWdtZW50LnBz
ZXVkb0NsYXNzZXMuYWRkKHR5cGUpOwpAQCAtNjM2LDcgKzY0Miw3IEBAIHN0YXRpYyBpbmxpbmUg
RnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0
b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2Vs
ZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9
IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAg
ICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAg
ICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7
Ci0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1
Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9v
dEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAg
ICAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJh
Z21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBG
cmFnbWVudHNMZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1v
ZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVu
Y3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1
bmN0aW9uVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2lt
cGxlU2VsZWN0b3JDaGVja2VyOgpAQCAtNjcxLDcgKzY3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9
IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2Vs
ZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9y
RnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAgICAgIFZpc2l0ZWRN
b2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAg
ICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1
YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNM
ZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZp
c2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBG
dW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2Vs
ZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVs
OjpJbk5vbk1hdGNoZXNGdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVu
dHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2Rl
OjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNs
YXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgbm90IHBzZXVkbyBj
bGFzcyBmaWx0ZXIsIENhbm5vdE1hdGNoQW55dGhpbmcgaW1wbGllcyB0aGlzIGZpbHRlciBhbHdh
eXMgcGFzc2VzLgpAQCAtNjk1LDcgKzcwMSw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBl
IGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAg
ICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IgPSBzZWxlY3Rv
ci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgcm9vdFNlbGVjdG9yOyByb290U2VsZWN0b3IgPSBD
U1NTZWxlY3Rvckxpc3Q6Om5leHQocm9vdFNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNl
bGVjdG9yRnJhZ21lbnRMaXN0IGZyYWdtZW50TGlzdDsKICAgICAgICAgICAgICAgICBWaXNpdGVk
TW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAg
ICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9v
dFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIGZyYWdtZW50TGlzdCwgRnJhZ21lbnRzTGV2ZWw6
OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rp
b25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3Is
IHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5Ob25NYXRj
aGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2
aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAK
ICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoIGFn
YWluc3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVudHMuCkBAIC03
NTQsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAo
Y29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBz
dWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0
b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFn
bWVudHM7CiAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBW
aXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5j
dGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4
dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9U
eXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3Jl
VmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9u
VHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBz
ZWxlY3RvckZyYWdtZW50cywgbW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRz
TGV2ZWw6OkluTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlLCBmcmFnbWVudExldmVsKSwgcG9z
aXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRN
b2RlKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRN
b2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1
bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRo
aXMgZnJhZ21lbnQgbmV2ZXIgbWF0Y2hlcyBhZ2FpbnN0IHRoZSBlbGVtZW50LCBkb24ndCBpbnNl
cnQgaXQgdG8gbWF0Y2hlc0xpc3QuCkBAIC03NjQsNiArNzcwLDkgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAobG9jYWxGdW5jdGlvblR5cGUgPT0gRnVuY3Rp
b25UeXBlOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rp
b25UeXBlOjpDYW5ub3RDb21waWxlOwogCisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yRnJh
Z21lbnRzLmZpcnN0KCkucHNldWRvRWxlbWVudFNlbGVjdG9yKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOworCiAgICAgICAgICAgICAgICAg
ZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwg
bG9jYWxGdW5jdGlvblR5cGUpOwogICAgICAgICAgICAgICAgIG1hdGNoZXNMaXN0LmFwcGVuZChz
ZWxlY3RvckZyYWdtZW50cyk7CiAgICAgICAgICAgICB9CkBAIC04ODEsNyArODkwLDcgQEAgc3Rh
dGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJv
b3RTZWxlY3RvciwgU2VsZWN0b3IKIAogICAgICAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVs
IDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMg
dW5kZWZpbmVkIChpc3N1ZSA3KS4KICAgICAgICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcg
ZmFpbHVyZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAgICAgICAgICAg
aWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5
cGUpCisgICAgICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCA9PSBGcmFnbWVudHNMZXZlbDo6SW5O
b25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAogICAgICAgICAgICAgc3dpdGNoIChz
ZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkgewpAQCAtOTU4LDcgKzk2Nyw3IEBAIHN0YXRp
YyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290
U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgIGZyYWdtZW50LnBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzID0gcG9zaXRpb25JblJvb3RGcmFnbWVudHM7CiAgICAgICAgIHJlbGF0aW9uVG9QcmV2aW91
c0ZyYWdtZW50ID0gZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudDsKIAotICAgICAgICBp
ZiAoZnJhZ21lbnRMZXZlbCA9PSBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlw
ZSkKKyAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgIT0gRnJhZ21lbnRzTGV2ZWw6OlJvb3QpCiAg
ICAgICAgICAgICBmcmFnbWVudC5vbmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlID0gZmFsc2U7
CiAgICAgICAgIHNlbGVjdG9yRnJhZ21lbnRzLmFwcGVuZChmcmFnbWVudCk7CiAgICAgICAgIGZy
YWdtZW50ID0gU2VsZWN0b3JGcmFnbWVudCgpOwpAQCAtMjg0NSw3ICsyODU0LDcgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudEZ1bmN0aW9uQ2FsbFRlc3QoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYKICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1lbnQoZWxlbWVu
dEFkZHJlc3MpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRC
cmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKIH0KLSAgICAKKwog
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQ29udGV4dEZ1bmN0aW9uQ2FsbFRl
c3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBKU0M6OkZ1bmN0aW9uUHRyIHRl
c3RGdW5jdGlvbikKIHsKICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0
ID0gbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4IDk4NjM5NTA3ZjU1NTIwZTUw
YjNkMmYwNzllM2MyNGM0YTVhNjg0OTkuLmJkMDM1MDYxNmIzM2ZiZTAyZTJmYWZlYzViYmIyZmE4
YWU4N2RiYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCkBAIC0yMzQsNiArMjM0LDEzIEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291
bnRlZDxSZW5kZXJTdHlsZT4gewogICAgICAgICAgICAgQVNTRVJUKHBzZXVkbyA8IEZJUlNUX0lO
VEVSTkFMX1BTRVVET0lEKTsKICAgICAgICAgICAgIG1fZmxhZ3MgfD0gb25lQml0TWFzayA8PCAo
cHNldWRvQml0c09mZnNldCAtIDEgKyBwc2V1ZG8pOwogICAgICAgICB9CisgICAgICAgIHZvaWQg
c2V0SGFzUHNldWRvU3R5bGVzKFBzZXVkb0lkU2V0IHBzZXVkbykKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKHBzZXVkbyAhPSBOT1BTRVVETyk7CisgICAgICAgICAgICBBU1NFUlQoKHBz
ZXVkbyAmIFBVQkxJQ19QU0VVRE9JRF9NQVNLKSA9PSBwc2V1ZG8pOworICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChwc2V1ZG9CaXRzT2Zmc2V0ID49IDEsICIocHNldWRvQml0c09mZnNldCAtIDEp
IHNob3VsZCBiZSB2YWxpZC4iKTsKKyAgICAgICAgICAgIG1fZmxhZ3MgfD0gKHN0YXRpY19jYXN0
PHVpbnQ2NF90Pihwc2V1ZG8pIDw8IChwc2V1ZG9CaXRzT2Zmc2V0IC0gMSkpOworICAgICAgICB9
CiAKICAgICAgICAgRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RVRhYmxlTGF5b3V0PihnZXRWYWx1ZSh0YWJsZUxheW91dEJpdE1hc2ssIHRhYmxl
TGF5b3V0T2Zmc2V0KSk7IH0KICAgICAgICAgdm9pZCBzZXRUYWJsZUxheW91dChFVGFibGVMYXlv
dXQgdGFibGVMYXlvdXQpIHsgdXBkYXRlVmFsdWUodGFibGVMYXlvdXQsIHRhYmxlTGF5b3V0Qml0
TWFzaywgdGFibGVMYXlvdXRPZmZzZXQpOyB9CkBAIC01NjEsNiArNTY4LDcgQEAgY2xhc3MgUmVu
ZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRlclN0eWxlPiB7CiAgICAgYm9vbCBoYXNB
bnlQdWJsaWNQc2V1ZG9TdHlsZXMoKSBjb25zdDsKICAgICBib29sIGhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkIHBzZXVkbykgY29uc3Q7CiAgICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHlsZShQc2V1ZG9J
ZCBwc2V1ZG8pOworICAgIHZvaWQgc2V0SGFzUHNldWRvU3R5bGVzKFBzZXVkb0lkU2V0KTsKICAg
ICBib29sIGhhc1VuaXF1ZVBzZXVkb1N0eWxlKCkgY29uc3Q7CiAKICAgICAvLyBhdHRyaWJ1dGUg
Z2V0dGVyIG1ldGhvZHMKQEAgLTIxNTUsNiArMjE2MywxMSBAQCBpbmxpbmUgdm9pZCBSZW5kZXJT
dHlsZTo6c2V0SGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKQogICAgIG5vbmluaGVyaXRl
ZF9mbGFncy5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG8pOwogfQogCitpbmxpbmUgdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKFBzZXVkb0lkU2V0IHBzZXVkbykKK3sKKyAgICBu
b25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRvU3R5bGVzKHBzZXVkbyk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclN0eWxlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5k
ZXggMmE0YWVmNWJlNzQ4MGUyMDAzNjFiMzgyMmFiMDgzZDc1YzBhMzU4ZC4uNjg4NDkwMTYyYTM4
YzA4ZDM1OWRjNzRhNDQ4YjFlMjIwMjMzNTBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKQEAgLTgwLDYgKzgwLDgg
QEAgZW51bSBQc2V1ZG9JZCA6IHVuc2lnbmVkIGNoYXIgewogICAgIFBVQkxJQ19QU0VVRE9JRF9N
QVNLID0gKCgxIDw8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKSAtIDEpICYgfigoMSA8PCBGSVJT
VF9QVUJMSUNfUFNFVURPSUQpIC0gMSkKIH07CiAKK3R5cGVkZWYgdW5zaWduZWQgUHNldWRvSWRT
ZXQ7CisKIGVudW0gQ29sdW1uRmlsbCB7IENvbHVtbkZpbGxCYWxhbmNlLCBDb2x1bW5GaWxsQXV0
byB9OwogCiBlbnVtIENvbHVtblNwYW4geyBDb2x1bW5TcGFuTm9uZSA9IDAsIENvbHVtblNwYW5B
bGwgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240683</attachid>
            <date>2014-10-30 10:54:00 -0700</date>
            <delta_ts>2014-11-01 11:36:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141031025408.patch</filename>
            <type>text/plain</type>
            <size>38734</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWIzOGUzYzRjZmJjZjE0
Y2RiODc2ZTYxM2RmYjc3M2JmZjE4NjBkMC4uNDljMzk3MjNkYmI3NWFhZWRlN2VkMmRjNjA0NjA0
YTk3NzVjMGFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE0LTEwLTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptb3N0UmVzdHJpY3RpdmVGcmFnbWVu
dHNMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpoYXNTY3Jv
bGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5NYXRjaEhvdmVyT3JBY3Rp
dmVJblF1aXJrc01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JM
aXN0KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6OnVwZGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0OjpmYWlscyk6CisgICAgICAgICogY3Nz
aml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6bW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDb21waWxlcjo6YWRkUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OmNvbnN0cnVjdEZyYWdtZW50cyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6
c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGVDb25zdGFudHMuaDoKKwogMjAxNC0xMC0yNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gVmlkZW8gcmVzb2x1dGlvbiBjaGFu
Z2VzIHRyaWdnZXIgYSBjcmFzaCBpbiB0aGUgVGV4dHVyZU1hcHBlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjMzVkZDZkOTFhZjNmODE2NWM2NGQ1NWFlOWY1ZDhl
OWE1YzI4YmQ5Li40ZDRlNTEzNTA2ZjU0MzFmN2Y5OGE2MGYxMDc4YjdiYTI5ZGFmODFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNjMsNiArNjMsMTcgQEAgZW51
bSBjbGFzcyBWaXNpdGVkTWF0Y2hUeXBlIDogdW5zaWduZWQgY2hhciB7CiAgICAgRGlzYWJsZWQs
IEVuYWJsZWQKIH07CiAKK2VudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwgeworICAgIFJvb3QgPSAw
LAorICAgIEluTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMSwKKyAgICBJbk5vbk1hdGNo
ZXNGdW5jdGlvbmFsUHNldWRvVHlwZSA9IDIsCit9OworCitzdGF0aWMgRnJhZ21lbnRzTGV2ZWwg
bW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRzTGV2ZWwgbGhzLCBGcmFnbWVu
dHNMZXZlbCByaHMpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGxocywgcmhzKTsKK30KKwogc3Ry
dWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBT
ZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCB7CiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCYgY2hlY2tpbmdD
b250ZXh0LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgICAgIDogU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0
KQpAQCAtNzAsMTggKzgxLDIwIEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwg
ZWxlbWVudChlbGVtZW50KQogICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9k
ZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hU
eXBlOjpEaXNhYmxlZCA6IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQoc2VsZWN0b3IpCi0gICAgICAgICwgaW5GdW5jdGlvbmFs
UHNldWRvQ2xhc3MoZmFsc2UpCisgICAgICAgICwgZnJhZ21lbnRzTGV2ZWwoRnJhZ21lbnRzTGV2
ZWw6OlJvb3QpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQogICAgICAgICAs
IGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKKyAgICAgICAgLCBpblJpZ2h0bW9zdCh0cnVlKQog
ICAgIHsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwogICAgIEVsZW1lbnQq
IGVsZW1lbnQ7CiAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNv
bnN0IENTU1NlbGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKLSAgICBib29sIGlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzOworICAgIEZyYWdtZW50c0xldmVsIGZyYWdtZW50c0xldmVs
OwogICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNl
dWRvOworICAgIGJvb2wgaW5SaWdodG1vc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNG
aXJzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQpAQCAtMTcxLDM2ICsxODQs
MzEgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmkKIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRj
aChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENo
ZWNraW5nQ29udGV4dCYgcHJvdmlkZWRDb250ZXh0KSBjb25zdAogewogICAgIENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY29udGV4dChwcm92aWRlZENvbnRleHQsIHNlbGVjdG9yLCBlbGVtZW50
KTsKLSAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IE5PUFNFVURPOwotICAgIGlmIChtYXRjaFJlY3Vy
c2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkKSAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgUHNldWRv
SWRTZXQgcHNldWRvSWRTZXQgPSBOT1BTRVVETzsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0KTsKKyAgICBpZiAocmVzdWx0Lm1h
dGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChj
b250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRv
SWQpCisgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIShwc2V1ZG9JZFNl
dCAmICgxIDw8IGNvbnRleHQucHNldWRvSWQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURP
KSB7Ci0gICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUgJiYgcHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAg
IGNvbnRleHQuZWxlbWVudFN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAg
aWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQgIT0gTk9QU0VV
RE8pIHsKKyAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSAmJiBwc2V1ZG9JZFNldCAmIFBVQkxJQ19QU0VVRE9JRF9NQVNLKQorICAgICAgICAg
ICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7
CiAKICAgICAgICAgLy8gV2hlbiBpZ25vcmluZyB2aXJ0dWFsIHBzZXVkbyBlbGVtZW50cywgdGhl
IGNvbnRleHQncyBwc2V1ZG8gc2hvdWxkIGFsc28gYmUgTk9QU0VVRE8gYnV0IHRoYXQgZG9lcwog
ICAgICAgICAvLyBub3QgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICByZXR1cm4gY29udGV4dC5y
ZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVk
b0VsZW1lbnRzOworICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5t
YXRjaFRvTm9uUHNldWRvRWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hl
czsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNT
Y3JvbGxiYXJQc2V1ZG9FbGVtZW50KFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKQoraW5saW5lIHN0
YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoY29uc3QgUHNldWRvSWRTZXQmIGR5
bmFtaWNQc2V1ZG9JZFNldCkKIHsKLSAgICBpZiAoZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVIK
LSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVEhVTUIKLSAgICAgICAgfHwg
ZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQlVUVE9OCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1
ZG8gPT0gU0NST0xMQkFSX1RSQUNLCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xM
QkFSX1RSQUNLX1BJRUNFCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NP
Uk5FUikgeworICAgIGlmIChkeW5hbWljUHNldWRvSWRTZXQgJiAoKDEgPDwgU0NST0xMQkFSKSB8
ICgxIDw8IFNDUk9MTEJBUl9USFVNQikgfCAoMSA8PCBTQ1JPTExCQVJfQlVUVE9OKSB8ICgxIDw8
IFNDUk9MTEJBUl9UUkFDSykgfCAoMSA8PCBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UpIHwgKDEgPDwg
U0NST0xMQkFSX0NPUk5FUikpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAv
LyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNj
cm9sbGJhci1saWtlIHBzZXVkbyBlbGVtZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBt
b3JlIHRoYW4gb25lIHBzZXVkbyBlbGVtZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09
IFJFU0laRVI7CisgICAgcmV0dXJuIGR5bmFtaWNQc2V1ZG9JZFNldCAmICgxIDw8IFJFU0laRVIp
OwogfQogCiBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpCkBAIC0yMTksMzQgKzIyNywzOCBAQCBzdGF0aWMg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4
dEZvclBhcmVudChjb25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2Vs
ZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAq
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQg
YW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25z
dCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1p
Y1BzZXVkb0lkU2V0KSBjb25zdAogeworICAgIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IG1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisK
ICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hlY2tP
bmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICBp
ZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQpKQorICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFp
bHNMb2NhbGx5KTsKIAogICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0
LCBhIHBzZXVkbyBlbGVtZW50IGluc2lkZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVu
ZGVmaW5lZCAoaXNzdWUgNykuCi0gICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcgZmFpbHVy
ZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAgICAgICBpZiAoY29udGV4
dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKKyAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVu
dGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UsIGV4Y2VwdCBmb3IgOm1hdGNoZXMuCisg
ICAgICAgIC8vIEluIFdlYktpdCwgd2Ugc3BlY2lhbGx5IGhhbmRsZXMgcHNldWRvLWVsZW1lbnRz
IGluIDptYXRjaGVzLgorICAgICAgICBpZiAoY29udGV4dC5mcmFnbWVudHNMZXZlbCA9PSBGcmFn
bWVudHNMZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIAog
ICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+aXNDdXN0b21Qc2V1ZG9FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gY29udGV4dC5lbGVtZW50LT5jb250
YWluaW5nU2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSAhPSBjb250ZXh0LnNlbGVjdG9yLT52YWx1ZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0xvY2FsbHkpOwog
CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYgcm9vdC0+dHlw
ZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9j
YWxseSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKCFjb250ZXh0LmVsZW1l
bnRTdHlsZSAmJiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUp
IHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQotICAgICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAg
ICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5z
ZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBpZiAocHNldWRvSWQg
IT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOwor
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldCB8PSAoMSA8PCBwc2V1ZG9JZCk7Cisg
ICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50OjpGYWlsczsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDQ3ICsyNjgsNDkgQEAgc3Rh
dGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQoY29uc3QKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0b3IKICAgICBj
b25zdCBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxlY3Rvci0+dGFn
SGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKQotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JNYXRjaGVzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNoZXMobWF0Y2hU
b05vblBzZXVkb0VsZW1lbnQpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBuZXh0
Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxl
Y3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAg
ICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAgICAgICAgIC8v
IEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb0lk
Ci0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNl
dWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYg
ISgoMSA8PCBjb250ZXh0LnBzZXVkb0lkKSAmIGR5bmFtaWNQc2V1ZG9JZFNldCkpCisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsK
IAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRvIG1h
dGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxhdGlv
biAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQgPSBO
T1BTRVVETzsKKyAgICAgICAgbmV4dENvbnRleHQuaW5SaWdodG1vc3QgPSBmYWxzZTsKICAgICB9
CiAKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2Vu
ZGFudDoKICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4
dENvbnRleHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAg
ICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBjaGVja2luZ0Nv
bnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7Ci0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9
IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
OwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Cisg
ICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQs
IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6
CiAgICAgICAgIHsKICAgICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9y
UGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRleHQuZWxlbWVu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVu
dCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVu
dFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0Y2hSZWN1cnNp
dmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAo
bWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVE
eW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQg
PSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5t
YXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6
CkBAIC0zMDYsNTYgKzMyMCw2MSBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogCiAgICAgICAg
ICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQWxsU2libGluZ3Mp
OwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZp
bmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNldEFmZmVjdHNOZXh0
U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9
IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZl
bHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENv
bnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGln
bm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJl
c3VsdDo6dXBkYXRlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3Rv
ckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKHJlc3VsdCwg
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogICAgICAgICB9OwotICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJT
ZWxlY3RvcjoKKyAgICAgICAgewogICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYg
c29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFu
IGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQg
b2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxv
dyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQ
c2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG8pOwotICAgICAg
ICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVD
VElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5P
UFNFVURPCisgICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9s
bGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgbmV4dENvbnRl
eHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkb0lkU2V0ICYgKDEgPDwgU0VMRUNU
SU9OKTsKKyAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvSWRTZXQg
IT0gTk9QU0VVRE8KICAgICAgICAgICAgICYmICFuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1
ZG8KICAgICAgICAgICAgICYmICEobmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvICYmIG5l
eHRDb250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykp
Ci0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgIHJl
dHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvKTsKKyAgICAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
OworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShtYXRjaFJlY3Vyc2l2ZWx5KG5l
eHRDb250ZXh0LCBkeW5hbWljUHNldWRvSWRTZXQpLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7
CisgICAgICAgIH0KIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0gY29udGV4dC5l
bGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3ROb2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENv
bnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAw
OwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNoUmVj
dXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFRvTm9uUHNl
dWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1hdGNo
UmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiB9CiAKIHN0YXRpYyBib29s
IGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkKQEAgLTQ0OCw3ICs0NjcsNyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRj
aEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbgogICAgIC8vICAgIHNlbGVjdG9yIGRvZXMgbm90IHVzZSBhIHBzZXVkby1jbGFzcyBzZWxl
Y3RvciBvdGhlciB0aGFuICc6YWN0aXZlJyBhbmQgJzpob3ZlcicuCiAgICAgLy8gICAgc2VsZWN0
b3IgZG9lcyBub3QgdXNlIGEgcHNldWRvLWVsZW1lbnQgc2VsZWN0b3IuCiAgICAgLy8gICAgc2Vs
ZWN0b3IgaXMgbm90IHBhcnQgb2YgYW4gYXJndW1lbnQgdG8gYSBmdW5jdGlvbmFsIHBzZXVkby1j
bGFzcyBvciBwc2V1ZG8tZWxlbWVudC4KLSAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1
ZG9DbGFzcykKKyAgICBpZiAoY29udGV4dC5mcmFnbWVudHNMZXZlbCAhPSBGcmFnbWVudHNMZXZl
bDo6Um9vdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciA9IGNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQ7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKQEAgLTQ5MCw3ICs1MDks
NyBAQCBzdGF0aWMgYm9vbCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmIGNvbnRleHQpIGNvbnN0Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQ
c2V1ZG9JZFNldCwgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQmIG1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50KSBjb25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxl
bWVudDsKICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQu
c2VsZWN0b3I7CkBAIC01MjksMTMgKzU0OCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKIAog
ICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4
dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgc3ViY29u
dGV4dC5mcmFnbWVudHNMZXZlbCA9IEZyYWdtZW50c0xldmVsOjpJbk5vbk1hdGNoZXNGdW5jdGlv
bmFsUHNldWRvVHlwZTsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vi
c2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SU19MRVZFTDQpCi0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgeworICAg
ICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pLm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcykgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC01NDksNyArNTY4LDkg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdp
dGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJjb250
ZXh0LnNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NWaXNpdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCkpCisg
ICAgICAgICAgICAgICAgLy8gU2luY2UgOm5vdCBjYW5ub3QgY29udGFpbiBwc2V1ZG8gZWxlbWVu
dHMsIHRoZXJlJ3Mgbm8gZWZmZWN0IG9uIG1hdGNoZWRUb05vblBzZXVkb0VsZW1lbnQuCisgICAg
ICAgICAgICAgICAgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgaWdub3JlTWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNoZWNrT25lKHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGlnbm9y
ZU1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKICAgICAgICAgICAgIH0KQEAgLTY2NSwxNiArNjg2LDM0IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0KSBjb25zdAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RP
UlNfTEVWRUw0KQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6
Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVj
dG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAg
ICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAg
ICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwot
ICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgaGFzTWF0Y2hl
ZEFueXRoaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHM7CisgICAgICAgICAgICAgICAgZm9y
IChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJzZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LmZyYWdtZW50c0xldmVsID0gbW9zdFJlc3RyaWN0aXZlRnJhZ21lbnRzTGV2ZWwoY29u
dGV4dC5mcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRzTGV2ZWw6OkluTWF0Y2hlc0Z1bmN0aW9uYWxQ
c2V1ZG9UeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1
YnNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JP
ZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIFBzZXVkb0lk
U2V0IGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0ID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAg
ICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9j
YWxEeW5hbWljUHNldWRvSWRTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1h
dGNoID09IFNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dWJjb250ZXh0LmluUmlnaHRtb3N0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2hlbiBlbmNvdW50ZXJpbmcgcHNldWRvLWVsZW1lbnQgaW4gdGhlIG5vbi1yaWdodG1vc3QgZnJh
Z21lbnQsIGNvbnNpZGVyIGFzIHVubWF0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobG9jYWxEeW5hbWljUHNldWRvSWRTZXQgIT0gTk9QU0VVRE8pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIGN1cnJlbnQgZnJhZ21lbnQgaXMgbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCwg
aXQncyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1
ZG8gZWxlbWVudCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQubWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPT0gTWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQ6Ok1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkb0lkU2V0IHw9IGxvY2FsRHluYW1pY1BzZXVkb0lk
U2V0OworICAgICAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2hlZEFueXRoaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gaGFzTWF0Y2hlZEFueXRoaW5nOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGxh
Y2Vob2xkZXJTaG93bjoKICAgICAgICAgICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudD4oKmVsZW1lbnQpKSB7CkBAIC03NjksMTEgKzgwOCwxMSBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkg
Y29uc3QKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250
ZXh0KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaW5GdW5jdGlvbmFsUHNl
dWRvQ2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmZyYWdtZW50c0xl
dmVsID0gRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlOwog
ICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxl
Y3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxl
Y3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAg
ICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3ViQ29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJz
aXZlbHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVz
KQorICAgICAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0g
Tk9QU0VVRE87CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcykKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTc5MCw3ICs4MjksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkOgogICAgICAgICAgICAg
Ly8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1hdGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rv
ci9zaWJsaW5nIG1hdGNoaW5nLgogICAgICAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9uYWwgcHNl
dWRvIGNsYXNzIGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4KLSAgICAg
ICAgICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQorICAgICAgICAgICAg
aWYgKGNvbnRleHQuZnJhZ21lbnRzTGV2ZWwgIT0gRnJhZ21lbnRzTGV2ZWw6OlJvb3QpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmlz
TGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9PSBWaXNpdGVkTWF0Y2hUeXBlOjpF
bmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0RyYWc6CkBAIC05
MTgsMTIgKzk1NywxMiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICBpZiAoc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVk
b0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKICAgICAg
ICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCi0gICAg
ICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwogICAg
ICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgIHN1
YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9y
OwotICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7
Ci0gICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5h
bWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBzdWJDb250ZXh0LmZy
YWdtZW50c0xldmVsID0gRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1
ZG9UeXBlOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5P
UFNFVURPOworICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkz
OSwxMCArOTc4LDEwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNlbGVjdG9yTGlzdChj
b25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBiYXNlQ29uCiAgICAgICAgIENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChiYXNlQ29udGV4dCk7CiAgICAgICAgIHN1YmNv
bnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0g
c3Vic2VsZWN0b3I7Ci0gICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3Mg
PSB0cnVlOworICAgICAgICBzdWJjb250ZXh0LmZyYWdtZW50c0xldmVsID0gRnJhZ21lbnRzTGV2
ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlOwogICAgICAgICBzdWJjb250ZXh0
LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgIFBzZXVk
b0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgaWYgKG1hdGNoUmVj
dXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRj
aGVzKSB7CisgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVE
TzsKKyAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1p
Y1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKSB7CiAgICAgICAgICAgICBBU1NFUlQo
aWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDgwNzc3
MTc0NDVlYTM2ODU3NDY0OWMxNDUxMzNkODc3YzM2N2EyNmMuLjRjY2M4YWI3OGZmY2Y2MmJmYmVl
YjkwMDUwYjJiNTUzMDllYjhlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgK
QEAgLTQ1LDYgKzQ1LDQxIEBAIGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2VsZWN0b3JDaGVja2VyKTsKICAgICBlbnVtIE1hdGNoIHsgU2VsZWN0b3JN
YXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OwogCisgICAgLy8gV2hldGhlciB0aGUgc3VjY2VlZGVk
IG1hdGNoaW5nIHJlc3VsdCBpcyBlZmZlY3RpdmUgb24gbm9uLXBzZXVkby1lbGVtZW50cy4KKyAg
ICBlbnVtIGNsYXNzIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IHsKKyAgICAgICAgTWF0Y2hlcywK
KyAgICAgICAgRmFpbHMsCisgICAgfTsKKworICAgIHN0cnVjdCBNYXRjaFJlc3VsdCB7CisgICAg
ICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRv
Tm9uUHNldWRvRWxlbWVudDsKKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgbWF0Y2hlcyhN
YXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBNYXRjaDo6U2VsZWN0b3JN
YXRjaGVzLAorICAgICAgICAgICAgICAgIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50CisgICAgICAg
ICAgICB9OworCisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgdXBkYXRl
KE1hdGNoUmVzdWx0IHJlc3VsdCwgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtYXRjaFRvTm9uUHNldWRv
RWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHMpCisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQ6OkZhaWxzOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBmYWlscyhNYXRjaCBtYXRjaCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICAgICAg
ICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHMKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICB9OworCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIDogdW5zaWduZWQgY2hh
ciB7CiAgICAgICAgIFJlc29sdmluZ1N0eWxlID0gMCwgQ29sbGVjdGluZ1J1bGVzLCBDb2xsZWN0
aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cywgUXVlcnlpbmdSdWxlcwpAQCAt
ODMsOCArMTE4LDggQEAgY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICBzdGF0aWMgdW5zaWdu
ZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCiBwcml2YXRl
OgotICAgIE1hdGNoIG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYsIFBzZXVkb0lkJikgY29uc3Q7Ci0gICAgYm9vbCBjaGVja09uZShjb25zdCBDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzJikgY29uc3Q7CisgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZWN1cnNp
dmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmKSBjb25z
dDsKKyAgICBib29sIGNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQ
c2V1ZG9JZFNldCYsIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBt
YXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVu
dCYsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpIGNvbnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9s
bGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBD
U1NTZWxlY3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1Nl
bGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCmluZGV4IDY4ZjIxYTM2MjQ3OGRhZTdhNzdmZTE4OWU4ZWY0YWU1OTJhMGNkNTQuLjc5
YjkwNTgzNTA4YTE4M2EwODBkOGFkMjUzYmJhNWU1MmQ0OGZkMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTM2OSw5ICszNjksMTUgQEAgY2xhc3Mg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKIAogZW51bSBjbGFzcyBGcmFnbWVudHNMZXZlbCB7CiAg
ICAgUm9vdCA9IDAsCi0gICAgSW5GdW5jdGlvbmFsUHNldWRvVHlwZSA9IDEKKyAgICBJbk1hdGNo
ZXNGdW5jdGlvbmFsUHNldWRvVHlwZSA9IDEsCisgICAgSW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBz
ZXVkb1R5cGUgPSAyLAogfTsKIAorc3RhdGljIEZyYWdtZW50c0xldmVsIG1vc3RSZXN0cmljdGl2
ZUZyYWdtZW50c0xldmVsKEZyYWdtZW50c0xldmVsIGxocywgRnJhZ21lbnRzTGV2ZWwgcmhzKQor
eworICAgIHJldHVybiBzdGQ6Om1heChsaHMsIHJocyk7Cit9CisKIHN0YXRpYyBGdW5jdGlvblR5
cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNl
bGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBG
cmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFj
a3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21l
bnRzLCB1bnNpZ25lZCBsZXZlbCA9IDApOwpAQCAtNTgzLDcgKzU4OSw3IEBAIHN0YXRpYyBpbmxp
bmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2Vs
ZWN0b3IsIFNlbGVjCiAKICAgICAgICAgLy8gSW5zaWRlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNz
IGV4Y2VwdCBmb3IgOm5vdCwgOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcy4KICAgICAgICAgLy8gQW5k
IGluIHRoZSBjYXNlIGluc2lkZSA6bm90LCByZXR1cm5pbmcgQ2Fubm90TWF0Y2hBbnl0aGluZyBp
bmRpY2F0ZXMgdGhhdCA6bm90KDp2aXNpdGVkKSBjYW4gbWF0Y2ggb3ZlciBhbnl0aGluZy4KLSAg
ICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBz
ZXVkb1R5cGUpCisgICAgICAgIGlmIChmcmFnbWVudExldmVsICE9IEZyYWdtZW50c0xldmVsOjpS
b290KQogICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGlu
ZzsKIAogICAgICAgICBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmFkZCh0eXBlKTsKQEAgLTYzNiw3
ICs2NDIsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUo
Y29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBz
dWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0
b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IHNlbGVjdG9y
RnJhZ21lbnRzOwogICAgICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVk
TW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblR5
cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3Rv
ckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFs
UHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1
bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250
ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0
aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5h
YmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0
ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChmdW5jdGlvblR5cGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjoKQEAgLTY3MSw3ICs2
NzcsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29u
c3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgZm9yIChjb25zdCBD
U1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVj
dG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsK
ICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBzZWxlY3RvckZyYWdtZW50czsK
ICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRN
b2RlOjpOb25lOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlw
ZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxl
Y3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVk
TW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0g
Y29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9y
RnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5Ob25NYXRjaGVzRnVuY3Rpb25hbFBzZXVkb1R5
cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVW
aXNpdGVkTW9kZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVW
aXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGlu
IHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAgICAgICAvLyBT
aW5jZSB0aGlzIGlzIG5vdCBwc2V1ZG8gY2xhc3MgZmlsdGVyLCBDYW5ub3RNYXRjaEFueXRoaW5n
IGltcGxpZXMgdGhpcyBmaWx0ZXIgYWx3YXlzIHBhc3Nlcy4KQEAgLTY5NSw3ICs3MDEsNyBAQCBz
dGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rv
ciogcm9vdFNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHJvb3RT
ZWxlY3Rvcjsgcm9vdFNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHJvb3RTZWxlY3Rv
cikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBmcmFnbWVudExpc3Q7
CiAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVk
TW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3ViRnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBmcmFn
bWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUp
OworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlvblR5cGUgPSBjb25zdHJ1
Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIGZyYWdtZW50TGlzdCwg
RnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUp
OwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUg
PT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rp
b25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBm
cmFnbWVudCBhbHdheXMgdW5tYXRjaCBhZ2FpbnN0IHRoZSBlbGVtZW50LCBkb24ndCBpbnNlcnQg
aXQgdG8gYW55RnJhZ21lbnRzLgpAQCAtNzU0LDcgKzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9
IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2Vs
ZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9y
RnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAgICAgIFZpc2l0ZWRN
b2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAg
ICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1
YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNM
ZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZp
c2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBG
dW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2Vs
ZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIG1vc3RSZXN0cmljdGl2
ZUZyYWdtZW50c0xldmVsKEZyYWdtZW50c0xldmVsOjpJbk1hdGNoZXNGdW5jdGlvbmFsUHNldWRv
VHlwZSwgZnJhZ21lbnRMZXZlbCksIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0
Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNp
dGVkIGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAg
ICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYWdtZW50IG5ldmVyIG1hdGNoZXMgYWdhaW5z
dCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0IHRvIG1hdGNoZXNMaXN0LgpAQCAtNzY0LDYg
Kzc3MCw5IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShj
b25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgaWYgKGxv
Y2FsRnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKIAorICAgICAg
ICAgICAgICAgIGlmIChzZWxlY3RvckZyYWdtZW50cy5maXJzdCgpLnBzZXVkb0VsZW1lbnRTZWxl
Y3RvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29t
cGlsZTsKKwogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1
bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGxvY2FsRnVuY3Rpb25UeXBlKTsKICAgICAgICAgICAg
ICAgICBtYXRjaGVzTGlzdC5hcHBlbmQoc2VsZWN0b3JGcmFnbWVudHMpOwogICAgICAgICAgICAg
fQpAQCAtODgxLDcgKzg5MCw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21l
bnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yCiAKICAgICAgICAg
ICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0LCBhIHBzZXVkbyBlbGVtZW50IGluc2lkZSBhIGZ1
bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVuZGVmaW5lZCAoaXNzdWUgNykuCiAgICAgICAgICAg
ICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xhcmlmaWVz
IHRoaXMgY2FzZS4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudExldmVsID09IEZyYWdtZW50c0xl
dmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICAgICAgaWYgKGZyYWdtZW50TGV2
ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluTm9uTWF0Y2hlc0Z1bmN0aW9uYWxQc2V1ZG9UeXBlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7
CiAKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsK
QEAgLTk1OCw3ICs5NjcsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50
cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICBmcmFn
bWVudC5wb3NpdGlvbkluUm9vdEZyYWdtZW50cyA9IHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOwog
ICAgICAgICByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudCA9IGZyYWdtZW50LnJlbGF0aW9uVG9M
ZWZ0RnJhZ21lbnQ7CiAKLSAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgIGlmIChmcmFnbWVudExldmVsICE9
IEZyYWdtZW50c0xldmVsOjpSb290KQogICAgICAgICAgICAgZnJhZ21lbnQub25seU1hdGNoZXNM
aW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICBzZWxlY3RvckZyYWdtZW50cy5hcHBl
bmQoZnJhZ21lbnQpOwogICAgICAgICBmcmFnbWVudCA9IFNlbGVjdG9yRnJhZ21lbnQoKTsKQEAg
LTI4NDUsNyArMjg1NCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVs
ZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmCiAgICAgZnVuY3Rpb25D
YWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzKTsKICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1i
bGVyOjpaZXJvKSk7CiB9Ci0gICAgCisKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgSlNDOjpGdW5jdGlvblB0ciB0ZXN0RnVuY3Rpb24pCiB7CiAgICAgQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVS
ZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAppbmRleCA5ODYzOTUwN2Y1NTUyMGU1MGIzZDJmMDc5ZTNjMjRjNGE1YTY4NDk5Li5iZDAzNTA2
MTZiMzNmYmUwMmUyZmFmZWM1YmJiMmZhOGFlODdkYmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMjM0LDYgKzIzNCwxMyBAQCBjbGFzcyBS
ZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICAgICAgICAg
IEFTU0VSVChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCk7CiAgICAgICAgICAgICBt
X2ZsYWdzIHw9IG9uZUJpdE1hc2sgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAxICsgcHNldWRvKTsK
ICAgICAgICAgfQorICAgICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlcyhQc2V1ZG9JZFNldCBw
c2V1ZG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8gIT0gTk9QU0VVRE8p
OworICAgICAgICAgICAgQVNTRVJUKChwc2V1ZG8gJiBQVUJMSUNfUFNFVURPSURfTUFTSykgPT0g
cHNldWRvKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQocHNldWRvQml0c09mZnNldCA+PSAx
LCAiKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSBzaG91bGQgYmUgdmFsaWQuIik7CisgICAgICAgICAg
ICBtX2ZsYWdzIHw9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4ocHNldWRvKSA8PCAocHNldWRvQml0
c09mZnNldCAtIDEpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEVUYWJsZUxheW91dCB0YWJsZUxh
eW91dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUYWJsZUxheW91dD4oZ2V0VmFsdWUo
dGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCkpOyB9CiAgICAgICAgIHZvaWQg
c2V0VGFibGVMYXlvdXQoRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KSB7IHVwZGF0ZVZhbHVlKHRh
YmxlTGF5b3V0LCB0YWJsZUxheW91dEJpdE1hc2ssIHRhYmxlTGF5b3V0T2Zmc2V0KTsgfQpAQCAt
NTYxLDYgKzU2OCw3IEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5k
ZXJTdHlsZT4gewogICAgIGJvb2wgaGFzQW55UHVibGljUHNldWRvU3R5bGVzKCkgY29uc3Q7CiAg
ICAgYm9vbCBoYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pIGNvbnN0OwogICAgIHZvaWQg
c2V0SGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKTsKKyAgICB2b2lkIHNldEhhc1BzZXVk
b1N0eWxlcyhQc2V1ZG9JZFNldCk7CiAgICAgYm9vbCBoYXNVbmlxdWVQc2V1ZG9TdHlsZSgpIGNv
bnN0OwogCiAgICAgLy8gYXR0cmlidXRlIGdldHRlciBtZXRob2RzCkBAIC0yMTU1LDYgKzIxNjMs
MTEgQEAgaW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lk
IHBzZXVkbykKICAgICBub25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRvU3R5bGUocHNldWRv
KTsKIH0KIAoraW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlcyhQc2V1
ZG9JZFNldCBwc2V1ZG8pCit7CisgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVkb1N0
eWxlcyhwc2V1ZG8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBS
ZW5kZXJTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGVDb25zdGFudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZUNvbnN0YW50cy5oCmluZGV4IDJhNGFlZjViZTc0ODBlMjAwMzYxYjM4MjJhYjA4
M2Q3NWMwYTM1OGQuLjY4ODQ5MDE2MmEzOGMwOGQzNTlkYzc0YTQ0OGIxZTIyMDIzMzUwZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0
YW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNv
bnN0YW50cy5oCkBAIC04MCw2ICs4MCw4IEBAIGVudW0gUHNldWRvSWQgOiB1bnNpZ25lZCBjaGFy
IHsKICAgICBQVUJMSUNfUFNFVURPSURfTUFTSyA9ICgoMSA8PCBGSVJTVF9JTlRFUk5BTF9QU0VV
RE9JRCkgLSAxKSAmIH4oKDEgPDwgRklSU1RfUFVCTElDX1BTRVVET0lEKSAtIDEpCiB9OwogCit0
eXBlZGVmIHVuc2lnbmVkIFBzZXVkb0lkU2V0OworCiBlbnVtIENvbHVtbkZpbGwgeyBDb2x1bW5G
aWxsQmFsYW5jZSwgQ29sdW1uRmlsbEF1dG8gfTsKIAogZW51bSBDb2x1bW5TcGFuIHsgQ29sdW1u
U3Bhbk5vbmUgPSAwLCBDb2x1bW5TcGFuQWxsIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240791</attachid>
            <date>2014-11-01 11:36:12 -0700</date>
            <delta_ts>2014-11-02 10:59:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141102033621.patch</filename>
            <type>text/plain</type>
            <size>39544</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBkODY4ZmMzYmQ1OTYz
ODZhMGI2MTEwMTc2MzBhOTU3MThmZThhYi4uZjU5Mzc3YTAzMjA4ODdmOWNjZTcyMjE1ODQ0Yjc0
NDJkNzdjNTFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTExLTAxICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpo
YXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hT
ZWxlY3Rvckxpc3QpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6Om1hdGNoZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6dXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAg
ICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29uc3RydWN0RnJhZ21l
bnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZXMpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oOgorCiAyMDE0LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBFbGltaW5hdGUgUmVzb3VyY2VC
dWZmZXIgYW5kIHVzZSBTaGFyZWRCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjMzVkZDZkOTFhZjNmODE2NWM2NGQ1NWFlOWY1
ZDhlOWE1YzI4YmQ5Li45ZGJlMjVjZGE1MTQzNzgwMjdiN2EwYTQ2ZDJiNGU1ZGM1YWRiOWNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNzEsOCArNzEsMTAgQEAg
c3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1Ymxp
YyBTZWxlY3RvckNoZWNrZXI6OkNoZWMKICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29s
dmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQgOiBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkKQogICAgICAg
ICAsIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50KHNlbGVjdG9yKQogICAgICAgICAsIGluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzKGZhbHNlKQorICAgICAgICAsIHBzZXVkb0VsZW1lbnRFZmZlY3Rp
dmUodHJ1ZSkKICAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCiAgICAgICAgICwg
aGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQorICAgICAgICAsIGluUmlnaHRtb3N0KHRydWUpCiAg
ICAgeyB9CiAKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CkBAIC04MCw4ICs4Miwx
MCBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIDog
cHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlYwogICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRl
ZE1hdGNoVHlwZTsKICAgICBjb25zdCBDU1NTZWxlY3RvciogZmlyc3RTZWxlY3Rvck9mVGhlRnJh
Z21lbnQ7CiAgICAgYm9vbCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzczsKKyAgICBib29sIHBzZXVk
b0VsZW1lbnRFZmZlY3RpdmU7CiAgICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG87CiAgICAgYm9v
bCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgYm9vbCBpblJpZ2h0bW9zdDsKIH07CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0ZpcnN0Q2hpbGRFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CkBAIC0xNzEsMzYgKzE3NSwzMSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZU
eXBlQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogYm9vbCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQpIGNvbnN0CiB7
CiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjb250ZXh0KHByb3ZpZGVkQ29udGV4dCwg
c2VsZWN0b3IsIGVsZW1lbnQpOwotICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gTk9QU0VVRE87Ci0g
ICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWQpICE9IFNlbGVjdG9yTWF0
Y2hlcykKKyAgICBQc2V1ZG9JZFNldCBwc2V1ZG9JZFNldCA9IE5PUFNFVURPOworICAgIE1hdGNo
UmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWRTZXQpOwor
ICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5w
c2V1ZG9JZCAhPSBwc2V1ZG9JZCkKKyAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVE
TyAmJiAhKHBzZXVkb0lkU2V0ICYgKDEgPDwgY29udGV4dC5wc2V1ZG9JZCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNl
dWRvSWQgIT0gTk9QU0VVRE8pIHsKLSAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVE
T0lEKQotICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxl
KHBzZXVkb0lkKTsKKyAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1
ZG9JZFNldCAhPSBOT1BTRVVETykgeworICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkU2V0ICYgUFVCTElDX1BTRVVET0lE
X01BU0spCisgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5
bGVzKHBzZXVkb0lkU2V0KTsKIAogICAgICAgICAvLyBXaGVuIGlnbm9yaW5nIHZpcnR1YWwgcHNl
dWRvIGVsZW1lbnRzLCB0aGUgY29udGV4dCdzIHBzZXVkbyBzaG91bGQgYWxzbyBiZSBOT1BTRVVE
TyBidXQgdGhhdCBkb2VzCiAgICAgICAgIC8vIG5vdCBjYXVzZSBhIGZhaWx1cmUuCi0gICAgICAg
IHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdu
b3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHM7CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxl
bWVudHMgfHwgcmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID09IE1hdGNoVG9Ob25Qc2V1
ZG9FbGVtZW50OjpNYXRjaGVzOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5l
IHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoUHNldWRvSWQmIGR5bmFtaWNQ
c2V1ZG8pCitpbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25z
dCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0KQogewotICAgIGlmIChkeW5hbWljUHNl
dWRvID09IFNDUk9MTEJBUgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9U
SFVNQgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9CVVRUT04KLSAgICAg
ICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0sKLSAgICAgICAgfHwgZHluYW1p
Y1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UKLSAgICAgICAgfHwgZHluYW1pY1BzZXVk
byA9PSBTQ1JPTExCQVJfQ09STkVSKSB7CisgICAgaWYgKGR5bmFtaWNQc2V1ZG9JZFNldCAmICgo
MSA8PCBTQ1JPTExCQVIpIHwgKDEgPDwgU0NST0xMQkFSX1RIVU1CKSB8ICgxIDw8IFNDUk9MTEJB
Ul9CVVRUT04pIHwgKDEgPDwgU0NST0xMQkFSX1RSQUNLKSB8ICgxIDw8IFNDUk9MTEJBUl9UUkFD
S19QSUVDRSkgfCAoMSA8PCBTQ1JPTExCQVJfQ09STkVSKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KIAogICAgIC8vIFJFU0laRVIgZG9lcyBub3QgYWx3YXlzIGhhdmUgYSBzY3JvbGxi
YXIgYnV0IGl0IGlzIGEgc2Nyb2xsYmFyLWxpa2UgcHNldWRvIGVsZW1lbnQKICAgICAvLyBiZWNh
dXNlIGl0IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcHNldWRvIGVsZW1lbnQuCi0gICAgcmV0dXJu
IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUjsKKyAgICByZXR1cm4gZHluYW1pY1BzZXVkb0lkU2V0
ICYgKDEgPDwgUkVTSVpFUik7CiB9CiAKIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0IFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkKQEAgLTIxOSwzNCAr
MjE4LDM4IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAvLyAqIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5ICAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBz
aWJsaW5nIG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0gdGhlIHNlbGVjdG9y
IGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCi1TZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykg
Y29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGVja2VyOjptYXRj
aFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBz
ZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpIGNvbnN0CiB7CisgICAgTWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxl
bWVudDo6TWF0Y2hlczsKKwogICAgIC8vIFRoZSBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gu
Ci0gICAgaWYgKCFjaGVja09uZShjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNMb2NhbGx5OworICAgIGlmICghY2hlY2tPbmUoY29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0
LCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCkpCisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6
ZmFpbHMoU2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgLy8gSW4g
U2VsZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBw
c2V1ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgLy8gTWFrZSBpdCBh
cyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0g
ICAgICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQotICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAvLyBNYWtlIGl0IGFzIG1h
dGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xhcmlmaWVzIHRoaXMgY2FzZSwgZXhjZXB0
IGZvciA6bWF0Y2hlcy4KKyAgICAgICAgLy8gSW4gV2ViS2l0LCB3ZSBzcGVjaWFsbHkgaGFuZGxl
cyBwc2V1ZG8tZWxlbWVudHMgaW4gOm1hdGNoZXMuCisgICAgICAgIGlmIChjb250ZXh0LmluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzICYmICFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpCisg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KTsKIAogICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+aXNDdXN0b21Qc2V1ZG9FbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gY29udGV4dC5lbGVt
ZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQuZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBjb250ZXh0LnNlbGVjdG9yLT52YWx1ZSgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYg
cm9vdC0+dHlwZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xv
Y2FsbHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3Rv
ckZhaWxzTG9jYWxseSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKCFjb250
ZXh0LmVsZW1lbnRTdHlsZSAmJiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2
aW5nU3R5bGUpIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVz
KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsK
IAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQo
Y29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBpZiAo
cHNldWRvSWQgIT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBz
ZXVkb0lkOworICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldCB8PSAoMSA8PCBwc2V1
ZG9JZCk7CisgICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Q
c2V1ZG9FbGVtZW50OjpGYWlsczsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDQ3ICsyNTks
NDkgQEAgc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBj
aGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0
b3IKICAgICBjb25zdCBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxl
Y3Rvci0+dGFnSGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKQotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JNYXRjaGVzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNo
ZXMobWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhp
c3RvcnlTZWxlY3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAg
ICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhl
IHBzZXVkb0lkCi0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNv
bnRleHQucHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9Q
U0VVRE8gJiYgISgoMSA8PCBjb250ZXh0LnBzZXVkb0lkKSAmIGR5bmFtaWNQc2V1ZG9JZFNldCkp
CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5KTsKIAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ug
dHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlm
IChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NT
ZWxlY3Rvcjo6Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBl
ID0gVmlzaXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNl
dWRvSWQgPSBOT1BTRVVETzsKKyAgICAgICAgbmV4dENvbnRleHQuaW5SaWdodG1vc3QgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RGVzY2VuZGFudDoKICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQ
YXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29udGV4dC5l
bGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxs
cHRyOwogICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBj
aGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7Ci0gICAgICAgICAgICBNYXRj
aCBtYXRjaCA9IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pOwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBt
YXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9Q
U0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0
ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3Vs
dDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6Q2hpbGQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdD
b250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRl
eHQuZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0
Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNl
dCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3Vs
dCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8
IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50KTsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWls
c0FsbFNpYmxpbmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0
QWRqYWNlbnQ6CkBAIC0zMDYsNTYgKzMxMSw1OSBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAog
CiAgICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQt
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVt
ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNldEFm
ZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRleHQu
ZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0
U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAg
ICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNo
UmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAg
ICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVk
b0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29u
dGV4dC5lbGVtZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdt
ZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRT
dHlsZSA9IDA7CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAg
ICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0g
bmV4dENvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQog
ICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxl
bWVudFN0eWxlKCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1
cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxT
aWJsaW5ncyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWlj
UHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRj
aFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9
PSBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRl
KHJlc3VsdCwgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogICAgICAgICB9OwotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpTdWJTZWxlY3RvcjoKICAgICAgICAgLy8gYSBzZWxlY3RvciBpcyBpbnZhbGlkIGlmIHNv
bWV0aGluZyBmb2xsb3dzIGEgcHNldWRvLWVsZW1lbnQKICAgICAgICAgLy8gV2UgbWFrZSBhbiBl
eGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9m
IHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQogICAgICAgICAvLyB0byBmb2xsb3cg
dGhlIHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNl
dWRvID0gaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChkeW5hbWljUHNldWRvKTsKLSAgICAgICAg
bmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkbyA9PSBTRUxFQ1RJ
T047Ci0gICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BT
RVVETworICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxi
YXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgIG5leHRDb250ZXh0
Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG9JZFNldCAmICgxIDw8IFNFTEVDVElP
Tik7CisgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0ICE9
IE5PUFNFVURPCiAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRv
CiAgICAgICAgICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBuZXh0
Q29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQot
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1
cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsK
KyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGUobWF0Y2hSZWN1cnNpdmVseShuZXh0
Q29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0KSwgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwog
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAg
ICAgICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1lbnQtPnNoYWRv
d0hvc3QoKTsKICAgICAgICAgICAgIGlmICghc2hhZG93SG9zdE5vZGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAg
ICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hvc3ROb2RlOwogICAgICAgICAgICAgbmV4
dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3Rv
cjsKLSAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7Ci0gICAgICAgICAg
ICByZXR1cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVk
byk7CisgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOworICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGUobWF0Y2hSZWN1cnNpdmVseShuZXh0
Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIH0KIAogc3RhdGljIGJvb2wgYXR0cmlidXRlVmFs
dWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBDU1NTZWxlY3Rvcjo6TWF0Y2gg
bWF0Y2gsIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0
aXZlKQpAQCAtNDkwLDcgKzQ5OCw3IEBAIHN0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2
ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29uCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQ
c2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0LCBNYXRjaFRvTm9uUHNldWRvRWxlbWVudCYg
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogY29uc3QgJiBl
bGVtZW50ID0gY29udGV4dC5lbGVtZW50OwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBjb25zdCAm
IHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKQEAgLTUzMCwxMiArNTM4LDEzIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vi
c2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAg
ICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CiAgICAgICAg
ICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgc3ViY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwogICAgICAg
ICAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7CisgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOwogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQot
ICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9
PSBTZWxlY3Rvck1hdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5
bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTQ5LDcgKzU1OCw5IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0
KSBjb25zdAogICAgICAgICAgICAgICAgICAgICBpZiAoc3ViY29udGV4dC5zZWxlY3Rvci0+cHNl
dWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YmNvbnRleHQpKQorICAgICAgICAgICAgICAgIC8v
IFNpbmNlIDpub3QgY2Fubm90IGNvbnRhaW4gcHNldWRvIGVsZW1lbnRzLCB0aGVyZSdzIG5vIGVm
ZmVjdCBvbiBtYXRjaGVkVG9Ob25Qc2V1ZG9FbGVtZW50LgorICAgICAgICAgICAgICAgIE1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50IGlnbm9yZU1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hU
b05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09u
ZShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpZ25vcmVNYXRjaFRvTm9uUHNldWRv
RWxlbWVudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAg
ICAgICAgICB9CkBAIC02NjUsMTYgKzY3NiwzMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NNYXRjaGVzOgotICAgICAgICAgICAgZm9y
IChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJzZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4dC5p
bkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4
dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICBQ
c2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAgICAgICAgICAg
aWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0g
U2VsZWN0b3JNYXRjaGVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIGhhc01hdGNoZWRBbnl0aGluZyA9IGZhbHNl
OworICAgICAgICAgICAgICAgIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQ6OkZhaWxzOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJz
ZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3Ip
KSB7CisgICAgICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29u
dGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNl
dWRvRWxlbWVudEVmZmVjdGl2ZSA9IGNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3Vic2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGxvY2FsRHluYW1p
Y1BzZXVkb0lkU2V0ID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0
IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRv
SWRTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IFNlbGVjdG9y
TWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmluUmlnaHRt
b3N0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwc2V1ZG8gZWxlbWVu
dHMgYXJlIG5vdCBlZmZlY3RpdmUgaW4gdGhpcyBmcmFnbWVudCAoZS5nLiBpdCdzIG5vdCByaWdo
bW9zdCBmcmFnbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBub3Qg
bmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1ZG8gZWxlbWVu
dCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPT0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNo
ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQg
PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZHluYW1pY1BzZXVkb0lkU2V0IHw9IGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0OworICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2hlZEFueXRoaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
aGFzTWF0Y2hlZEFueXRoaW5nOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGxhY2Vob2xkZXJT
aG93bjoKICAgICAgICAgICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVs
ZW1lbnQpKSB7CkBAIC03NzAsMTAgKzc5OCwxMSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1
YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4
dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4
dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
dWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3ViQ29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1p
Y1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1h
dGNoID09IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkxOCwxMiArOTQ3LDEz
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgUHNldWRvSWQg
aWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAgICBjb25zdCBDU1NTZWxlY3Rv
ciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3Vi
Q29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vi
Q29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJz
dFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAg
ICBzdWJDb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09
IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVm
ZmVjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOworICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTk0MCw5ICs5NzAsMTAgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0
b3JMaXN0KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb24KICAgICAgICAg
c3ViY29udGV4dC5lbGVtZW50ID0gJmVsZW1lbnQ7CiAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0
b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9D
bGFzcyA9IHRydWU7CisgICAgICAgIHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9
IGZhbHNlOwogICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3Vic2VsZWN0b3I7Ci0gICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKLSAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHlu
YW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKSB7CisgICAgICAgIFBzZXVkb0lkU2V0IGln
bm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZl
bHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRj
aGVzKSB7CiAgICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVE
Tyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oCmluZGV4IDgwNzc3MTc0NDVlYTM2ODU3NDY0OWMxNDUxMzNkODc3YzM2
N2EyNmMuLjRjY2M4YWI3OGZmY2Y2MmJmYmVlYjkwMDUwYjJiNTUzMDllYjhlZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQ1LDYgKzQ1LDQxIEBAIGNsYXNzIFNlbGVj
dG9yQ2hlY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VsZWN0b3JDaGVja2VyKTsK
ICAgICBlbnVtIE1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwg
U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBTZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OwogCisg
ICAgLy8gV2hldGhlciB0aGUgc3VjY2VlZGVkIG1hdGNoaW5nIHJlc3VsdCBpcyBlZmZlY3RpdmUg
b24gbm9uLXBzZXVkby1lbGVtZW50cy4KKyAgICBlbnVtIGNsYXNzIE1hdGNoVG9Ob25Qc2V1ZG9F
bGVtZW50IHsKKyAgICAgICAgTWF0Y2hlcywKKyAgICAgICAgRmFpbHMsCisgICAgfTsKKworICAg
IHN0cnVjdCBNYXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRj
aFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudDsKKworICAgICAgICBz
dGF0aWMgTWF0Y2hSZXN1bHQgbWF0Y2hlcyhNYXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRv
Tm9uUHNldWRvRWxlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzLAorICAgICAgICAgICAgICAgIG1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50CisgICAgICAgICAgICB9OworCisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgTWF0Y2hSZXN1bHQgdXBkYXRlKE1hdGNoUmVzdWx0IHJlc3VsdCwgTWF0Y2hUb05v
blBzZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxl
bWVudDo6RmFpbHMpCisgICAgICAgICAgICAgICAgcmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6OkZhaWxzOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBmYWlscyhN
YXRjaCBtYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICBtYXRjaCwKKyAgICAgICAgICAgICAgICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFp
bHMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9OworCiBwdWJsaWM6CiAgICAgZW51
bSBjbGFzcyBNb2RlIDogdW5zaWduZWQgY2hhciB7CiAgICAgICAgIFJlc29sdmluZ1N0eWxlID0g
MCwgQ29sbGVjdGluZ1J1bGVzLCBDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9F
bGVtZW50cywgUXVlcnlpbmdSdWxlcwpAQCAtODMsOCArMTE4LDggQEAgY2xhc3MgU2VsZWN0b3JD
aGVja2VyIHsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25z
dCBDU1NTZWxlY3RvciopOwogCiBwcml2YXRlOgotICAgIE1hdGNoIG1hdGNoUmVjdXJzaXZlbHko
Y29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkJikgY29uc3Q7Ci0gICAg
Ym9vbCBjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJikgY29uc3Q7Cisg
ICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzJiwgUHNldWRvSWRTZXQmKSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lKGNvbnN0IENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYsIE1hdGNoVG9Ob25Qc2V1ZG9F
bGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBtYXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVudCYsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpIGNv
bnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDY4ZjIxYTM2MjQ3OGRhZTdh
NzdmZTE4OWU4ZWY0YWU1OTJhMGNkNTQuLmJmNjgxNzE0YTQzNzBmZDgwODEyM2QzMzhmMzE1ZDhk
ZWIzMjBhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAK
QEAgLTM3Miw3ICszNzIsNyBAQCBlbnVtIGNsYXNzIEZyYWdtZW50c0xldmVsIHsKICAgICBJbkZ1
bmN0aW9uYWxQc2V1ZG9UeXBlID0gMQogfTsKIAotc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1
Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250
ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xl
dmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIFZpc2l0ZWRNb2RlJik7CitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdt
ZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQsIFNl
bGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwsIEZy
YWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwg
VmlzaXRlZE1vZGUmLCBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpOwogCiBzdGF0aWMgdm9p
ZCBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNl
bGVjdG9yRnJhZ21lbnRzLCB1bnNpZ25lZCBsZXZlbCA9IDApOwogCkBAIC00NjIsNyArNDYyLDcg
QEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBl
KGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5u
b3RNYXRjaEFueXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1
ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50
JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2
ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYg
dmlzaXRlZE1vZGUpCitzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5
cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVu
dCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21l
bnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZy
YWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1v
ZGUsIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKIHsKICAgICBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NUeXBlIHR5cGUgPSBzZWxlY3Rvci5wc2V1ZG9DbGFzc1R5cGUoKTsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKQEAgLTYzNiw3ICs2MzYsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlw
ZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwog
ICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2Vs
ZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rv
ckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIFNlbGVjdG9y
RnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAgICAgICAgICBWaXNp
dGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRz
KHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVu
dHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMs
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJz
ZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRN
b2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRv
IGNsYXNzZXMiKTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmdW5jdGlvblR5cGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjoKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQ
c2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAg
ICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3Qt
PmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBz
ZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNp
dGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlw
ZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2Vs
ZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rp
b25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFi
bGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxv
Y2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3Rv
ckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFs
UHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IGlnbm9yZVZpc2l0ZWRNb2RlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVk
IGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAg
ICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIG5vdCBwc2V1ZG8gY2xhc3MgZmlsdGVyLCBDYW5u
b3RNYXRjaEFueXRoaW5nIGltcGxpZXMgdGhpcyBmaWx0ZXIgYWx3YXlzIHBhc3Nlcy4KQEAgLTY5
NSw3ICs2OTUsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5
cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgZm9yIChj
b25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHJvb3RTZWxlY3Rvcjsgcm9vdFNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHJvb3RTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlz
dCBmcmFnbWVudExpc3Q7CiAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRl
ZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUg
c3ViRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0
b3JDb250ZXh0LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1
ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdu
b3JlVmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlv
blR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQs
IGZyYWdtZW50TGlzdCwgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVk
TW9kZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3Jl
VmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBp
biB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8g
U2luY2UgdGhpcyBmcmFnbWVudCBhbHdheXMgdW5tYXRjaCBhZ2FpbnN0IHRoZSBlbGVtZW50LCBk
b24ndCBpbnNlcnQgaXQgdG8gYW55RnJhZ21lbnRzLgpAQCAtNzU0LDcgKzc1NCw3IEBAIHN0YXRp
YyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3Rv
ciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBz
dWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVj
dG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAg
ICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAg
ICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0g
ICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0
RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRz
LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RG
cmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAg
ICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFn
bWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdt
ZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUsIHBzZXVkb0VsZW1l
bnRFZmZlY3RpdmUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3Jl
VmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBp
biB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8g
U2luY2UgdGhpcyBmcmFnbWVudCBuZXZlciBtYXRjaGVzIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRv
bid0IGluc2VydCBpdCB0byBtYXRjaGVzTGlzdC4KQEAgLTc2NCw2ICs3NjQsMTAgQEAgc3RhdGlj
IGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9y
JiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAobG9jYWxGdW5jdGlvblR5cGUg
PT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEN1cnJlbnRseSBwc2V1ZG8gZWxlbWVudHMgaW5zaWRlIDptYXRjaGVzIGFyZSBzdXBwb3J0
ZWQgaW4gbm9uLUpJVCBjb2RlLgorICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvckZyYWdtZW50
cy5maXJzdCgpLnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKKwogICAgICAgICAgICAgICAgIGZ1bmN0
aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGxvY2Fs
RnVuY3Rpb25UeXBlKTsKICAgICAgICAgICAgICAgICBtYXRjaGVzTGlzdC5hcHBlbmQoc2VsZWN0
b3JGcmFnbWVudHMpOwogICAgICAgICAgICAgfQpAQCAtODA0LDcgKzgwOCw3IEBAIGlubGluZSBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjCiAgICAgLy8gSW4gUXVlcnlTZWxlY3RvciBjb250ZXh0LCA6dmlzaXRl
ZCBhbHdheXMgaGFzIG5vIGVmZmVjdCBkdWUgdG8gc2VjdXJpdHkgaXNzdWVzLgogICAgIGJvb2wg
dmlzaXRlZE1hdGNoRW5hYmxlZCA9IHNlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6
OlF1ZXJ5U2VsZWN0b3I7CiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50
cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBG
cmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6Umln
aHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2RlKTsKKyAgICBtX2Z1bmN0
aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250
ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQ
b3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBt
X3Zpc2l0ZWRNb2RlLCB0cnVlKTsKICAgICBpZiAobV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlICYmIG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90TWF0Y2hBbnl0aGluZykKICAgICAgICAgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9u
KG1fc2VsZWN0b3JGcmFnbWVudHMpOwogfQpAQCAtODIwLDcgKzgyNCw3IEBAIHN0YXRpYyBib29s
IGlzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFR5cGUg
dHlwZSkKICAgICByZXR1cm4gdHlwZSA+PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9s
bGJhciAmJiB0eXBlIDw9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyVHJhY2tQ
aWVjZTsKIH0KIAotc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4
dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZl
bCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiB2
aXNpdGVkTW9kZSkKK3N0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0
IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRl
eHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYg
dmlzaXRlZE1vZGUsIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKIHsKICAgICBTZWxlY3Rv
ckZyYWdtZW50IGZyYWdtZW50OwogICAgIEZyYWdtZW50UmVsYXRpb24gcmVsYXRpb25Ub1ByZXZp
b3VzRnJhZ21lbnQgPSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3Q7CkBAIC04NjUsNyArODY5
LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIGlmIChmcmFnbWVudC5w
c2V1ZG9FbGVtZW50U2VsZWN0b3IgJiYgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGZyYWdtZW50
LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpCiAgICAgICAgICAg
ICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9u
VHlwZSwgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVz
dHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNl
bGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQb3Np
dGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRlZE1vZGUpKTsKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBl
LCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0
LCBmcmFnbWVudExldmVsLCBzdWJQb3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRl
ZE1vZGUsIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpKTsKICAgICAgICAgICAgIGlmICghcHNldWRv
Q2xhc3NPbmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlKCpzZWxlY3RvcikpCiAgICAgICAgICAg
ICAgICAgZnJhZ21lbnQub25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUg
fHwgZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAg
LTg4MSw3ICs4ODUsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhj
b25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogCiAgICAgICAgICAgICAv
LyBJbiBTZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxlbWVudCBpbnNpZGUgYSBmdW5jdGlv
bmFsIHBzZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3VlIDcpLgogICAgICAgICAgICAgLy8g
TWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlz
IGNhc2UuCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCA9PSBGcmFnbWVudHNMZXZlbDo6
SW5GdW5jdGlvbmFsUHNldWRvVHlwZSkKKyAgICAgICAgICAgIGlmIChmcmFnbWVudExldmVsID09
IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlICYmICFwc2V1ZG9FbGVtZW50
RWZmZWN0aXZlKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1h
dGNoQW55dGhpbmc7CiAKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0VsZW1l
bnRUeXBlKCkpIHsKQEAgLTk1OCw3ICs5NjIsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0
cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3Rvcgog
ICAgICAgICBmcmFnbWVudC5wb3NpdGlvbkluUm9vdEZyYWdtZW50cyA9IHBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzOwogICAgICAgICByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudCA9IGZyYWdtZW50
LnJlbGF0aW9uVG9MZWZ0RnJhZ21lbnQ7CiAKLSAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0g
RnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgIGlmIChmcmFn
bWVudExldmVsICE9IEZyYWdtZW50c0xldmVsOjpSb290KQogICAgICAgICAgICAgZnJhZ21lbnQu
b25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICBzZWxlY3RvckZy
YWdtZW50cy5hcHBlbmQoZnJhZ21lbnQpOwogICAgICAgICBmcmFnbWVudCA9IFNlbGVjdG9yRnJh
Z21lbnQoKTsKQEAgLTI4NDUsNyArMjg0OSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmCiAg
ICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzKTsKICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJu
VmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7CiB9Ci0gICAgCisKIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0ciB0ZXN0RnVuY3Rpb24pCiB7CiAgICAg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9IG1fcmVnaXN0ZXJBbGxvY2F0
b3IuYWxsb2NhdGVSZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaAppbmRleCA5ODYzOTUwN2Y1NTUyMGU1MGIzZDJmMDc5ZTNjMjRjNGE1YTY4
NDk5Li5iZDAzNTA2MTZiMzNmYmUwMmUyZmFmZWM1YmJiMmZhOGFlODdkYmM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMjM0LDYgKzIzNCwx
MyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsK
ICAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCk7CiAg
ICAgICAgICAgICBtX2ZsYWdzIHw9IG9uZUJpdE1hc2sgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAx
ICsgcHNldWRvKTsKICAgICAgICAgfQorICAgICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlcyhQ
c2V1ZG9JZFNldCBwc2V1ZG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8g
IT0gTk9QU0VVRE8pOworICAgICAgICAgICAgQVNTRVJUKChwc2V1ZG8gJiBQVUJMSUNfUFNFVURP
SURfTUFTSykgPT0gcHNldWRvKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQocHNldWRvQml0
c09mZnNldCA+PSAxLCAiKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSBzaG91bGQgYmUgdmFsaWQuIik7
CisgICAgICAgICAgICBtX2ZsYWdzIHw9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4ocHNldWRvKSA8
PCAocHNldWRvQml0c09mZnNldCAtIDEpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEVUYWJsZUxh
eW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUYWJsZUxheW91
dD4oZ2V0VmFsdWUodGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCkpOyB9CiAg
ICAgICAgIHZvaWQgc2V0VGFibGVMYXlvdXQoRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KSB7IHVw
ZGF0ZVZhbHVlKHRhYmxlTGF5b3V0LCB0YWJsZUxheW91dEJpdE1hc2ssIHRhYmxlTGF5b3V0T2Zm
c2V0KTsgfQpAQCAtNTYxLDYgKzU2OCw3IEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVm
Q291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGJvb2wgaGFzQW55UHVibGljUHNldWRvU3R5bGVz
KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pIGNvbnN0
OwogICAgIHZvaWQgc2V0SGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKTsKKyAgICB2b2lk
IHNldEhhc1BzZXVkb1N0eWxlcyhQc2V1ZG9JZFNldCk7CiAgICAgYm9vbCBoYXNVbmlxdWVQc2V1
ZG9TdHlsZSgpIGNvbnN0OwogCiAgICAgLy8gYXR0cmlidXRlIGdldHRlciBtZXRob2RzCkBAIC0y
MTU1LDYgKzIxNjMsMTEgQEAgaW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0
eWxlKFBzZXVkb0lkIHBzZXVkbykKICAgICBub25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRv
U3R5bGUocHNldWRvKTsKIH0KIAoraW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVk
b1N0eWxlcyhQc2V1ZG9JZFNldCBwc2V1ZG8pCit7CisgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNl
dEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBSZW5kZXJTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCmluZGV4IDJhNGFlZjViZTc0ODBlMjAw
MzYxYjM4MjJhYjA4M2Q3NWMwYTM1OGQuLjY4ODQ5MDE2MmEzOGMwOGQzNTlkYzc0YTQ0OGIxZTIy
MDIzMzUwZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZUNvbnN0YW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZUNvbnN0YW50cy5oCkBAIC04MCw2ICs4MCw4IEBAIGVudW0gUHNldWRvSWQgOiB1
bnNpZ25lZCBjaGFyIHsKICAgICBQVUJMSUNfUFNFVURPSURfTUFTSyA9ICgoMSA8PCBGSVJTVF9J
TlRFUk5BTF9QU0VVRE9JRCkgLSAxKSAmIH4oKDEgPDwgRklSU1RfUFVCTElDX1BTRVVET0lEKSAt
IDEpCiB9OwogCit0eXBlZGVmIHVuc2lnbmVkIFBzZXVkb0lkU2V0OworCiBlbnVtIENvbHVtbkZp
bGwgeyBDb2x1bW5GaWxsQmFsYW5jZSwgQ29sdW1uRmlsbEF1dG8gfTsKIAogZW51bSBDb2x1bW5T
cGFuIHsgQ29sdW1uU3Bhbk5vbmUgPSAwLCBDb2x1bW5TcGFuQWxsIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240817</attachid>
            <date>2014-11-02 10:59:07 -0800</date>
            <delta_ts>2014-11-02 11:47:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141103035916.patch</filename>
            <type>text/plain</type>
            <size>39544</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBkODY4ZmMzYmQ1OTYz
ODZhMGI2MTEwMTc2MzBhOTU3MThmZThhYi4uYmJhMTA2YzRiMjYzODcxNWViMTM1NTI0MmFjZjZl
MTRiOGU2YjBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTExLTAyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXM6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpo
YXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6bWF0Y2hSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hT
ZWxlY3Rvckxpc3QpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6Om1hdGNoZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6dXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAg
ICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Y29uc3RydWN0RnJhZ21l
bnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZXMpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oOgorCiAyMDE0LTEwLTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBFbGltaW5hdGUgUmVzb3VyY2VC
dWZmZXIgYW5kIHVzZSBTaGFyZWRCdWZmZXIgZGlyZWN0bHkgaW5zdGVhZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjMzVkZDZkOTFhZjNmODE2NWM2NGQ1NWFlOWY1
ZDhlOWE1YzI4YmQ5Li45ZGJlMjVjZGE1MTQzNzgwMjdiN2EwYTQ2ZDJiNGU1ZGM1YWRiOWNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNzEsOCArNzEsMTAgQEAg
c3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyA6IHB1Ymxp
YyBTZWxlY3RvckNoZWNrZXI6OkNoZWMKICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHJlc29s
dmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpRdWVyeWluZ1J1bGVzID8gVmlzaXRl
ZE1hdGNoVHlwZTo6RGlzYWJsZWQgOiBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkKQogICAgICAg
ICAsIGZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50KHNlbGVjdG9yKQogICAgICAgICAsIGluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzKGZhbHNlKQorICAgICAgICAsIHBzZXVkb0VsZW1lbnRFZmZlY3Rp
dmUodHJ1ZSkKICAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCiAgICAgICAgICwg
aGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQorICAgICAgICAsIGluUmlnaHRtb3N0KHRydWUpCiAg
ICAgeyB9CiAKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CkBAIC04MCw4ICs4Miwx
MCBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIDog
cHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlYwogICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRl
ZE1hdGNoVHlwZTsKICAgICBjb25zdCBDU1NTZWxlY3RvciogZmlyc3RTZWxlY3Rvck9mVGhlRnJh
Z21lbnQ7CiAgICAgYm9vbCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzczsKKyAgICBib29sIHBzZXVk
b0VsZW1lbnRFZmZlY3RpdmU7CiAgICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG87CiAgICAgYm9v
bCBoYXNTZWxlY3Rpb25Qc2V1ZG87CisgICAgYm9vbCBpblJpZ2h0bW9zdDsKIH07CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0ZpcnN0Q2hpbGRFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CkBAIC0xNzEsMzYgKzE3NSwzMSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZU
eXBlQWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogYm9vbCBTZWxl
Y3RvckNoZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQpIGNvbnN0CiB7
CiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjb250ZXh0KHByb3ZpZGVkQ29udGV4dCwg
c2VsZWN0b3IsIGVsZW1lbnQpOwotICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gTk9QU0VVRE87Ci0g
ICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWQpICE9IFNlbGVjdG9yTWF0
Y2hlcykKKyAgICBQc2V1ZG9JZFNldCBwc2V1ZG9JZFNldCA9IE5PUFNFVURPOworICAgIE1hdGNo
UmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWRTZXQpOwor
ICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5w
c2V1ZG9JZCAhPSBwc2V1ZG9JZCkKKyAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVE
TyAmJiAhKHBzZXVkb0lkU2V0ICYgKDEgPDwgY29udGV4dC5wc2V1ZG9JZCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHQucHNldWRvSWQgPT0gTk9QU0VVRE8gJiYgcHNl
dWRvSWQgIT0gTk9QU0VVRE8pIHsKLSAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVE
T0lEKQotICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxl
KHBzZXVkb0lkKTsKKyAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1
ZG9JZFNldCAhPSBOT1BTRVVETykgeworICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkU2V0ICYgUFVCTElDX1BTRVVET0lE
X01BU0spCisgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5
bGVzKHBzZXVkb0lkU2V0KTsKIAogICAgICAgICAvLyBXaGVuIGlnbm9yaW5nIHZpcnR1YWwgcHNl
dWRvIGVsZW1lbnRzLCB0aGUgY29udGV4dCdzIHBzZXVkbyBzaG91bGQgYWxzbyBiZSBOT1BTRVVE
TyBidXQgdGhhdCBkb2VzCiAgICAgICAgIC8vIG5vdCBjYXVzZSBhIGZhaWx1cmUuCi0gICAgICAg
IHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdu
b3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHM7CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxl
bWVudHMgfHwgcmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID09IE1hdGNoVG9Ob25Qc2V1
ZG9FbGVtZW50OjpNYXRjaGVzOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5l
IHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoUHNldWRvSWQmIGR5bmFtaWNQ
c2V1ZG8pCitpbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25z
dCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0KQogewotICAgIGlmIChkeW5hbWljUHNl
dWRvID09IFNDUk9MTEJBUgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9U
SFVNQgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9CVVRUT04KLSAgICAg
ICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0sKLSAgICAgICAgfHwgZHluYW1p
Y1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UKLSAgICAgICAgfHwgZHluYW1pY1BzZXVk
byA9PSBTQ1JPTExCQVJfQ09STkVSKSB7CisgICAgaWYgKGR5bmFtaWNQc2V1ZG9JZFNldCAmICgo
MSA8PCBTQ1JPTExCQVIpIHwgKDEgPDwgU0NST0xMQkFSX1RIVU1CKSB8ICgxIDw8IFNDUk9MTEJB
Ul9CVVRUT04pIHwgKDEgPDwgU0NST0xMQkFSX1RSQUNLKSB8ICgxIDw8IFNDUk9MTEJBUl9UUkFD
S19QSUVDRSkgfCAoMSA8PCBTQ1JPTExCQVJfQ09STkVSKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KIAogICAgIC8vIFJFU0laRVIgZG9lcyBub3QgYWx3YXlzIGhhdmUgYSBzY3JvbGxi
YXIgYnV0IGl0IGlzIGEgc2Nyb2xsYmFyLWxpa2UgcHNldWRvIGVsZW1lbnQKICAgICAvLyBiZWNh
dXNlIGl0IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcHNldWRvIGVsZW1lbnQuCi0gICAgcmV0dXJu
IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUjsKKyAgICByZXR1cm4gZHluYW1pY1BzZXVkb0lkU2V0
ICYgKDEgPDwgUkVTSVpFUik7CiB9CiAKIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0IFNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkKQEAgLTIxOSwzNCAr
MjE4LDM4IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAvLyAqIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5ICAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBz
aWJsaW5nIG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0gdGhlIHNlbGVjdG9y
IGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCi1TZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykg
Y29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JDaGVja2VyOjptYXRj
aFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBz
ZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpIGNvbnN0CiB7CisgICAgTWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPSBNYXRjaFRvTm9uUHNldWRvRWxl
bWVudDo6TWF0Y2hlczsKKwogICAgIC8vIFRoZSBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gu
Ci0gICAgaWYgKCFjaGVja09uZShjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNMb2NhbGx5OworICAgIGlmICghY2hlY2tPbmUoY29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0
LCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCkpCisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6
ZmFpbHMoU2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgLy8gSW4g
U2VsZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBw
c2V1ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgLy8gTWFrZSBpdCBh
cyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0g
ICAgICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQotICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAvLyBNYWtlIGl0IGFzIG1h
dGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xhcmlmaWVzIHRoaXMgY2FzZSwgZXhjZXB0
IGZvciA6bWF0Y2hlcy4KKyAgICAgICAgLy8gSW4gV2ViS2l0LCB3ZSBzcGVjaWFsbHkgaGFuZGxl
cyBwc2V1ZG8tZWxlbWVudHMgaW4gOm1hdGNoZXMuCisgICAgICAgIGlmIChjb250ZXh0LmluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzICYmICFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpCisg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KTsKIAogICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+aXNDdXN0b21Qc2V1ZG9FbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gY29udGV4dC5lbGVt
ZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQuZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBjb250ZXh0LnNlbGVjdG9yLT52YWx1ZSgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYg
cm9vdC0+dHlwZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xv
Y2FsbHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3Rv
ckZhaWxzTG9jYWxseSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKCFjb250
ZXh0LmVsZW1lbnRTdHlsZSAmJiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2
aW5nU3R5bGUpIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVz
KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsK
IAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQo
Y29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICBpZiAo
cHNldWRvSWQgIT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9IHBz
ZXVkb0lkOworICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldCB8PSAoMSA8PCBwc2V1
ZG9JZCk7CisgICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Q
c2V1ZG9FbGVtZW50OjpGYWlsczsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDQ3ICsyNTks
NDkgQEAgc3RhdGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBj
aGVja2luZ0NvbnRleHRGb3JQYXJlbnQoY29uc3QKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsZWN0
b3IKICAgICBjb25zdCBDU1NTZWxlY3RvciogaGlzdG9yeVNlbGVjdG9yID0gY29udGV4dC5zZWxl
Y3Rvci0+dGFnSGlzdG9yeSgpOwogICAgIGlmICghaGlzdG9yeVNlbGVjdG9yKQotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JNYXRjaGVzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6Om1hdGNo
ZXMobWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhp
c3RvcnlTZWxlY3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAg
ICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhl
IHBzZXVkb0lkCi0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNv
bnRleHQucHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9Q
U0VVRE8gJiYgISgoMSA8PCBjb250ZXh0LnBzZXVkb0lkKSAmIGR5bmFtaWNQc2V1ZG9JZFNldCkp
CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21w
bGV0ZWx5KTsKIAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ug
dHJ5IHRvIG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlm
IChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NT
ZWxlY3Rvcjo6Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBl
ID0gVmlzaXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNl
dWRvSWQgPSBOT1BTRVVETzsKKyAgICAgICAgbmV4dENvbnRleHQuaW5SaWdodG1vc3QgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RGVzY2VuZGFudDoKICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQ
YXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29udGV4dC5l
bGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxs
cHRyOwogICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQgPSBj
aGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpKSB7Ci0gICAgICAgICAgICBNYXRj
aCBtYXRjaCA9IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pOwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBt
YXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9Q
U0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZh
aWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0
ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3Vs
dDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6Q2hpbGQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIG5leHRDb250ZXh0ID0gY2hlY2tpbmdD
b250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlmICghbmV4dENvbnRl
eHQuZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0
Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNl
dCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3Vs
dCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8
IHJlc3VsdC5tYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50KTsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWls
c0FsbFNpYmxpbmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0
QWRqYWNlbnQ6CkBAIC0zMDYsNTYgKzMxMSw1OSBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAog
CiAgICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQt
PnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVt
ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNldEFm
ZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRleHQu
ZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0
U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAg
ICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNo
UmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAg
ICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVk
b0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9y
ZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4
dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29u
dGV4dC5lbGVtZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdt
ZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRT
dHlsZSA9IDA7CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAg
ICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0g
bmV4dENvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQog
ICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxl
bWVudFN0eWxlKCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1
cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxT
aWJsaW5ncyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWlj
UHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRj
aFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9
PSBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRl
KHJlc3VsdCwgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwogICAgICAgICB9OwotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpTdWJTZWxlY3RvcjoKICAgICAgICAgLy8gYSBzZWxlY3RvciBpcyBpbnZhbGlkIGlmIHNv
bWV0aGluZyBmb2xsb3dzIGEgcHNldWRvLWVsZW1lbnQKICAgICAgICAgLy8gV2UgbWFrZSBhbiBl
eGNlcHRpb24gZm9yIHNjcm9sbGJhciBwc2V1ZG8gZWxlbWVudHMgYW5kIGFsbG93IGEgc2V0IG9m
IHBzZXVkbyBjbGFzc2VzIChidXQgbm90aGluZyBlbHNlKQogICAgICAgICAvLyB0byBmb2xsb3cg
dGhlIHBzZXVkbyBlbGVtZW50cy4KLSAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNl
dWRvID0gaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChkeW5hbWljUHNldWRvKTsKLSAgICAgICAg
bmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkbyA9PSBTRUxFQ1RJ
T047Ci0gICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkbyAhPSBOT1BT
RVVETworICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxi
YXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgIG5leHRDb250ZXh0
Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG9JZFNldCAmICgxIDw8IFNFTEVDVElP
Tik7CisgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0ICE9
IE5PUFNFVURPCiAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRv
CiAgICAgICAgICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBuZXh0
Q29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQot
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1
cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsK
KyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGUobWF0Y2hSZWN1cnNpdmVseShuZXh0
Q29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0KSwgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpOwog
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAg
ICAgICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1lbnQtPnNoYWRv
d0hvc3QoKTsKICAgICAgICAgICAgIGlmICghc2hhZG93SG9zdE5vZGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAg
ICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHNoYWRvd0hvc3ROb2RlOwogICAgICAgICAgICAgbmV4
dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3Rv
cjsKLSAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7Ci0gICAgICAgICAg
ICByZXR1cm4gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVk
byk7CisgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOworICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGUobWF0Y2hSZWN1cnNpdmVseShuZXh0
Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIH0KIAogc3RhdGljIGJvb2wgYXR0cmlidXRlVmFs
dWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBDU1NTZWxlY3Rvcjo6TWF0Y2gg
bWF0Y2gsIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0
aXZlKQpAQCAtNDkwLDcgKzQ5OCw3IEBAIHN0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2
ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29uCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQ
c2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0LCBNYXRjaFRvTm9uUHNldWRvRWxlbWVudCYg
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpIGNvbnN0CiB7CiAgICAgRWxlbWVudCogY29uc3QgJiBl
bGVtZW50ID0gY29udGV4dC5lbGVtZW50OwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBjb25zdCAm
IHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKQEAgLTUzMCwxMiArNTM4LDEzIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vi
c2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAg
ICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CiAgICAgICAg
ICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgc3ViY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwogICAgICAg
ICAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7CisgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOwogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQot
ICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
LSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9
PSBTZWxlY3Rvck1hdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5
bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTQ5LDcgKzU1OCw5IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0
KSBjb25zdAogICAgICAgICAgICAgICAgICAgICBpZiAoc3ViY29udGV4dC5zZWxlY3Rvci0+cHNl
dWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YmNvbnRleHQpKQorICAgICAgICAgICAgICAgIC8v
IFNpbmNlIDpub3QgY2Fubm90IGNvbnRhaW4gcHNldWRvIGVsZW1lbnRzLCB0aGVyZSdzIG5vIGVm
ZmVjdCBvbiBtYXRjaGVkVG9Ob25Qc2V1ZG9FbGVtZW50LgorICAgICAgICAgICAgICAgIE1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50IGlnbm9yZU1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hU
b05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09u
ZShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBpZ25vcmVNYXRjaFRvTm9uUHNldWRv
RWxlbWVudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAg
ICAgICAgICB9CkBAIC02NjUsMTYgKzY3NiwzMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NNYXRjaGVzOgotICAgICAgICAgICAgZm9y
IChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJzZWxlY3RvcikpIHsKLSAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4dC5p
bkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4
dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICBQ
c2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAgICAgICAgICAg
aWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0g
U2VsZWN0b3JNYXRjaGVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIGhhc01hdGNoZWRBbnl0aGluZyA9IGZhbHNl
OworICAgICAgICAgICAgICAgIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQ6OkZhaWxzOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJz
ZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3Ip
KSB7CisgICAgICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29u
dGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNl
dWRvRWxlbWVudEVmZmVjdGl2ZSA9IGNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5zZWxlY3RvciA9IHN1YnNlbGVjdG9yOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3Vic2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGxvY2FsRHluYW1p
Y1BzZXVkb0lkU2V0ID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0
IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRv
SWRTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IFNlbGVjdG9y
TWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmluUmlnaHRt
b3N0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwc2V1ZG8gZWxlbWVu
dHMgYXJlIG5vdCBlZmZlY3RpdmUgaW4gdGhpcyBmcmFnbWVudCAoZS5nLiBpdCdzIG5vdCByaWdo
bW9zdCBmcmFnbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBub3Qg
bmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1ZG8gZWxlbWVu
dCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
bWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPT0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNo
ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQg
PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZHluYW1pY1BzZXVkb0lkU2V0IHw9IGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0OworICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzTWF0Y2hlZEFueXRoaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
aGFzTWF0Y2hlZEFueXRoaW5nOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUGxhY2Vob2xkZXJT
aG93bjoKICAgICAgICAgICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVs
ZW1lbnQpKSB7CkBAIC03NzAsMTAgKzc5OCwxMSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1
YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9u
YWxQc2V1ZG9DbGFzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGZvciAoc3ViQ29udGV4
dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4
dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChz
dWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3ViQ29udGV4dC5zZWxlY3RvcjsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1p
Y1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1h
dGNoID09IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkxOCwxMiArOTQ3LDEz
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgUHNldWRvSWQg
aWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAgICBjb25zdCBDU1NTZWxlY3Rv
ciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3Vi
Q29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vi
Q29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJDb250ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJz
dFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAg
ICBzdWJDb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09
IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVm
ZmVjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOworICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViQ29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTk0MCw5ICs5NzAsMTAgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0
b3JMaXN0KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb24KICAgICAgICAg
c3ViY29udGV4dC5lbGVtZW50ID0gJmVsZW1lbnQ7CiAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0
b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9D
bGFzcyA9IHRydWU7CisgICAgICAgIHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9
IGZhbHNlOwogICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
c3Vic2VsZWN0b3I7Ci0gICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKLSAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHlu
YW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKSB7CisgICAgICAgIFBzZXVkb0lkU2V0IGln
bm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZl
bHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRj
aGVzKSB7CiAgICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVE
Tyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oCmluZGV4IDgwNzc3MTc0NDVlYTM2ODU3NDY0OWMxNDUxMzNkODc3YzM2
N2EyNmMuLjRjY2M4YWI3OGZmY2Y2MmJmYmVlYjkwMDUwYjJiNTUzMDllYjhlZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTQ1LDYgKzQ1LDQxIEBAIGNsYXNzIFNlbGVj
dG9yQ2hlY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VsZWN0b3JDaGVja2VyKTsK
ICAgICBlbnVtIE1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwg
U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBTZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OwogCisg
ICAgLy8gV2hldGhlciB0aGUgc3VjY2VlZGVkIG1hdGNoaW5nIHJlc3VsdCBpcyBlZmZlY3RpdmUg
b24gbm9uLXBzZXVkby1lbGVtZW50cy4KKyAgICBlbnVtIGNsYXNzIE1hdGNoVG9Ob25Qc2V1ZG9F
bGVtZW50IHsKKyAgICAgICAgTWF0Y2hlcywKKyAgICAgICAgRmFpbHMsCisgICAgfTsKKworICAg
IHN0cnVjdCBNYXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRj
aFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudDsKKworICAgICAgICBz
dGF0aWMgTWF0Y2hSZXN1bHQgbWF0Y2hlcyhNYXRjaFRvTm9uUHNldWRvRWxlbWVudCBtYXRjaFRv
Tm9uUHNldWRvRWxlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzLAorICAgICAgICAgICAgICAgIG1hdGNo
VG9Ob25Qc2V1ZG9FbGVtZW50CisgICAgICAgICAgICB9OworCisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgTWF0Y2hSZXN1bHQgdXBkYXRlKE1hdGNoUmVzdWx0IHJlc3VsdCwgTWF0Y2hUb05v
blBzZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9PSBNYXRjaFRvTm9uUHNldWRvRWxl
bWVudDo6RmFpbHMpCisgICAgICAgICAgICAgICAgcmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6OkZhaWxzOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBmYWlscyhN
YXRjaCBtYXRjaCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICBtYXRjaCwKKyAgICAgICAgICAgICAgICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFp
bHMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9OworCiBwdWJsaWM6CiAgICAgZW51
bSBjbGFzcyBNb2RlIDogdW5zaWduZWQgY2hhciB7CiAgICAgICAgIFJlc29sdmluZ1N0eWxlID0g
MCwgQ29sbGVjdGluZ1J1bGVzLCBDb2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9F
bGVtZW50cywgUXVlcnlpbmdSdWxlcwpAQCAtODMsOCArMTE4LDggQEAgY2xhc3MgU2VsZWN0b3JD
aGVja2VyIHsKICAgICBzdGF0aWMgdW5zaWduZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25z
dCBDU1NTZWxlY3RvciopOwogCiBwcml2YXRlOgotICAgIE1hdGNoIG1hdGNoUmVjdXJzaXZlbHko
Y29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkJikgY29uc3Q7Ci0gICAg
Ym9vbCBjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJikgY29uc3Q7Cisg
ICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzJiwgUHNldWRvSWRTZXQmKSBjb25zdDsKKyAgICBib29sIGNoZWNrT25lKGNvbnN0IENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYsIE1hdGNoVG9Ob25Qc2V1ZG9F
bGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBtYXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVudCYsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpIGNv
bnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDY4ZjIxYTM2MjQ3OGRhZTdh
NzdmZTE4OWU4ZWY0YWU1OTJhMGNkNTQuLmJmNjgxNzE0YTQzNzBmZDgwODEyM2QzMzhmMzE1ZDhk
ZWIzMjBhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAK
QEAgLTM3Miw3ICszNzIsNyBAQCBlbnVtIGNsYXNzIEZyYWdtZW50c0xldmVsIHsKICAgICBJbkZ1
bmN0aW9uYWxQc2V1ZG9UeXBlID0gMQogfTsKIAotc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1
Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250
ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xl
dmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIFZpc2l0ZWRNb2RlJik7CitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdt
ZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQsIFNl
bGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwsIEZy
YWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwg
VmlzaXRlZE1vZGUmLCBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpOwogCiBzdGF0aWMgdm9p
ZCBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNl
bGVjdG9yRnJhZ21lbnRzLCB1bnNpZ25lZCBsZXZlbCA9IDApOwogCkBAIC00NjIsNyArNDYyLDcg
QEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBl
KGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5u
b3RNYXRjaEFueXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1
ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50
JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2
ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYg
dmlzaXRlZE1vZGUpCitzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5
cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVu
dCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21l
bnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZy
YWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1v
ZGUsIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKIHsKICAgICBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NUeXBlIHR5cGUgPSBzZWxlY3Rvci5wc2V1ZG9DbGFzc1R5cGUoKTsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKQEAgLTYzNiw3ICs2MzYsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlw
ZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwog
ICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2Vs
ZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rv
ckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIFNlbGVjdG9y
RnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAgICAgICAgICBWaXNp
dGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRz
KHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVu
dHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMs
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJz
ZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRN
b2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRv
IGNsYXNzZXMiKTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmdW5jdGlvblR5cGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcjoKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQ
c2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAg
ICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3Qt
PmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBz
ZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNp
dGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlw
ZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2Vs
ZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rp
b25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFi
bGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxv
Y2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3Rv
ckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFs
UHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IGlnbm9yZVZpc2l0ZWRNb2RlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVk
IGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAg
ICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIG5vdCBwc2V1ZG8gY2xhc3MgZmlsdGVyLCBDYW5u
b3RNYXRjaEFueXRoaW5nIGltcGxpZXMgdGhpcyBmaWx0ZXIgYWx3YXlzIHBhc3Nlcy4KQEAgLTY5
NSw3ICs2OTUsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5
cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgZm9yIChj
b25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHJvb3RTZWxlY3Rvcjsgcm9vdFNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHJvb3RTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlz
dCBmcmFnbWVudExpc3Q7CiAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRl
ZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUg
c3ViRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0
b3JDb250ZXh0LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1
ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdu
b3JlVmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlv
blR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQs
IGZyYWdtZW50TGlzdCwgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBv
c2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVk
TW9kZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3Jl
VmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBp
biB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8g
U2luY2UgdGhpcyBmcmFnbWVudCBhbHdheXMgdW5tYXRjaCBhZ2FpbnN0IHRoZSBlbGVtZW50LCBk
b24ndCBpbnNlcnQgaXQgdG8gYW55RnJhZ21lbnRzLgpAQCAtNzU0LDcgKzc1NCw3IEBAIHN0YXRp
YyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3Rv
ciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBz
dWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVj
dG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAg
ICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAg
ICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0g
ICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0
RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRz
LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RG
cmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAg
ICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFn
bWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdt
ZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUsIHBzZXVkb0VsZW1l
bnRFZmZlY3RpdmUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3Jl
VmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBp
biB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8g
U2luY2UgdGhpcyBmcmFnbWVudCBuZXZlciBtYXRjaGVzIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRv
bid0IGluc2VydCBpdCB0byBtYXRjaGVzTGlzdC4KQEAgLTc2NCw2ICs3NjQsMTAgQEAgc3RhdGlj
IGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9y
JiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAobG9jYWxGdW5jdGlvblR5cGUg
PT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEN1cnJlbnRseSBwc2V1ZG8gZWxlbWVudHMgaW5zaWRlIDptYXRjaGVzIGFyZSBzdXBwb3J0
ZWQgaW4gbm9uLUpJVCBjb2RlLgorICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvckZyYWdtZW50
cy5maXJzdCgpLnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKKwogICAgICAgICAgICAgICAgIGZ1bmN0
aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGxvY2Fs
RnVuY3Rpb25UeXBlKTsKICAgICAgICAgICAgICAgICBtYXRjaGVzTGlzdC5hcHBlbmQoc2VsZWN0
b3JGcmFnbWVudHMpOwogICAgICAgICAgICAgfQpAQCAtODA0LDcgKzgwOCw3IEBAIGlubGluZSBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjCiAgICAgLy8gSW4gUXVlcnlTZWxlY3RvciBjb250ZXh0LCA6dmlzaXRl
ZCBhbHdheXMgaGFzIG5vIGVmZmVjdCBkdWUgdG8gc2VjdXJpdHkgaXNzdWVzLgogICAgIGJvb2wg
dmlzaXRlZE1hdGNoRW5hYmxlZCA9IHNlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6
OlF1ZXJ5U2VsZWN0b3I7CiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50
cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBG
cmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6Umln
aHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2RlKTsKKyAgICBtX2Z1bmN0
aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250
ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQ
b3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBt
X3Zpc2l0ZWRNb2RlLCB0cnVlKTsKICAgICBpZiAobV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlICYmIG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90TWF0Y2hBbnl0aGluZykKICAgICAgICAgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9u
KG1fc2VsZWN0b3JGcmFnbWVudHMpOwogfQpAQCAtODIwLDcgKzgyNCw3IEBAIHN0YXRpYyBib29s
IGlzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFR5cGUg
dHlwZSkKICAgICByZXR1cm4gdHlwZSA+PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9s
bGJhciAmJiB0eXBlIDw9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyVHJhY2tQ
aWVjZTsKIH0KIAotc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4
dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZl
bCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiB2
aXNpdGVkTW9kZSkKK3N0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0
IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRl
eHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYg
dmlzaXRlZE1vZGUsIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKIHsKICAgICBTZWxlY3Rv
ckZyYWdtZW50IGZyYWdtZW50OwogICAgIEZyYWdtZW50UmVsYXRpb24gcmVsYXRpb25Ub1ByZXZp
b3VzRnJhZ21lbnQgPSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3Q7CkBAIC04NjUsNyArODY5
LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIGlmIChmcmFnbWVudC5w
c2V1ZG9FbGVtZW50U2VsZWN0b3IgJiYgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGZyYWdtZW50
LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpCiAgICAgICAgICAg
ICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9u
VHlwZSwgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVz
dHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNl
bGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQb3Np
dGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRlZE1vZGUpKTsKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBl
LCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0
LCBmcmFnbWVudExldmVsLCBzdWJQb3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRl
ZE1vZGUsIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpKTsKICAgICAgICAgICAgIGlmICghcHNldWRv
Q2xhc3NPbmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlKCpzZWxlY3RvcikpCiAgICAgICAgICAg
ICAgICAgZnJhZ21lbnQub25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUg
fHwgZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZykKQEAg
LTg4MSw3ICs4ODUsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhj
b25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogCiAgICAgICAgICAgICAv
LyBJbiBTZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxlbWVudCBpbnNpZGUgYSBmdW5jdGlv
bmFsIHBzZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3VlIDcpLgogICAgICAgICAgICAgLy8g
TWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlz
IGNhc2UuCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCA9PSBGcmFnbWVudHNMZXZlbDo6
SW5GdW5jdGlvbmFsUHNldWRvVHlwZSkKKyAgICAgICAgICAgIGlmIChmcmFnbWVudExldmVsID09
IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlICYmICFwc2V1ZG9FbGVtZW50
RWZmZWN0aXZlKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1h
dGNoQW55dGhpbmc7CiAKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0VsZW1l
bnRUeXBlKCkpIHsKQEAgLTk1OCw3ICs5NjIsNyBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0
cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3Rvcgog
ICAgICAgICBmcmFnbWVudC5wb3NpdGlvbkluUm9vdEZyYWdtZW50cyA9IHBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzOwogICAgICAgICByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudCA9IGZyYWdtZW50
LnJlbGF0aW9uVG9MZWZ0RnJhZ21lbnQ7CiAKLSAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0g
RnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgIGlmIChmcmFn
bWVudExldmVsICE9IEZyYWdtZW50c0xldmVsOjpSb290KQogICAgICAgICAgICAgZnJhZ21lbnQu
b25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSA9IGZhbHNlOwogICAgICAgICBzZWxlY3RvckZy
YWdtZW50cy5hcHBlbmQoZnJhZ21lbnQpOwogICAgICAgICBmcmFnbWVudCA9IFNlbGVjdG9yRnJh
Z21lbnQoKTsKQEAgLTI4NDUsNyArMjg0OSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZUVsZW1lbnRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExpc3QmCiAg
ICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzKTsKICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJu
VmFsdWUoQXNzZW1ibGVyOjpaZXJvKSk7CiB9Ci0gICAgCisKIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUNvbnRleHRGdW5jdGlvbkNhbGxUZXN0KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgSlNDOjpGdW5jdGlvblB0ciB0ZXN0RnVuY3Rpb24pCiB7CiAgICAg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9IG1fcmVnaXN0ZXJBbGxvY2F0
b3IuYWxsb2NhdGVSZWdpc3RlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaAppbmRleCA5ODYzOTUwN2Y1NTUyMGU1MGIzZDJmMDc5ZTNjMjRjNGE1YTY4
NDk5Li5iZDAzNTA2MTZiMzNmYmUwMmUyZmFmZWM1YmJiMmZhOGFlODdkYmM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMjM0LDYgKzIzNCwx
MyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsK
ICAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCk7CiAg
ICAgICAgICAgICBtX2ZsYWdzIHw9IG9uZUJpdE1hc2sgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAx
ICsgcHNldWRvKTsKICAgICAgICAgfQorICAgICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlcyhQ
c2V1ZG9JZFNldCBwc2V1ZG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8g
IT0gTk9QU0VVRE8pOworICAgICAgICAgICAgQVNTRVJUKChwc2V1ZG8gJiBQVUJMSUNfUFNFVURP
SURfTUFTSykgPT0gcHNldWRvKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQocHNldWRvQml0
c09mZnNldCA+PSAxLCAiKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSBzaG91bGQgYmUgdmFsaWQuIik7
CisgICAgICAgICAgICBtX2ZsYWdzIHw9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4ocHNldWRvKSA8
PCAocHNldWRvQml0c09mZnNldCAtIDEpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEVUYWJsZUxh
eW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUYWJsZUxheW91
dD4oZ2V0VmFsdWUodGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCkpOyB9CiAg
ICAgICAgIHZvaWQgc2V0VGFibGVMYXlvdXQoRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KSB7IHVw
ZGF0ZVZhbHVlKHRhYmxlTGF5b3V0LCB0YWJsZUxheW91dEJpdE1hc2ssIHRhYmxlTGF5b3V0T2Zm
c2V0KTsgfQpAQCAtNTYxLDYgKzU2OCw3IEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVm
Q291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGJvb2wgaGFzQW55UHVibGljUHNldWRvU3R5bGVz
KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pIGNvbnN0
OwogICAgIHZvaWQgc2V0SGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKTsKKyAgICB2b2lk
IHNldEhhc1BzZXVkb1N0eWxlcyhQc2V1ZG9JZFNldCk7CiAgICAgYm9vbCBoYXNVbmlxdWVQc2V1
ZG9TdHlsZSgpIGNvbnN0OwogCiAgICAgLy8gYXR0cmlidXRlIGdldHRlciBtZXRob2RzCkBAIC0y
MTU1LDYgKzIxNjMsMTEgQEAgaW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0
eWxlKFBzZXVkb0lkIHBzZXVkbykKICAgICBub25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRv
U3R5bGUocHNldWRvKTsKIH0KIAoraW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVk
b1N0eWxlcyhQc2V1ZG9JZFNldCBwc2V1ZG8pCit7CisgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNl
dEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBSZW5kZXJTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCmluZGV4IDJhNGFlZjViZTc0ODBlMjAw
MzYxYjM4MjJhYjA4M2Q3NWMwYTM1OGQuLjY4ODQ5MDE2MmEzOGMwOGQzNTlkYzc0YTQ0OGIxZTIy
MDIzMzUwZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZUNvbnN0YW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZUNvbnN0YW50cy5oCkBAIC04MCw2ICs4MCw4IEBAIGVudW0gUHNldWRvSWQgOiB1
bnNpZ25lZCBjaGFyIHsKICAgICBQVUJMSUNfUFNFVURPSURfTUFTSyA9ICgoMSA8PCBGSVJTVF9J
TlRFUk5BTF9QU0VVRE9JRCkgLSAxKSAmIH4oKDEgPDwgRklSU1RfUFVCTElDX1BTRVVET0lEKSAt
IDEpCiB9OwogCit0eXBlZGVmIHVuc2lnbmVkIFBzZXVkb0lkU2V0OworCiBlbnVtIENvbHVtbkZp
bGwgeyBDb2x1bW5GaWxsQmFsYW5jZSwgQ29sdW1uRmlsbEF1dG8gfTsKIAogZW51bSBDb2x1bW5T
cGFuIHsgQ29sdW1uU3Bhbk5vbmUgPSAwLCBDb2x1bW5TcGFuQWxsIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240819</attachid>
            <date>2014-11-02 11:47:25 -0800</date>
            <delta_ts>2014-11-07 01:53:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141103044734.patch</filename>
            <type>text/plain</type>
            <size>45433</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBkODY4ZmMzYmQ1OTYz
ODZhMGI2MTEwMTc2MzBhOTU3MThmZThhYi4uNmY1ZWRjM2I2MWY2MDY2NzM3Mjc4ZjVjMGQ3ZTAz
MWRiMjMxNDg5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE0LTExLTAyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzOjpDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVj
a2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojpt
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQ6
OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0
OjpmYWlscyk6CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6YWRkUHNldWRvQ2xhc3NUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6U2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OmNvbnN0cnVjdEZyYWdtZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKwog
MjAxNC0xMC0zMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRWxp
bWluYXRlIFJlc291cmNlQnVmZmVyIGFuZCB1c2UgU2hhcmVkQnVmZmVyIGRpcmVjdGx5IGluc3Rl
YWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggYzM1ZGQ2ZDkxYWYz
ZjgxNjVjNjRkNTVhZTlmNWQ4ZTlhNWMyOGJkOS4uOWRiZTI1Y2RhNTE0Mzc4MDI3YjdhMGE0NmQy
YjRlNWRjNWFkYjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAg
LTcxLDggKzcxLDEwIEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdp
dGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwgdmlzaXRl
ZE1hdGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlp
bmdSdWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6
RW5hYmxlZCkKICAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikK
ICAgICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgLCBwc2V1
ZG9FbGVtZW50RWZmZWN0aXZlKHRydWUpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZh
bHNlKQogICAgICAgICAsIGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKKyAgICAgICAgLCBpblJp
Z2h0bW9zdCh0cnVlKQogICAgIHsgfQogCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
OwpAQCAtODAsOCArODIsMTAgQEAgc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250
ZXh0V2l0aFN0YXR1cyA6IHB1YmxpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWMKICAgICBWaXNpdGVk
TWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGZpcnN0
U2VsZWN0b3JPZlRoZUZyYWdtZW50OwogICAgIGJvb2wgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3M7
CisgICAgYm9vbCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlOwogICAgIGJvb2wgaGFzU2Nyb2xsYmFy
UHNldWRvOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOworICAgIGJvb2wgaW5SaWdodG1v
c3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChjb25zdCBF
bGVtZW50KiBlbGVtZW50KQpAQCAtMTcxLDM2ICsxNzUsMzEgQEAgc3RhdGljIGlubGluZSBpbnQg
Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1
YWxpZmkKIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaChjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENoZWNraW5nQ29udGV4dCYgcHJvdmlkZWRD
b250ZXh0KSBjb25zdAogewogICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY29udGV4dChw
cm92aWRlZENvbnRleHQsIHNlbGVjdG9yLCBlbGVtZW50KTsKLSAgICBQc2V1ZG9JZCBwc2V1ZG9J
ZCA9IE5PUFNFVURPOwotICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lk
KSAhPSBTZWxlY3Rvck1hdGNoZXMpCisgICAgUHNldWRvSWRTZXQgcHNldWRvSWRTZXQgPSBOT1BT
RVVETzsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnRleHQs
IHBzZXVkb0lkU2V0KTsKKyAgICBpZiAocmVzdWx0Lm1hdGNoICE9IFNlbGVjdG9yTWF0Y2hlcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNF
VURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRvSWQpCisgICAgaWYgKGNvbnRleHQucHNl
dWRvSWQgIT0gTk9QU0VVRE8gJiYgIShwc2V1ZG9JZFNldCAmICgxIDw8IGNvbnRleHQucHNldWRv
SWQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkID09
IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURPKSB7Ci0gICAgICAgIGlmIChjb250ZXh0
LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHNldWRvSWQgPCBGSVJT
VF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxlLT5z
ZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgaWYgKGNvbnRleHQucHNldWRvSWQgPT0g
Tk9QU0VVRE8gJiYgcHNldWRvSWRTZXQgIT0gTk9QU0VVRE8pIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSAmJiBwc2V1ZG9JZFNldCAm
IFBVQkxJQ19QU0VVRE9JRF9NQVNLKQorICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUt
PnNldEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7CiAKICAgICAgICAgLy8gV2hlbiBpZ25v
cmluZyB2aXJ0dWFsIHBzZXVkbyBlbGVtZW50cywgdGhlIGNvbnRleHQncyBwc2V1ZG8gc2hvdWxk
IGFsc28gYmUgTk9QU0VVRE8gYnV0IHRoYXQgZG9lcwogICAgICAgICAvLyBub3QgY2F1c2UgYSBm
YWlsdXJlLgotICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNv
bGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzOworICAgICAgICByZXR1
cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5n
VmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5tYXRjaFRvTm9uUHNldWRvRWxlbWVudCA9
PSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6TWF0Y2hlczsKICAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvKQoraW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBz
ZXVkb0VsZW1lbnQoY29uc3QgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCkKIHsKLSAg
ICBpZiAoZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVIKLSAgICAgICAgfHwgZHluYW1pY1BzZXVk
byA9PSBTQ1JPTExCQVJfVEhVTUIKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExC
QVJfQlVUVE9OCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX1RSQUNLCi0g
ICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX1RSQUNLX1BJRUNFCi0gICAgICAg
IHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUikgeworICAgIGlmIChkeW5hbWlj
UHNldWRvSWRTZXQgJiAoKDEgPDwgU0NST0xMQkFSKSB8ICgxIDw8IFNDUk9MTEJBUl9USFVNQikg
fCAoMSA8PCBTQ1JPTExCQVJfQlVUVE9OKSB8ICgxIDw8IFNDUk9MTEJBUl9UUkFDSykgfCAoMSA8
PCBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UpIHwgKDEgPDwgU0NST0xMQkFSX0NPUk5FUikpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAvLyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5
cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNjcm9sbGJhci1saWtlIHBzZXVkbyBlbGVt
ZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBzZXVkbyBlbGVt
ZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09IFJFU0laRVI7CisgICAgcmV0dXJuIGR5
bmFtaWNQc2V1ZG9JZFNldCAmICgxIDw8IFJFU0laRVIpOwogfQogCiBzdGF0aWMgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVu
dChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRl
eHQpCkBAIC0yMTksMzQgKzIxOCwzOCBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogLy8gKiBT
ZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVt
ZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Ig
b2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJz
aXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWQm
IGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVj
dG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0KSBjb25zdAogewor
ICAgIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID0gTWF0
Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisKICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0
b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hlY2tPbmUoY29udGV4dCkpCi0gICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICBpZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5
bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpKQorICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgIGlmIChj
b250ZXh0LnNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7
CiAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0LCBhIHBzZXVkbyBlbGVtZW50IGluc2lk
ZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVuZGVmaW5lZCAoaXNzdWUgNykuCi0gICAg
ICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcgZmFpbHVyZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZp
ZXMgdGhpcyBjYXNlLgotICAgICAgICBpZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFz
cykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAg
Ly8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0
aGlzIGNhc2UsIGV4Y2VwdCBmb3IgOm1hdGNoZXMuCisgICAgICAgIC8vIEluIFdlYktpdCwgd2Ug
c3BlY2lhbGx5IGhhbmRsZXMgcHNldWRvLWVsZW1lbnRzIGluIDptYXRjaGVzLgorICAgICAgICBp
ZiAoY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyAmJiAhY29udGV4dC5wc2V1ZG9FbGVt
ZW50RWZmZWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxl
Y3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPmlz
Q3VzdG9tUHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9v
dCA9IGNvbnRleHQuZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gY29udGV4dC5z
ZWxlY3Rvci0+dmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNMb2NhbGx5OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxz
KFNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnNl
bGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50
V2ViS2l0Q3VzdG9tICYmIHJvb3QtPnR5cGUoKSAhPSBTaGFkb3dSb290OjpVc2VyQWdlbnRTaGFk
b3dSb290KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoU2VsZWN0b3JG
YWlsc0xvY2FsbHkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3Vs
dDo6ZmFpbHMoU2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCghY29udGV4dC5lbGVtZW50U3R5bGUgJiYgY29udGV4dC5yZXNvbHZpbmdNb2Rl
ID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6UXVlcnlpbmdSdWxlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xv
Y2FsbHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3Rv
ckZhaWxzTG9jYWxseSk7CiAKICAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2Vs
ZWN0b3I6OnBzZXVkb0lkKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwog
ICAgICAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQotICAgICAgICAgICAgICAgIGR5
bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKKyAgICAgICAgICAgICAgICBkeW5hbWljUHNldWRvSWRT
ZXQgfD0gKDEgPDwgcHNldWRvSWQpOworICAgICAgICAgICAgbWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQgPSBNYXRjaFRvTm9uUHNldWRvRWxlbWVudDo6RmFpbHM7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTI1Niw0NyArMjU5LDQ5IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAgICAgLy8gUHJl
cGFyZSBuZXh0IHNlbGVjdG9yCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGhpc3RvcnlTZWxlY3Rv
ciA9IGNvbnRleHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKICAgICBpZiAoIWhpc3RvcnlTZWxl
Y3RvcikKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0OjptYXRjaGVzKG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKIAogICAgIENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMgbmV4dENvbnRleHQoY29udGV4dCk7CiAgICAgbmV4dENvbnRl
eHQuc2VsZWN0b3IgPSBoaXN0b3J5U2VsZWN0b3I7CiAKLSAgICBQc2V1ZG9JZCBpZ25vcmVEeW5h
bWljUHNldWRvID0gTk9QU0VVRE87CiAgICAgaWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpT
dWJTZWxlY3RvcikgewogICAgICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGly
cmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9JZAotICAgICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAh
PSBOT1BTRVVETyAmJiBjb250ZXh0LnBzZXVkb0lkICE9IGR5bmFtaWNQc2V1ZG8pCi0gICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgICAgIGlmIChjb250ZXh0
LnBzZXVkb0lkICE9IE5PUFNFVURPICYmICEoKDEgPDwgY29udGV4dC5wc2V1ZG9JZCkgJiBkeW5h
bWljUHNldWRvSWRTZXQpKQorICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBt
YXRjaGluZyB3aGVuIHdlIHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0
b3JzLgogICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYg
cmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKQogICAgICAgICAgICAgbmV4dENvbnRleHQu
dmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogCiAgICAgICAg
IG5leHRDb250ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87CisgICAgICAgIG5leHRDb250ZXh0Lmlu
UmlnaHRtb3N0ID0gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxhdGlvbikgewogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CiAgICAgICAgIG5leHRDb250ZXh0ID0gY2hl
Y2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgbmV4dENvbnRleHQu
Zmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3RvcjsKLSAgICAg
ICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgbmV4dENvbnRleHQuZWxl
bWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgZm9yICg7IG5leHRDb250ZXh0LmVsZW1lbnQ7
IG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KSkgewot
ICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmIChtYXRjaCA9PSBTZWxl
Y3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0g
bWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAg
ICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0
Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0Ojp1cGRhdGUocmVzdWx0LCBtYXRjaFRvTm9uUHNldWRvRWxlbWVudCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIAogICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7CiAgICAgICAgICAgICBuZXh0Q29u
dGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAgICAgICAg
ICBpZiAoIW5leHRDb250ZXh0LmVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6
ZmFpbHMoU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAgICAgbmV4dENvbnRleHQu
Zmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3RvcjsKICAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBN
YXRjaCBtYXRjaCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pOwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRj
aCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2g7Ci0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAg
ICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAg
ICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IFNl
bGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGUocmVzdWx0LCBtYXRj
aFRvTm9uUHNldWRvRWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZh
aWxzKFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAgICAgICAgIH0KIAogICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgpAQCAtMzA2LDU2ICszMTEsNTkgQEAgc3RhdGljIFNl
bGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBjaGVja2luZ0NvbnRleHRG
b3JQYXJlbnQoY29uc3QKIAogICAgICAgICAgICAgRWxlbWVudCogcHJldmlvdXNFbGVtZW50ID0g
Y29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgICAgICBp
ZiAoIXByZXZpb3VzRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWls
c0FsbFNpYmxpbmdzOworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgcHJldmlv
dXNFbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKICAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBwcmV2aW91c0VsZW1lbnQ7CiAgICAgICAgICAgICBu
ZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAg
ICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvKTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Cisg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZShtYXRjaFJlY3Vyc2l2ZWx5KG5l
eHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSwgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQp
OwogICAgICAgICB9CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKICAg
ICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkK
ICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91
c1NpYmxpbmcoKTsKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNl
bGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSBudWxscHRyOwogICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENv
bnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxp
bmcoKSkgewogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpS
ZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldEFmZmVj
dHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogCi0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9
IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
OwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBT
ZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRT
ZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICAgICAgTWF0Y2hSZXN1
bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1Bz
ZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8
fCByZXN1bHQubWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIHx8IHJlc3VsdC5tYXRj
aCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0
Y2hSZXN1bHQ6OnVwZGF0ZShyZXN1bHQsIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KTsKICAgICAg
ICAgfTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQWxsU2libGluZ3MpOwogCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6CiAgICAgICAgIC8vIGEgc2VsZWN0b3Ig
aXMgaW52YWxpZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAg
IC8vIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFu
ZCBhbGxvdyBhIHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAg
ICAgLy8gdG8gZm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIG5leHRDb250ZXh0
Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1Bz
ZXVkbyk7Ci0gICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQ
c2V1ZG8gPT0gU0VMRUNUSU9OOwotICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8
IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFt
aWNQc2V1ZG8gIT0gTk9QU0VVRE8KKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNl
dWRvID0gaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChkeW5hbWljUHNldWRvSWRTZXQpOworICAg
ICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvSWRTZXQg
JiAoMSA8PCBTRUxFQ1RJT04pOworICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8
IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFt
aWNQc2V1ZG9JZFNldCAhPSBOT1BTRVVETwogICAgICAgICAgICAgJiYgIW5leHRDb250ZXh0Lmhh
c1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5oYXNTY3JvbGxi
YXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzKSkKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eTsKLSAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFtaWNQ
c2V1ZG8pOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNo
UmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCksIG1hdGNoVG9Ob25Q
c2V1ZG9FbGVtZW50KTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6
CiAgICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0gY29udGV4
dC5lbGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3ROb2Rl
KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsK
ICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUg
PSAwOwotICAgICAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGln
bm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxl
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8g
PSBOT1BTRVVETzsKKyAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlKG1hdGNo
UmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFRvTm9u
UHNldWRvRWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1h
dGNoUmVzdWx0OjpmYWlscyhTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiB9CiAKIHN0YXRpYyBi
b29sIGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgQ1NT
U2VsZWN0b3I6Ok1hdGNoIG1hdGNoLCBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yVmFsdWUs
IGJvb2wgY2FzZVNlbnNpdGl2ZSkKQEAgLTQ5MCw3ICs0OTgsNyBAQCBzdGF0aWMgYm9vbCBjYW5N
YXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0Citi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYgY29udGV4dCwgUHNldWRvSWRTZXQmIGR5bmFtaWNQc2V1ZG9JZFNldCwgTWF0Y2hUb05v
blBzZXVkb0VsZW1lbnQmIG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KSBjb25zdAogewogICAgIEVs
ZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBjb25zdCBDU1NT
ZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CkBAIC01MzAsMTIg
KzUzOCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIGZvciAoY29uc3Qg
Q1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxl
Y3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7
CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNv
bnRleHQpOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xh
c3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVj
dGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJz
ZWxlY3RvcjsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZy
YWdtZW50ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOworICAgICAgICAgICAgICAgIFBzZXVkb0lk
U2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAogI2lmIEVOQUJMRShDU1NfU0VM
RUNUT1JTX0xFVkVMNCkKLSAgICAgICAgICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNl
dWRvID0gTk9QU0VVRE87Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3Vi
Y29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0b3JNYXRjaGVzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1p
Y1BzZXVkbykubWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpZ25vcmVEeW5hbWljUHNldWRvID09IE5PUFNFVURPKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KQEAgLTU0OSw3ICs1NTgsOSBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmNvbnRl
eHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJjb250ZXh0KSkKKyAg
ICAgICAgICAgICAgICAvLyBTaW5jZSA6bm90IGNhbm5vdCBjb250YWluIHBzZXVkbyBlbGVtZW50
cywgdGhlcmUncyBubyBlZmZlY3Qgb24gbWF0Y2hlZFRvTm9uUHNldWRvRWxlbWVudC4KKyAgICAg
ICAgICAgICAgICBNYXRjaFRvTm9uUHNldWRvRWxlbWVudCBpZ25vcmVNYXRjaFRvTm9uUHNldWRv
RWxlbWVudCA9IE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50OjpNYXRjaGVzOworICAgICAgICAgICAg
ICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbywgaWdub3Jl
TWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgogICAgICAgICAgICAgfQpAQCAtNjY1LDE2ICs2NzYsMzMgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNv
bnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9S
U19MRVZFTDQpCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoK
LSAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0
b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBD
U1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOwotICAgICAgICAgICAg
ICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKLSAgICAgICAgICAgICAg
ICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwot
ICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5
bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBoYXNNYXRjaGVk
QW55dGhpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVu
dCA9IE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50OjpGYWlsczsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3Qo
KS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHN1YnNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIHN1YmNv
bnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBjb250ZXh0LnBzZXVkb0VsZW1l
bnRFZmZlY3RpdmU7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBz
dWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9y
T2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICBQc2V1ZG9J
ZFNldCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCA9IE5PUFNFVURPOworICAgICAgICAgICAgICAg
ICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGxv
Y2FsRHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5t
YXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC5pblJpZ2h0bW9zdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdo
ZW4gcHNldWRvIGVsZW1lbnRzIGFyZSBub3QgZWZmZWN0aXZlIGluIHRoaXMgZnJhZ21lbnQgKGUu
Zy4gaXQncyBub3QgcmlnaG1vc3QgZnJhZ21lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBjaGVjayBhbGwgc2VsZWN0b3JzIHRvIGNvbGxl
Y3QgcHNldWRvIGVsZW1lbnQgaWRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0Lm1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50ID09IE1hdGNoVG9Ob25Qc2V1
ZG9FbGVtZW50OjpNYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVG9O
b25Qc2V1ZG9FbGVtZW50ID0gTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQ6Ok1hdGNoZXM7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldCB8PSBsb2NhbER5bmFtaWNQ
c2V1ZG9JZFNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc01hdGNoZWRBbnl0aGluZyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGhhc01hdGNoZWRBbnl0aGluZzsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1BsYWNlaG9sZGVyU2hvd246CiAgICAgICAgICAgICBpZiAoaXM8SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewpAQCAtNzcwLDEwICs3OTgsMTEgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNv
bnRleHQpIGNvbnN0CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250
ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YkNv
bnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIFBz
ZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgICAgICBz
dWJDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZp
cnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAg
ICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2Vs
ZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRl
eHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKS5tYXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC05MTgsMTIgKzk0NywxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICBpZiAoc2VsZWN0
b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBz
ZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKICAg
ICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCi0g
ICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAg
Y29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwog
ICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBD
U1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAg
IHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVj
dG9yOwogICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRy
dWU7Ci0gICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBzdWJDb250ZXh0
LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0
IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgIGlmIChtYXRjaFJl
Y3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IFNlbGVj
dG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC05NDAsOSArOTcwLDEwIEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBi
YXNlQ29uCiAgICAgICAgIHN1YmNvbnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBz
dWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIHN1YmNvbnRleHQuaW5G
dW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0Vs
ZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9y
T2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5h
bWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgeworICAgICAg
ICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgIGlm
IChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNo
ID09IFNlbGVjdG9yTWF0Y2hlcykgewogICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5bmFtaWNQ
c2V1ZG8gPT0gTk9QU0VVRE8pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCA4MDc3NzE3NDQ1ZWEzNjg1NzQ2
NDljMTQ1MTMzZDg3N2MzNjdhMjZjLi40Y2NjOGFiNzhmZmNmNjJiZmJlZWI5MDA1MGIyYjU1MzA5
ZWI4ZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC00NSw2ICs0NSw0
MSBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNl
bGVjdG9yQ2hlY2tlcik7CiAgICAgZW51bSBNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0
b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncywgU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHkgfTsKIAorICAgIC8vIFdoZXRoZXIgdGhlIHN1Y2NlZWRlZCBtYXRjaGluZyByZXN1
bHQgaXMgZWZmZWN0aXZlIG9uIG5vbi1wc2V1ZG8tZWxlbWVudHMuCisgICAgZW51bSBjbGFzcyBN
YXRjaFRvTm9uUHNldWRvRWxlbWVudCB7CisgICAgICAgIE1hdGNoZXMsCisgICAgICAgIEZhaWxz
LAorICAgIH07CisKKyAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgeworICAgICAgICBNYXRjaCBtYXRj
aDsKKyAgICAgICAgTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgbWF0Y2hUb05vblBzZXVkb0VsZW1l
bnQ7CisKKyAgICAgICAgc3RhdGljIE1hdGNoUmVzdWx0IG1hdGNoZXMoTWF0Y2hUb05vblBzZXVk
b0VsZW1lbnQgbWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcywKKyAgICAg
ICAgICAgICAgICBtYXRjaFRvTm9uUHNldWRvRWxlbWVudAorICAgICAgICAgICAgfTsKKworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIE1hdGNoUmVzdWx0IHVwZGF0ZShNYXRjaFJlc3VsdCBy
ZXN1bHQsIE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50IG1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobWF0Y2hUb05vblBzZXVkb0VsZW1lbnQgPT0gTWF0
Y2hUb05vblBzZXVkb0VsZW1lbnQ6OkZhaWxzKQorICAgICAgICAgICAgICAgIHJlc3VsdC5tYXRj
aFRvTm9uUHNldWRvRWxlbWVudCA9IE1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50OjpGYWlsczsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTWF0
Y2hSZXN1bHQgZmFpbHMoTWF0Y2ggbWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgbWF0Y2gsCisgICAgICAgICAgICAgICAgTWF0Y2hUb05vblBz
ZXVkb0VsZW1lbnQ6OkZhaWxzCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKwog
cHVibGljOgogICAgIGVudW0gY2xhc3MgTW9kZSA6IHVuc2lnbmVkIGNoYXIgewogICAgICAgICBS
ZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywgQ29sbGVjdGluZ1J1bGVzSWdub3Jp
bmdWaXJ0dWFsUHNldWRvRWxlbWVudHMsIFF1ZXJ5aW5nUnVsZXMKQEAgLTgzLDggKzExOCw4IEBA
IGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxp
bmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAgICBNYXRjaCBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9J
ZCYpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYpIGNvbnN0OworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkU2V0JikgY29uc3Q7CisgICAgYm9vbCBj
aGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCBN
YXRjaFRvTm9uUHNldWRvRWxlbWVudCYpIGNvbnN0OwogICAgIGJvb2wgbWF0Y2hTZWxlY3Rvckxp
c3QoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIEVsZW1lbnQmLCBjb25zdCBDU1NT
ZWxlY3Rvckxpc3QmKSBjb25zdDsKIAogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgY29uc3QgQ1NTU2VsZWN0b3IqKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAppbmRleCA2
OGYyMWEzNjI0NzhkYWU3YTc3ZmUxODllOGVmNGFlNTkyYTBjZDU0Li5iZjY4MTcxNGE0MzcwZmQ4
MDgxMjNkMzM4ZjMxNWQ4ZGViMzIwYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCkBAIC0zNzIsNyArMzcyLDcgQEAgZW51bSBjbGFzcyBGcmFnbWVudHNM
ZXZlbCB7CiAgICAgSW5GdW5jdGlvbmFsUHNldWRvVHlwZSA9IDEKIH07CiAKLXN0YXRpYyBGdW5j
dGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0
b3IsIFNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21l
bnRzLCBGcmFnbWVudHNMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9v
bCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYpOworc3RhdGljIEZ1bmN0aW9uVHlw
ZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2Vs
ZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0
ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiwgYm9vbCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZl
KTsKIAogc3RhdGljIHZvaWQgY29tcHV0ZUJhY2t0cmFja2luZ0luZm9ybWF0aW9uKFNlbGVjdG9y
RnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgdW5zaWduZWQgbGV2ZWwgPSAwKTsKIApA
QCAtNDYyLDcgKzQ2Miw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFNjcm9sbGJh
clBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0CiAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIH0KIAotc3RhdGljIGlubGluZSBGdW5j
dGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rvciwg
U2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRl
eHQsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RG
cmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlKQorc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUg
YWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWN0b3JG
cmFnbWVudCYgZnJhZ21lbnQsIFNlbGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRleHQsIEZyYWdt
ZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMg
cG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwgVmlzaXRl
ZE1vZGUmIHZpc2l0ZWRNb2RlLCBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpCiB7CiAgICAg
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSB0eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NU
eXBlKCk7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC02MzYsNyArNjM2LDcgQEAgc3RhdGljIGlu
bGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBz
ZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBz
dWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVj
dG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAg
ICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAg
ICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6
Tm9uZTsKLSAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNv
bnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZy
YWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7
CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1
Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9v
dEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUsIGZhbHNl
KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVk
TW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBm
dW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
ZnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXI6CkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9y
ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0
b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAgICAgVmlzaXRl
ZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAg
ICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMo
c3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50
c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywg
dmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAg
IEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJz
ZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6
Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xh
c3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNs
YXNzIGZpbHRlciwgQ2Fubm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5
cyBwYXNzZXMuCkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUg
YWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAg
ICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9y
LnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyByb290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENT
U1NlbGVjdG9yTGlzdDo6bmV4dChyb290U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2Vs
ZWN0b3JGcmFnbWVudExpc3QgZnJhZ21lbnRMaXN0OwogICAgICAgICAgICAgICAgIFZpc2l0ZWRN
b2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAg
ICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290
U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6
SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRN
YXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlv
blR5cGUgc3ViRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwg
c2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9u
YWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgaWdub3JlVmlzaXRlZE1vZGUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0
ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAg
ICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2ggYWdhaW5z
dCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0IHRvIGFueUZyYWdtZW50cy4KQEAgLTc1NCw3
ICs3NTQsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUo
Y29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgZm9yIChjb25z
dCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNl
bGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3Rvcikp
IHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBzZWxlY3RvckZyYWdtZW50
czsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0
ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9u
VHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBz
ZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUs
IHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNp
dGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVj
dG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9z
aXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRN
b2RlLCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0
ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAg
ICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnJhZ21lbnQgbmV2ZXIgbWF0Y2hlcyBhZ2FpbnN0
IHRoZSBlbGVtZW50LCBkb24ndCBpbnNlcnQgaXQgdG8gbWF0Y2hlc0xpc3QuCkBAIC03NjQsNiAr
NzY0LDEwIEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShj
b25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgaWYgKGxv
Y2FsRnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKIAorICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgcHNldWRvIGVsZW1lbnRzIGluc2lkZSA6bWF0
Y2hlcyBhcmUgc3VwcG9ydGVkIGluIG5vbi1KSVQgY29kZS4KKyAgICAgICAgICAgICAgICBpZiAo
c2VsZWN0b3JGcmFnbWVudHMuZmlyc3QoKS5wc2V1ZG9FbGVtZW50U2VsZWN0b3IpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CisKICAgICAg
ICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVu
Y3Rpb25UeXBlLCBsb2NhbEZ1bmN0aW9uVHlwZSk7CiAgICAgICAgICAgICAgICAgbWF0Y2hlc0xp
c3QuYXBwZW5kKHNlbGVjdG9yRnJhZ21lbnRzKTsKICAgICAgICAgICAgIH0KQEAgLTgwNCw3ICs4
MDgsNyBAQCBpbmxpbmUgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlYwogICAgIC8vIEluIFF1ZXJ5U2VsZWN0b3Ig
Y29udGV4dCwgOnZpc2l0ZWQgYWx3YXlzIGhhcyBubyBlZmZlY3QgZHVlIHRvIHNlY3VyaXR5IGlz
c3Vlcy4KICAgICBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQgPSBzZWxlY3RvckNvbnRleHQgIT0g
U2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yOwogCi0gICAgbV9mdW5jdGlvblR5cGUgPSBj
b25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBtX3NlbGVjdG9yQ29udGV4dCwgbV9zZWxl
Y3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OlJvb3QsIEZyYWdtZW50UG9zaXRpb25JblJv
b3RGcmFnbWVudHM6OlJpZ2h0bW9zdCwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgbV92aXNpdGVkTW9k
ZSk7CisgICAgbV9mdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9y
LCBtX3NlbGVjdG9yQ29udGV4dCwgbV9zZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6
OlJvb3QsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHM6OlJpZ2h0bW9zdCwgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgbV92aXNpdGVkTW9kZSwgdHJ1ZSk7CiAgICAgaWYgKG1fZnVuY3Rpb25U
eXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSAmJiBtX2Z1bmN0aW9uVHlwZSAhPSBG
dW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgIGNvbXB1dGVCYWNrdHJh
Y2tpbmdJbmZvcm1hdGlvbihtX3NlbGVjdG9yRnJhZ21lbnRzKTsKIH0KQEAgLTgyMCw3ICs4MjQs
NyBAQCBzdGF0aWMgYm9vbCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnRUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnRTY3JvbGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dFNjcm9sbGJhclRyYWNrUGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0
RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yQ29udGV4
dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50
cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZy
YWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVk
LCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVj
dEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRl
eHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RG
cmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlLCBib29sIHBzZXVkb0VsZW1lbnRFZmZlY3RpdmUp
CiB7CiAgICAgU2VsZWN0b3JGcmFnbWVudCBmcmFnbWVudDsKICAgICBGcmFnbWVudFJlbGF0aW9u
IHJlbGF0aW9uVG9QcmV2aW91c0ZyYWdtZW50ID0gRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0
OwpAQCAtODY1LDcgKzg2OSw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21l
bnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAg
ICBpZiAoZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yICYmIGlzU2Nyb2xsYmFyUHNldWRv
RWxlbWVudChmcmFnbWVudC5wc2V1ZG9FbGVtZW50U2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkpKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0
aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFNjcm9sbGJhclBzZXVkb0NsYXNzVHlwZSgqc2VsZWN0
b3IsIGZyYWdtZW50KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnVuY3Rp
b25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNl
dWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21l
bnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRNb2RlKSk7
CisgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25U
eXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQs
IHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRj
aEVuYWJsZWQsIHZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50RWZmZWN0aXZlKSk7CiAgICAgICAg
ICAgICBpZiAoIXBzZXVkb0NsYXNzT25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSgqc2VsZWN0
b3IpKQogICAgICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01v
ZGUgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBl
OjpDYW5ub3RDb21waWxlIHx8IGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1h
dGNoQW55dGhpbmcpCkBAIC04ODEsNyArODg1LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25z
dHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IK
IAogICAgICAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQg
aW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4K
ICAgICAgICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcgZmFpbHVyZSB1bnRpbCB0aGUgc3Bl
YyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAgICAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0g
RnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUpCisgICAgICAgICAgICBpZiAo
ZnJhZ21lbnRMZXZlbCA9PSBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSAm
JiAhcHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rp
b25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogCiAgICAgICAgICAgICBzd2l0Y2ggKHNlbGVj
dG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSB7CkBAIC05NTgsNyArOTYyLDcgQEAgc3RhdGljIEZ1
bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxl
Y3RvciwgU2VsZWN0b3IKICAgICAgICAgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMg
PSBwb3NpdGlvbkluUm9vdEZyYWdtZW50czsKICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJh
Z21lbnQgPSBmcmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChm
cmFnbWVudExldmVsID09IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQor
ICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAg
ICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAg
ICAgICAgc2VsZWN0b3JGcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21l
bnQgPSBTZWxlY3RvckZyYWdtZW50KCk7CkBAIC0yODQ1LDcgKzI4NDksNyBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJs
ZXI6Okp1bXBMaXN0JgogICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRk
cmVzcyk7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5j
aE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChB
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1
bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBt
X3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggOTg2Mzk1MDdmNTU1MjBlNTBiM2Qy
ZjA3OWUzYzI0YzRhNWE2ODQ5OS4uYmQwMzUwNjE2YjMzZmJlMDJlMmZhZmVjNWJiYjJmYThhZTg3
ZGJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgK
QEAgLTIzNCw2ICsyMzQsMTMgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVk
PFJlbmRlclN0eWxlPiB7CiAgICAgICAgICAgICBBU1NFUlQocHNldWRvIDwgRklSU1RfSU5URVJO
QUxfUFNFVURPSUQpOwogICAgICAgICAgICAgbV9mbGFncyB8PSBvbmVCaXRNYXNrIDw8IChwc2V1
ZG9CaXRzT2Zmc2V0IC0gMSArIHBzZXVkbyk7CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRI
YXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocHNldWRvICE9IE5PUFNFVURPKTsKKyAgICAgICAgICAgIEFTU0VSVCgocHNldWRv
ICYgUFVCTElDX1BTRVVET0lEX01BU0spID09IHBzZXVkbyk7CisgICAgICAgICAgICBzdGF0aWNf
YXNzZXJ0KHBzZXVkb0JpdHNPZmZzZXQgPj0gMSwgIihwc2V1ZG9CaXRzT2Zmc2V0IC0gMSkgc2hv
dWxkIGJlIHZhbGlkLiIpOworICAgICAgICAgICAgbV9mbGFncyB8PSAoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHBzZXVkbykgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSk7CisgICAgICAgIH0KIAog
ICAgICAgICBFVGFibGVMYXlvdXQgdGFibGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxFVGFibGVMYXlvdXQ+KGdldFZhbHVlKHRhYmxlTGF5b3V0Qml0TWFzaywgdGFibGVMYXlv
dXRPZmZzZXQpKTsgfQogICAgICAgICB2b2lkIHNldFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB0
YWJsZUxheW91dCkgeyB1cGRhdGVWYWx1ZSh0YWJsZUxheW91dCwgdGFibGVMYXlvdXRCaXRNYXNr
LCB0YWJsZUxheW91dE9mZnNldCk7IH0KQEAgLTU2MSw2ICs1NjgsNyBAQCBjbGFzcyBSZW5kZXJT
dHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBib29sIGhhc0FueVB1
YmxpY1BzZXVkb1N0eWxlcygpIGNvbnN0OwogICAgIGJvb2wgaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQgcHNldWRvKSBjb25zdDsKICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBz
ZXVkbyk7CisgICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQpOwogICAgIGJv
b2wgaGFzVW5pcXVlUHNldWRvU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIGF0dHJpYnV0ZSBnZXR0
ZXIgbWV0aG9kcwpAQCAtMjE1NSw2ICsyMTYzLDExIEBAIGlubGluZSB2b2lkIFJlbmRlclN0eWxl
OjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pCiAgICAgbm9uaW5oZXJpdGVkX2Zs
YWdzLnNldEhhc1BzZXVkb1N0eWxlKHBzZXVkbyk7CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlclN0
eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvKQoreworICAgIG5vbmlu
aGVyaXRlZF9mbGFncy5zZXRIYXNQc2V1ZG9TdHlsZXMocHNldWRvKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUmVuZGVyU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAppbmRleCAy
YTRhZWY1YmU3NDgwZTIwMDM2MWIzODIyYWIwODNkNzVjMGEzNThkLi42ODg0OTAxNjJhMzhjMDhk
MzU5ZGM3NGE0NDhiMWUyMjAyMzM1MGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaApAQCAtODAsNiArODAsOCBAQCBl
bnVtIFBzZXVkb0lkIDogdW5zaWduZWQgY2hhciB7CiAgICAgUFVCTElDX1BTRVVET0lEX01BU0sg
PSAoKDEgPDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpIC0gMSkgJiB+KCgxIDw8IEZJUlNUX1BV
QkxJQ19QU0VVRE9JRCkgLSAxKQogfTsKIAordHlwZWRlZiB1bnNpZ25lZCBQc2V1ZG9JZFNldDsK
KwogZW51bSBDb2x1bW5GaWxsIHsgQ29sdW1uRmlsbEJhbGFuY2UsIENvbHVtbkZpbGxBdXRvIH07
CiAKIGVudW0gQ29sdW1uU3BhbiB7IENvbHVtblNwYW5Ob25lID0gMCwgQ29sdW1uU3BhbkFsbCB9
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDIyNWVkOGZjODEyYzY1ZmMzMDc2MDI1MDVmOTk0NDFiOTlhODcwNWYuLjM5MWFk
NDBmNzY1MDM2ZTU1MjFhNWU5MjFhOTJlYTNjNmEzYTAwZDggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxNC0xMS0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwor
ICAgICAgICBDU1M0IFNlbGVjdG9yczogQWRkIG11bHRpcGxlIHBzZXVkbyBlbGVtZW50cyBzdXBw
b3J0IHRvIDptYXRjaGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzgyMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLWV4
cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVt
ZW50LWluc2lkZS1tYXRjaGVzLmh0bWw6IEFkZGVkLgorCiAyMDE0LTEwLTMxICBSb2dlciBGb25n
ICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbmRvd3NdIEFkZGl0aW9uYWwg
cmViYXNlbGluaW5nIGFmdGVyIHIxNzUyNTkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMt
ZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmE0MDAxMWFlOWM1NzRlYjEzMDg1NjI5NGZiYzdh
MWI3Mjk3YWFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMv
cHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDcy
IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTo6
Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0
Mjo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNv
Y29hIjsKK30KKworI3RhcmdldDM6OmJlZm9yZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGlt
ZTsKKyAgICBjb250ZW50OiAiY2FwcHVjY2lubyI7Cit9CisKKyN0YXJnZXQ0OjpiZWZvcmUsCisj
dGFyZ2V0NDo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVu
dDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQ1LAorI3RhcmdldDU6OmZpcnN0LWxldHRlciB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDYsCisjdGFyZ2V0Njo6Zmly
c3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NywK
KyN0YXJnZXQ3OjpiZWZvcmUsCisjdGFyZ2V0Nzo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29s
b3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKy8qIGZpcnN0IGxldHRlciBv
ZiBiZWZvcmUgY29udGVudCBpcyBjb2xvcmVkIGJsdWUuICovCisjdGFyZ2V0MTI6OmFmdGVyLAor
I3RhcmdldDEyOjpiZWZvcmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29u
dGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNr
Z3JvdW5kLWNvbG9yOiBibHVlOworfQorCisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXY+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDEiPnBzZXVkbyBlbGVtZW50IGlu
c2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0i
dGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgor
ICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUg
Om1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdl
dDQiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8
cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0NSI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRj
aGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3RvcnMgc2hvdWxkIGJlIGNoZWNrZWQuPC9wPgor
ICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUg
bmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgY2xhc3M9InRh
cmdldCIgaWQ9InRhcmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91
bGQgYmUgY29sb3JlZC48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDgiPnBz
ZXVkbyBlbGVtZW50IGluc2lkZSA6bm90IGRvZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxw
IGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ5Ij46OmZpcnN0LWxpbmUgaW4gbm9uLXJpZ2h0bW9z
dCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9
InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1vc3QgZnJhZ21l
bnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdl
dDExIj5wc2V1ZG8gZWxlbWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0
Y2hlcyBhbHdheXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFy
Z2V0MTIiPmJlZm9yZS9hZnRlciBjb250ZW50cyBhcmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1s
ZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLjwvcD4KKzwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNl
dWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0
b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM1MDFl
NTRkNWIwMmM3MjQ4NjgxZmJjYmMwMTRhNGRkZGRmMjFhZQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLmh0
bWwKQEAgLTAsMCArMSw4MCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorI3RhcmdldDE6bWF0Y2hlcyg6OmZpcnN0LWxldHRlcikgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQyOm1hdGNoZXMoOjphZnRlcikgeworICAgIGJhY2tn
cm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNvY29hIjsKK30KKworI3RhcmdldDM6
bWF0Y2hlcyg6OmJlZm9yZSkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29u
dGVudDogImNhcHB1Y2Npbm8iOworfQorCisjdGFyZ2V0NDptYXRjaGVzKDo6YmVmb3JlLCA6OmFm
dGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5k
IjsKK30KKworI3RhcmdldDU6bWF0Y2hlcyg6OmZpcnN0LWxldHRlciwgcCkgeworICAgIGJhY2tn
cm91bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQ2Om1hdGNoZXMocCwgOm1hdGNoZXMocCwg
OjpmaXJzdC1sZXR0ZXIpKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3Rh
cmdldDc6bWF0Y2hlcyg6OmJlZm9yZSwgOjphZnRlciwgKikgeworICAgIGJhY2tncm91bmQtY29s
b3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQ4Om5vdCg6bWF0
Y2hlcyg6OmZpcnN0LWxpbmUpKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6
OmZpcnN0LWxpbmUgI3RhcmdldDkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKwor
Om1hdGNoZXMoOjpmaXJzdC1saW5lKSAjdGFyZ2V0MTAgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHJlZDsKK30KKworI3RhcmdldDExOm1hdGNoZXMoOjpmaXJzdC1saW5lID4gcCkgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IHJlZDsKK30KKworLyogZmlyc3QgbGV0dGVyIG9mIGJlZm9yZSBjb250
ZW50IGlzIGNvbG9yZWQgYmx1ZS4gKi8KKyN0YXJnZXQxMjptYXRjaGVzKDo6Zmlyc3QtbGV0dGVy
LCA6OmFmdGVyLCA6OmJlZm9yZSkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAg
Y29udGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBibHVlOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRp
dj4KKyAgICA8cCBpZD0idGFyZ2V0MSI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhh
cyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQyIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUg
Om1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDMiPnBzZXVkbyBlbGVt
ZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NCI+
cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlk
PSJ0YXJnZXQ1Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdCwgc28g
YWxsIHNlbGVjdG9ycyBzaG91bGQgYmUgY2hlY2tlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDYi
PnBzZXVkbyBlbGVtZW50IGluc2lkZSBuZXN0ZWQgOm1hdGNoZXMgc2hvdWxkIGhhdmUgZWZmZWN0
LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NyI+Ym90aCBsaW5lIGl0c2VsZiBhbmQgYmVmb3JlL2Fm
dGVyIHNob3VsZCBiZSBjb2xvcmVkLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0OCI+cHNldWRvIGVs
ZW1lbnQgaW5zaWRlIDpub3QgZG9lc24ndCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRh
cmdldDkiPjo6Zmlyc3QtbGluZSBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGFsd2F5cyB1bm1h
dGNoLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTAiPjptYXRjaGVzKDo6Zmlyc3QtbGluZSkgaW4g
bm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0i
dGFyZ2V0MTEiPnBzZXVkbyBlbGVtZW50IGluIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgaW5zaWRl
IDptYXRjaGVzIGFsd2F5cyB1bm1hdGNoZXMuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMiI+YmVm
b3JlL2FmdGVyIGNvbnRlbnRzIGFyZSBjb2xvcmVkIGxpbWUgYW5kIGZpcnN0LWxldHRlciBvZiBi
ZWZvcmUgY29udGVudCBpcyBjb2xvcmVkIGJsdWUuPC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241167</attachid>
            <date>2014-11-07 01:53:45 -0800</date>
            <delta_ts>2014-11-07 02:01:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141107185355.patch</filename>
            <type>text/plain</type>
            <size>53781</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUyMzg5MTNjODE0ZWQ2
NWNmZTk4MGIyYjk2MzQ5MDAwMzMwNmU3NS4uY2UwOTUxMzc5MDQ4ZjJjOWEyMDZkZTljMmZlNGEz
MzRiM2UzMGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXIgaW4gdGhlIG5vbi1yaWdodG1vc3QKKyAgICAgICAgZnJhbWduZXQsIGl0IGlz
IGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1cGRh
dGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRv
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9J
ZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OlBz
ZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0
b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXZWJD
b3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMDYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbGFtYmRhIGZ1bmN0aW9ucyBpbiBEb2N1bWVu
dE9yZGVyZWRNYXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNDFj
Zjc1MDYxYzA3YzkyZjg1NjRjZjdkZWVhY2Y5NjdkOGVmOTUxZC4uMjE0OGNkZGU0OTRiZWFmOTBk
MTVmZTI3ODhlNmI3NzJmNWVmODZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTgsNiArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03
MSw2ICs3Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwgdmlzaXRlZE1h
dGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdS
dWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5h
YmxlZCkKICAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKICAg
ICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgLCBwc2V1ZG9F
bGVtZW50RWZmZWN0aXZlKHRydWUpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNl
KQogICAgICAgICAsIGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKICAgICB7IH0KQEAgLTgwLDYg
KzgyLDcgQEAgc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyA6IHB1YmxpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWMKICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZp
c2l0ZWRNYXRjaFR5cGU7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGZpcnN0U2VsZWN0b3JPZlRo
ZUZyYWdtZW50OwogICAgIGJvb2wgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3M7CisgICAgYm9vbCBw
c2V1ZG9FbGVtZW50RWZmZWN0aXZlOwogICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAg
IGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOwogfTsKQEAgLTE3MSwzNiArMTc0LDMzIEBAIHN0YXRp
YyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRl
eHQmIHByb3ZpZGVkQ29udGV4dCkgY29uc3QKIHsKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzIGNvbnRleHQocHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7Ci0gICAgUHNl
dWRvSWQgcHNldWRvSWQgPSBOT1BTRVVETzsKLSAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250
ZXh0LCBwc2V1ZG9JZCkgIT0gU2VsZWN0b3JNYXRjaGVzKQorICAgIFBzZXVkb0lkU2V0IHBzZXVk
b0lkU2V0OworICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4
dCwgcHNldWRvSWRTZXQpOworICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9y
TWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lk
ICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRvSWQpCisgICAgaWYgKGNv
bnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBz
ZXVkb0lkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lk
ID09IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURPKSB7Ci0gICAgICAgIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHNldWRvSWQgPCBG
SVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
LT5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgaWYgKGNvbnRleHQucHNldWRvSWQg
PT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQpIHsKKyAgICAgICAgUHNldWRvSWRTZXQgcHVibGlj
UHNldWRvSWRTZXQgPSBwc2V1ZG9JZFNldCAmIFBzZXVkb0lkU2V0Ojpmcm9tTWFzayhQVUJMSUNf
UFNFVURPSURfTUFTSyk7CisgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHVibGljUHNldWRvSWRTZXQpCisgICAgICAgICAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGVzKHB1YmxpY1BzZXVkb0lkU2V0KTsK
IAogICAgICAgICAvLyBXaGVuIGlnbm9yaW5nIHZpcnR1YWwgcHNldWRvIGVsZW1lbnRzLCB0aGUg
Y29udGV4dCdzIHBzZXVkbyBzaG91bGQgYWxzbyBiZSBOT1BTRVVETyBidXQgdGhhdCBkb2VzCiAg
ICAgICAgIC8vIG5vdCBjYXVzZSBhIGZhaWx1cmUuCi0gICAgICAgIHJldHVybiBjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRv
RWxlbWVudHM7CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMgfHwgcmVzdWx0Lm1h
dGNoVHlwZSA9PSBNYXRjaFR5cGU6OkVsZW1lbnQ7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbykKK2lubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9F
bGVtZW50KGNvbnN0IFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpCiB7Ci0gICAgaWYg
KGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
U0NST0xMQkFSX1RIVU1CCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0JV
VFRPTgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9UUkFDSwotICAgICAg
ICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9UUkFDS19QSUVDRQotICAgICAgICB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIpIHsKKyAgICBQc2V1ZG9JZFNldCBzY3Jv
bGxiYXJJZFNldCA9IHsgU0NST0xMQkFSLCBTQ1JPTExCQVJfVEhVTUIsIFNDUk9MTEJBUl9CVVRU
T04sIFNDUk9MTEJBUl9UUkFDSywgU0NST0xMQkFSX1RSQUNLX1BJRUNFLCBTQ1JPTExCQVJfQ09S
TkVSIH07CisgICAgaWYgKGR5bmFtaWNQc2V1ZG9JZFNldCAmIHNjcm9sbGJhcklkU2V0KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAvLyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5
cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNjcm9sbGJhci1saWtlIHBzZXVkbyBlbGVt
ZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBzZXVkbyBlbGVt
ZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09IFJFU0laRVI7CisgICAgcmV0dXJuIGR5
bmFtaWNQc2V1ZG9JZFNldC5oYXMoUkVTSVpFUik7CiB9CiAKIHN0YXRpYyBTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkK
QEAgLTIxOSwzNCArMjE5LDM1IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAvLyAqIFNlbGVj
dG9yRmFpbHNMb2NhbGx5ICAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQg
ZQogLy8gKiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9y
IGUgYW5kIGFueSBzaWJsaW5nIG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0g
dGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBl
Ci1TZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVs
eShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbykgY29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JD
aGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMm
IGNvbnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpIGNvbnN0CiB7CisgICAg
TWF0Y2hUeXBlIG1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKwogICAgIC8vIFRoZSBm
aXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2guCi0gICAgaWYgKCFjaGVja09uZShjb250ZXh0KSkK
LSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgIGlmICghY2hlY2tPbmUo
Y29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBtYXRjaFR5cGUpKQorICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAKICAgICBp
ZiAoY29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dCkgewotICAgICAgICAvLyBJbiBTZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxlbWVudCBp
bnNpZGUgYSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3VlIDcpLgot
ICAgICAgICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xh
cmlmaWVzIHRoaXMgY2FzZS4KLSAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MpCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgIGlmICghY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlKQorICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwog
CiAgICAgICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkg
ewogICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBjb250ZXh0LmVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IGNvbnRleHQuc2VsZWN0b3ItPnZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYg
cm9vdC0+dHlwZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xvY2Fs
bHkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
TWF0Y2g6OlNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgfHwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlF1ZXJ5aW5nUnVsZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNl
bGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBD
U1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSk7CiAgICAgICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAg
ICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOworICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1
ZG9JZFNldC5hZGQocHNldWRvSWQpOworICAgICAgICAgICAgbWF0Y2hUeXBlID0gTWF0Y2hUeXBl
OjpWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1Niw0
NyArMjU3LDUwIEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAgICAgLy8gUHJlcGFyZSBuZXh0
IHNlbGVjdG9yCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGhpc3RvcnlTZWxlY3RvciA9IGNvbnRl
eHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKICAgICBpZiAoIWhpc3RvcnlTZWxlY3RvcikKLSAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0
OjptYXRjaGVzKG1hdGNoVHlwZSk7CiAKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIG5l
eHRDb250ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNl
bGVjdG9yOwogCi0gICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwog
ICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAg
Ly8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRv
SWQKLSAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5w
c2V1ZG9JZCAhPSBkeW5hbWljUHNldWRvKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5OworICAgICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAm
JiAhZHluYW1pY1BzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBzZXVkb0lkKSkKKyAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKIAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRv
IG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxh
dGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rv
cjo6Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlz
aXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQg
PSBOT1BTRVVETzsKKyAgICAgICAgLy8gVmlydHVhbCBwc2V1ZG8gZWxlbWVudCBpcyBvbmx5IGVm
ZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgorICAgICAgICBuZXh0Q29udGV4dC5w
c2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxh
dGlvbikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CiAgICAgICAgIG5leHRD
b250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAg
bmV4dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxl
Y3RvcjsKLSAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgbmV4
dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgZm9yICg7IG5leHRDb250
ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRD
b250ZXh0KSkgewotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmICht
YXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRT
ZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzIHx8IHJl
c3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0
Y2hUeXBlKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7
CiAgICAgICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0
Q29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIW5leHRDb250ZXh0LmVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
bmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSBudWxscHRyOwotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSBtYXRjaFJlY3Vyc2l2ZWx5
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmIChtYXRj
aCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFt
aWNQc2V1ZG87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CisgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwogICAgICAgICB9CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGph
Y2VudDoKQEAgLTMwNiw1NiArMzEwLDU5IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAKICAg
ICAgICAgICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0VsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxz
QWxsU2libGluZ3MpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNl
dEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwor
ICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNo
ID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0
ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9OwotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxsU2libGluZ3MpOwogCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6CiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxp
ZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1h
a2UgYW4gZXhjZXB0aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBh
IHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8g
Zm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9s
bGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkbyk7Ci0g
ICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG8gPT0g
U0VMRUNUSU9OOwotICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8IGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFtaWNQc2V1ZG8g
IT0gTk9QU0VVRE8KKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvID0gaGFz
U2Nyb2xsYmFyUHNldWRvRWxlbWVudChkeW5hbWljUHNldWRvSWRTZXQpOworICAgICAgICBuZXh0
Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvSWRTZXQuaGFzKFNFTEVD
VElPTik7CisgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNv
bHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0
CiAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvCiAgICAgICAg
ICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBuZXh0Q29udGV4dC5z
ZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQotICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1cm4gbWF0Y2hS
ZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7Cisg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShtYXRjaFJlY3Vy
c2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvSWRTZXQpLCBtYXRjaFR5cGUpOwogCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAgICAg
ICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1lbnQtPnNoYWRvd0hv
c3QoKTsKICAgICAgICAgICAgIGlmICghc2hhZG93SG9zdE5vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKICAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKICAgICAgICAgICAg
IG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2Vs
ZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVs
eShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogfQogCiBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1
ZU1hdGNoZXMoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIENTU1NlbGVjdG9yOjpNYXRjaCBt
YXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRp
dmUpCkBAIC00OTAsNyArNDk3LDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZl
SW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb24KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBz
ZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIE1hdGNoVHlwZSYgbWF0Y2hUeXBlKSBjb25z
dAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7
CkBAIC01MzAsMTMgKzUzNywxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29u
c3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJz
dCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vi
c2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBz
dWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlv
bmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2Vs
ZWN0b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2Vs
ZWN0b3JPZlRoZUZyYWdtZW50ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOworICAgICAgICAgICAg
ICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAKICNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SU19MRVZFTDQpCi0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3Jl
RHluYW1pY1BzZXVkbykubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogI2Vsc2UKQEAgLTU0OSw3
ICs1NTcsOSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1YmNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJjb250
ZXh0KSkKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSA6bm90IGNhbm5vdCBjb250YWluIHBzZXVk
byBlbGVtZW50cywgdGhlcmUncyBubyBlZmZlY3Qgb24gbWF0Y2hlZFRvTm9uUHNldWRvRWxlbWVu
dC4KKyAgICAgICAgICAgICAgICBNYXRjaFR5cGUgaWdub3JlTWF0Y2hUeXBlID0gTWF0Y2hUeXBl
OjpFbGVtZW50OworICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbywgaWdub3JlTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgfQpAQCAtNjY1
LDE2ICs2NzUsMzMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsK
ICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKLSAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJz
ZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3Ip
KSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0
KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJz
ZWxlY3RvcjsKLSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZy
YWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2
ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbCBoYXNNYXRjaGVkQW55dGhpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9y
LT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NT
U2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBjb250
ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmU7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRl
eHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOworICAgICAgICAgICAg
ICAgICAgICBQc2V1ZG9JZFNldCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldDsKKyAgICAgICAgICAg
ICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0
LCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXaGVuIHBzZXVkbyBlbGVtZW50cyBhcmUgbm90IGVmZmVjdGl2
ZSBpbiB0aGlzIGZyYWdtZW50IChlLmcuIGl0J3Mgbm90IHJpZ2htb3N0IGZyYWdtZW50KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sg
YWxsIHNlbGVjdG9ycyB0byBjb2xsZWN0IHBzZXVkbyBlbGVtZW50IGlkcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hU
eXBlOjpFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVHlwZSA9IE1h
dGNoVHlwZTo6RWxlbWVudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pY1BzZXVk
b0lkU2V0Lm1lcmdlKGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhc01hdGNoZWRBbnl0aGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc01hdGNoZWRBbnl0
aGluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNlaG9sZGVyU2hvd246CiAgICAgICAg
ICAgICBpZiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewpAQCAt
NzcwLDEwICs3OTcsMTEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRl
eHQpOwogICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3Mg
PSB0cnVlOwotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKKyAgICAgICAgICAgICAgICBzdWJDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3Rp
dmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBz
ZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxl
Y3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNl
bGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHlu
YW1pY1BzZXVkbzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3Vi
Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0
Y2hlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyMywxMiArOTUxLDEzIEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0
KSBjb25zdAogICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1
YkNvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVk
byA9IE5PUFNFVURPOwogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3Rv
ciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9
IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxlY3Rvcjsg
c3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250ZXh0LnNl
bGVjdG9yKSkgewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFn
bWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBzdWJDb250ZXh0LmluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2
ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykK
KyAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAg
IGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1h
dGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTQ1LDEwICs5NzQsMTEg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb24KICAgICAgICAgc3ViY29udGV4dC5lbGVtZW50ID0g
JmVsZW1lbnQ7CiAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKICAg
ICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7CisgICAgICAg
IHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICBzdWJj
b250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAg
IFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgaWYgKG1h
dGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0gU2VsZWN0
b3JNYXRjaGVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBO
T1BTRVVETyk7CisgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAg
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
aWdub3JlRHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCA4MDc3NzE3NDQ1
ZWEzNjg1NzQ2NDljMTQ1MTMzZDg3N2MzNjdhMjZjLi5lMjRiNWM2MGYzM2Y1YmNkODlhY2ZkMDMx
Y2EwNjQyYTEwZjk4ODU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC00
Myw3ICs0MywzMSBAQAogCiBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgZW51bSBNYXRjaCB7IFNlbGVjdG9yTWF0
Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncywgU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKyAgICBlbnVtIGNsYXNzIE1hdGNoIHsgU2VsZWN0b3JN
YXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzLCBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OworCisgICAgZW51bSBjbGFzcyBNYXRjaFR5cGUgeyBW
aXJ0dWFsUHNldWRvRWxlbWVudE9ubHksIEVsZW1lbnQgfTsKKworICAgIHN0cnVjdCBNYXRjaFJl
c3VsdCB7CisgICAgICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRjaFR5cGUgbWF0Y2hUeXBl
OworCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBtYXRjaGVzKE1hdGNoVHlwZSBtYXRjaFR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB7IE1hdGNoOjpTZWxlY3Rvck1hdGNo
ZXMsIG1hdGNoVHlwZSB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE1hdGNoUmVzdWx0
IHVwZGF0ZVdpdGhNYXRjaFR5cGUoTWF0Y2hSZXN1bHQgcmVzdWx0LCBNYXRjaFR5cGUgbWF0Y2hU
eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6
VmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5tYXRjaFR5
cGUgPSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgZmFp
bHMoTWF0Y2ggbWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB7IG1hdGNoLCBN
YXRjaFR5cGU6OkVsZW1lbnQgfTsKKyAgICAgICAgfQorICAgIH07CiAKIHB1YmxpYzoKICAgICBl
bnVtIGNsYXNzIE1vZGUgOiB1bnNpZ25lZCBjaGFyIHsKQEAgLTgzLDggKzEwNyw4IEBAIGNsYXNz
IFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxpbmtNYXRj
aFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAgICBNYXRjaCBtYXRjaFJl
Y3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZCYpIGNv
bnN0OwotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYp
IGNvbnN0OworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkU2V0JikgY29uc3Q7CisgICAgYm9vbCBjaGVja09u
ZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCBNYXRjaFR5
cGUmKSBjb25zdDsKICAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMmLCBFbGVtZW50JiwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JikgY29uc3Q7
CiAKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgQ2hlY2tpbmdDb250
ZXh0V2l0aFN0YXR1cyYsIGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggMWUzM2E5NzkyZWI5NWQxMGRjNDc2
N2JmZDJmNGI3ZmVhMTlkMWFiNC4uMDQ4OTIyNTQ2NzNjODJkNTZjYmNhMmFiYTg4MzM0NTMzZjA0
ODRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAt
MzcyLDcgKzM3Miw5IEBAIGVudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwgewogICAgIEluRnVuY3Rp
b25hbFBzZXVkb1R5cGUgPSAxCiB9OwogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZy
YWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQs
IFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWws
IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgVmlzaXRlZE1vZGUmKTsKK2VudW0gY2xhc3MgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZp
b3IgeyBDYW5NYXRjaCwgTmV2ZXJNYXRjaCB9OworCitzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0
cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNv
bnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRz
TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgVmlzaXRlZE1vZGUmLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcik7CiAK
IHN0YXRpYyB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3RvckZyYWdt
ZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIHVuc2lnbmVkIGxldmVsID0gMCk7CiAKQEAgLTQ2
Miw3ICs0NjQsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRTY3JvbGxiYXJQc2V1
ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdAogICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRnVuY3Rpb25U
eXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVj
dG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBG
cmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZp
c2l0ZWRNb2RlJiB2aXNpdGVkTW9kZSkKK3N0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBz
ZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjdG9yRnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBGcmFnbWVudHNM
ZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0
aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2Rl
JiB2aXNpdGVkTW9kZSwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgcHNldWRvRWxlbWVu
dE1hdGNoaW5nQmVoYXZpb3IpCiB7CiAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSB0
eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBA
IC02MzYsNyArNjM4LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xh
c3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAg
ICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmly
c3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1
YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50TGlzdCBz
ZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3Jl
VmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICAgICAgRnVu
Y3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwg
c2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVu
Y3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hF
bmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9u
VHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9u
YWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgaWdub3JlVmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZl
ck1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVW
aXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGlu
IHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25U
eXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI6CkBAIC02NzEsNyArNjczLDcgQEAgc3RhdGljIGlu
bGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBz
ZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNl
bGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3Ig
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAg
U2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAgICAg
VmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAg
ICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFn
bWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdt
ZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAgICAgICAg
ICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50
cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21l
bnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgUHNldWRvRWxlbWVudE1h
dGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2gpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRl
ZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAg
ICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNzIGZpbHRlciwgQ2Fu
bm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBwYXNzZXMuCkBAIC02
OTUsNyArNjk3LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAo
Y29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yTGlzdCgp
LT5maXJzdCgpOyByb290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChyb290U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExp
c3QgZnJhZ21lbnRMaXN0OwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0
ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBl
IHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNl
dWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGln
bm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3ViRnVuY3Rp
b25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0
LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBw
b3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRl
ZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0
ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNl
dWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnJhZ21lbnQg
YWx3YXlzIHVubWF0Y2ggYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0IHRvIGFu
eUZyYWdtZW50cy4KQEAgLTc1OSw3ICs3NjEsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlw
ZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlYwog
ICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rv
ckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50
TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25v
cmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAgIEZ1bmN0
aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rv
ciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6Oklu
RnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0
Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25U
eXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBz
ZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5j
dGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcik7
CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9
PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlv
bmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZy
YWdtZW50IG5ldmVyIG1hdGNoZXMgYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0
IHRvIG1hdGNoZXNMaXN0LgpAQCAtNzY5LDYgKzc3MSwxMCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0
aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBT
ZWxlYwogICAgICAgICAgICAgICAgIGlmIChsb2NhbEZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5
cGU6OkNhbm5vdENvbXBpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OkNhbm5vdENvbXBpbGU7CiAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5
IHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgOm1hdGNoZXMgYXJlIHN1cHBvcnRlZCBpbiBub24tSklU
IGNvZGUuCisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yRnJhZ21lbnRzLmZpcnN0KCkucHNl
dWRvRWxlbWVudFNlbGVjdG9yKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlOworCiAgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9z
dFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgbG9jYWxGdW5jdGlvblR5cGUp
OwogICAgICAgICAgICAgICAgIG1hdGNoZXNMaXN0LmFwcGVuZChzZWxlY3RvckZyYWdtZW50cyk7
CiAgICAgICAgICAgICB9CkBAIC04MDksNyArODE1LDcgQEAgaW5saW5lIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2Vs
ZWMKICAgICAvLyBJbiBRdWVyeVNlbGVjdG9yIGNvbnRleHQsIDp2aXNpdGVkIGFsd2F5cyBoYXMg
bm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBpc3N1ZXMuCiAgICAgYm9vbCB2aXNpdGVkTWF0Y2hF
bmFibGVkID0gc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rv
cjsKIAotICAgIG1fZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rv
ciwgbV9zZWxlY3RvckNvbnRleHQsIG1fc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVs
OjpSb290LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3QsIHZpc2l0
ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRlZE1vZGUpOworICAgIG1fZnVuY3Rpb25UeXBlID0gY29u
c3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1fc2VsZWN0
b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzOjpSaWdodG1vc3QsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRlZE1vZGUs
IFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpDYW5NYXRjaCk7CiAgICAgaWYgKG1fZnVu
Y3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSAmJiBtX2Z1bmN0aW9uVHlw
ZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgIGNvbXB1dGVC
YWNrdHJhY2tpbmdJbmZvcm1hdGlvbihtX3NlbGVjdG9yRnJhZ21lbnRzKTsKIH0KQEAgLTgyNSw3
ICs4MzEsNyBAQCBzdGF0aWMgYm9vbCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnRUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudFNjcm9sbGJhclRyYWNrUGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5cGUgY29u
c3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9y
Q29udGV4dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZy
YWdtZW50cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbklu
Um9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hF
bmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitzdGF0aWMgRnVuY3Rpb25UeXBlIGNv
bnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3Rv
ckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JG
cmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25J
blJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdC
ZWhhdmlvciBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcikKIHsKICAgICBTZWxlY3RvckZy
YWdtZW50IGZyYWdtZW50OwogICAgIEZyYWdtZW50UmVsYXRpb24gcmVsYXRpb25Ub1ByZXZpb3Vz
RnJhZ21lbnQgPSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3Q7CkBAIC04NzAsNyArODc2LDcg
QEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0
b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIGlmIChmcmFnbWVudC5wc2V1
ZG9FbGVtZW50U2VsZWN0b3IgJiYgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGZyYWdtZW50LnBz
ZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpCiAgICAgICAgICAgICAg
ICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlw
ZSwgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJp
Y3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVj
dG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQb3NpdGlv
biwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRlZE1vZGUpKTsKKyAgICAgICAgICAgICAgICBm
dW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBh
ZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBm
cmFnbWVudExldmVsLCBzdWJQb3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRlZE1v
ZGUsIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yKSk7CiAgICAgICAgICAgICBpZiAoIXBz
ZXVkb0NsYXNzT25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSgqc2VsZWN0b3IpKQogICAgICAg
ICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsK
ICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21w
aWxlIHx8IGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcp
CkBAIC04ODQsOSArODkwLDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVu
dHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAg
IGlmIChzZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKQog
ICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7
CiAKLSAgICAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0LCBhIHBzZXVkbyBlbGVtZW50
IGluc2lkZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVuZGVmaW5lZCAoaXNzdWUgNyku
Ci0gICAgICAgICAgICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNw
ZWMgY2xhcmlmaWVzIHRoaXMgY2FzZS4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudExldmVsID09
IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICAgICAgaWYg
KHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yID09IFBzZXVkb0VsZW1lbnRNYXRjaGluZ0Jl
aGF2aW9yOjpOZXZlck1hdGNoKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OkNhbm5vdE1hdGNoQW55dGhpbmc7CiAKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBz
ZXVkb0VsZW1lbnRUeXBlKCkpIHsKQEAgLTk1OCwxMiArOTYyLDE1IEBAIHN0YXRpYyBGdW5jdGlv
blR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3Is
IFNlbGVjdG9yCiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAg
ICAgIH0KIAorICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkgZWZmZWN0
aXZlIGluIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVkb0VsZW1lbnRNYXRj
aGluZ0JlaGF2aW9yID0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2g7
CisKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdtZW50UmVs
YXRpb25Gb3JTZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAgZnJhZ21lbnQucmVs
YXRpb25Ub1JpZ2h0RnJhZ21lbnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudDsKICAgICAg
ICAgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbkluUm9vdEZyYWdt
ZW50czsKICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFnbWVudC5yZWxh
dGlvblRvTGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09IEZyYWdt
ZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJhZ21lbnRM
ZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlN
YXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0b3JGcmFnbWVu
dHMuYXBwZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3RvckZyYWdtZW50
KCk7CkBAIC0yODUwLDcgKzI4NTcsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JgogICAgIGZ1
bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVl
KEFzc2VtYmxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFs
bG9jYXRlUmVnaXN0ZXIoKTsKQEAgLTM1NDgsMTYgKzM1NTUsMTEgQEAgdm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNldWRvQ2xhc3MoQXNz
ZW1ibGVyOjoKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNl
cywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBM
aXN0JiwgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgQVNTRVJUKGZy
YWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvcik7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IsICJXaGVu
IHRoZSBmcmFnbWVudCBoYXMgcHNldWRvIGVsZW1lbnQsIHRoZSBzZWxlY3RvciBiZWNvbWVzIENh
bm5vdE1hdGNoQW55dGhpbmcgZm9yIFF1ZXJ5U2VsZWN0b3IgYW5kIHRoaXMgdGVzdCBmdW5jdGlv
biBpcyBub3QgY2FsbGVkLiIpOwotCi0gICAgaWYgKCFmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1v
c3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAgICAgTG9jYWxS
ZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgICAgIGxv
YWRDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdDb250ZXh0KEFzc2VtYmxl
cjo6RXF1YWwsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5bGUsIGNoZWNraW5n
Q29udGV4dCkpOwotICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZyYWdtZW50TWF0Y2hl
c1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSwgIlZpcnR1
YWwgcHNldWRvIGVsZW1lbnRzIGhhbmRsaW5nIGlzIG9ubHkgZWZmZWN0aXZlIGluIHRoZSByaWdo
dG1vc3QgZnJhZ21lbnQuIElmIHRoZSBjdXJyZW50IGZyYWdtZW50IGlzIG5vdCByaWdodG1vc3Qg
ZnJhZ21lbnQsIENTUyBKSVQgY29tcGlsZXIgbWFrZXMgaXQgQ2Fubm90TWF0Y2hBbnl0aGluZyBp
biBmcmFnbWVudCBjb25zdHJ1Y3Rpb24gcGhhc2UsIHNvIG5ldmVyIHJlYWNoIGhlcmUuIik7CiB9
CiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJlcXVlc3RlZFBzZXVkb0Vs
ZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCA2MjZjYzFlZGNiMTZkZTM4ZjcxOTU3MTI5NTJkM2M4
ZmMxNDBlNzA0Li44ZWFjNTRhYzBkY2ZlNTA1ZDUwN2YyYTc4YjJhMzQ0NTIwYTA5NzA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMjM0LDYg
KzIzNCwxNCBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5
bGU+IHsKICAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9J
RCk7CiAgICAgICAgICAgICBtX2ZsYWdzIHw9IG9uZUJpdE1hc2sgPDwgKHBzZXVkb0JpdHNPZmZz
ZXQgLSAxICsgcHNldWRvKTsKICAgICAgICAgfQorICAgICAgICB2b2lkIHNldEhhc1BzZXVkb1N0
eWxlcyhQc2V1ZG9JZFNldCBwc2V1ZG9JZFNldCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKHBzZXVkb0lkU2V0KTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJhd1BzZXVkb0lkU2V0ID0g
cHNldWRvSWRTZXQuZGF0YSgpOworICAgICAgICAgICAgQVNTRVJUKChyYXdQc2V1ZG9JZFNldCAm
IFBVQkxJQ19QU0VVRE9JRF9NQVNLKSA9PSByYXdQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KHBzZXVkb0JpdHNPZmZzZXQgPj0gMSwgIihwc2V1ZG9CaXRzT2Zmc2V0IC0g
MSkgc2hvdWxkIGJlIHZhbGlkLiIpOworICAgICAgICAgICAgbV9mbGFncyB8PSAoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHJhd1BzZXVkb0lkU2V0KSA8PCAocHNldWRvQml0c09mZnNldCAtIDEpKTsK
KyAgICAgICAgfQogCiAgICAgICAgIEVUYWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEVUYWJsZUxheW91dD4oZ2V0VmFsdWUodGFibGVMYXlvdXRCaXRN
YXNrLCB0YWJsZUxheW91dE9mZnNldCkpOyB9CiAgICAgICAgIHZvaWQgc2V0VGFibGVMYXlvdXQo
RVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KSB7IHVwZGF0ZVZhbHVlKHRhYmxlTGF5b3V0LCB0YWJs
ZUxheW91dEJpdE1hc2ssIHRhYmxlTGF5b3V0T2Zmc2V0KTsgfQpAQCAtNTYxLDYgKzU2OSw3IEBA
IGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAg
IGJvb2wgaGFzQW55UHVibGljUHNldWRvU3R5bGVzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pIGNvbnN0OwogICAgIHZvaWQgc2V0SGFzUHNldWRvU3R5
bGUoUHNldWRvSWQgcHNldWRvKTsKKyAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlcyhQc2V1ZG9J
ZFNldCk7CiAgICAgYm9vbCBoYXNVbmlxdWVQc2V1ZG9TdHlsZSgpIGNvbnN0OwogCiAgICAgLy8g
YXR0cmlidXRlIGdldHRlciBtZXRob2RzCkBAIC0yMTU1LDYgKzIxNjQsMTEgQEAgaW5saW5lIHZv
aWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbykKICAgICBu
b25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRvU3R5bGUocHNldWRvKTsKIH0KIAoraW5saW5l
IHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlcyhQc2V1ZG9JZFNldCBwc2V1ZG9J
ZFNldCkKK3sKKyAgICBub25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRvU3R5bGVzKHBzZXVk
b0lkU2V0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUmVuZGVy
U3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlQ29uc3RhbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGVDb25zdGFudHMuaAppbmRleCAyYTRhZWY1YmU3NDgwZTIwMDM2MWIzODIyYWIwODNkNzVj
MGEzNThkLi43NWQ2ZDM5NjMxMzhkMjYzYzg4ZTY4YzE4ZDlkZTE2NTc3OTRkZTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFu
dHMuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBSZW5kZXJTdHlsZUNvbnN0YW50c19oCiAj
ZGVmaW5lIFJlbmRlclN0eWxlQ29uc3RhbnRzX2gKIAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xp
c3Q+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBQcmludENv
bG9yQWRqdXN0Qml0cyA9IDE7CkBAIC04MCw2ICs4Miw2MyBAQCBlbnVtIFBzZXVkb0lkIDogdW5z
aWduZWQgY2hhciB7CiAgICAgUFVCTElDX1BTRVVET0lEX01BU0sgPSAoKDEgPDwgRklSU1RfSU5U
RVJOQUxfUFNFVURPSUQpIC0gMSkgJiB+KCgxIDw8IEZJUlNUX1BVQkxJQ19QU0VVRE9JRCkgLSAx
KQogfTsKIAorY2xhc3MgUHNldWRvSWRTZXQgeworcHVibGljOgorICAgIFBzZXVkb0lkU2V0KCkK
KyAgICAgICAgOiBtX2RhdGEoMCkKKyAgICB7IH0KKworICAgIFBzZXVkb0lkU2V0KHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxQc2V1ZG9JZD4gaW5pdGlhbGl6ZXJMaXN0KQorICAgICAgICA6IG1fZGF0
YSgwKQorICAgIHsKKyAgICAgICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA6IGluaXRpYWxpemVy
TGlzdCkKKyAgICAgICAgICAgIGFkZChwc2V1ZG9JZCk7CisgICAgfQorCisgICAgc3RhdGljIFBz
ZXVkb0lkU2V0IGZyb21NYXNrKHVuc2lnbmVkIHJhd1BzZXVkb0lkU2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFBzZXVkb0lkU2V0KHJhd1BzZXVkb0lkU2V0KTsKKyAgICB9CisKKyAgICBib29s
IGhhcyhQc2V1ZG9JZCBwc2V1ZG9JZCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Rh
dGEgJiAoMSA8PCBwc2V1ZG9JZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQoUHNldWRvSWQgcHNl
dWRvSWQpCisgICAgeworICAgICAgICBtX2RhdGEgfD0gKDEgPDwgcHNldWRvSWQpOworICAgIH0K
KworICAgIHZvaWQgbWVyZ2UoUHNldWRvSWRTZXQgc291cmNlKQorICAgIHsKKyAgICAgICAgbV9k
YXRhIHw9IHNvdXJjZS5tX2RhdGE7CisgICAgfQorCisgICAgUHNldWRvSWRTZXQgb3BlcmF0b3Ig
Jihjb25zdCBQc2V1ZG9JZFNldCYgcHNldWRvSWRTZXQpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gUHNldWRvSWRTZXQobV9kYXRhICYgcHNldWRvSWRTZXQubV9kYXRhKTsKKyAgICB9CisK
KyAgICBQc2V1ZG9JZFNldCBvcGVyYXRvciB8KGNvbnN0IFBzZXVkb0lkU2V0JiBwc2V1ZG9JZFNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChtX2RhdGEgfCBwc2V1
ZG9JZFNldC5tX2RhdGEpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0
IFBzZXVkb0lkU2V0KHVuc2lnbmVkIHJhd1BzZXVkb0lkU2V0KQorICAgICAgICA6IG1fZGF0YShy
YXdQc2V1ZG9JZFNldCkKKyAgICB7IH0KKworICAgIHVuc2lnbmVkIG1fZGF0YTsKK307CisKIGVu
dW0gQ29sdW1uRmlsbCB7IENvbHVtbkZpbGxCYWxhbmNlLCBDb2x1bW5GaWxsQXV0byB9OwogCiBl
bnVtIENvbHVtblNwYW4geyBDb2x1bW5TcGFuTm9uZSA9IDAsIENvbHVtblNwYW5BbGwgfTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBkNjIzNTY3NWZmZmUxMjk4M2QwYmUwOWMyZjU3MGUzYTY4MDhiYmM2Li5lZmNmNDc4NDE5
NzZjMzZlMWIwNmYwMDQ3YTM1N2MwYjk5NDJkNjIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTQtMTEtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgQ1NTNCBTZWxlY3RvcnM6IEFkZCBtdWx0aXBsZSBwc2V1ZG8gZWxlbWVudHMgc3VwcG9ydCB0
byA6bWF0Y2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM4MjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdt
ZW50cy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1
ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgSW4gdGhpcyB0ZXN0LCB3ZSBlbnN1cmUgdGhhdCBwc2V1ZG8gZWxlbWVudHMgc2VsZWN0b3Ig
aW4gdGhlCisgICAgICAgIG5vbi1yaWdodG1vc3QgZnJhZ21lbnRzIGJlY29tZXMgdW5tYXRjaGVk
LgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVz
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3BzZXVkby1l
bGVtZW50LWluc2lkZS1tYXRjaGVzLmh0bWw6IEFkZGVkLgorCiAyMDE0LTExLTA2ICBCZW0gSm9u
ZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0ZXN0aGFybmVz
cy5qcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
c2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1u
b24tcmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MDg2Njhk
OTI4NzdmMGM3ZDE4MWJlYjQzMmFjZWU4ZmJjMDEzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZy
YWdtZW50cy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhZG9jdHlwZSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy50YXJnZXQgeworICAgIGJhY2tncm91bmQtY29sb3I6
IGxpbWU7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxwIGNsYXNz
PSJ0YXJnZXQiIGlkPSJ0YXJnZXQxIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAg
ICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MiI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVl
bi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDMiPlRoaXMgbGluZSBzaG91
bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ0Ij5UaGlz
IGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9u
LXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Bz
ZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTFiMDM0NWE5NjMzOGYxYjhmNmFlOWFkNjczMzAzODk2NDhlODE5MwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdo
dG1vc3QtZnJhZ21lbnRzLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLnRhcmdldCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
bGltZTsKK30KKworOjphZnRlciAjdGFyZ2V0MSwKKzo6YmVmb3JlICN0YXJnZXQxLAorOjpmaXJz
dC1saW5lICN0YXJnZXQxLAorOjpmaXJzdC1sZXR0ZXIgI3RhcmdldDEsCis6Oi13ZWJraXQtcmVz
aXplciAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXIgI3RhcmdldDEsCis6Oi13ZWJraXQt
c2Nyb2xsYmFyLWJ1dHRvbiAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyICN0
YXJnZXQxLAorOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1z
Y3JvbGxiYXItdHJhY2sgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNl
ICN0YXJnZXQxLAorOjpzZWxlY3Rpb24gI3RhcmdldDEKK3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZWQ7Cit9CisKKzo6YWZ0ZXIgPiAjdGFyZ2V0MiwKKzo6YmVmb3JlID4gI3RhcmdldDIsCis6
OmZpcnN0LWxpbmUgPiAjdGFyZ2V0MiwKKzo6Zmlyc3QtbGV0dGVyID4gI3RhcmdldDIsCis6Oi13
ZWJraXQtcmVzaXplciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhciA+ICN0YXJnZXQy
LAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24gPiAjdGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3Jv
bGxiYXItY29ybmVyID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iID4gI3Rh
cmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrID4gI3RhcmdldDIsCis6Oi13ZWJraXQt
c2Nyb2xsYmFyLXRyYWNrLXBpZWNlID4gI3RhcmdldDIsCis6OnNlbGVjdGlvbiA+ICN0YXJnZXQy
Cit7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6OmFmdGVyICsgI3RhcmdldDMs
Cis6OmJlZm9yZSArICN0YXJnZXQzLAorOjpmaXJzdC1saW5lICsgI3RhcmdldDMsCis6OmZpcnN0
LWxldHRlciArICN0YXJnZXQzLAorOjotd2Via2l0LXJlc2l6ZXIgKyAjdGFyZ2V0MywKKzo6LXdl
YmtpdC1zY3JvbGxiYXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uICsg
I3RhcmdldDMsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciArICN0YXJnZXQzLAorOjotd2Vi
a2l0LXNjcm9sbGJhci10aHVtYiArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFj
ayArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSArICN0YXJnZXQz
LAorOjpzZWxlY3Rpb24gKyAjdGFyZ2V0MworeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsK
K30KKworOjphZnRlciB+ICN0YXJnZXQ0LAorOjpiZWZvcmUgfiAjdGFyZ2V0NCwKKzo6Zmlyc3Qt
bGluZSB+ICN0YXJnZXQ0LAorOjpmaXJzdC1sZXR0ZXIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1y
ZXNpemVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyIH4gI3RhcmdldDQsCis6Oi13
ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9sbGJhci1j
b3JuZXIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgfiAjdGFyZ2V0NCwK
Kzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxi
YXItdHJhY2stcGllY2UgfiAjdGFyZ2V0NCwKKzo6c2VsZWN0aW9uIH4gI3RhcmdldDQKK3sKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXY+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDEiPlRoaXMgbGluZSBzaG91
bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQyIj5UaGlz
IGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFy
Z2V0MyI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdl
dCIgaWQ9InRhcmdldDQiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorPC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9w
c2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zZWE2Zjc2MDU1ZWE0ODU5NjdkZjAyZDcxYzUzNWYwMWM3ZTdlMmMyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1l
bnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDc1IEBACis8IWRvY3R5
cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTo6Zmlyc3QtbGV0dGVy
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0Mjo6YWZ0ZXIgewor
ICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNvY29hIjsKK30KKwor
I3RhcmdldDM6OmJlZm9yZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250
ZW50OiAiY2FwcHVjY2lubyI7Cit9CisKKyN0YXJnZXQ0OjpiZWZvcmUsCisjdGFyZ2V0NDo6YWZ0
ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7
Cit9CisKKyN0YXJnZXQ1LAorI3RhcmdldDU6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDYsCisjdGFyZ2V0Njo6Zmlyc3QtbGV0dGVyIHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NywKKyN0YXJnZXQ3Ojpi
ZWZvcmUsCisjdGFyZ2V0Nzo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cisg
ICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKy8qIGZpcnN0IGxldHRlciBvZiBiZWZvcmUgY29u
dGVudCBpcyBjb2xvcmVkIGJsdWUuICovCisjdGFyZ2V0MTI6OmFmdGVyLAorI3RhcmdldDEyOjpi
ZWZvcmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3Vu
ZCI7Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBibHVlOworfQorCisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAg
aWQ9InRhcmdldDEiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0Ljwv
cD4KKyAgICA8cCBpZD0idGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhh
cyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUg
Om1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVkbyBlbGVt
ZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NSI+
cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3Rv
cnMgc2hvdWxkIGJlIGNoZWNrZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxl
bWVudCBpbnNpZGUgbmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAg
PHAgaWQ9InRhcmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91bGQg
YmUgY29sb3JlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50IGluc2lk
ZSA6bm90IGRvZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5Ij46OmZp
cnN0LWxpbmUgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+Cisg
ICAgPHAgaWQ9InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1v
c3QgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDExIj5w
c2V1ZG8gZWxlbWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0Y2hlcyBh
bHdheXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9hZnRlciBj
b250ZW50cyBhcmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3JlIGNvbnRl
bnQgaXMgY29sb3JlZCBibHVlLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1yaWdodG1v
c3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDE0
Ij48cD5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4K
KyAgICA8cCBpZD0idGFyZ2V0MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFz
IG5vIGVmZmVjdC48L3A+PC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hl
cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRl
LW1hdGNoZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTMzOTU2YWYzODA3ODY4Y2FlY2NkYWVkN2IyYzJi
MGUxYjcyYzJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMv
cHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbApAQCAtMCwwICsxLDk3IEBACis8IWRv
Y3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTptYXRjaGVzKDo6
Zmlyc3QtbGV0dGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3Rhcmdl
dDI6bWF0Y2hlcyg6OmFmdGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBj
b250ZW50OiAiY29jb2EiOworfQorCisjdGFyZ2V0MzptYXRjaGVzKDo6YmVmb3JlKSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiY2FwcHVjY2lubyI7Cit9CisK
KyN0YXJnZXQ0Om1hdGNoZXMoOjpiZWZvcmUsIDo6YWZ0ZXIpIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisjdGFyZ2V0NTptYXRjaGVz
KDo6Zmlyc3QtbGV0dGVyLCBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKwor
I3RhcmdldDY6bWF0Y2hlcyhwLCA6bWF0Y2hlcyhwLCA6OmZpcnN0LWxldHRlcikpIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NzptYXRjaGVzKDo6YmVmb3JlLCA6
OmFmdGVyLCAqKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAi
YXJvdW5kIjsKK30KKworI3RhcmdldDg6bm90KDptYXRjaGVzKDo6Zmlyc3QtbGluZSkpIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzo6Zmlyc3QtbGluZSAjdGFyZ2V0OSB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6bWF0Y2hlcyg6OmZpcnN0LWxpbmUpICN0
YXJnZXQxMCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0MTE6bWF0
Y2hlcyg6OmZpcnN0LWxpbmUgPiBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQor
CisvKiBmaXJzdCBsZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLiAqLwor
I3RhcmdldDEyOm1hdGNoZXMoOjpmaXJzdC1sZXR0ZXIsIDo6YWZ0ZXIsIDo6YmVmb3JlKSB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsKK30KKwor
I3RhcmdldDEyOjpmaXJzdC1sZXR0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7Cit9
CisKKyN0YXJnZXQxMzptYXRjaGVzKDo6YWZ0ZXIgPiBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogcmVkOworICAgIGNvbnRlbnQ6ICJidWciOworfQorCisjdGFyZ2V0MTQ6bWF0Y2hlcyg6OmFm
dGVyKSA+IHB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0MTU6bWF0
Y2hlcyg6OmFmdGVyID4gcCkgPiBweworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKwor
PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj4KKyAgICA8cCBpZD0idGFyZ2V0MSI+cHNl
dWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0
YXJnZXQyIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+Cisg
ICAgPHAgaWQ9InRhcmdldDMiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZm
ZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NCI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRj
aGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ1Ij5wc2V1ZG8gZWxlbWVudCBp
bnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdCwgc28gYWxsIHNlbGVjdG9ycyBzaG91bGQgYmUgY2hl
Y2tlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDYiPnBzZXVkbyBlbGVtZW50IGluc2lkZSBuZXN0
ZWQgOm1hdGNoZXMgc2hvdWxkIGhhdmUgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NyI+
Ym90aCBsaW5lIGl0c2VsZiBhbmQgYmVmb3JlL2FmdGVyIHNob3VsZCBiZSBjb2xvcmVkLjwvcD4K
KyAgICA8cCBpZD0idGFyZ2V0OCI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDpub3QgZG9lc24ndCBo
YXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDkiPjo6Zmlyc3QtbGluZSBpbiBub24t
cmlnaHRtb3N0IGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0
MTAiPjptYXRjaGVzKDo6Zmlyc3QtbGluZSkgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdh
eXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTEiPnBzZXVkbyBlbGVtZW50IGlu
IG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgaW5zaWRlIDptYXRjaGVzIGFsd2F5cyB1bm1hdGNoZXMu
PC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMiI+YmVmb3JlL2FmdGVyIGNvbnRlbnRzIGFyZSBjb2xv
cmVkIGxpbWUgYW5kIGZpcnN0LWxldHRlciBvZiBiZWZvcmUgY29udGVudCBpcyBjb2xvcmVkIGJs
dWUuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMyI+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxlbWVu
dCBoYXMgbm8gZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTQiPjxwPm5vbi1yaWdodG1v
c3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+PC9wPgorICAgIDxwIGlkPSJ0YXJn
ZXQxNSI+PHA+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxlbWVudCBoYXMgbm8gZWZmZWN0LjwvcD48
L3A+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241169</attachid>
            <date>2014-11-07 02:01:41 -0800</date>
            <delta_ts>2014-11-07 05:39:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141107190151.patch</filename>
            <type>text/plain</type>
            <size>53844</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUyMzg5MTNjODE0ZWQ2
NWNmZTk4MGIyYjk2MzQ5MDAwMzMwNmU3NS4uY2UwOTUxMzc5MDQ4ZjJjOWEyMDZkZTljMmZlNGEz
MzRiM2UzMGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXIgaW4gdGhlIG5vbi1yaWdodG1vc3QKKyAgICAgICAgZnJhbWduZXQsIGl0IGlz
IGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1cGRh
dGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRv
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9J
ZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OlBz
ZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0
b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXZWJD
b3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMDYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbGFtYmRhIGZ1bmN0aW9ucyBpbiBEb2N1bWVu
dE9yZGVyZWRNYXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNDFj
Zjc1MDYxYzA3YzkyZjg1NjRjZjdkZWVhY2Y5NjdkOGVmOTUxZC4uM2JkODczYmNlNDY4Nzg4ZDQw
YjNlZTZmYThmNmY1Y2RmYjI0MTkxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTgsNiArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03
MSw2ICs3Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwgdmlzaXRlZE1h
dGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdS
dWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5h
YmxlZCkKICAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKICAg
ICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgLCBwc2V1ZG9F
bGVtZW50RWZmZWN0aXZlKHRydWUpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNl
KQogICAgICAgICAsIGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKICAgICB7IH0KQEAgLTgwLDYg
KzgyLDcgQEAgc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyA6IHB1YmxpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWMKICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZp
c2l0ZWRNYXRjaFR5cGU7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGZpcnN0U2VsZWN0b3JPZlRo
ZUZyYWdtZW50OwogICAgIGJvb2wgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3M7CisgICAgYm9vbCBw
c2V1ZG9FbGVtZW50RWZmZWN0aXZlOwogICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAg
IGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOwogfTsKQEAgLTE3MSwzNiArMTc0LDMzIEBAIHN0YXRp
YyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRl
eHQmIHByb3ZpZGVkQ29udGV4dCkgY29uc3QKIHsKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzIGNvbnRleHQocHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7Ci0gICAgUHNl
dWRvSWQgcHNldWRvSWQgPSBOT1BTRVVETzsKLSAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250
ZXh0LCBwc2V1ZG9JZCkgIT0gU2VsZWN0b3JNYXRjaGVzKQorICAgIFBzZXVkb0lkU2V0IHBzZXVk
b0lkU2V0OworICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4
dCwgcHNldWRvSWRTZXQpOworICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9y
TWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lk
ICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRvSWQpCisgICAgaWYgKGNv
bnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBz
ZXVkb0lkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lk
ID09IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURPKSB7Ci0gICAgICAgIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHNldWRvSWQgPCBG
SVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
LT5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgaWYgKGNvbnRleHQucHNldWRvSWQg
PT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQpIHsKKyAgICAgICAgUHNldWRvSWRTZXQgcHVibGlj
UHNldWRvSWRTZXQgPSBwc2V1ZG9JZFNldCAmIFBzZXVkb0lkU2V0Ojpmcm9tTWFzayhQVUJMSUNf
UFNFVURPSURfTUFTSyk7CisgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHVibGljUHNldWRvSWRTZXQpCisgICAgICAgICAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGVzKHB1YmxpY1BzZXVkb0lkU2V0KTsK
IAogICAgICAgICAvLyBXaGVuIGlnbm9yaW5nIHZpcnR1YWwgcHNldWRvIGVsZW1lbnRzLCB0aGUg
Y29udGV4dCdzIHBzZXVkbyBzaG91bGQgYWxzbyBiZSBOT1BTRVVETyBidXQgdGhhdCBkb2VzCiAg
ICAgICAgIC8vIG5vdCBjYXVzZSBhIGZhaWx1cmUuCi0gICAgICAgIHJldHVybiBjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRv
RWxlbWVudHM7CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMgfHwgcmVzdWx0Lm1h
dGNoVHlwZSA9PSBNYXRjaFR5cGU6OkVsZW1lbnQ7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbykKK2lubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9F
bGVtZW50KGNvbnN0IFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpCiB7Ci0gICAgaWYg
KGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
U0NST0xMQkFSX1RIVU1CCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0JV
VFRPTgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9UUkFDSwotICAgICAg
ICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9UUkFDS19QSUVDRQotICAgICAgICB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIpIHsKKyAgICBQc2V1ZG9JZFNldCBzY3Jv
bGxiYXJJZFNldCA9IHsgU0NST0xMQkFSLCBTQ1JPTExCQVJfVEhVTUIsIFNDUk9MTEJBUl9CVVRU
T04sIFNDUk9MTEJBUl9UUkFDSywgU0NST0xMQkFSX1RSQUNLX1BJRUNFLCBTQ1JPTExCQVJfQ09S
TkVSIH07CisgICAgaWYgKGR5bmFtaWNQc2V1ZG9JZFNldCAmIHNjcm9sbGJhcklkU2V0KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAvLyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5
cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNjcm9sbGJhci1saWtlIHBzZXVkbyBlbGVt
ZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBzZXVkbyBlbGVt
ZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09IFJFU0laRVI7CisgICAgcmV0dXJuIGR5
bmFtaWNQc2V1ZG9JZFNldC5oYXMoUkVTSVpFUik7CiB9CiAKIHN0YXRpYyBTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkK
QEAgLTIxOSwzNCArMjE5LDM1IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAvLyAqIFNlbGVj
dG9yRmFpbHNMb2NhbGx5ICAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQg
ZQogLy8gKiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9y
IGUgYW5kIGFueSBzaWJsaW5nIG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0g
dGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBl
Ci1TZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVs
eShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbykgY29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JD
aGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMm
IGNvbnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpIGNvbnN0CiB7CisgICAg
TWF0Y2hUeXBlIG1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKwogICAgIC8vIFRoZSBm
aXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2guCi0gICAgaWYgKCFjaGVja09uZShjb250ZXh0KSkK
LSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgIGlmICghY2hlY2tPbmUo
Y29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBtYXRjaFR5cGUpKQorICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAKICAgICBp
ZiAoY29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dCkgewotICAgICAgICAvLyBJbiBTZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxlbWVudCBp
bnNpZGUgYSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3VlIDcpLgot
ICAgICAgICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xh
cmlmaWVzIHRoaXMgY2FzZS4KLSAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MpCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgIGlmICghY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlKQorICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwog
CiAgICAgICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkg
ewogICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBjb250ZXh0LmVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IGNvbnRleHQuc2VsZWN0b3ItPnZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYg
cm9vdC0+dHlwZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xvY2Fs
bHkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
TWF0Y2g6OlNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgfHwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlF1ZXJ5aW5nUnVsZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNl
bGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBD
U1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSk7CiAgICAgICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAg
ICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOworICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1
ZG9JZFNldC5hZGQocHNldWRvSWQpOworICAgICAgICAgICAgbWF0Y2hUeXBlID0gTWF0Y2hUeXBl
OjpWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1Niw0
NyArMjU3LDUwIEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAgICAgLy8gUHJlcGFyZSBuZXh0
IHNlbGVjdG9yCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGhpc3RvcnlTZWxlY3RvciA9IGNvbnRl
eHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKICAgICBpZiAoIWhpc3RvcnlTZWxlY3RvcikKLSAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0
OjptYXRjaGVzKG1hdGNoVHlwZSk7CiAKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIG5l
eHRDb250ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNl
bGVjdG9yOwogCi0gICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwog
ICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAg
Ly8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRv
SWQKLSAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5w
c2V1ZG9JZCAhPSBkeW5hbWljUHNldWRvKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5OworICAgICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAm
JiAhZHluYW1pY1BzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBzZXVkb0lkKSkKKyAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKIAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRv
IG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxh
dGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rv
cjo6Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlz
aXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQg
PSBOT1BTRVVETzsKKyAgICAgICAgLy8gVmlydHVhbCBwc2V1ZG8gZWxlbWVudCBpcyBvbmx5IGVm
ZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgorICAgICAgICBuZXh0Q29udGV4dC5w
c2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxh
dGlvbikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CiAgICAgICAgIG5leHRD
b250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAg
bmV4dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxl
Y3RvcjsKLSAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgbmV4
dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgZm9yICg7IG5leHRDb250
ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRD
b250ZXh0KSkgewotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmICht
YXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRT
ZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzIHx8IHJl
c3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0
Y2hUeXBlKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7
CiAgICAgICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0
Q29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIW5leHRDb250ZXh0LmVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
bmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSBudWxscHRyOwotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSBtYXRjaFJlY3Vyc2l2ZWx5
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmIChtYXRj
aCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFt
aWNQc2V1ZG87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CisgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwogICAgICAgICB9CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGph
Y2VudDoKQEAgLTMwNiw1NiArMzEwLDU5IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAKICAg
ICAgICAgICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0VsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxz
QWxsU2libGluZ3MpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNl
dEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwor
ICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNo
ID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0
ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9OwotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxsU2libGluZ3MpOwogCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6CiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxp
ZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1h
a2UgYW4gZXhjZXB0aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBh
IHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8g
Zm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9s
bGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkbyk7Ci0g
ICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG8gPT0g
U0VMRUNUSU9OOwotICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8IGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFtaWNQc2V1ZG8g
IT0gTk9QU0VVRE8KKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvID0gaGFz
U2Nyb2xsYmFyUHNldWRvRWxlbWVudChkeW5hbWljUHNldWRvSWRTZXQpOworICAgICAgICBuZXh0
Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvSWRTZXQuaGFzKFNFTEVD
VElPTik7CisgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNv
bHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0
CiAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvCiAgICAgICAg
ICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBuZXh0Q29udGV4dC5z
ZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQotICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1cm4gbWF0Y2hS
ZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7Cisg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShtYXRjaFJlY3Vy
c2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvSWRTZXQpLCBtYXRjaFR5cGUpOwogCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAgICAg
ICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1lbnQtPnNoYWRvd0hv
c3QoKTsKICAgICAgICAgICAgIGlmICghc2hhZG93SG9zdE5vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKICAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKICAgICAgICAgICAg
IG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2Vs
ZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVs
eShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogfQogCiBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1
ZU1hdGNoZXMoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIENTU1NlbGVjdG9yOjpNYXRjaCBt
YXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRp
dmUpCkBAIC00OTAsNyArNDk3LDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZl
SW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb24KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBz
ZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIE1hdGNoVHlwZSYgbWF0Y2hUeXBlKSBjb25z
dAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7
CkBAIC01MzAsMTMgKzUzNywxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29u
c3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJz
dCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vi
c2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBz
dWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlv
bmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2Vs
ZWN0b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2Vs
ZWN0b3JPZlRoZUZyYWdtZW50ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOworICAgICAgICAgICAg
ICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAKICNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SU19MRVZFTDQpCi0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3Jl
RHluYW1pY1BzZXVkbykubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogI2Vsc2UKQEAgLTU0OSw3
ICs1NTcsOSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1YmNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJjb250
ZXh0KSkKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSA6bm90IGNhbm5vdCBjb250YWluIHBzZXVk
byBlbGVtZW50cywgdGhlcmUncyBubyBlZmZlY3Qgb24gbWF0Y2hlZFRvTm9uUHNldWRvRWxlbWVu
dC4KKyAgICAgICAgICAgICAgICBNYXRjaFR5cGUgaWdub3JlTWF0Y2hUeXBlID0gTWF0Y2hUeXBl
OjpFbGVtZW50OworICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbywgaWdub3JlTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgfQpAQCAtNjY1
LDE2ICs2NzUsMzQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsK
ICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKLSAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJz
ZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3Ip
KSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0
KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJz
ZWxlY3RvcjsKLSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZy
YWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2
ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbCBoYXNNYXRjaGVkQW55dGhpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9y
LT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NT
U2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBjb250
ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmU7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRl
eHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOworICAgICAgICAgICAg
ICAgICAgICBQc2V1ZG9JZFNldCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldDsKKyAgICAgICAgICAg
ICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0
LCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXaGVuIHBzZXVkbyBlbGVtZW50cyBhcmUgbm90IGVmZmVjdGl2
ZSBpbiB0aGlzIGZyYWdtZW50IChlLmcuIGl0J3Mgbm90IHJpZ2htb3N0IGZyYWdtZW50KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sg
YWxsIHNlbGVjdG9ycyB0byBjb2xsZWN0IHBzZXVkbyBlbGVtZW50IGlkcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWxvY2FsRHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaFR5cGUgPT0g
TWF0Y2hUeXBlOjpFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVHlw
ZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1p
Y1BzZXVkb0lkU2V0Lm1lcmdlKGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc01hdGNoZWRBbnl0aGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc01hdGNo
ZWRBbnl0aGluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNlaG9sZGVyU2hvd246CiAg
ICAgICAgICAgICBpZiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkg
ewpAQCAtNzcwLDEwICs3OTgsMTEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0
KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1
ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgICAgICBzdWJDb250ZXh0LnBzZXVkb0VsZW1lbnRF
ZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0
b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0
b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4
dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVj
dG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
ID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdu
b3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZl
bHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gTWF0Y2g6OlNlbGVj
dG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyMywxMiArOTUyLDEzIEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0KSBjb25zdAogICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBz
ZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxl
Y3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxl
Y3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250
ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBzdWJDb250ZXh0
LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtYXRjaFJl
Y3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0
Y2hlcykKKyAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZh
bHNlOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAg
ICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1
ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTQ1LDEwICs5
NzUsMTEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb24KICAgICAgICAgc3ViY29udGV4dC5lbGVt
ZW50ID0gJmVsZW1lbnQ7CiAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3Rv
cjsKICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7Cisg
ICAgICAgIHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAg
ICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0g
ICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAg
aWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0g
U2VsZWN0b3JNYXRjaGVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVk
byA9PSBOT1BTRVVETyk7CisgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87
CisgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghaWdub3JlRHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCA4MDc3
NzE3NDQ1ZWEzNjg1NzQ2NDljMTQ1MTMzZDg3N2MzNjdhMjZjLi5lMjRiNWM2MGYzM2Y1YmNkODlh
Y2ZkMDMxY2EwNjQyYTEwZjk4ODU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5o
CkBAIC00Myw3ICs0MywzMSBAQAogCiBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgZW51bSBNYXRjaCB7IFNlbGVj
dG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5n
cywgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKyAgICBlbnVtIGNsYXNzIE1hdGNoIHsgU2Vs
ZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzLCBTZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OworCisgICAgZW51bSBjbGFzcyBNYXRjaFR5
cGUgeyBWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHksIEVsZW1lbnQgfTsKKworICAgIHN0cnVjdCBN
YXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRjaFR5cGUgbWF0
Y2hUeXBlOworCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBtYXRjaGVzKE1hdGNoVHlwZSBt
YXRjaFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB7IE1hdGNoOjpTZWxlY3Rv
ck1hdGNoZXMsIG1hdGNoVHlwZSB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE1hdGNo
UmVzdWx0IHVwZGF0ZVdpdGhNYXRjaFR5cGUoTWF0Y2hSZXN1bHQgcmVzdWx0LCBNYXRjaFR5cGUg
bWF0Y2hUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWF0Y2hUeXBlID09IE1hdGNo
VHlwZTo6VmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5t
YXRjaFR5cGUgPSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1
bHQgZmFpbHMoTWF0Y2ggbWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB7IG1h
dGNoLCBNYXRjaFR5cGU6OkVsZW1lbnQgfTsKKyAgICAgICAgfQorICAgIH07CiAKIHB1YmxpYzoK
ICAgICBlbnVtIGNsYXNzIE1vZGUgOiB1bnNpZ25lZCBjaGFyIHsKQEAgLTgzLDggKzEwNyw4IEBA
IGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxp
bmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAgICBNYXRjaCBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9J
ZCYpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYpIGNvbnN0OworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkU2V0JikgY29uc3Q7CisgICAgYm9vbCBj
aGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCBN
YXRjaFR5cGUmKSBjb25zdDsKICAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmLCBFbGVtZW50JiwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0Jikg
Y29uc3Q7CiAKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyYsIGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggMWUzM2E5NzkyZWI5NWQx
MGRjNDc2N2JmZDJmNGI3ZmVhMTlkMWFiNC4uMDQ4OTIyNTQ2NzNjODJkNTZjYmNhMmFiYTg4MzM0
NTMzZjA0ODRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNw
cApAQCAtMzcyLDcgKzM3Miw5IEBAIGVudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwgewogICAgIElu
RnVuY3Rpb25hbFBzZXVkb1R5cGUgPSAxCiB9OwogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0
cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNv
bnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRz
TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgVmlzaXRlZE1vZGUmKTsKK2VudW0gY2xhc3MgUHNldWRvRWxlbWVudE1hdGNoaW5n
QmVoYXZpb3IgeyBDYW5NYXRjaCwgTmV2ZXJNYXRjaCB9OworCitzdGF0aWMgRnVuY3Rpb25UeXBl
IGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxl
Y3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJh
Z21lbnRzTGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlv
cik7CiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3Rv
ckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIHVuc2lnbmVkIGxldmVsID0gMCk7CiAK
QEAgLTQ2Miw3ICs0NjQsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRTY3JvbGxi
YXJQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdAogICAgIHJldHVybiBG
dW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250
ZXh0LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJs
ZWQsIFZpc2l0ZWRNb2RlJiB2aXNpdGVkTW9kZSkKK3N0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBl
IGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjdG9y
RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBGcmFn
bWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
IHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0
ZWRNb2RlJiB2aXNpdGVkTW9kZSwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgcHNldWRv
RWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpCiB7CiAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
VHlwZSB0eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7CiAgICAgc3dpdGNoICh0eXBl
KSB7CkBAIC02MzYsNyArNjM4LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNl
dWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlz
dC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50
TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUg
aWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICAg
ICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxl
Y3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6
OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgICAgIEZ1
bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3Is
IHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1
bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9y
OjpOZXZlck1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShp
Z25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2Fi
bGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI6CkBAIC02NzEsNyArNjczLDcgQEAgc3Rh
dGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3Iq
IHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2Vs
ZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAg
ICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAg
ICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsK
LSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1
Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9v
dEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZy
YWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywg
RnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgUHNldWRvRWxl
bWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2gpOwogICAgICAgICAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6
dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwog
CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNzIGZpbHRl
ciwgQ2Fubm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBwYXNzZXMu
CkBAIC02OTUsNyArNjk3LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRv
Q2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9y
TGlzdCgpLT5maXJzdCgpOyByb290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChyb290U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFn
bWVudExpc3QgZnJhZ21lbnRMaXN0OwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9y
ZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rp
b25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3Is
IHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlv
bmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJs
ZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3Vi
RnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JD
b250ZXh0LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9U
eXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3Jl
VmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09
IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9u
YWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnJh
Z21lbnQgYWx3YXlzIHVubWF0Y2ggYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0
IHRvIGFueUZyYWdtZW50cy4KQEAgLTc1OSw3ICs3NjEsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0
aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBT
ZWxlYwogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVj
dG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZy
YWdtZW50TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9k
ZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAg
IEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJz
ZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVu
Y3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVj
dG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6
SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRN
YXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhh
dmlvcik7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVk
TW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBm
dW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0
aGlzIGZyYWdtZW50IG5ldmVyIG1hdGNoZXMgYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5z
ZXJ0IGl0IHRvIG1hdGNoZXNMaXN0LgpAQCAtNzY5LDYgKzc3MSwxMCBAQCBzdGF0aWMgaW5saW5l
IEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yLCBTZWxlYwogICAgICAgICAgICAgICAgIGlmIChsb2NhbEZ1bmN0aW9uVHlwZSA9PSBGdW5j
dGlvblR5cGU6OkNhbm5vdENvbXBpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CiAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ3Vy
cmVudGx5IHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgOm1hdGNoZXMgYXJlIHN1cHBvcnRlZCBpbiBu
b24tSklUIGNvZGUuCisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yRnJhZ21lbnRzLmZpcnN0
KCkucHNldWRvRWxlbWVudFNlbGVjdG9yKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOworCiAgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBl
ID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgbG9jYWxGdW5jdGlv
blR5cGUpOwogICAgICAgICAgICAgICAgIG1hdGNoZXNMaXN0LmFwcGVuZChzZWxlY3RvckZyYWdt
ZW50cyk7CiAgICAgICAgICAgICB9CkBAIC04MDksNyArODE1LDcgQEAgaW5saW5lIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBy
b290U2VsZWMKICAgICAvLyBJbiBRdWVyeVNlbGVjdG9yIGNvbnRleHQsIDp2aXNpdGVkIGFsd2F5
cyBoYXMgbm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBpc3N1ZXMuCiAgICAgYm9vbCB2aXNpdGVk
TWF0Y2hFbmFibGVkID0gc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlT
ZWxlY3RvcjsKIAotICAgIG1fZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RT
ZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1fc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50
c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3Qs
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRlZE1vZGUpOworICAgIG1fZnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1f
c2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3QsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRl
ZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpDYW5NYXRjaCk7CiAgICAgaWYg
KG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSAmJiBtX2Z1bmN0
aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgIGNv
bXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihtX3NlbGVjdG9yRnJhZ21lbnRzKTsKIH0KQEAg
LTgyNSw3ICs4MzEsNyBAQCBzdGF0aWMgYm9vbCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudFNjcm9sbGJhclRyYWNrUGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5
cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNl
bGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxl
Y3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3Np
dGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitzdGF0aWMgRnVuY3Rpb25U
eXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBT
ZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2Vs
ZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9z
aXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0
Y2hpbmdCZWhhdmlvciBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcikKIHsKICAgICBTZWxl
Y3RvckZyYWdtZW50IGZyYWdtZW50OwogICAgIEZyYWdtZW50UmVsYXRpb24gcmVsYXRpb25Ub1By
ZXZpb3VzRnJhZ21lbnQgPSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3Q7CkBAIC04NzAsNyAr
ODc2LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NT
U2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIGlmIChmcmFnbWVu
dC5wc2V1ZG9FbGVtZW50U2VsZWN0b3IgJiYgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGZyYWdt
ZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpCiAgICAgICAg
ICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0
aW9uVHlwZSwgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQp
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0
UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUo
KnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQ
b3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRlZE1vZGUpKTsKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25U
eXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250
ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQb3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlz
aXRlZE1vZGUsIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yKSk7CiAgICAgICAgICAgICBp
ZiAoIXBzZXVkb0NsYXNzT25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSgqc2VsZWN0b3IpKQog
ICAgICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBm
YWxzZTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5u
b3RDb21waWxlIHx8IGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55
dGhpbmcpCkBAIC04ODQsOSArODkwLDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RG
cmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAg
ICAgICAgIGlmIChzZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55
dGhpbmc7CiAKLSAgICAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0LCBhIHBzZXVkbyBl
bGVtZW50IGluc2lkZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVuZGVmaW5lZCAoaXNz
dWUgNykuCi0gICAgICAgICAgICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwg
dGhlIHNwZWMgY2xhcmlmaWVzIHRoaXMgY2FzZS4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudExl
dmVsID09IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICAg
ICAgaWYgKHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yID09IFBzZXVkb0VsZW1lbnRNYXRj
aGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiAKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0
b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsKQEAgLTk1OCwxMiArOTYyLDE1IEBAIHN0YXRpYyBG
dW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2Vs
ZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7
CiAgICAgICAgIH0KIAorICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkg
ZWZmZWN0aXZlIGluIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVkb0VsZW1l
bnRNYXRjaGluZ0JlaGF2aW9yID0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVy
TWF0Y2g7CisKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdt
ZW50UmVsYXRpb25Gb3JTZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAgZnJhZ21l
bnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudDsK
ICAgICAgICAgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbkluUm9v
dEZyYWdtZW50czsKICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFnbWVu
dC5yZWxhdGlvblRvTGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09
IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJh
Z21lbnRMZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdtZW50
Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0b3JG
cmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3RvckZy
YWdtZW50KCk7CkBAIC0yODUwLDcgKzI4NTcsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0Jgog
ICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVy
blZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAg
IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKQEAgLTM1NDgsMTYgKzM1NTUsMTEgQEAgdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNldWRvQ2xh
c3MoQXNzZW1ibGVyOjoKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6
Okp1bXBMaXN0JiwgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgQVNT
RVJUKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvcik7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3Is
ICJXaGVuIHRoZSBmcmFnbWVudCBoYXMgcHNldWRvIGVsZW1lbnQsIHRoZSBzZWxlY3RvciBiZWNv
bWVzIENhbm5vdE1hdGNoQW55dGhpbmcgZm9yIFF1ZXJ5U2VsZWN0b3IgYW5kIHRoaXMgdGVzdCBm
dW5jdGlvbiBpcyBub3QgY2FsbGVkLiIpOwotCi0gICAgaWYgKCFmcmFnbWVudE1hdGNoZXNUaGVS
aWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpIHsKLSAgICAgICAg
TG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAg
ICAgIGxvYWRDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdDb250ZXh0KEFz
c2VtYmxlcjo6RXF1YWwsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVzb2x2aW5nU3R5bGUsIGNo
ZWNraW5nQ29udGV4dCkpOwotICAgIH0KKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZyYWdtZW50
TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSwg
IlZpcnR1YWwgcHNldWRvIGVsZW1lbnRzIGhhbmRsaW5nIGlzIG9ubHkgZWZmZWN0aXZlIGluIHRo
ZSByaWdodG1vc3QgZnJhZ21lbnQuIElmIHRoZSBjdXJyZW50IGZyYWdtZW50IGlzIG5vdCByaWdo
dG1vc3QgZnJhZ21lbnQsIENTUyBKSVQgY29tcGlsZXIgbWFrZXMgaXQgQ2Fubm90TWF0Y2hBbnl0
aGluZyBpbiBmcmFnbWVudCBjb25zdHJ1Y3Rpb24gcGhhc2UsIHNvIG5ldmVyIHJlYWNoIGhlcmUu
Iik7CiB9CiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJlcXVlc3RlZFBz
ZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCA2MjZjYzFlZGNiMTZkZTM4ZjcxOTU3MTI5
NTJkM2M4ZmMxNDBlNzA0Li44ZWFjNTRhYzBkY2ZlNTA1ZDUwN2YyYTc4YjJhMzQ0NTIwYTA5NzA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAt
MjM0LDYgKzIzNCwxNCBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVu
ZGVyU3R5bGU+IHsKICAgICAgICAgICAgIEFTU0VSVChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9Q
U0VVRE9JRCk7CiAgICAgICAgICAgICBtX2ZsYWdzIHw9IG9uZUJpdE1hc2sgPDwgKHBzZXVkb0Jp
dHNPZmZzZXQgLSAxICsgcHNldWRvKTsKICAgICAgICAgfQorICAgICAgICB2b2lkIHNldEhhc1Bz
ZXVkb1N0eWxlcyhQc2V1ZG9JZFNldCBwc2V1ZG9JZFNldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHBzZXVkb0lkU2V0KTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJhd1BzZXVkb0lk
U2V0ID0gcHNldWRvSWRTZXQuZGF0YSgpOworICAgICAgICAgICAgQVNTRVJUKChyYXdQc2V1ZG9J
ZFNldCAmIFBVQkxJQ19QU0VVRE9JRF9NQVNLKSA9PSByYXdQc2V1ZG9JZFNldCk7CisgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHBzZXVkb0JpdHNPZmZzZXQgPj0gMSwgIihwc2V1ZG9CaXRzT2Zm
c2V0IC0gMSkgc2hvdWxkIGJlIHZhbGlkLiIpOworICAgICAgICAgICAgbV9mbGFncyB8PSAoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHJhd1BzZXVkb0lkU2V0KSA8PCAocHNldWRvQml0c09mZnNldCAt
IDEpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEVUYWJsZUxheW91dCB0YWJsZUxheW91dCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUYWJsZUxheW91dD4oZ2V0VmFsdWUodGFibGVMYXlv
dXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCkpOyB9CiAgICAgICAgIHZvaWQgc2V0VGFibGVM
YXlvdXQoRVRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KSB7IHVwZGF0ZVZhbHVlKHRhYmxlTGF5b3V0
LCB0YWJsZUxheW91dEJpdE1hc2ssIHRhYmxlTGF5b3V0T2Zmc2V0KTsgfQpAQCAtNTYxLDYgKzU2
OSw3IEBAIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4g
ewogICAgIGJvb2wgaGFzQW55UHVibGljUHNldWRvU3R5bGVzKCkgY29uc3Q7CiAgICAgYm9vbCBo
YXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pIGNvbnN0OwogICAgIHZvaWQgc2V0SGFzUHNl
dWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKTsKKyAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlcyhQ
c2V1ZG9JZFNldCk7CiAgICAgYm9vbCBoYXNVbmlxdWVQc2V1ZG9TdHlsZSgpIGNvbnN0OwogCiAg
ICAgLy8gYXR0cmlidXRlIGdldHRlciBtZXRob2RzCkBAIC0yMTU1LDYgKzIxNjQsMTEgQEAgaW5s
aW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbykK
ICAgICBub25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRvU3R5bGUocHNldWRvKTsKIH0KIAor
aW5saW5lIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlcyhQc2V1ZG9JZFNldCBw
c2V1ZG9JZFNldCkKK3sKKyAgICBub25pbmhlcml0ZWRfZmxhZ3Muc2V0SGFzUHNldWRvU3R5bGVz
KHBzZXVkb0lkU2V0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
UmVuZGVyU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlQ29uc3RhbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGVDb25zdGFudHMuaAppbmRleCAyYTRhZWY1YmU3NDgwZTIwMDM2MWIzODIyYWIw
ODNkNzVjMGEzNThkLi43NWQ2ZDM5NjMxMzhkMjYzYzg4ZTY4YzE4ZDlkZTE2NTc3OTRkZTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25z
dGFudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVD
b25zdGFudHMuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBSZW5kZXJTdHlsZUNvbnN0YW50
c19oCiAjZGVmaW5lIFJlbmRlclN0eWxlQ29uc3RhbnRzX2gKIAorI2luY2x1ZGUgPGluaXRpYWxp
emVyX2xpc3Q+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBQ
cmludENvbG9yQWRqdXN0Qml0cyA9IDE7CkBAIC04MCw2ICs4Miw2MyBAQCBlbnVtIFBzZXVkb0lk
IDogdW5zaWduZWQgY2hhciB7CiAgICAgUFVCTElDX1BTRVVET0lEX01BU0sgPSAoKDEgPDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQpIC0gMSkgJiB+KCgxIDw8IEZJUlNUX1BVQkxJQ19QU0VVRE9J
RCkgLSAxKQogfTsKIAorY2xhc3MgUHNldWRvSWRTZXQgeworcHVibGljOgorICAgIFBzZXVkb0lk
U2V0KCkKKyAgICAgICAgOiBtX2RhdGEoMCkKKyAgICB7IH0KKworICAgIFBzZXVkb0lkU2V0KHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxQc2V1ZG9JZD4gaW5pdGlhbGl6ZXJMaXN0KQorICAgICAgICA6
IG1fZGF0YSgwKQorICAgIHsKKyAgICAgICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA6IGluaXRp
YWxpemVyTGlzdCkKKyAgICAgICAgICAgIGFkZChwc2V1ZG9JZCk7CisgICAgfQorCisgICAgc3Rh
dGljIFBzZXVkb0lkU2V0IGZyb21NYXNrKHVuc2lnbmVkIHJhd1BzZXVkb0lkU2V0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFBzZXVkb0lkU2V0KHJhd1BzZXVkb0lkU2V0KTsKKyAgICB9CisKKyAg
ICBib29sIGhhcyhQc2V1ZG9JZCBwc2V1ZG9JZCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2RhdGEgJiAoMSA8PCBwc2V1ZG9JZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQoUHNldWRv
SWQgcHNldWRvSWQpCisgICAgeworICAgICAgICBtX2RhdGEgfD0gKDEgPDwgcHNldWRvSWQpOwor
ICAgIH0KKworICAgIHZvaWQgbWVyZ2UoUHNldWRvSWRTZXQgc291cmNlKQorICAgIHsKKyAgICAg
ICAgbV9kYXRhIHw9IHNvdXJjZS5tX2RhdGE7CisgICAgfQorCisgICAgUHNldWRvSWRTZXQgb3Bl
cmF0b3IgJihjb25zdCBQc2V1ZG9JZFNldCYgcHNldWRvSWRTZXQpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gUHNldWRvSWRTZXQobV9kYXRhICYgcHNldWRvSWRTZXQubV9kYXRhKTsKKyAg
ICB9CisKKyAgICBQc2V1ZG9JZFNldCBvcGVyYXRvciB8KGNvbnN0IFBzZXVkb0lkU2V0JiBwc2V1
ZG9JZFNldCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChtX2RhdGEg
fCBwc2V1ZG9JZFNldC5tX2RhdGEpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Citwcml2YXRlOgorICAgIGV4
cGxpY2l0IFBzZXVkb0lkU2V0KHVuc2lnbmVkIHJhd1BzZXVkb0lkU2V0KQorICAgICAgICA6IG1f
ZGF0YShyYXdQc2V1ZG9JZFNldCkKKyAgICB7IH0KKworICAgIHVuc2lnbmVkIG1fZGF0YTsKK307
CisKIGVudW0gQ29sdW1uRmlsbCB7IENvbHVtbkZpbGxCYWxhbmNlLCBDb2x1bW5GaWxsQXV0byB9
OwogCiBlbnVtIENvbHVtblNwYW4geyBDb2x1bW5TcGFuTm9uZSA9IDAsIENvbHVtblNwYW5BbGwg
fTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBkNjIzNTY3NWZmZmUxMjk4M2QwYmUwOWMyZjU3MGUzYTY4MDhiYmM2Li5lZmNm
NDc4NDE5NzZjMzZlMWIwNmYwMDQ3YTM1N2MwYjk5NDJkNjIzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTQtMTEtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisK
KyAgICAgICAgQ1NTNCBTZWxlY3RvcnM6IEFkZCBtdWx0aXBsZSBwc2V1ZG8gZWxlbWVudHMgc3Vw
cG9ydCB0byA6bWF0Y2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4MjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0
LWZyYWdtZW50cy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9y
cy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sOiBBZGRlZC4K
KyAgICAgICAgSW4gdGhpcyB0ZXN0LCB3ZSBlbnN1cmUgdGhhdCBwc2V1ZG8gZWxlbWVudHMgc2Vs
ZWN0b3IgaW4gdGhlCisgICAgICAgIG5vbi1yaWdodG1vc3QgZnJhZ21lbnRzIGJlY29tZXMgdW5t
YXRjaGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1t
YXRjaGVzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3Bz
ZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLmh0bWw6IEFkZGVkLgorCiAyMDE0LTExLTA2ICBC
ZW0gSm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0ZXN0
aGFybmVzcy5qcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRz
LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVu
dC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2
MDg2NjhkOTI4NzdmMGM3ZDE4MWJlYjQzMmFjZWU4ZmJjMDEzNWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRt
b3N0LWZyYWdtZW50cy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhZG9jdHlwZSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy50YXJnZXQgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IGxpbWU7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxw
IGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQxIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwv
cD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MiI+VGhpcyBsaW5lIHNob3VsZCBi
ZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDMiPlRoaXMgbGlu
ZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ0
Ij5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQt
aW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0
b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTFiMDM0NWE5NjMzOGYxYjhmNmFlOWFkNjczMzAzODk2NDhlODE5MwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5v
bi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFkb2N0eXBlIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLnRhcmdldCB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogbGltZTsKK30KKworOjphZnRlciAjdGFyZ2V0MSwKKzo6YmVmb3JlICN0YXJnZXQxLAor
OjpmaXJzdC1saW5lICN0YXJnZXQxLAorOjpmaXJzdC1sZXR0ZXIgI3RhcmdldDEsCis6Oi13ZWJr
aXQtcmVzaXplciAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXIgI3RhcmdldDEsCis6Oi13
ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29y
bmVyICN0YXJnZXQxLAorOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiAjdGFyZ2V0MSwKKzo6LXdl
YmtpdC1zY3JvbGxiYXItdHJhY2sgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNr
LXBpZWNlICN0YXJnZXQxLAorOjpzZWxlY3Rpb24gI3RhcmdldDEKK3sKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7Cit9CisKKzo6YWZ0ZXIgPiAjdGFyZ2V0MiwKKzo6YmVmb3JlID4gI3Rhcmdl
dDIsCis6OmZpcnN0LWxpbmUgPiAjdGFyZ2V0MiwKKzo6Zmlyc3QtbGV0dGVyID4gI3RhcmdldDIs
Cis6Oi13ZWJraXQtcmVzaXplciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhciA+ICN0
YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24gPiAjdGFyZ2V0MiwKKzo6LXdlYmtp
dC1zY3JvbGxiYXItY29ybmVyID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1i
ID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrID4gI3RhcmdldDIsCis6Oi13
ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlID4gI3RhcmdldDIsCis6OnNlbGVjdGlvbiA+ICN0
YXJnZXQyCit7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6OmFmdGVyICsgI3Rh
cmdldDMsCis6OmJlZm9yZSArICN0YXJnZXQzLAorOjpmaXJzdC1saW5lICsgI3RhcmdldDMsCis6
OmZpcnN0LWxldHRlciArICN0YXJnZXQzLAorOjotd2Via2l0LXJlc2l6ZXIgKyAjdGFyZ2V0MywK
Kzo6LXdlYmtpdC1zY3JvbGxiYXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0
dG9uICsgI3RhcmdldDMsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciArICN0YXJnZXQzLAor
Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJh
ci10cmFjayArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSArICN0
YXJnZXQzLAorOjpzZWxlY3Rpb24gKyAjdGFyZ2V0MworeworICAgIGJhY2tncm91bmQtY29sb3I6
IHJlZDsKK30KKworOjphZnRlciB+ICN0YXJnZXQ0LAorOjpiZWZvcmUgfiAjdGFyZ2V0NCwKKzo6
Zmlyc3QtbGluZSB+ICN0YXJnZXQ0LAorOjpmaXJzdC1sZXR0ZXIgfiAjdGFyZ2V0NCwKKzo6LXdl
YmtpdC1yZXNpemVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyIH4gI3RhcmdldDQs
Cis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9s
bGJhci1jb3JuZXIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgfiAjdGFy
Z2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1z
Y3JvbGxiYXItdHJhY2stcGllY2UgfiAjdGFyZ2V0NCwKKzo6c2VsZWN0aW9uIH4gI3RhcmdldDQK
K3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXY+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDEiPlRoaXMgbGlu
ZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQy
Ij5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBp
ZD0idGFyZ2V0MyI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9
InRhcmdldCIgaWQ9InRhcmdldDQiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorPC9k
aXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVj
dG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZWE2Zjc2MDU1ZWE0ODU5NjdkZjAyZDcxYzUzNWYwMWM3ZTdl
MmMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRv
LWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDc1IEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTo6Zmlyc3Qt
bGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0Mjo6YWZ0
ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNvY29hIjsK
K30KKworI3RhcmdldDM6OmJlZm9yZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAg
ICBjb250ZW50OiAiY2FwcHVjY2lubyI7Cit9CisKKyN0YXJnZXQ0OjpiZWZvcmUsCisjdGFyZ2V0
NDo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFy
b3VuZCI7Cit9CisKKyN0YXJnZXQ1LAorI3RhcmdldDU6OmZpcnN0LWxldHRlciB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDYsCisjdGFyZ2V0Njo6Zmlyc3QtbGV0
dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NywKKyN0YXJn
ZXQ3OjpiZWZvcmUsCisjdGFyZ2V0Nzo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxp
bWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKy8qIGZpcnN0IGxldHRlciBvZiBiZWZv
cmUgY29udGVudCBpcyBjb2xvcmVkIGJsdWUuICovCisjdGFyZ2V0MTI6OmFmdGVyLAorI3Rhcmdl
dDEyOjpiZWZvcmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDog
ImFyb3VuZCI7Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBibHVlOworfQorCisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+Cisg
ICAgPHAgaWQ9InRhcmdldDEiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZm
ZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRj
aGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBp
bnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVk
byBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFy
Z2V0NSI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBz
ZWxlY3RvcnMgc2hvdWxkIGJlIGNoZWNrZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1
ZG8gZWxlbWVudCBpbnNpZGUgbmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+
CisgICAgPHAgaWQ9InRhcmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBz
aG91bGQgYmUgY29sb3JlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50
IGluc2lkZSA6bm90IGRvZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5
Ij46OmZpcnN0LWxpbmUgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48
L3A+CisgICAgPHAgaWQ9InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1y
aWdodG1vc3QgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdl
dDExIj5wc2V1ZG8gZWxlbWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0
Y2hlcyBhbHdheXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9h
ZnRlciBjb250ZW50cyBhcmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3Jl
IGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1y
aWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRh
cmdldDE0Ij48cD5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9w
PjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1l
bnQgaGFzIG5vIGVmZmVjdC48L3A+PC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUt
bWF0Y2hlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQt
aW5zaWRlLW1hdGNoZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTMzOTU2YWYzODA3ODY4Y2FlY2NkYWVk
N2IyYzJiMGUxYjcyYzJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxl
Y3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbApAQCAtMCwwICsxLDk3IEBA
Cis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTptYXRj
aGVzKDo6Zmlyc3QtbGV0dGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKwor
I3RhcmdldDI6bWF0Y2hlcyg6OmFmdGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsK
KyAgICBjb250ZW50OiAiY29jb2EiOworfQorCisjdGFyZ2V0MzptYXRjaGVzKDo6YmVmb3JlKSB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiY2FwcHVjY2lubyI7
Cit9CisKKyN0YXJnZXQ0Om1hdGNoZXMoOjpiZWZvcmUsIDo6YWZ0ZXIpIHsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisjdGFyZ2V0NTpt
YXRjaGVzKDo6Zmlyc3QtbGV0dGVyLCBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsK
K30KKworI3RhcmdldDY6bWF0Y2hlcyhwLCA6bWF0Y2hlcyhwLCA6OmZpcnN0LWxldHRlcikpIHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NzptYXRjaGVzKDo6YmVm
b3JlLCA6OmFmdGVyLCAqKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250
ZW50OiAiYXJvdW5kIjsKK30KKworI3RhcmdldDg6bm90KDptYXRjaGVzKDo6Zmlyc3QtbGluZSkp
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzo6Zmlyc3QtbGluZSAjdGFyZ2V0
OSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6bWF0Y2hlcyg6OmZpcnN0LWxp
bmUpICN0YXJnZXQxMCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0
MTE6bWF0Y2hlcyg6OmZpcnN0LWxpbmUgPiBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVk
OworfQorCisvKiBmaXJzdCBsZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVl
LiAqLworI3RhcmdldDEyOm1hdGNoZXMoOjpmaXJzdC1sZXR0ZXIsIDo6YWZ0ZXIsIDo6YmVmb3Jl
KSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsK
K30KKworI3RhcmdldDEyOjpmaXJzdC1sZXR0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGJs
dWU7Cit9CisKKyN0YXJnZXQxMzptYXRjaGVzKDo6YWZ0ZXIgPiBwKSB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmVkOworICAgIGNvbnRlbnQ6ICJidWciOworfQorCisjdGFyZ2V0MTQ6bWF0Y2hl
cyg6OmFmdGVyKSA+IHB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0
MTU6bWF0Y2hlcyg6OmFmdGVyID4gcCkgPiBweworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsK
K30KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj4KKyAgICA8cCBpZD0idGFyZ2V0
MSI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxw
IGlkPSJ0YXJnZXQyIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48
L3A+CisgICAgPHAgaWQ9InRhcmdldDMiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBo
YXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NCI+cHNldWRvIGVsZW1lbnQgaW5zaWRl
IDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ1Ij5wc2V1ZG8gZWxl
bWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdCwgc28gYWxsIHNlbGVjdG9ycyBzaG91bGQg
YmUgY2hlY2tlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDYiPnBzZXVkbyBlbGVtZW50IGluc2lk
ZSBuZXN0ZWQgOm1hdGNoZXMgc2hvdWxkIGhhdmUgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFy
Z2V0NyI+Ym90aCBsaW5lIGl0c2VsZiBhbmQgYmVmb3JlL2FmdGVyIHNob3VsZCBiZSBjb2xvcmVk
LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0OCI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDpub3QgZG9l
c24ndCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDkiPjo6Zmlyc3QtbGluZSBp
biBub24tcmlnaHRtb3N0IGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoLjwvcD4KKyAgICA8cCBpZD0i
dGFyZ2V0MTAiPjptYXRjaGVzKDo6Zmlyc3QtbGluZSkgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVu
dCBhbHdheXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTEiPnBzZXVkbyBlbGVt
ZW50IGluIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgaW5zaWRlIDptYXRjaGVzIGFsd2F5cyB1bm1h
dGNoZXMuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMiI+YmVmb3JlL2FmdGVyIGNvbnRlbnRzIGFy
ZSBjb2xvcmVkIGxpbWUgYW5kIGZpcnN0LWxldHRlciBvZiBiZWZvcmUgY29udGVudCBpcyBjb2xv
cmVkIGJsdWUuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMyI+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8g
ZWxlbWVudCBoYXMgbm8gZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTQiPjxwPm5vbi1y
aWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+PC9wPgorICAgIDxwIGlk
PSJ0YXJnZXQxNSI+PHA+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxlbWVudCBoYXMgbm8gZWZmZWN0
LjwvcD48L3A+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241174</attachid>
            <date>2014-11-07 05:39:36 -0800</date>
            <delta_ts>2014-11-07 08:04:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141107223946.patch</filename>
            <type>text/plain</type>
            <size>53923</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUyMzg5MTNjODE0ZWQ2
NWNmZTk4MGIyYjk2MzQ5MDAwMzMwNmU3NS4uY2UwOTUxMzc5MDQ4ZjJjOWEyMDZkZTljMmZlNGEz
MzRiM2UzMGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXIgaW4gdGhlIG5vbi1yaWdodG1vc3QKKyAgICAgICAgZnJhbWduZXQsIGl0IGlz
IGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1cGRh
dGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRv
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9J
ZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OlBz
ZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0
b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXZWJD
b3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMDYgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbGFtYmRhIGZ1bmN0aW9ucyBpbiBEb2N1bWVu
dE9yZGVyZWRNYXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNDFj
Zjc1MDYxYzA3YzkyZjg1NjRjZjdkZWVhY2Y5NjdkOGVmOTUxZC4uM2JkODczYmNlNDY4Nzg4ZDQw
YjNlZTZmYThmNmY1Y2RmYjI0MTkxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKQEAgLTgsNiArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKICAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03
MSw2ICs3Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgICAgICwgdmlzaXRlZE1h
dGNoVHlwZShyZXNvbHZpbmdNb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdS
dWxlcyA/IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkIDogVmlzaXRlZE1hdGNoVHlwZTo6RW5h
YmxlZCkKICAgICAgICAgLCBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudChzZWxlY3RvcikKICAg
ICAgICAgLCBpbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyhmYWxzZSkKKyAgICAgICAgLCBwc2V1ZG9F
bGVtZW50RWZmZWN0aXZlKHRydWUpCiAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNl
KQogICAgICAgICAsIGhhc1NlbGVjdGlvblBzZXVkbyhmYWxzZSkKICAgICB7IH0KQEAgLTgwLDYg
KzgyLDcgQEAgc3RydWN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyA6IHB1YmxpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWMKICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZp
c2l0ZWRNYXRjaFR5cGU7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGZpcnN0U2VsZWN0b3JPZlRo
ZUZyYWdtZW50OwogICAgIGJvb2wgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3M7CisgICAgYm9vbCBw
c2V1ZG9FbGVtZW50RWZmZWN0aXZlOwogICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAg
IGJvb2wgaGFzU2VsZWN0aW9uUHNldWRvOwogfTsKQEAgLTE3MSwzNiArMTc0LDMzIEBAIHN0YXRp
YyBpbmxpbmUgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpCiBib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2goY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDaGVja2luZ0NvbnRl
eHQmIHByb3ZpZGVkQ29udGV4dCkgY29uc3QKIHsKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzIGNvbnRleHQocHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7Ci0gICAgUHNl
dWRvSWQgcHNldWRvSWQgPSBOT1BTRVVETzsKLSAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250
ZXh0LCBwc2V1ZG9JZCkgIT0gU2VsZWN0b3JNYXRjaGVzKQorICAgIFBzZXVkb0lkU2V0IHBzZXVk
b0lkU2V0OworICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4
dCwgcHNldWRvSWRTZXQpOworICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9y
TWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lk
ICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRvSWQpCisgICAgaWYgKGNv
bnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBz
ZXVkb0lkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lk
ID09IE5PUFNFVURPICYmIHBzZXVkb0lkICE9IE5PUFNFVURPKSB7Ci0gICAgICAgIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHNldWRvSWQgPCBG
SVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
LT5zZXRIYXNQc2V1ZG9TdHlsZShwc2V1ZG9JZCk7CisgICAgaWYgKGNvbnRleHQucHNldWRvSWQg
PT0gTk9QU0VVRE8gJiYgcHNldWRvSWRTZXQpIHsKKyAgICAgICAgUHNldWRvSWRTZXQgcHVibGlj
UHNldWRvSWRTZXQgPSBwc2V1ZG9JZFNldCAmIFBzZXVkb0lkU2V0Ojpmcm9tTWFzayhQVUJMSUNf
UFNFVURPSURfTUFTSyk7CisgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9k
ZTo6UmVzb2x2aW5nU3R5bGUgJiYgcHVibGljUHNldWRvSWRTZXQpCisgICAgICAgICAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGVzKHB1YmxpY1BzZXVkb0lkU2V0KTsK
IAogICAgICAgICAvLyBXaGVuIGlnbm9yaW5nIHZpcnR1YWwgcHNldWRvIGVsZW1lbnRzLCB0aGUg
Y29udGV4dCdzIHBzZXVkbyBzaG91bGQgYWxzbyBiZSBOT1BTRVVETyBidXQgdGhhdCBkb2VzCiAg
ICAgICAgIC8vIG5vdCBjYXVzZSBhIGZhaWx1cmUuCi0gICAgICAgIHJldHVybiBjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRv
RWxlbWVudHM7CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVudHMgfHwgcmVzdWx0Lm1h
dGNoVHlwZSA9PSBNYXRjaFR5cGU6OkVsZW1lbnQ7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwog
fQogCi1pbmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbykKK2lubGluZSBzdGF0aWMgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG9F
bGVtZW50KGNvbnN0IFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpCiB7Ci0gICAgaWYg
KGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0g
U0NST0xMQkFSX1RIVU1CCi0gICAgICAgIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0JV
VFRPTgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9UUkFDSwotICAgICAg
ICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9UUkFDS19QSUVDRQotICAgICAgICB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIpIHsKKyAgICBQc2V1ZG9JZFNldCBzY3Jv
bGxiYXJJZFNldCA9IHsgU0NST0xMQkFSLCBTQ1JPTExCQVJfVEhVTUIsIFNDUk9MTEJBUl9CVVRU
T04sIFNDUk9MTEJBUl9UUkFDSywgU0NST0xMQkFSX1RSQUNLX1BJRUNFLCBTQ1JPTExCQVJfQ09S
TkVSIH07CisgICAgaWYgKGR5bmFtaWNQc2V1ZG9JZFNldCAmIHNjcm9sbGJhcklkU2V0KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKICAgICAvLyBSRVNJWkVSIGRvZXMgbm90IGFsd2F5
cyBoYXZlIGEgc2Nyb2xsYmFyIGJ1dCBpdCBpcyBhIHNjcm9sbGJhci1saWtlIHBzZXVkbyBlbGVt
ZW50CiAgICAgLy8gYmVjYXVzZSBpdCBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBzZXVkbyBlbGVt
ZW50LgotICAgIHJldHVybiBkeW5hbWljUHNldWRvID09IFJFU0laRVI7CisgICAgcmV0dXJuIGR5
bmFtaWNQc2V1ZG9JZFNldC5oYXMoUkVTSVpFUik7CiB9CiAKIHN0YXRpYyBTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNv
bnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkK
QEAgLTIxOSwzNCArMjE5LDM1IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAvLyAqIFNlbGVj
dG9yRmFpbHNMb2NhbGx5ICAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQg
ZQogLy8gKiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9y
IGUgYW5kIGFueSBzaWJsaW5nIG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0g
dGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBl
Ci1TZWxlY3RvckNoZWNrZXI6Ok1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVs
eShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbykgY29uc3QKK1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2VsZWN0b3JD
aGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMm
IGNvbnRleHQsIFBzZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQpIGNvbnN0CiB7CisgICAg
TWF0Y2hUeXBlIG1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKwogICAgIC8vIFRoZSBm
aXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2guCi0gICAgaWYgKCFjaGVja09uZShjb250ZXh0KSkK
LSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgIGlmICghY2hlY2tPbmUo
Y29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0LCBtYXRjaFR5cGUpKQorICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAKICAgICBp
ZiAoY29udGV4dC5zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dCkgewotICAgICAgICAvLyBJbiBTZWxlY3RvcnMgTGV2ZWwgNCwgYSBwc2V1ZG8gZWxlbWVudCBp
bnNpZGUgYSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzcyBpcyB1bmRlZmluZWQgKGlzc3VlIDcpLgot
ICAgICAgICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwgdGhlIHNwZWMgY2xh
cmlmaWVzIHRoaXMgY2FzZS4KLSAgICAgICAgaWYgKGNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MpCi0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CisgICAg
ICAgIGlmICghY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlKQorICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwog
CiAgICAgICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkg
ewogICAgICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBjb250ZXh0LmVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IGNvbnRleHQuc2VsZWN0b3ItPnZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gJiYg
cm9vdC0+dHlwZSgpICE9IFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xvY2Fs
bHkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMo
TWF0Y2g6OlNlbGVjdG9yRmFpbHNMb2NhbGx5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICgoIWNvbnRleHQuZWxlbWVudFN0eWxlICYmIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9
PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkgfHwgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OlF1ZXJ5aW5nUnVsZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5OworICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNl
bGVjdG9yRmFpbHNMb2NhbGx5KTsKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBD
U1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSk7CiAgICAgICAgICAgICBpZiAocHNldWRvSWQgIT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAg
ICAgZHluYW1pY1BzZXVkbyA9IHBzZXVkb0lkOworICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1
ZG9JZFNldC5hZGQocHNldWRvSWQpOworICAgICAgICAgICAgbWF0Y2hUeXBlID0gTWF0Y2hUeXBl
OjpWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1Niw0
NyArMjU3LDUwIEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAgICAgLy8gUHJlcGFyZSBuZXh0
IHNlbGVjdG9yCiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGhpc3RvcnlTZWxlY3RvciA9IGNvbnRl
eHQuc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKICAgICBpZiAoIWhpc3RvcnlTZWxlY3RvcikKLSAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0
OjptYXRjaGVzKG1hdGNoVHlwZSk7CiAKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIG5l
eHRDb250ZXh0KGNvbnRleHQpOwogICAgIG5leHRDb250ZXh0LnNlbGVjdG9yID0gaGlzdG9yeVNl
bGVjdG9yOwogCi0gICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwog
ICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAg
Ly8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRv
SWQKLSAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgY29udGV4dC5w
c2V1ZG9JZCAhPSBkeW5hbWljUHNldWRvKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5OworICAgICAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAm
JiAhZHluYW1pY1BzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBzZXVkb0lkKSkKKyAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKIAogICAgICAgICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2UgdHJ5IHRv
IG1hdGNoIGFueXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmIChyZWxh
dGlvbiAhPSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rv
cjo6Q2hpbGQpCiAgICAgICAgICAgICBuZXh0Q29udGV4dC52aXNpdGVkTWF0Y2hUeXBlID0gVmlz
aXRlZE1hdGNoVHlwZTo6RGlzYWJsZWQ7CiAKICAgICAgICAgbmV4dENvbnRleHQucHNldWRvSWQg
PSBOT1BTRVVETzsKKyAgICAgICAgLy8gVmlydHVhbCBwc2V1ZG8gZWxlbWVudCBpcyBvbmx5IGVm
ZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgorICAgICAgICBuZXh0Q29udGV4dC5w
c2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChyZWxh
dGlvbikgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CiAgICAgICAgIG5leHRD
b250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAg
bmV4dENvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxl
Y3RvcjsKLSAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKKyAgICAgICAgbmV4
dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgZm9yICg7IG5leHRDb250
ZXh0LmVsZW1lbnQ7IG5leHRDb250ZXh0ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRD
b250ZXh0KSkgewotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSB0aGlzLT5tYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmICht
YXRjaCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRT
ZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9
IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzIHx8IHJl
c3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0
Y2hUeXBlKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRl
bHk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7
CiAgICAgICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0
Q29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIW5leHRDb250ZXh0LmVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0g
bmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5
bGUgPSBudWxscHRyOwotICAgICAgICAgICAgTWF0Y2ggbWF0Y2ggPSBtYXRjaFJlY3Vyc2l2ZWx5
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKLSAgICAgICAgICAgIGlmIChtYXRj
aCA9PSBTZWxlY3Rvck1hdGNoZXMgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICAgICAgcmV0dXJuIFNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFt
aWNQc2V1ZG87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CisgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwogICAgICAgICB9CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGph
Y2VudDoKQEAgLTMwNiw1NiArMzEwLDU5IEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAKICAg
ICAgICAgICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0VsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxz
QWxsU2libGluZ3MpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNl
dEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwor
ICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNo
ID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3MgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0
ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9OwotICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxsU2libGluZ3MpOwogCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3I6CiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxp
ZCBpZiBzb21ldGhpbmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1h
a2UgYW4gZXhjZXB0aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBh
IHNldCBvZiBwc2V1ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8g
Zm9sbG93IHRoZSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9s
bGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkbyk7Ci0g
ICAgICAgIG5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbyA9IGR5bmFtaWNQc2V1ZG8gPT0g
U0VMRUNUSU9OOwotICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8IGNvbnRleHQu
cmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFtaWNQc2V1ZG8g
IT0gTk9QU0VVRE8KKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2Nyb2xsYmFyUHNldWRvID0gaGFz
U2Nyb2xsYmFyUHNldWRvRWxlbWVudChkeW5hbWljUHNldWRvSWRTZXQpOworICAgICAgICBuZXh0
Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvSWRTZXQuaGFzKFNFTEVD
VElPTik7CisgICAgICAgIGlmICgoY29udGV4dC5lbGVtZW50U3R5bGUgfHwgY29udGV4dC5yZXNv
bHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlcykgJiYgZHluYW1pY1BzZXVkb0lkU2V0
CiAgICAgICAgICAgICAmJiAhbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvCiAgICAgICAg
ICAgICAmJiAhKG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyAmJiBuZXh0Q29udGV4dC5z
ZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQotICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgICAgICByZXR1cm4gbWF0Y2hS
ZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICByZXR1
cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7Cisg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShtYXRjaFJlY3Vy
c2l2ZWx5KG5leHRDb250ZXh0LCBkeW5hbWljUHNldWRvSWRTZXQpLCBtYXRjaFR5cGUpOwogCiAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAgICAg
ICAgICAgRWxlbWVudCogc2hhZG93SG9zdE5vZGUgPSBjb250ZXh0LmVsZW1lbnQtPnNoYWRvd0hv
c3QoKTsKICAgICAgICAgICAgIGlmICghc2hhZG93SG9zdE5vZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKICAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBzaGFkb3dIb3N0Tm9kZTsKICAgICAgICAgICAg
IG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2Vs
ZWN0b3I7Ci0gICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pOworICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVs
eShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHk7CisgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6
U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogfQogCiBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1
ZU1hdGNoZXMoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIENTU1NlbGVjdG9yOjpNYXRjaCBt
YXRjaCwgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvclZhbHVlLCBib29sIGNhc2VTZW5zaXRp
dmUpCkBAIC00OTAsNyArNDk3LDcgQEAgc3RhdGljIGJvb2wgY2FuTWF0Y2hIb3Zlck9yQWN0aXZl
SW5RdWlya3NNb2RlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb24KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAorYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBz
ZXVkb0lkU2V0JiBkeW5hbWljUHNldWRvSWRTZXQsIE1hdGNoVHlwZSYgbWF0Y2hUeXBlKSBjb25z
dAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7
CkBAIC01MzAsMTMgKzUzNywxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29u
c3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJz
dCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vi
c2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBz
dWJjb250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlv
bmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHN1YmNvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2Vs
ZWN0b3IgPSBzdWJzZWxlY3RvcjsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2Vs
ZWN0b3JPZlRoZUZyYWdtZW50ID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOworICAgICAgICAgICAg
ICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CiAKICNpZiBFTkFCTEUoQ1NTX1NF
TEVDVE9SU19MRVZFTDQpCi0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1Bz
ZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVkbyA9PSBOT1BTRVVETyk7
CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3Jl
RHluYW1pY1BzZXVkbykubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogI2Vsc2UKQEAgLTU0OSw3
ICs1NTcsOSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1YmNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZShzdWJjb250
ZXh0KSkKKyAgICAgICAgICAgICAgICAvLyBTaW5jZSA6bm90IGNhbm5vdCBjb250YWluIHBzZXVk
byBlbGVtZW50cywgdGhlcmUncyBubyBlZmZlY3Qgb24gbWF0Y2hlZFRvTm9uUHNldWRvRWxlbWVu
dC4KKyAgICAgICAgICAgICAgICBNYXRjaFR5cGUgaWdub3JlTWF0Y2hUeXBlID0gTWF0Y2hUeXBl
OjpFbGVtZW50OworICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCwgaWdu
b3JlRHluYW1pY1BzZXVkbywgaWdub3JlTWF0Y2hUb05vblBzZXVkb0VsZW1lbnQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgfQpAQCAtNjY1
LDE2ICs2NzUsMzQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBicmVhazsK
ICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKLSAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJz
ZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3Ip
KSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0
KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJz
ZWxlY3RvcjsKLSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZy
YWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgUHNldWRvSWQgaWdub3JlRHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2
ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbCBoYXNNYXRjaGVkQW55dGhpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9y
LT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NT
U2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBD
aGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIHN1YmNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBjb250
ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmU7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRl
eHQuc2VsZWN0b3IgPSBzdWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOworICAgICAgICAgICAg
ICAgICAgICBQc2V1ZG9JZFNldCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldDsKKyAgICAgICAgICAg
ICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0
LCBsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXaGVuIHBzZXVkbyBlbGVtZW50cyBhcmUgbm90IGVmZmVjdGl2
ZSBpbiB0aGlzIGZyYWdtZW50IChlLmcuIGl0J3Mgbm90IHJpZ2htb3N0IGZyYWdtZW50KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2sg
YWxsIHNlbGVjdG9ycyB0byBjb2xsZWN0IHBzZXVkbyBlbGVtZW50IGlkcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWxvY2FsRHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaFR5cGUgPT0g
TWF0Y2hUeXBlOjpFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVHlw
ZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1p
Y1BzZXVkb0lkU2V0Lm1lcmdlKGxvY2FsRHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc01hdGNoZWRBbnl0aGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc01hdGNo
ZWRBbnl0aGluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1BsYWNlaG9sZGVyU2hvd246CiAg
ICAgICAgICAgICBpZiAoaXM8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkg
ewpAQCAtNzcwLDEwICs3OTgsMTEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0
KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRv
Q2xhc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1
ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgICAgICAgICBzdWJDb250ZXh0LnBzZXVkb0VsZW1lbnRF
ZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0
b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0
b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4
dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVj
dG9yT2ZUaGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
ID09IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdu
b3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoUmVjdXJzaXZl
bHkoc3ViQ29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykubWF0Y2ggPT0gTWF0Y2g6OlNlbGVj
dG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyMywxMiArOTUyLDEzIEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0KSBjb25zdAogICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRWxlbWVudEN1ZSkgewogICAgICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzIHN1YkNvbnRleHQoY29udGV4dCk7CiAKLSAgICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1p
Y1BzZXVkbyA9IE5PUFNFVURPOwogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogY29uc3QgJiBz
ZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgIGZvciAoc3ViQ29udGV4dC5zZWxl
Y3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3ViQ29udGV4dC5zZWxl
Y3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJDb250
ZXh0LnNlbGVjdG9yKSkgewogICAgICAgICAgICAgc3ViQ29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IHN1YkNvbnRleHQuc2VsZWN0b3I7CiAgICAgICAgICAgICBzdWJDb250ZXh0
LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChtYXRjaFJl
Y3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0
Y2hlcykKKyAgICAgICAgICAgIHN1YkNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZh
bHNlOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAg
ICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1
ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTQ1LDEwICs5
NzUsMTEgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGJhc2VDb24KICAgICAgICAgc3ViY29udGV4dC5lbGVt
ZW50ID0gJmVsZW1lbnQ7CiAgICAgICAgIHN1YmNvbnRleHQuc2VsZWN0b3IgPSBzdWJzZWxlY3Rv
cjsKICAgICAgICAgc3ViY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7Cisg
ICAgICAgIHN1YmNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgICAg
ICBzdWJjb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gc3Vic2VsZWN0b3I7Ci0g
ICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAg
aWYgKG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbykgPT0g
U2VsZWN0b3JNYXRjaGVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaWdub3JlRHluYW1pY1BzZXVk
byA9PSBOT1BTRVVETyk7CisgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87
CisgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghaWdub3JlRHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCA4MDc3
NzE3NDQ1ZWEzNjg1NzQ2NDljMTQ1MTMzZDg3N2MzNjdhMjZjLi5lMjRiNWM2MGYzM2Y1YmNkODlh
Y2ZkMDMxY2EwNjQyYTEwZjk4ODU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5o
CkBAIC00Myw3ICs0MywzMSBAQAogCiBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNlbGVjdG9yQ2hlY2tlcik7Ci0gICAgZW51bSBNYXRjaCB7IFNlbGVj
dG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5n
cywgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKyAgICBlbnVtIGNsYXNzIE1hdGNoIHsgU2Vs
ZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0FsbFNpYmxp
bmdzLCBTZWxlY3RvckZhaWxzQ29tcGxldGVseSB9OworCisgICAgZW51bSBjbGFzcyBNYXRjaFR5
cGUgeyBWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHksIEVsZW1lbnQgfTsKKworICAgIHN0cnVjdCBN
YXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoIG1hdGNoOworICAgICAgICBNYXRjaFR5cGUgbWF0
Y2hUeXBlOworCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCBtYXRjaGVzKE1hdGNoVHlwZSBt
YXRjaFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB7IE1hdGNoOjpTZWxlY3Rv
ck1hdGNoZXMsIG1hdGNoVHlwZSB9OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE1hdGNo
UmVzdWx0IHVwZGF0ZVdpdGhNYXRjaFR5cGUoTWF0Y2hSZXN1bHQgcmVzdWx0LCBNYXRjaFR5cGUg
bWF0Y2hUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWF0Y2hUeXBlID09IE1hdGNo
VHlwZTo6VmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5t
YXRjaFR5cGUgPSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1
bHQgZmFpbHMoTWF0Y2ggbWF0Y2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB7IG1h
dGNoLCBNYXRjaFR5cGU6OkVsZW1lbnQgfTsKKyAgICAgICAgfQorICAgIH07CiAKIHB1YmxpYzoK
ICAgICBlbnVtIGNsYXNzIE1vZGUgOiB1bnNpZ25lZCBjaGFyIHsKQEAgLTgzLDggKzEwNyw4IEBA
IGNsYXNzIFNlbGVjdG9yQ2hlY2tlciB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxp
bmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAogcHJpdmF0ZToKLSAgICBNYXRjaCBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9J
ZCYpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYpIGNvbnN0OworICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkU2V0JikgY29uc3Q7CisgICAgYm9vbCBj
aGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWRTZXQmLCBN
YXRjaFR5cGUmKSBjb25zdDsKICAgICBib29sIG1hdGNoU2VsZWN0b3JMaXN0KGNvbnN0IENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMmLCBFbGVtZW50JiwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0Jikg
Y29uc3Q7CiAKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoY29uc3QgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyYsIGNvbnN0IENTU1NlbGVjdG9yKikgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggMWUzM2E5NzkyZWI5NWQx
MGRjNDc2N2JmZDJmNGI3ZmVhMTlkMWFiNC4uOTJkOWE4ZWJlNDM2OGI4NTUxMDlkNjBkYzZkYmVi
ZjU3MzBjNWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNw
cApAQCAtMzcyLDcgKzM3Miw5IEBAIGVudW0gY2xhc3MgRnJhZ21lbnRzTGV2ZWwgewogICAgIElu
RnVuY3Rpb25hbFBzZXVkb1R5cGUgPSAxCiB9OwogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0
cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNv
bnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRz
TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgVmlzaXRlZE1vZGUmKTsKK2VudW0gY2xhc3MgUHNldWRvRWxlbWVudE1hdGNoaW5n
QmVoYXZpb3IgeyBDYW5NYXRjaCwgTmV2ZXJNYXRjaCB9OworCitzdGF0aWMgRnVuY3Rpb25UeXBl
IGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxl
Y3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxlY3RvckZyYWdtZW50cywgRnJh
Z21lbnRzTGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlv
cik7CiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihTZWxlY3Rv
ckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIHVuc2lnbmVkIGxldmVsID0gMCk7CiAK
QEAgLTQ2Miw3ICs0NjQsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRTY3JvbGxi
YXJQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdAogICAgIHJldHVybiBG
dW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250
ZXh0LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJs
ZWQsIFZpc2l0ZWRNb2RlJiB2aXNpdGVkTW9kZSkKK3N0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBl
IGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjdG9y
RnJhZ21lbnQmIGZyYWdtZW50LCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBGcmFn
bWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
IHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0
ZWRNb2RlJiB2aXNpdGVkTW9kZSwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgcHNldWRv
RWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpCiB7CiAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
VHlwZSB0eXBlID0gc2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7CiAgICAgc3dpdGNoICh0eXBl
KSB7CkBAIC02MzYsNyArNjM4LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNl
dWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlz
dC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICAgICBTZWxlY3RvckZyYWdtZW50
TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUg
aWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICAg
ICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxl
Y3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6
OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgICAgIEZ1
bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3Is
IHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1
bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNo
RW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9y
OjpOZXZlck1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShp
Z25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2Fi
bGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVu
Y3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI6CkBAIC02NzEsNyArNjczLDcgQEAgc3Rh
dGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3Iq
IHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2Vs
ZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAg
ICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAg
ICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsK
LSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1
Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9v
dEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZy
YWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywg
RnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgUHNldWRvRWxl
bWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2gpOwogICAgICAgICAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6
dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwog
CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBpcyBub3QgcHNldWRvIGNsYXNzIGZpbHRl
ciwgQ2Fubm90TWF0Y2hBbnl0aGluZyBpbXBsaWVzIHRoaXMgZmlsdGVyIGFsd2F5cyBwYXNzZXMu
CkBAIC02OTUsNyArNjk3LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRv
Q2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9y
TGlzdCgpLT5maXJzdCgpOyByb290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9y
TGlzdDo6bmV4dChyb290U2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFn
bWVudExpc3QgZnJhZ21lbnRMaXN0OwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9y
ZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rp
b25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3Is
IHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlv
bmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJs
ZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgc3Vi
RnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3Rvciwgc2VsZWN0b3JD
b250ZXh0LCBmcmFnbWVudExpc3QsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9U
eXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3Jl
VmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09
IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9u
YWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnJh
Z21lbnQgYWx3YXlzIHVubWF0Y2ggYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5zZXJ0IGl0
IHRvIGFueUZyYWdtZW50cy4KQEAgLTc1OSw3ICs3NjEsNyBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0
aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBT
ZWxlYwogICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBz
ZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVj
dG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvckZy
YWdtZW50TGlzdCBzZWxlY3RvckZyYWdtZW50czsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9k
ZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAg
IEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJz
ZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVu
Y3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVj
dG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6
SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRN
YXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhh
dmlvcik7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVk
TW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBm
dW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0
aGlzIGZyYWdtZW50IG5ldmVyIG1hdGNoZXMgYWdhaW5zdCB0aGUgZWxlbWVudCwgZG9uJ3QgaW5z
ZXJ0IGl0IHRvIG1hdGNoZXNMaXN0LgpAQCAtNzY5LDYgKzc3MSwxMCBAQCBzdGF0aWMgaW5saW5l
IEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yLCBTZWxlYwogICAgICAgICAgICAgICAgIGlmIChsb2NhbEZ1bmN0aW9uVHlwZSA9PSBGdW5j
dGlvblR5cGU6OkNhbm5vdENvbXBpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5j
dGlvblR5cGU6OkNhbm5vdENvbXBpbGU7CiAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ3Vy
cmVudGx5IHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgOm1hdGNoZXMgYXJlIHN1cHBvcnRlZCBpbiBu
b24tSklUIGNvZGUuCisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yRnJhZ21lbnRzLmZpcnN0
KCkucHNldWRvRWxlbWVudFNlbGVjdG9yKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVu
Y3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOworCiAgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBl
ID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgbG9jYWxGdW5jdGlv
blR5cGUpOwogICAgICAgICAgICAgICAgIG1hdGNoZXNMaXN0LmFwcGVuZChzZWxlY3RvckZyYWdt
ZW50cyk7CiAgICAgICAgICAgICB9CkBAIC04MDksNyArODE1LDcgQEAgaW5saW5lIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBy
b290U2VsZWMKICAgICAvLyBJbiBRdWVyeVNlbGVjdG9yIGNvbnRleHQsIDp2aXNpdGVkIGFsd2F5
cyBoYXMgbm8gZWZmZWN0IGR1ZSB0byBzZWN1cml0eSBpc3N1ZXMuCiAgICAgYm9vbCB2aXNpdGVk
TWF0Y2hFbmFibGVkID0gc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlT
ZWxlY3RvcjsKIAotICAgIG1fZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RT
ZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1fc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50
c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3Qs
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRlZE1vZGUpOworICAgIG1fZnVuY3Rpb25UeXBl
ID0gY29uc3RydWN0RnJhZ21lbnRzKHJvb3RTZWxlY3RvciwgbV9zZWxlY3RvckNvbnRleHQsIG1f
c2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpSb290LCBGcmFnbWVudFBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzOjpSaWdodG1vc3QsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIG1fdmlzaXRl
ZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpDYW5NYXRjaCk7CiAgICAgaWYg
KG1fZnVuY3Rpb25UeXBlICE9IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSAmJiBtX2Z1bmN0
aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgIGNv
bXB1dGVCYWNrdHJhY2tpbmdJbmZvcm1hdGlvbihtX3NlbGVjdG9yRnJhZ21lbnRzKTsKIH0KQEAg
LTgyNSw3ICs4MzEsNyBAQCBzdGF0aWMgYm9vbCBpc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPj0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXIgJiYgdHlwZSA8PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudFNjcm9sbGJhclRyYWNrUGllY2U7CiB9CiAKLXN0YXRpYyBGdW5jdGlvblR5
cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNl
bGVjdG9yQ29udGV4dCBzZWxlY3RvckNvbnRleHQsIFNlbGVjdG9yRnJhZ21lbnRMaXN0JiBzZWxl
Y3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3Np
dGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitzdGF0aWMgRnVuY3Rpb25U
eXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBT
ZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2Vs
ZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9z
aXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0
Y2hpbmdCZWhhdmlvciBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcikKIHsKICAgICBTZWxl
Y3RvckZyYWdtZW50IGZyYWdtZW50OwogICAgIEZyYWdtZW50UmVsYXRpb24gcmVsYXRpb25Ub1By
ZXZpb3VzRnJhZ21lbnQgPSBGcmFnbWVudFJlbGF0aW9uOjpSaWdodG1vc3Q7CkBAIC04NzAsNyAr
ODc2LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NT
U2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgIGlmIChmcmFnbWVu
dC5wc2V1ZG9FbGVtZW50U2VsZWN0b3IgJiYgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGZyYWdt
ZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkpCiAgICAgICAg
ICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0
aW9uVHlwZSwgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQp
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUgPSBtb3N0
UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25UeXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUo
KnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQ
b3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlzaXRlZE1vZGUpKTsKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvblR5cGUgPSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoZnVuY3Rpb25U
eXBlLCBhZGRQc2V1ZG9DbGFzc1R5cGUoKnNlbGVjdG9yLCBmcmFnbWVudCwgc2VsZWN0b3JDb250
ZXh0LCBmcmFnbWVudExldmVsLCBzdWJQb3NpdGlvbiwgdmlzaXRlZE1hdGNoRW5hYmxlZCwgdmlz
aXRlZE1vZGUsIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yKSk7CiAgICAgICAgICAgICBp
ZiAoIXBzZXVkb0NsYXNzT25seU1hdGNoZXNMaW5rc0luUXVpcmtzTW9kZSgqc2VsZWN0b3IpKQog
ICAgICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBm
YWxzZTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5u
b3RDb21waWxlIHx8IGZ1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55
dGhpbmcpCkBAIC04ODQsOSArODkwLDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RG
cmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAg
ICAgICAgIGlmIChzZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNoQW55
dGhpbmc7CiAKLSAgICAgICAgICAgIC8vIEluIFNlbGVjdG9ycyBMZXZlbCA0LCBhIHBzZXVkbyBl
bGVtZW50IGluc2lkZSBhIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzIGlzIHVuZGVmaW5lZCAoaXNz
dWUgNykuCi0gICAgICAgICAgICAvLyBNYWtlIGl0IGFzIG1hdGNoaW5nIGZhaWx1cmUgdW50aWwg
dGhlIHNwZWMgY2xhcmlmaWVzIHRoaXMgY2FzZS4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudExl
dmVsID09IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICAg
ICAgaWYgKHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yID09IFBzZXVkb0VsZW1lbnRNYXRj
aGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKQogICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlv
blR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmc7CiAKICAgICAgICAgICAgIHN3aXRjaCAoc2VsZWN0
b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsKQEAgLTk1OCwxMiArOTYyLDE1IEBAIHN0YXRpYyBG
dW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2Vs
ZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7
CiAgICAgICAgIH0KIAorICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkg
ZWZmZWN0aXZlIGluIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVkb0VsZW1l
bnRNYXRjaGluZ0JlaGF2aW9yID0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVy
TWF0Y2g7CisKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdt
ZW50UmVsYXRpb25Gb3JTZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAgZnJhZ21l
bnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudDsK
ICAgICAgICAgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbkluUm9v
dEZyYWdtZW50czsKICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFnbWVu
dC5yZWxhdGlvblRvTGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09
IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJh
Z21lbnRMZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdtZW50
Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0b3JG
cmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3RvckZy
YWdtZW50KCk7CkBAIC0yODUwLDcgKzI4NTcsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0Jgog
ICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVy
blZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAg
IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKQEAgLTM1NDgsMTYgKzM1NTUsMTEgQEAgdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNldWRvQ2xh
c3MoQXNzZW1ibGVyOjoKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6
Okp1bXBMaXN0JiwgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgQVNT
RVJUKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvcik7CisgICAgQVNTRVJUX1VOVVNFRChm
cmFnbWVudCwgZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yKTsKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxl
Y3RvciwgIldoZW4gdGhlIGZyYWdtZW50IGhhcyBwc2V1ZG8gZWxlbWVudCwgdGhlIHNlbGVjdG9y
IGJlY29tZXMgQ2Fubm90TWF0Y2hBbnl0aGluZyBmb3IgUXVlcnlTZWxlY3RvciBhbmQgdGhpcyB0
ZXN0IGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQuIik7Ci0KLSAgICBpZiAoIWZyYWdtZW50TWF0Y2hl
c1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkgewotICAg
ICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsK
LSAgICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOwotICAgICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRl
eHQoQXNzZW1ibGVyOjpFcXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHls
ZSwgY2hlY2tpbmdDb250ZXh0KSk7Ci0gICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5V
U0VEKGZyYWdtZW50LCBmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0
b3JDb250ZXh0LCBmcmFnbWVudCksICJWaXJ0dWFsIHBzZXVkbyBlbGVtZW50cyBoYW5kbGluZyBp
cyBvbmx5IGVmZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LiBJZiB0aGUgY3VycmVu
dCBmcmFnbWVudCBpcyBub3QgcmlnaHRtb3N0IGZyYWdtZW50LCBDU1MgSklUIGNvbXBpbGVyIG1h
a2VzIGl0IENhbm5vdE1hdGNoQW55dGhpbmcgaW4gZnJhZ21lbnQgY29uc3RydWN0aW9uIHBoYXNl
LCBzbyBuZXZlciByZWFjaCBoZXJlLiIpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0Vs
ZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZy
YWdtZW50JiBmcmFnbWVudCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNjI2
Y2MxZWRjYjE2ZGUzOGY3MTk1NzEyOTUyZDNjOGZjMTQwZTcwNC4uOGVhYzU0YWMwZGNmZTUwNWQ1
MDdmMmE3OGIyYTM0NDUyMGEwOTcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKQEAgLTIzNCw2ICsyMzQsMTQgQEAgY2xhc3MgUmVuZGVyU3R5bGU6
IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRlclN0eWxlPiB7CiAgICAgICAgICAgICBBU1NFUlQocHNl
dWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpOwogICAgICAgICAgICAgbV9mbGFncyB8PSBv
bmVCaXRNYXNrIDw8IChwc2V1ZG9CaXRzT2Zmc2V0IC0gMSArIHBzZXVkbyk7CiAgICAgICAgIH0K
KyAgICAgICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvSWRTZXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwc2V1ZG9JZFNldCk7CisgICAgICAgICAg
ICB1aW50NjRfdCByYXdQc2V1ZG9JZFNldCA9IHBzZXVkb0lkU2V0LmRhdGEoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCgocmF3UHNldWRvSWRTZXQgJiBQVUJMSUNfUFNFVURPSURfTUFTSykgPT0gcmF3
UHNldWRvSWRTZXQpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChwc2V1ZG9CaXRzT2Zmc2V0
ID49IDEsICIocHNldWRvQml0c09mZnNldCAtIDEpIHNob3VsZCBiZSB2YWxpZC4iKTsKKyAgICAg
ICAgICAgIG1fZmxhZ3MgfD0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYXdQc2V1ZG9JZFNldCkg
PDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSk7CisgICAgICAgIH0KIAogICAgICAgICBFVGFibGVM
YXlvdXQgdGFibGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGFibGVMYXlv
dXQ+KGdldFZhbHVlKHRhYmxlTGF5b3V0Qml0TWFzaywgdGFibGVMYXlvdXRPZmZzZXQpKTsgfQog
ICAgICAgICB2b2lkIHNldFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB0YWJsZUxheW91dCkgeyB1
cGRhdGVWYWx1ZSh0YWJsZUxheW91dCwgdGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9m
ZnNldCk7IH0KQEAgLTU2MSw2ICs1NjksNyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJl
ZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBib29sIGhhc0FueVB1YmxpY1BzZXVkb1N0eWxl
cygpIGNvbnN0OwogICAgIGJvb2wgaGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKSBjb25z
dDsKICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbyk7CisgICAgdm9p
ZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQpOwogICAgIGJvb2wgaGFzVW5pcXVlUHNl
dWRvU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIGF0dHJpYnV0ZSBnZXR0ZXIgbWV0aG9kcwpAQCAt
MjE1NSw2ICsyMTY0LDExIEBAIGlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9T
dHlsZShQc2V1ZG9JZCBwc2V1ZG8pCiAgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVk
b1N0eWxlKHBzZXVkbyk7CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1
ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvSWRTZXQpCit7CisgICAgbm9uaW5oZXJpdGVkX2Zs
YWdzLnNldEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXggMmE0YWVm
NWJlNzQ4MGUyMDAzNjFiMzgyMmFiMDgzZDc1YzBhMzU4ZC4uNzVkNmQzOTYzMTM4ZDI2M2M4OGU2
OGMxOGQ5ZGUxNjU3Nzk0ZGUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5k
ZWYgUmVuZGVyU3R5bGVDb25zdGFudHNfaAogI2RlZmluZSBSZW5kZXJTdHlsZUNvbnN0YW50c19o
CiAKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyBjb25zdCBzaXplX3QgUHJpbnRDb2xvckFkanVzdEJpdHMgPSAxOwpAQCAtODAsNiAr
ODIsNjMgQEAgZW51bSBQc2V1ZG9JZCA6IHVuc2lnbmVkIGNoYXIgewogICAgIFBVQkxJQ19QU0VV
RE9JRF9NQVNLID0gKCgxIDw8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKSAtIDEpICYgfigoMSA8
PCBGSVJTVF9QVUJMSUNfUFNFVURPSUQpIC0gMSkKIH07CiAKK2NsYXNzIFBzZXVkb0lkU2V0IHsK
K3B1YmxpYzoKKyAgICBQc2V1ZG9JZFNldCgpCisgICAgICAgIDogbV9kYXRhKDApCisgICAgeyB9
CisKKyAgICBQc2V1ZG9JZFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UHNldWRvSWQ+IGluaXRp
YWxpemVyTGlzdCkKKyAgICAgICAgOiBtX2RhdGEoMCkKKyAgICB7CisgICAgICAgIGZvciAoUHNl
dWRvSWQgcHNldWRvSWQgOiBpbml0aWFsaXplckxpc3QpCisgICAgICAgICAgICBhZGQocHNldWRv
SWQpOworICAgIH0KKworICAgIHN0YXRpYyBQc2V1ZG9JZFNldCBmcm9tTWFzayh1bnNpZ25lZCBy
YXdQc2V1ZG9JZFNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChyYXdQc2V1
ZG9JZFNldCk7CisgICAgfQorCisgICAgYm9vbCBoYXMoUHNldWRvSWQgcHNldWRvSWQpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhICYgKDEgPDwgcHNldWRvSWQpOworICAgIH0K
KworICAgIHZvaWQgYWRkKFBzZXVkb0lkIHBzZXVkb0lkKQorICAgIHsKKyAgICAgICAgbV9kYXRh
IHw9ICgxIDw8IHBzZXVkb0lkKTsKKyAgICB9CisKKyAgICB2b2lkIG1lcmdlKFBzZXVkb0lkU2V0
IHNvdXJjZSkKKyAgICB7CisgICAgICAgIG1fZGF0YSB8PSBzb3VyY2UubV9kYXRhOworICAgIH0K
KworICAgIFBzZXVkb0lkU2V0IG9wZXJhdG9yICYoY29uc3QgUHNldWRvSWRTZXQmIHBzZXVkb0lk
U2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFBzZXVkb0lkU2V0KG1fZGF0YSAmIHBz
ZXVkb0lkU2V0Lm1fZGF0YSk7CisgICAgfQorCisgICAgUHNldWRvSWRTZXQgb3BlcmF0b3IgfChj
b25zdCBQc2V1ZG9JZFNldCYgcHNldWRvSWRTZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gUHNldWRvSWRTZXQobV9kYXRhIHwgcHNldWRvSWRTZXQubV9kYXRhKTsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2RhdGE7CisgICAgfQorCisgICAgdW5zaWduZWQgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YTsgfQorcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQc2V1ZG9JZFNldCh1bnNpZ25lZCByYXdQc2V1
ZG9JZFNldCkKKyAgICAgICAgOiBtX2RhdGEocmF3UHNldWRvSWRTZXQpCisgICAgeyB9CisKKyAg
ICB1bnNpZ25lZCBtX2RhdGE7Cit9OworCiBlbnVtIENvbHVtbkZpbGwgeyBDb2x1bW5GaWxsQmFs
YW5jZSwgQ29sdW1uRmlsbEF1dG8gfTsKIAogZW51bSBDb2x1bW5TcGFuIHsgQ29sdW1uU3Bhbk5v
bmUgPSAwLCBDb2x1bW5TcGFuQWxsIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDYyMzU2NzVmZmZlMTI5ODNkMGJlMDlj
MmY1NzBlM2E2ODA4YmJjNi4uZWZjZjQ3ODQxOTc2YzM2ZTFiMDZmMDA0N2EzNTdjMGI5OTQyZDYy
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTExLTA3ICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0b3JzOiBBZGQgbXVsdGlw
bGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVs
ZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1m
cmFnbWVudHMuaHRtbDogQWRkZWQuCisgICAgICAgIEluIHRoaXMgdGVzdCwgd2UgZW5zdXJlIHRo
YXQgcHNldWRvIGVsZW1lbnRzIHNlbGVjdG9yIGluIHRoZQorICAgICAgICBub24tcmlnaHRtb3N0
IGZyYWdtZW50cyBiZWNvbWVzIHVubWF0Y2hlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9w
c2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy5odG1sOiBB
ZGRlZC4KKwogMjAxNC0xMS0wNiAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4K
IAogICAgICAgICBVcGRhdGUgdGVzdGhhcm5lc3MuanMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1u
b24tcmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9z
ZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45NjA4NjY4ZDkyODc3ZjBjN2QxODFiZWI0MzJhY2VlOGZiYzAx
MzVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRv
LWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDE4IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisudGFy
Z2V0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdj4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MSI+VGhpcyBs
aW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdl
dDIiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQi
IGlkPSJ0YXJnZXQzIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFz
cz0idGFyZ2V0IiBpZD0idGFyZ2V0NCI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+Cis8
L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Vs
ZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0
LWZyYWdtZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxYjAzNDVhOTYzMzhmMWI4ZjZhZTlhZDY3MzMw
Mzg5NjQ4ZTgxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9y
cy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sCkBAIC0wLDAg
KzEsODMgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy50YXJn
ZXQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisKKzo6YWZ0ZXIgI3RhcmdldDEs
Cis6OmJlZm9yZSAjdGFyZ2V0MSwKKzo6Zmlyc3QtbGluZSAjdGFyZ2V0MSwKKzo6Zmlyc3QtbGV0
dGVyICN0YXJnZXQxLAorOjotd2Via2l0LXJlc2l6ZXIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Ny
b2xsYmFyICN0YXJnZXQxLAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24gI3RhcmdldDEsCis6
Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXIt
dGh1bWIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrICN0YXJnZXQxLAorOjot
d2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSAjdGFyZ2V0MSwKKzo6c2VsZWN0aW9uICN0YXJn
ZXQxCit7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6OmFmdGVyID4gI3Rhcmdl
dDIsCis6OmJlZm9yZSA+ICN0YXJnZXQyLAorOjpmaXJzdC1saW5lID4gI3RhcmdldDIsCis6OmZp
cnN0LWxldHRlciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXJlc2l6ZXIgPiAjdGFyZ2V0MiwKKzo6
LXdlYmtpdC1zY3JvbGxiYXIgPiAjdGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9u
ID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciA+ICN0YXJnZXQyLAorOjot
d2Via2l0LXNjcm9sbGJhci10aHVtYiA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci10
cmFjayA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSA+ICN0YXJn
ZXQyLAorOjpzZWxlY3Rpb24gPiAjdGFyZ2V0MgoreworICAgIGJhY2tncm91bmQtY29sb3I6IHJl
ZDsKK30KKworOjphZnRlciArICN0YXJnZXQzLAorOjpiZWZvcmUgKyAjdGFyZ2V0MywKKzo6Zmly
c3QtbGluZSArICN0YXJnZXQzLAorOjpmaXJzdC1sZXR0ZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtp
dC1yZXNpemVyICsgI3RhcmdldDMsCis6Oi13ZWJraXQtc2Nyb2xsYmFyICsgI3RhcmdldDMsCis6
Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJh
ci1jb3JuZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgKyAjdGFyZ2V0
MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3Jv
bGxiYXItdHJhY2stcGllY2UgKyAjdGFyZ2V0MywKKzo6c2VsZWN0aW9uICsgI3RhcmdldDMKK3sK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzo6YWZ0ZXIgfiAjdGFyZ2V0NCwKKzo6
YmVmb3JlIH4gI3RhcmdldDQsCis6OmZpcnN0LWxpbmUgfiAjdGFyZ2V0NCwKKzo6Zmlyc3QtbGV0
dGVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtcmVzaXplciB+ICN0YXJnZXQ0LAorOjotd2Via2l0
LXNjcm9sbGJhciB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24gfiAjdGFy
Z2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQt
c2Nyb2xsYmFyLXRodW1iIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIH4g
I3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlIH4gI3RhcmdldDQsCis6
OnNlbGVjdGlvbiB+ICN0YXJnZXQ0Cit7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQor
Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxwIGNsYXNzPSJ0YXJnZXQi
IGlkPSJ0YXJnZXQxIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFz
cz0idGFyZ2V0IiBpZD0idGFyZ2V0MiI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+Cisg
ICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDMiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3Jl
ZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ0Ij5UaGlzIGxpbmUgc2hv
dWxkIGJlIGdyZWVuLjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50
LWluc2lkZS1tYXRjaGVzLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2VhNmY3NjA1NWVhNDg1
OTY3ZGYwMmQ3MWM1MzVmMDFjN2U3ZTJjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSw3NSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorI3RhcmdldDE6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGlt
ZTsKK30KKworI3RhcmdldDI6OmFmdGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOwor
ICAgIGNvbnRlbnQ6ICJjb2NvYSI7Cit9CisKKyN0YXJnZXQzOjpiZWZvcmUgeworICAgIGJhY2tn
cm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNhcHB1Y2Npbm8iOworfQorCisjdGFy
Z2V0NDo6YmVmb3JlLAorI3RhcmdldDQ6OmFmdGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBs
aW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisjdGFyZ2V0NSwKKyN0YXJnZXQ1Ojpm
aXJzdC1sZXR0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQ2
LAorI3RhcmdldDY6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsK
K30KKworI3RhcmdldDcsCisjdGFyZ2V0Nzo6YmVmb3JlLAorI3RhcmdldDc6OmFmdGVyIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisv
KiBmaXJzdCBsZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLiAqLworI3Rh
cmdldDEyOjphZnRlciwKKyN0YXJnZXQxMjo6YmVmb3JlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisjdGFyZ2V0MTI6OmZpcnN0LWxl
dHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKK30KKworCis8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxwIGlkPSJ0YXJnZXQxIj5wc2V1ZG8gZWxlbWVudCBp
bnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDIiPnBzZXVk
byBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFy
Z2V0MyI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAg
IDxwIGlkPSJ0YXJnZXQ0Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVj
dC48L3A+CisgICAgPHAgaWQ9InRhcmdldDUiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hl
cyBoYXMgZWZmZWN0LCBzbyBhbGwgc2VsZWN0b3JzIHNob3VsZCBiZSBjaGVja2VkLjwvcD4KKyAg
ICA8cCBpZD0idGFyZ2V0NiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIG5lc3RlZCA6bWF0Y2hlcyBz
aG91bGQgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ3Ij5ib3RoIGxpbmUgaXRz
ZWxmIGFuZCBiZWZvcmUvYWZ0ZXIgc2hvdWxkIGJlIGNvbG9yZWQuPC9wPgorICAgIDxwIGlkPSJ0
YXJnZXQ4Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm5vdCBkb2Vzbid0IGhhdmUgZWZmZWN0Ljwv
cD4KKyAgICA8cCBpZD0idGFyZ2V0OSI+OjpmaXJzdC1saW5lIGluIG5vbi1yaWdodG1vc3QgZnJh
Z21lbnQgYWx3YXlzIHVubWF0Y2guPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMCI+Om1hdGNoZXMo
OjpmaXJzdC1saW5lKSBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoZXMu
PC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMSI+cHNldWRvIGVsZW1lbnQgaW4gbm9uLXJpZ2h0bW9z
dCBmcmFnbWVudCBpbnNpZGUgOm1hdGNoZXMgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAg
aWQ9InRhcmdldDEyIj5iZWZvcmUvYWZ0ZXIgY29udGVudHMgYXJlIGNvbG9yZWQgbGltZSBhbmQg
Zmlyc3QtbGV0dGVyIG9mIGJlZm9yZSBjb250ZW50IGlzIGNvbG9yZWQgYmx1ZS48L3A+CisgICAg
PHAgaWQ9InRhcmdldDEzIj5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZl
Y3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxNCI+PHA+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxl
bWVudCBoYXMgbm8gZWZmZWN0LjwvcD48L3A+CisgICAgPHAgaWQ9InRhcmdldDE1Ij48cD5ub24t
cmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKzwvZGl2Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMv
cHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Vs
ZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzkz
Mzk1NmFmMzgwNzg2OGNhZWNjZGFlZDdiMmMyYjBlMWI3MmMyYQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVz
Lmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHN0eWxlPgorI3RhcmdldDE6bWF0Y2hlcyg6OmZpcnN0LWxldHRlcikgeworICAgIGJhY2tncm91
bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQyOm1hdGNoZXMoOjphZnRlcikgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNvY29hIjsKK30KKworI3Rhcmdl
dDM6bWF0Y2hlcyg6OmJlZm9yZSkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAg
Y29udGVudDogImNhcHB1Y2Npbm8iOworfQorCisjdGFyZ2V0NDptYXRjaGVzKDo6YmVmb3JlLCA6
OmFmdGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJv
dW5kIjsKK30KKworI3RhcmdldDU6bWF0Y2hlcyg6OmZpcnN0LWxldHRlciwgcCkgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQ2Om1hdGNoZXMocCwgOm1hdGNoZXMo
cCwgOjpmaXJzdC1sZXR0ZXIpKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKwor
I3RhcmdldDc6bWF0Y2hlcyg6OmJlZm9yZSwgOjphZnRlciwgKikgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQ4Om5vdCg6
bWF0Y2hlcyg6OmZpcnN0LWxpbmUpKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQor
Cis6OmZpcnN0LWxpbmUgI3RhcmdldDkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30K
KworOm1hdGNoZXMoOjpmaXJzdC1saW5lKSAjdGFyZ2V0MTAgeworICAgIGJhY2tncm91bmQtY29s
b3I6IHJlZDsKK30KKworI3RhcmdldDExOm1hdGNoZXMoOjpmaXJzdC1saW5lID4gcCkgeworICAg
IGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworLyogZmlyc3QgbGV0dGVyIG9mIGJlZm9yZSBj
b250ZW50IGlzIGNvbG9yZWQgYmx1ZS4gKi8KKyN0YXJnZXQxMjptYXRjaGVzKDo6Zmlyc3QtbGV0
dGVyLCA6OmFmdGVyLCA6OmJlZm9yZSkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cisg
ICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworfQorCisjdGFyZ2V0MTM6bWF0Y2hlcyg6OmFmdGVy
ID4gcCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICBjb250ZW50OiAiYnVnIjsK
K30KKworI3RhcmdldDE0Om1hdGNoZXMoOjphZnRlcikgPiBweworICAgIGJhY2tncm91bmQtY29s
b3I6IHJlZDsKK30KKworI3RhcmdldDE1Om1hdGNoZXMoOjphZnRlciA+IHApID4gcHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXY+CisgICAgPHAgaWQ9InRhcmdldDEiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBo
YXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRl
IDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxl
bWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQi
PnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBp
ZD0idGFyZ2V0NSI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNv
IGFsbCBzZWxlY3RvcnMgc2hvdWxkIGJlIGNoZWNrZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2
Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgbmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVj
dC48L3A+CisgICAgPHAgaWQ9InRhcmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9h
ZnRlciBzaG91bGQgYmUgY29sb3JlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBl
bGVtZW50IGluc2lkZSA6bm90IGRvZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0
YXJnZXQ5Ij46OmZpcnN0LWxpbmUgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5t
YXRjaC48L3A+CisgICAgPHAgaWQ9InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGlu
IG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9
InRhcmdldDExIj5wc2V1ZG8gZWxlbWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lk
ZSA6bWF0Y2hlcyBhbHdheXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJl
Zm9yZS9hZnRlciBjb250ZW50cyBhcmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2Yg
YmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMi
Pm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAg
aWQ9InRhcmdldDE0Ij48cD5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZl
Y3QuPC9wPjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRv
IGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+PC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241183</attachid>
            <date>2014-11-07 08:04:27 -0800</date>
            <delta_ts>2014-11-08 10:58:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141108010437.patch</filename>
            <type>text/plain</type>
            <size>54871</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI5ZmM3NDE4MmViMzU2
OWYzYjJkYjQ1OTE4ZDc0ZmI1ZDljNGZkNy4uYzViNzZiY2Q3NjA1M2U5YjlmMjYyZWIyYTc1OTA1
ZWFlNzUyZTI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXIgaW4gdGhlIG5vbi1yaWdodG1vc3QKKyAgICAgICAgZnJhbWduZXQsIGl0IGlz
IGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1cGRh
dGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRv
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9J
ZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OlBz
ZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0
b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXZWJD
b3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMDYgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFRyeSB0byBm
aXggR1RLIGJ1aWxkIGFmdGVyIHIxNzU3MTkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCmluZGV4IDQxY2Y3NTA2MWMwN2M5MmY4NTY0Y2Y3ZGVlYWNmOTY3ZDhlZjk1MWQuLjU4
MmYxYmJiMjA3MzZlYjEyOTlhZDdmZDY2NGE3ZDVmMzdiNmI2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC04LDYgKzgsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3Jh
IEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNzEsNiArNzIsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzIDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlYwogICAg
ICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6
Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hUeXBlOjpEaXNhYmxlZCA6IFZpc2l0
ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21l
bnQoc2VsZWN0b3IpCiAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFsc2UpCisg
ICAgICAgICwgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSh0cnVlKQogICAgICAgICAsIGhhc1Njcm9s
bGJhclBzZXVkbyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCiAg
ICAgeyB9CkBAIC04MCw2ICs4Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgVmlz
aXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBm
aXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKICAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0Ns
YXNzOworICAgIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKICAgICBib29sIGhhc1Njcm9s
bGJhclBzZXVkbzsKICAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbzsKIH07CkBAIC0xNzEsMzYg
KzE3NCwzMyBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogYm9vbCBTZWxlY3RvckNoZWNrZXI6
Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQpIGNvbnN0CiB7CiAgICAgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyBjb250ZXh0KHByb3ZpZGVkQ29udGV4dCwgc2VsZWN0b3IsIGVs
ZW1lbnQpOwotICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gTk9QU0VVRE87Ci0gICAgaWYgKG1hdGNo
UmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWQpICE9IFNlbGVjdG9yTWF0Y2hlcykKKyAgICBQ
c2V1ZG9JZFNldCBwc2V1ZG9JZFNldDsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJl
Y3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0KTsKKyAgICBpZiAocmVzdWx0Lm1hdGNoICE9
IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
Y29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBjb250ZXh0LnBzZXVkb0lkICE9IHBzZXVk
b0lkKQorICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmICFwc2V1ZG9JZFNl
dC5oYXMoY29udGV4dC5wc2V1ZG9JZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
Y29udGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1ZG9JZCAhPSBOT1BTRVVETykgewot
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
ICYmIHBzZXVkb0lkIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUocHNldWRvSWQpOworICAgIGlmIChj
b250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lkU2V0KSB7CisgICAgICAgIFBz
ZXVkb0lkU2V0IHB1YmxpY1BzZXVkb0lkU2V0ID0gcHNldWRvSWRTZXQgJiBQc2V1ZG9JZFNldDo6
ZnJvbU1hc2soUFVCTElDX1BTRVVET0lEX01BU0spOworICAgICAgICBpZiAoY29udGV4dC5yZXNv
bHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHB1YmxpY1BzZXVkb0lkU2V0KQor
ICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwdWJs
aWNQc2V1ZG9JZFNldCk7CiAKICAgICAgICAgLy8gV2hlbiBpZ25vcmluZyB2aXJ0dWFsIHBzZXVk
byBlbGVtZW50cywgdGhlIGNvbnRleHQncyBwc2V1ZG8gc2hvdWxkIGFsc28gYmUgTk9QU0VVRE8g
YnV0IHRoYXQgZG9lcwogICAgICAgICAvLyBub3QgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICBy
ZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9y
aW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzOworICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1l
bnRzIHx8IHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hUeXBlOjpFbGVtZW50OwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVk
b0VsZW1lbnQoUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCitpbmxpbmUgc3RhdGljIGJvb2wgaGFz
U2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lk
U2V0KQogewotICAgIGlmIChkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUgotICAgICAgICB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9USFVNQgotICAgICAgICB8fCBkeW5hbWljUHNldWRv
ID09IFNDUk9MTEJBUl9CVVRUT04KLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExC
QVJfVFJBQ0sKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0tfUElF
Q0UKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSKSB7CisgICAg
UHNldWRvSWRTZXQgc2Nyb2xsYmFySWRTZXQgPSB7IFNDUk9MTEJBUiwgU0NST0xMQkFSX1RIVU1C
LCBTQ1JPTExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJBQ0ssIFNDUk9MTEJBUl9UUkFDS19QSUVD
RSwgU0NST0xMQkFSX0NPUk5FUiB9OworICAgIGlmIChkeW5hbWljUHNldWRvSWRTZXQgJiBzY3Jv
bGxiYXJJZFNldCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCiAgICAgLy8gUkVTSVpF
UiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIHNjcm9sbGJhciBidXQgaXQgaXMgYSBzY3JvbGxiYXIt
bGlrZSBwc2V1ZG8gZWxlbWVudAogICAgIC8vIGJlY2F1c2UgaXQgY2FuIGhhdmUgbW9yZSB0aGFu
IG9uZSBwc2V1ZG8gZWxlbWVudC4KLSAgICByZXR1cm4gZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVS
OworICAgIHJldHVybiBkeW5hbWljUHNldWRvSWRTZXQuaGFzKFJFU0laRVIpOwogfQogCiBzdGF0
aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29u
dGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmIGNvbnRleHQpCkBAIC0yMTksMzQgKzIxOSwzOCBAQCBzdGF0aWMgU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChj
b25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMg
Zm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNl
bGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcg
b3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6
Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4
dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
UmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0
KSBjb25zdAogeworICAgIE1hdGNoVHlwZSBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OkVsZW1lbnQ7
CisKICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hl
Y2tPbmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAg
ICBpZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUeXBlKSkK
KyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVsIDQsIGEg
cHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMgdW5kZWZp
bmVkIChpc3N1ZSA3KS4KLSAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVu
dGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0gICAgICAgIGlmIChjb250ZXh0Lmlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5OwotCiAgICAgICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5pc0N1c3RvbVBzZXVk
b0VsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gSW4gZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3Ms
IGN1c3RvbSBwc2V1ZG8gZWxlbWVudHMgYXJlIGFsd2F5cyBkaXNhYmxlZC4KKyAgICAgICAgICAg
IGlmICghY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7
CiAgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGNvbnRleHQuZWxlbWVudC0+Y29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1l
bnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gY29udGV4dC5zZWxlY3Rvci0+dmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9j
YWxseSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxl
bWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFdlYktpdEN1c3RvbSAmJiBy
b290LT50eXBlKCkgIT0gU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxs
eSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0xvY2FsbHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhN
YXRjaDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
OworCiAgICAgICAgICAgICBpZiAoKCFjb250ZXh0LmVsZW1lbnRTdHlsZSAmJiBjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpIHx8IGNvbnRleHQucmVzb2x2aW5n
TW9kZSA9PSBNb2RlOjpRdWVyeWluZ1J1bGVzKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzTG9jYWxseTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZh
aWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAKICAgICAgICAgICAgIFBzZXVkb0lk
IHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVk
b0VsZW1lbnRUeXBlKCkpOwogICAgICAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQot
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKKyAgICAgICAgICAgICAg
ICBkeW5hbWljUHNldWRvSWRTZXQuYWRkKHBzZXVkb0lkKTsKKyAgICAgICAgICAgIG1hdGNoVHlw
ZSA9IE1hdGNoVHlwZTo6VmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5OwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yNTYsNDcgKzI2MCw1MCBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogICAgIC8v
IFByZXBhcmUgbmV4dCBzZWxlY3RvcgogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBoaXN0b3J5U2Vs
ZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CiAgICAgaWYgKCFoaXN0b3J5
U2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CisgICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdDo6bWF0Y2hlcyhtYXRjaFR5cGUpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3Rv
ciA9IGhpc3RvcnlTZWxlY3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8g
PSBOT1BTRVVETzsKICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9y
KSB7CiAgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBm
b3IgdGhlIHBzZXVkb0lkCi0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURP
ICYmIGNvbnRleHQucHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQg
IT0gTk9QU0VVRE8gJiYgIWR5bmFtaWNQc2V1ZG9JZFNldC5oYXMoY29udGV4dC5wc2V1ZG9JZCkp
CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3
aGVuIHdlIHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgogICAg
ICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24g
IT0gQ1NTU2VsZWN0b3I6OkNoaWxkKQogICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1h
dGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogCiAgICAgICAgIG5leHRDb250
ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87CisgICAgICAgIC8vIFZpcnR1YWwgcHNldWRvIGVsZW1l
bnQgaXMgb25seSBlZmZlY3RpdmUgaW4gdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4KKyAgICAgICAg
bmV4dENvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgIH0KIAogICAg
IHN3aXRjaCAocmVsYXRpb24pIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50Ogog
ICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4
dCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZv
clBhcmVudChuZXh0Q29udGV4dCkpIHsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+
bWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAg
ICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAg
ICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICBNYXRjaFJl
c3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWlj
UHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9y
TWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlw
ZShyZXN1bHQsIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5OworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNo
OjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGls
ZDoKICAgICAgICAgewogICAgICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRG
b3JQYXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICAgICAgaWYgKCFuZXh0Q29udGV4dC5lbGVt
ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0
Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAg
IHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNl
dCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0g
bWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAg
ICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMgfHwgcmVz
dWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRj
aFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2Vs
ZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6RGlyZWN0QWRqYWNlbnQ6CkBAIC0zMDYsNTYgKzMxMyw1OSBAQCBzdGF0aWMgU2VsZWN0b3JD
aGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVu
dChjb25zdAogCiAgICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0
LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJl
dmlvdXNFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2li
bGluZ3M7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6
U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgcHJldmlv
dXNFbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKICAgICAgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBwcmV2aW91c0VsZW1lbnQ7CiAgICAgICAgICAgICBu
ZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAg
ICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvKTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKG1hdGNoUmVjdXJzaXZlbHko
bmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFR5cGUpOwogICAgICAgICB9
CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKICAgICAgICAgaWYgKGNv
bnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAg
IGNvbnRleHQuZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsK
ICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJldmlvdXNF
bGVtZW50U2libGluZygpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVt
ZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRy
OwogICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVu
dCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewogICAg
ICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHls
ZSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldEFmZmVjdHNOZXh0U2libGlu
Z0VsZW1lbnRTdHlsZSgpOwogCi0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9IHRoaXMtPm1hdGNo
UmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwotICAgICAgICAg
ICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxz
QWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHlu
YW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJz
aXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgaWYg
KHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9
PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIHx8IHJlc3VsdC5tYXRjaCA9PSBNYXRj
aDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0Y2hUeXBlKTsKICAgICAgICAg
fTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsK
IAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgogICAgICAgICAvLyBhIHNlbGVj
dG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAg
ICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50
cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAg
ICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBuZXh0Q29u
dGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFt
aWNQc2V1ZG8pOwotICAgICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5h
bWljUHNldWRvID09IFNFTEVDVElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHls
ZSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBk
eW5hbWljUHNldWRvICE9IE5PUFNFVURPCisgICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJh
clBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVkb0lkU2V0KTsK
KyAgICAgICAgbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkb0lk
U2V0LmhhcyhTRUxFQ1RJT04pOworICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8
IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFt
aWNQc2V1ZG9JZFNldAogICAgICAgICAgICAgJiYgIW5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBz
ZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gJiYg
bmV4dENvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
KSkKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAg
cmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5
cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0KSwgbWF0
Y2hUeXBlKTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0gY29udGV4dC5lbGVt
ZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3ROb2RlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hhZG93SG9zdE5vZGU7
CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5l
eHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxl
ID0gMDsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBp
Z25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHls
ZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRv
OworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFR5
cGUpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgIHJldHVybiBNYXRjaFJlc3VsdDo6
ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIH0KIAogc3RhdGljIGJvb2wg
YXR0cmlidXRlVmFsdWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBDU1NTZWxl
Y3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9v
bCBjYXNlU2Vuc2l0aXZlKQpAQCAtNDkwLDcgKzUwMCw3IEBAIHN0YXRpYyBib29sIGNhbk1hdGNo
SG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKK2Jvb2wg
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVz
JiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0LCBNYXRjaFR5cGUmIG1h
dGNoVHlwZSkgY29uc3QKIHsKICAgICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQgPSBjb250ZXh0
LmVsZW1lbnQ7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250
ZXh0LnNlbGVjdG9yOwpAQCAtNTMwLDEzICs1NDAsMTQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0
CiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVj
dG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JM
aXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJjb250
ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBz
dWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgICAgICAgICAgc3ViY29u
dGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsK
KyAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwogCiAjaWYg
RU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGln
bm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hS
ZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1h
dGNoZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5bmFtaWNQc2V1ZG8g
PT0gTk9QU0VVRE8pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNv
bnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNo
ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVEeW5hbWljUHNldWRvKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICNl
bHNlCkBAIC01NDksNyArNTYwLDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdWJjb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghY2hl
Y2tPbmUoc3ViY29udGV4dCkpCisgICAgICAgICAgICAgICAgLy8gU2luY2UgOm5vdCBjYW5ub3Qg
Y29udGFpbiBwc2V1ZG8gZWxlbWVudHMsIHRoZXJlJ3Mgbm8gZWZmZWN0IG9uIG1hdGNoZWRUb05v
blBzZXVkb0VsZW1lbnQuCisgICAgICAgICAgICAgICAgTWF0Y2hUeXBlIGlnbm9yZU1hdGNoVHlw
ZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1
YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGlnbm9yZU1hdGNoVG9Ob25Qc2V1ZG9FbGVt
ZW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICAgICAg
ICAgIH0KQEAgLTY2NSwxNiArNjc4LDM0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAg
ICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6Ci0gICAgICAgICAgICBmb3IgKGNv
bnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+
Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0
KHN1YnNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgc3ViY29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNl
bGVjdG9yID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNl
bGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICAgICAgICAgIFBzZXVk
b0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxl
Y3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGJvb2wgaGFzTWF0Y2hlZEFueXRoaW5nID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgbWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFsUHNldWRvRWxlbWVu
dE9ubHk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0
b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJz
ZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQp
OworICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5wc2V1ZG9FbGVtZW50RWZm
ZWN0aXZlID0gY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlOworICAgICAgICAgICAgICAg
ICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CisgICAgICAgICAgICAgICAg
ICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJzZWxlY3RvcjsK
KyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQ7
CisgICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZl
bHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwc2V1ZG8gZWxlbWVudHMgYXJl
IG5vdCBlZmZlY3RpdmUgaW4gdGhpcyBmcmFnbWVudCAoZS5nLiBpdCdzIG5vdCByaWdobW9zdCBm
cmFnbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBub3QgbmVjZXNz
YXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1ZG8gZWxlbWVudCBpZHMu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFsb2NhbER5bmFtaWNQc2V1ZG9J
ZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
bWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OkVsZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldC5tZXJnZShsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNNYXRjaGVkQW55dGhpbmcgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiBoYXNNYXRjaGVkQW55dGhpbmc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQbGFjZWhv
bGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
PigqZWxlbWVudCkpIHsKQEAgLTc3MCwxMCArODAxLDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMgc3ViQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJDb250ZXh0LmluRnVu
Y3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBQc2V1ZG9JZCBpZ25v
cmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5w
c2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZm9yIChzdWJD
b250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJD
b250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0Ojpu
ZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1YkNvbnRl
eHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwotICAg
ICAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICAgICAgICAgIGlmICht
YXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09
IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05MjMsMTIgKzk1NSwx
MyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKICAgICAgICAgQ2hlY2tpbmdD
b250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCi0gICAgICAgIFBzZXVkb0lk
IGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0
b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwogICAgICAgICBmb3IgKHN1
YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1
YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6
Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgIHN1YkNvbnRleHQuZmly
c3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAg
ICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7Ci0gICAgICAgICAg
ICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9
PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBzdWJDb250ZXh0LnBzZXVkb0VsZW1lbnRF
ZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQ
c2V1ZG87CisgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25v
cmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTk0NSwxMCArOTc4LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRjaFNlbGVjdG9y
TGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBiYXNlQ29uCiAgICAgICAgIHN1
YmNvbnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9y
ID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xh
c3MgPSB0cnVlOworICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBm
YWxzZTsKICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1
YnNlbGVjdG9yOwotICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VV
RE87Ci0gICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgewotICAgICAgICAgICAgQVNTRVJUKGlnbm9y
ZUR5bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOworICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVE
eW5hbWljUHNldWRvOworICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBp
Z25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKaW5kZXggODA3NzcxNzQ0NWVhMzY4NTc0NjQ5YzE0NTEzM2Q4NzdjMzY3YTI2Yy4uZTI0YjVj
NjBmMzNmNWJjZDg5YWNmZDAzMWNhMDY0MmExMGY5ODg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaApAQCAtNDMsNyArNDMsMzEgQEAKIAogY2xhc3MgU2VsZWN0b3JDaGVja2Vy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWxlY3RvckNoZWNrZXIpOwotICAgIGVudW0g
TWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZh
aWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CisgICAgZW51bSBjbGFz
cyBNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9y
RmFpbHNBbGxTaWJsaW5ncywgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKworICAgIGVudW0g
Y2xhc3MgTWF0Y2hUeXBlIHsgVmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5LCBFbGVtZW50IH07CisK
KyAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgeworICAgICAgICBNYXRjaCBtYXRjaDsKKyAgICAgICAg
TWF0Y2hUeXBlIG1hdGNoVHlwZTsKKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgbWF0Y2hl
cyhNYXRjaFR5cGUgbWF0Y2hUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geyBN
YXRjaDo6U2VsZWN0b3JNYXRjaGVzLCBtYXRjaFR5cGUgfTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0YXRpYyBNYXRjaFJlc3VsdCB1cGRhdGVXaXRoTWF0Y2hUeXBlKE1hdGNoUmVzdWx0IHJlc3Vs
dCwgTWF0Y2hUeXBlIG1hdGNoVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1hdGNo
VHlwZSA9PSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQubWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFsUHNldWRvRWxlbWVudE9u
bHk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIE1hdGNoUmVzdWx0IGZhaWxzKE1hdGNoIG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4geyBtYXRjaCwgTWF0Y2hUeXBlOjpFbGVtZW50IH07CisgICAgICAgIH0KKyAgICB9
OwogCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIDogdW5zaWduZWQgY2hhciB7CkBAIC04
Myw4ICsxMDcsOCBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIHN0YXRpYyB1bnNpZ25l
ZCBkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CiAKIHByaXZhdGU6
Ci0gICAgTWF0Y2ggbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3Rh
dHVzJiwgUHNldWRvSWQmKSBjb25zdDsKLSAgICBib29sIGNoZWNrT25lKGNvbnN0IENoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMmKSBjb25zdDsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2
ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYpIGNvbnN0
OworICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBz
ZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJikgY29uc3Q7CiAgICAgYm9vbCBtYXRjaFNlbGVjdG9yTGlz
dChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVudCYsIGNvbnN0IENTU1Nl
bGVjdG9yTGlzdCYpIGNvbnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDFl
MzNhOTc5MmViOTVkMTBkYzQ3NjdiZmQyZjRiN2ZlYTE5ZDFhYjQuLjUxZjAwNTJkYTc4ZDI2OGZk
YTUxNGM1M2YwYjcxMWFlNTkzMTZkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2pp
dC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAKQEAgLTM3Miw3ICszNzIsOSBAQCBlbnVtIGNsYXNzIEZyYWdtZW50c0xl
dmVsIHsKICAgICBJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMQogfTsKIAotc3RhdGljIEZ1bmN0
aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3Rv
ciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVu
dHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29s
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJik7CitlbnVtIGNsYXNzIFBzZXVkb0Vs
ZW1lbnRNYXRjaGluZ0JlaGF2aW9yIHsgQ2FuTWF0Y2gsIE5ldmVyTWF0Y2ggfTsKKworc3RhdGlj
IEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RT
ZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JG
cmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
LCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiwgUHNldWRvRWxlbWVudE1h
dGNoaW5nQmVoYXZpb3IpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFja3RyYWNraW5nSW5mb3Jt
YXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCB1bnNpZ25lZCBs
ZXZlbCA9IDApOwogCkBAIC00NjIsNyArNDY0LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5
cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3QK
ICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogfQogCi1zdGF0
aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0
b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0
IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQ
b3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitzdGF0aWMgaW5saW5l
IEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9y
Q29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbklu
Um9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hF
bmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0Jl
aGF2aW9yIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yKQogewogICAgIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1R5cGUgdHlwZSA9IHNlbGVjdG9yLnBzZXVkb0NsYXNzVHlwZSgpOwogICAg
IHN3aXRjaCAodHlwZSkgewpAQCAtNjM2LDcgKzYzOCw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rp
b25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNl
bGVjCiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3Ig
PSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgICAgU2Vs
ZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAgICAgICAg
IFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAg
ICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFn
bWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZy
YWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdt
ZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRz
KHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVu
dHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMs
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0
Y2hpbmdCZWhhdmlvcjo6TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlz
aXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uVHlwZSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOgpAQCAtNjcxLDcg
KzY3Myw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShj
b25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0
IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2Vs
ZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkg
ewogICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRz
OwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRl
ZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25U
eXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNl
bGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwg
cG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0
ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUg
PSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0
b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3Np
dGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1v
ZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKTsKICAgICAgICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRN
b2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRv
IGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgbm90IHBzZXVk
byBjbGFzcyBmaWx0ZXIsIENhbm5vdE1hdGNoQW55dGhpbmcgaW1wbGllcyB0aGlzIGZpbHRlciBh
bHdheXMgcGFzc2VzLgpAQCAtNjk1LDcgKzY5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25U
eXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVj
CiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IgPSBzZWxl
Y3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgcm9vdFNlbGVjdG9yOyByb290U2VsZWN0b3Ig
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocm9vdFNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAg
IFNlbGVjdG9yRnJhZ21lbnRMaXN0IGZyYWdtZW50TGlzdDsKICAgICAgICAgICAgICAgICBWaXNp
dGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAg
ICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMo
cm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIGZyYWdtZW50TGlzdCwgRnJhZ21lbnRzTGV2
ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVu
Y3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0
b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5j
dGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVu
YWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6
TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVW
aXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGlu
IHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAgICAgICAvLyBT
aW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRv
bid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVudHMuCkBAIC03NTksNyArNzYxLDcgQEAgc3RhdGlj
IGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9y
JiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1
YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0
b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAg
ICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAg
ICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAg
ICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RG
cmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMs
IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZy
YWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAgICAg
ICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdt
ZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJh
Z21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgcHNldWRvRWxlbWVu
dE1hdGNoaW5nQmVoYXZpb3IpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
aWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNh
YmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAg
ICAgLy8gU2luY2UgdGhpcyBmcmFnbWVudCBuZXZlciBtYXRjaGVzIGFnYWluc3QgdGhlIGVsZW1l
bnQsIGRvbid0IGluc2VydCBpdCB0byBtYXRjaGVzTGlzdC4KQEAgLTc2OSw2ICs3NzEsMTAgQEAg
c3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1Nl
bGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAobG9jYWxGdW5jdGlv
blR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEN1cnJlbnRseSBwc2V1ZG8gZWxlbWVudHMgaW5zaWRlIDptYXRjaGVzIGFyZSBz
dXBwb3J0ZWQgaW4gbm9uLUpJVCBjb2RlLgorICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvckZy
YWdtZW50cy5maXJzdCgpLnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKKwogICAgICAgICAgICAgICAg
IGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUs
IGxvY2FsRnVuY3Rpb25UeXBlKTsKICAgICAgICAgICAgICAgICBtYXRjaGVzTGlzdC5hcHBlbmQo
c2VsZWN0b3JGcmFnbWVudHMpOwogICAgICAgICAgICAgfQpAQCAtODA5LDcgKzgxNSw3IEBAIGlu
bGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBD
U1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgLy8gSW4gUXVlcnlTZWxlY3RvciBjb250ZXh0LCA6
dmlzaXRlZCBhbHdheXMgaGFzIG5vIGVmZmVjdCBkdWUgdG8gc2VjdXJpdHkgaXNzdWVzLgogICAg
IGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCA9IHNlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNv
bnRleHQ6OlF1ZXJ5U2VsZWN0b3I7CiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZy
YWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21l
bnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50
czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2RlKTsKKyAgICBt
X2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0
b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJh
Z21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFi
bGVkLCBtX3Zpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6Q2FuTWF0
Y2gpOwogICAgIGlmIChtX2Z1bmN0aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBp
bGUgJiYgbV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5n
KQogICAgICAgICBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24obV9zZWxlY3RvckZyYWdt
ZW50cyk7CiB9CkBAIC04MjUsNyArODMxLDcgQEAgc3RhdGljIGJvb2wgaXNTY3JvbGxiYXJQc2V1
ZG9FbGVtZW50KENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VHlwZSB0eXBlKQogICAgIHJldHVy
biB0eXBlID49IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyICYmIHR5cGUgPD0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJUcmFja1BpZWNlOwogfQogCi1zdGF0
aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9v
dFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdt
ZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWws
IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMs
IGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlKQorc3Rh
dGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJv
b3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFn
bWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVs
LCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
LCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiB2aXNpdGVkTW9kZSwgUHNl
dWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgcHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3Ip
CiB7CiAgICAgU2VsZWN0b3JGcmFnbWVudCBmcmFnbWVudDsKICAgICBGcmFnbWVudFJlbGF0aW9u
IHJlbGF0aW9uVG9QcmV2aW91c0ZyYWdtZW50ID0gRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0
OwpAQCAtODcwLDcgKzg3Niw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21l
bnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAg
ICBpZiAoZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yICYmIGlzU2Nyb2xsYmFyUHNldWRv
RWxlbWVudChmcmFnbWVudC5wc2V1ZG9FbGVtZW50U2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBl
KCkpKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0
aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFNjcm9sbGJhclBzZXVkb0NsYXNzVHlwZSgqc2VsZWN0
b3IsIGZyYWdtZW50KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnVuY3Rp
b25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNl
dWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21l
bnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRNb2RlKSk7
CisgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25U
eXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQs
IHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRj
aEVuYWJsZWQsIHZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcikpOwog
ICAgICAgICAgICAgaWYgKCFwc2V1ZG9DbGFzc09ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUo
KnNlbGVjdG9yKSkKICAgICAgICAgICAgICAgICBmcmFnbWVudC5vbmx5TWF0Y2hlc0xpbmtzSW5R
dWlya3NNb2RlID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09IEZ1bmN0
aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSB8fCBmdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpD
YW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtODg0LDExICs4OTAsNiBAQCBzdGF0aWMgRnVuY3Rpb25U
eXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBT
ZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRl
eHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6
Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAotICAgICAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVs
IDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMg
dW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcg
ZmFpbHVyZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAgICAgICAgICAg
aWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5
cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0
aGluZzsKLQogICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEFmdGVyOgog
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEJlZm9yZToKQEAgLTkw
Nyw5ICs5MDgsMTMgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29u
c3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAgICAgICAgICBy
ZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogICAgICAgICAgICAgLy8g
RklYTUU6IFN1cHBvcnQgUkVTSVpFUiwgU0VMRUNUSU9OIGV0Yy4KICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBicmFuY2ggaW5jbHVkZXMgY3VzdG9tIHBzZXVk
byBlbGVtZW50cy4KICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RD
b21waWxlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAocHNldWRvRWxlbWVudE1h
dGNoaW5nQmVoYXZpb3IgPT0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0
Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0
aGluZzsKKwogICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gRnVuY3Rpb25UeXBlOjpTZWxlY3Rv
ckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTk1OCwxMiArOTYzLDE1IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJh
Z21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAg
ICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICAv
LyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkgZWZmZWN0aXZlIGluIHRoZSByaWdodG1v
c3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yID0gUHNl
dWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2g7CisKICAgICAgICAgZnJhZ21l
bnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdtZW50UmVsYXRpb25Gb3JTZWxlY3RvclJl
bGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21l
bnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudDsKICAgICAgICAgZnJhZ21lbnQucG9zaXRp
b25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbkluUm9vdEZyYWdtZW50czsKICAgICAgICAgcmVs
YXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50
OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0
aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCAhPSBGcmFnbWVudHNM
ZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJr
c01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0b3JGcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50
KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3RvckZyYWdtZW50KCk7CkBAIC0yODUwLDcgKzI4
NTgsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rp
b25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JgogICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVB
cmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlv
bkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykp
OwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0
RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6
RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
aGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsK
QEAgLTM1NDgsMTYgKzM1NTYsMTEgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNldWRvQ2xhc3MoQXNzZW1ibGVyOjoKICAgICB9CiB9
CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9F
bGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiwgY29uc3QgU2VsZWN0
b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYWdtZW50LnBzZXVkb0VsZW1l
bnRTZWxlY3Rvcik7CisgICAgQVNTRVJUX1VOVVNFRChmcmFnbWVudCwgZnJhZ21lbnQucHNldWRv
RWxlbWVudFNlbGVjdG9yKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc2VsZWN0b3JDb250
ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvciwgIldoZW4gdGhlIGZyYWdtZW50
IGhhcyBwc2V1ZG8gZWxlbWVudCwgdGhlIHNlbGVjdG9yIGJlY29tZXMgQ2Fubm90TWF0Y2hBbnl0
aGluZyBmb3IgUXVlcnlTZWxlY3RvciBhbmQgdGhpcyB0ZXN0IGZ1bmN0aW9uIGlzIG5vdCBjYWxs
ZWQuIik7Ci0KLSAgICBpZiAoIWZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9z
ZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkgewotICAgICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNr
aW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgbG9hZENoZWNraW5nQ29u
dGV4dChjaGVja2luZ0NvbnRleHQpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5j
aE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNzZW1ibGVyOjpFcXVhbCwgU2Vs
ZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSwgY2hlY2tpbmdDb250ZXh0KSk7Ci0g
ICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGZyYWdtZW50LCBmcmFnbWVudE1h
dGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCksICJW
aXJ0dWFsIHBzZXVkbyBlbGVtZW50cyBoYW5kbGluZyBpcyBvbmx5IGVmZmVjdGl2ZSBpbiB0aGUg
cmlnaHRtb3N0IGZyYWdtZW50LiBJZiB0aGUgY3VycmVudCBmcmFnbWVudCBpcyBub3QgcmlnaHRt
b3N0IGZyYWdtZW50LCBDU1MgSklUIGNvbXBpbGVyIG1ha2VzIGl0IENhbm5vdE1hdGNoQW55dGhp
bmcgaW4gZnJhZ21lbnQgY29uc3RydWN0aW9uIHBoYXNlLCBzbyBuZXZlciByZWFjaCBoZXJlLiIp
OwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1
ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNmNjYTViNzk1NDRhNGIyODQwMTk4YmUxOTMx
MzJhNDVmMmNhZGIxYS4uZGJiZGExZmQ4NjA0YjJkMzEyM2VhOWE1YjFiNjc2MDY2YTljMzVlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTIz
NCw2ICsyMzQsMTQgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRl
clN0eWxlPiB7CiAgICAgICAgICAgICBBU1NFUlQocHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNF
VURPSUQpOwogICAgICAgICAgICAgbV9mbGFncyB8PSBvbmVCaXRNYXNrIDw8IChwc2V1ZG9CaXRz
T2Zmc2V0IC0gMSArIHBzZXVkbyk7CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRIYXNQc2V1
ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvSWRTZXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChwc2V1ZG9JZFNldCk7CisgICAgICAgICAgICB1aW50NjRfdCByYXdQc2V1ZG9JZFNl
dCA9IHBzZXVkb0lkU2V0LmRhdGEoKTsKKyAgICAgICAgICAgIEFTU0VSVCgocmF3UHNldWRvSWRT
ZXQgJiBQVUJMSUNfUFNFVURPSURfTUFTSykgPT0gcmF3UHNldWRvSWRTZXQpOworICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChwc2V1ZG9CaXRzT2Zmc2V0ID49IDEsICIocHNldWRvQml0c09mZnNl
dCAtIDEpIHNob3VsZCBiZSB2YWxpZC4iKTsKKyAgICAgICAgICAgIG1fZmxhZ3MgfD0gKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyYXdQc2V1ZG9JZFNldCkgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAx
KSk7CisgICAgICAgIH0KIAogICAgICAgICBFVGFibGVMYXlvdXQgdGFibGVMYXlvdXQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGFibGVMYXlvdXQ+KGdldFZhbHVlKHRhYmxlTGF5b3V0
Qml0TWFzaywgdGFibGVMYXlvdXRPZmZzZXQpKTsgfQogICAgICAgICB2b2lkIHNldFRhYmxlTGF5
b3V0KEVUYWJsZUxheW91dCB0YWJsZUxheW91dCkgeyB1cGRhdGVWYWx1ZSh0YWJsZUxheW91dCwg
dGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCk7IH0KQEAgLTU2MSw2ICs1Njks
NyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsK
ICAgICBib29sIGhhc0FueVB1YmxpY1BzZXVkb1N0eWxlcygpIGNvbnN0OwogICAgIGJvb2wgaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKSBjb25zdDsKICAgICB2b2lkIHNldEhhc1BzZXVk
b1N0eWxlKFBzZXVkb0lkIHBzZXVkbyk7CisgICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNl
dWRvSWRTZXQpOwogICAgIGJvb2wgaGFzVW5pcXVlUHNldWRvU3R5bGUoKSBjb25zdDsKIAogICAg
IC8vIGF0dHJpYnV0ZSBnZXR0ZXIgbWV0aG9kcwpAQCAtMjE2OSw2ICsyMTc4LDExIEBAIGlubGlu
ZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pCiAg
ICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVkb1N0eWxlKHBzZXVkbyk7CiB9CiAKK2lu
bGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNl
dWRvSWRTZXQpCit7CisgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVkb1N0eWxlcyhw
c2V1ZG9JZFNldCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJl
bmRlclN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXggMmE0YWVmNWJlNzQ4MGUyMDAzNjFiMzgyMmFiMDgz
ZDc1YzBhMzU4ZC4uNzVkNmQzOTYzMTM4ZDI2M2M4OGU2OGMxOGQ5ZGUxNjU3Nzk0ZGUxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3Rh
bnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29u
c3RhbnRzLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgUmVuZGVyU3R5bGVDb25zdGFudHNf
aAogI2RlZmluZSBSZW5kZXJTdHlsZUNvbnN0YW50c19oCiAKKyNpbmNsdWRlIDxpbml0aWFsaXpl
cl9saXN0PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgUHJp
bnRDb2xvckFkanVzdEJpdHMgPSAxOwpAQCAtODAsNiArODIsNjMgQEAgZW51bSBQc2V1ZG9JZCA6
IHVuc2lnbmVkIGNoYXIgewogICAgIFBVQkxJQ19QU0VVRE9JRF9NQVNLID0gKCgxIDw8IEZJUlNU
X0lOVEVSTkFMX1BTRVVET0lEKSAtIDEpICYgfigoMSA8PCBGSVJTVF9QVUJMSUNfUFNFVURPSUQp
IC0gMSkKIH07CiAKK2NsYXNzIFBzZXVkb0lkU2V0IHsKK3B1YmxpYzoKKyAgICBQc2V1ZG9JZFNl
dCgpCisgICAgICAgIDogbV9kYXRhKDApCisgICAgeyB9CisKKyAgICBQc2V1ZG9JZFNldChzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8UHNldWRvSWQ+IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgOiBt
X2RhdGEoMCkKKyAgICB7CisgICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgOiBpbml0aWFs
aXplckxpc3QpCisgICAgICAgICAgICBhZGQocHNldWRvSWQpOworICAgIH0KKworICAgIHN0YXRp
YyBQc2V1ZG9JZFNldCBmcm9tTWFzayh1bnNpZ25lZCByYXdQc2V1ZG9JZFNldCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChyYXdQc2V1ZG9JZFNldCk7CisgICAgfQorCisgICAg
Ym9vbCBoYXMoUHNldWRvSWQgcHNldWRvSWQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9kYXRhICYgKDEgPDwgcHNldWRvSWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFBzZXVkb0lk
IHBzZXVkb0lkKQorICAgIHsKKyAgICAgICAgbV9kYXRhIHw9ICgxIDw8IHBzZXVkb0lkKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1lcmdlKFBzZXVkb0lkU2V0IHNvdXJjZSkKKyAgICB7CisgICAgICAg
IG1fZGF0YSB8PSBzb3VyY2UubV9kYXRhOworICAgIH0KKworICAgIFBzZXVkb0lkU2V0IG9wZXJh
dG9yICYoY29uc3QgUHNldWRvSWRTZXQmIHBzZXVkb0lkU2V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFBzZXVkb0lkU2V0KG1fZGF0YSAmIHBzZXVkb0lkU2V0Lm1fZGF0YSk7CisgICAg
fQorCisgICAgUHNldWRvSWRTZXQgb3BlcmF0b3IgfChjb25zdCBQc2V1ZG9JZFNldCYgcHNldWRv
SWRTZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gUHNldWRvSWRTZXQobV9kYXRhIHwg
cHNldWRvSWRTZXQubV9kYXRhKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQorCisgICAgdW5z
aWduZWQgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBQc2V1ZG9JZFNldCh1bnNpZ25lZCByYXdQc2V1ZG9JZFNldCkKKyAgICAgICAgOiBtX2Rh
dGEocmF3UHNldWRvSWRTZXQpCisgICAgeyB9CisKKyAgICB1bnNpZ25lZCBtX2RhdGE7Cit9Owor
CiBlbnVtIENvbHVtbkZpbGwgeyBDb2x1bW5GaWxsQmFsYW5jZSwgQ29sdW1uRmlsbEF1dG8gfTsK
IAogZW51bSBDb2x1bW5TcGFuIHsgQ29sdW1uU3Bhbk5vbmUgPSAwLCBDb2x1bW5TcGFuQWxsIH07
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZjRhNzM2OWE1M2MyZjFlNjhlOTJhODdkNzg3NDNlZTk3OGQzNTA4ZC4uYjI5MGYx
ODM0ZTcxOTM3ZDMzMjY0ZmYzNjlkNWRmMDg4ZGVhMDVmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDE0LTExLTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisg
ICAgICAgIENTUzQgU2VsZWN0b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBv
cnQgdG8gOm1hdGNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzODIxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1m
cmFnbWVudHMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zZWxlY3RvcnMv
cHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRtbDogQWRkZWQuCisg
ICAgICAgIEluIHRoaXMgdGVzdCwgd2UgZW5zdXJlIHRoYXQgcHNldWRvIGVsZW1lbnRzIHNlbGVj
dG9yIGluIHRoZQorICAgICAgICBub24tcmlnaHRtb3N0IGZyYWdtZW50cyBiZWNvbWVzIHVubWF0
Y2hlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0
Y2hlcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1
ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy5odG1sOiBBZGRlZC4KKwogMjAxNC0xMS0wNyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgR2FyZGVuaW5nOiBnZXQtYnkt
cG5hbWUuanMgaXMgZmFpbGluZyB3aGVuIHJ1biB3aXRoIEpTQ191c2VMTElOVD1mYWxzZSBhbmQg
b3RoZXIgc3BlY2lhbCBKSVQgY29uZmlndXJhdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50
cy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1l
bnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
NjA4NjY4ZDkyODc3ZjBjN2QxODFiZWI0MzJhY2VlOGZiYzAxMzVhCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0
bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IWRvY3R5cGUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisudGFyZ2V0IHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBsaW1lOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj4KKyAgICA8
cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MSI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48
L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDIiPlRoaXMgbGluZSBzaG91bGQg
YmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQzIj5UaGlzIGxp
bmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0
NCI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50
LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVj
dG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUxYjAzNDVhOTYzMzhmMWI4ZjZhZTlhZDY3MzMwMzg5NjQ4ZTgxOTMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1u
b24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzwhZG9jdHlwZSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy50YXJnZXQgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IGxpbWU7Cit9CisKKzo6YWZ0ZXIgI3RhcmdldDEsCis6OmJlZm9yZSAjdGFyZ2V0MSwK
Kzo6Zmlyc3QtbGluZSAjdGFyZ2V0MSwKKzo6Zmlyc3QtbGV0dGVyICN0YXJnZXQxLAorOjotd2Vi
a2l0LXJlc2l6ZXIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyICN0YXJnZXQxLAorOjot
d2Via2l0LXNjcm9sbGJhci1idXR0b24gI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNv
cm5lciAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgI3RhcmdldDEsCis6Oi13
ZWJraXQtc2Nyb2xsYmFyLXRyYWNrICN0YXJnZXQxLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFj
ay1waWVjZSAjdGFyZ2V0MSwKKzo6c2VsZWN0aW9uICN0YXJnZXQxCit7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmVkOworfQorCis6OmFmdGVyID4gI3RhcmdldDIsCis6OmJlZm9yZSA+ICN0YXJn
ZXQyLAorOjpmaXJzdC1saW5lID4gI3RhcmdldDIsCis6OmZpcnN0LWxldHRlciA+ICN0YXJnZXQy
LAorOjotd2Via2l0LXJlc2l6ZXIgPiAjdGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3JvbGxiYXIgPiAj
dGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uID4gI3RhcmdldDIsCis6Oi13ZWJr
aXQtc2Nyb2xsYmFyLWNvcm5lciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci10aHVt
YiA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjayA+ICN0YXJnZXQyLAorOjot
d2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSA+ICN0YXJnZXQyLAorOjpzZWxlY3Rpb24gPiAj
dGFyZ2V0MgoreworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworOjphZnRlciArICN0
YXJnZXQzLAorOjpiZWZvcmUgKyAjdGFyZ2V0MywKKzo6Zmlyc3QtbGluZSArICN0YXJnZXQzLAor
OjpmaXJzdC1sZXR0ZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1yZXNpemVyICsgI3RhcmdldDMs
Cis6Oi13ZWJraXQtc2Nyb2xsYmFyICsgI3RhcmdldDMsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1
dHRvbiArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgKyAjdGFyZ2V0MywK
Kzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxi
YXItdHJhY2sgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2UgKyAj
dGFyZ2V0MywKKzo6c2VsZWN0aW9uICsgI3RhcmdldDMKK3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZWQ7Cit9CisKKzo6YWZ0ZXIgfiAjdGFyZ2V0NCwKKzo6YmVmb3JlIH4gI3RhcmdldDQsCis6
OmZpcnN0LWxpbmUgfiAjdGFyZ2V0NCwKKzo6Zmlyc3QtbGV0dGVyIH4gI3RhcmdldDQsCis6Oi13
ZWJraXQtcmVzaXplciB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9sbGJhciB+ICN0YXJnZXQ0
LAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24gfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3Jv
bGxiYXItY29ybmVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIH4gI3Rh
cmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIH4gI3RhcmdldDQsCis6Oi13ZWJraXQt
c2Nyb2xsYmFyLXRyYWNrLXBpZWNlIH4gI3RhcmdldDQsCis6OnNlbGVjdGlvbiB+ICN0YXJnZXQ0
Cit7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2PgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQxIj5UaGlzIGxp
bmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0
MiI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIg
aWQ9InRhcmdldDMiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNz
PSJ0YXJnZXQiIGlkPSJ0YXJnZXQ0Ij5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKzwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxl
Y3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2VhNmY3NjA1NWVhNDg1OTY3ZGYwMmQ3MWM1MzVmMDFjN2U3
ZTJjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVk
by1lbGVtZW50LWluc2lkZS1tYXRjaGVzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSw3NSBAQAor
PCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RhcmdldDE6OmZpcnN0
LWxldHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDI6OmFm
dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJjb2NvYSI7
Cit9CisKKyN0YXJnZXQzOjpiZWZvcmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cisg
ICAgY29udGVudDogImNhcHB1Y2Npbm8iOworfQorCisjdGFyZ2V0NDo6YmVmb3JlLAorI3Rhcmdl
dDQ6OmFmdGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJh
cm91bmQiOworfQorCisjdGFyZ2V0NSwKKyN0YXJnZXQ1OjpmaXJzdC1sZXR0ZXIgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQ2LAorI3RhcmdldDY6OmZpcnN0LWxl
dHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDcsCisjdGFy
Z2V0Nzo6YmVmb3JlLAorI3RhcmdldDc6OmFmdGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBs
aW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisvKiBmaXJzdCBsZXR0ZXIgb2YgYmVm
b3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLiAqLworI3RhcmdldDEyOjphZnRlciwKKyN0YXJn
ZXQxMjo6YmVmb3JlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6
ICJhcm91bmQiOworfQorCisjdGFyZ2V0MTI6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogYmx1ZTsKK30KKworCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2Pgor
ICAgIDxwIGlkPSJ0YXJnZXQxIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVm
ZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDIiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0
Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MyI+cHNldWRvIGVsZW1lbnQg
aW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ0Ij5wc2V1
ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRh
cmdldDUiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LCBzbyBhbGwg
c2VsZWN0b3JzIHNob3VsZCBiZSBjaGVja2VkLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NiI+cHNl
dWRvIGVsZW1lbnQgaW5zaWRlIG5lc3RlZCA6bWF0Y2hlcyBzaG91bGQgaGF2ZSBlZmZlY3QuPC9w
PgorICAgIDxwIGlkPSJ0YXJnZXQ3Ij5ib3RoIGxpbmUgaXRzZWxmIGFuZCBiZWZvcmUvYWZ0ZXIg
c2hvdWxkIGJlIGNvbG9yZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ4Ij5wc2V1ZG8gZWxlbWVu
dCBpbnNpZGUgOm5vdCBkb2Vzbid0IGhhdmUgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0
OSI+OjpmaXJzdC1saW5lIGluIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2gu
PC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMCI+Om1hdGNoZXMoOjpmaXJzdC1saW5lKSBpbiBub24t
cmlnaHRtb3N0IGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoZXMuPC9wPgorICAgIDxwIGlkPSJ0YXJn
ZXQxMSI+cHNldWRvIGVsZW1lbnQgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBpbnNpZGUgOm1h
dGNoZXMgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDEyIj5iZWZvcmUv
YWZ0ZXIgY29udGVudHMgYXJlIGNvbG9yZWQgbGltZSBhbmQgZmlyc3QtbGV0dGVyIG9mIGJlZm9y
ZSBjb250ZW50IGlzIGNvbG9yZWQgYmx1ZS48L3A+CisgICAgPHAgaWQ9InRhcmdldDEzIj5ub24t
cmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0
YXJnZXQxNCI+PHA+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxlbWVudCBoYXMgbm8gZWZmZWN0Ljwv
cD48L3A+CisgICAgPHAgaWQ9InRhcmdldDE1Ij48cD5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVt
ZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRl
LW1hdGNoZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50
LWluc2lkZS1tYXRjaGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzkzMzk1NmFmMzgwNzg2OGNhZWNjZGFl
ZDdiMmMyYjBlMWI3MmMyYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2Vs
ZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLmh0bWwKQEAgLTAsMCArMSw5NyBA
QAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RhcmdldDE6bWF0
Y2hlcyg6OmZpcnN0LWxldHRlcikgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisK
KyN0YXJnZXQyOm1hdGNoZXMoOjphZnRlcikgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7
CisgICAgY29udGVudDogImNvY29hIjsKK30KKworI3RhcmdldDM6bWF0Y2hlcyg6OmJlZm9yZSkg
eworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNhcHB1Y2Npbm8i
OworfQorCisjdGFyZ2V0NDptYXRjaGVzKDo6YmVmb3JlLCA6OmFmdGVyKSB7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsKK30KKworI3RhcmdldDU6
bWF0Y2hlcyg6OmZpcnN0LWxldHRlciwgcCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7
Cit9CisKKyN0YXJnZXQ2Om1hdGNoZXMocCwgOm1hdGNoZXMocCwgOjpmaXJzdC1sZXR0ZXIpKSB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDc6bWF0Y2hlcyg6OmJl
Zm9yZSwgOjphZnRlciwgKikgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29u
dGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQ4Om5vdCg6bWF0Y2hlcyg6OmZpcnN0LWxpbmUp
KSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6OmZpcnN0LWxpbmUgI3Rhcmdl
dDkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworOm1hdGNoZXMoOjpmaXJzdC1s
aW5lKSAjdGFyZ2V0MTAgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworI3Rhcmdl
dDExOm1hdGNoZXMoOjpmaXJzdC1saW5lID4gcCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJl
ZDsKK30KKworLyogZmlyc3QgbGV0dGVyIG9mIGJlZm9yZSBjb250ZW50IGlzIGNvbG9yZWQgYmx1
ZS4gKi8KKyN0YXJnZXQxMjptYXRjaGVzKDo6Zmlyc3QtbGV0dGVyLCA6OmFmdGVyLCA6OmJlZm9y
ZSkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7
Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBi
bHVlOworfQorCisjdGFyZ2V0MTM6bWF0Y2hlcyg6OmFmdGVyID4gcCkgeworICAgIGJhY2tncm91
bmQtY29sb3I6IHJlZDsKKyAgICBjb250ZW50OiAiYnVnIjsKK30KKworI3RhcmdldDE0Om1hdGNo
ZXMoOjphZnRlcikgPiBweworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworI3Rhcmdl
dDE1Om1hdGNoZXMoOjphZnRlciA+IHApID4gcHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7
Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAgaWQ9InRhcmdl
dDEiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8
cCBpZD0idGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3Qu
PC9wPgorICAgIDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMg
aGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVkbyBlbGVtZW50IGluc2lk
ZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NSI+cHNldWRvIGVs
ZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3RvcnMgc2hvdWxk
IGJlIGNoZWNrZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxlbWVudCBpbnNp
ZGUgbmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRh
cmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91bGQgYmUgY29sb3Jl
ZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bm90IGRv
ZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5Ij46OmZpcnN0LWxpbmUg
aW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+CisgICAgPHAgaWQ9
InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1vc3QgZnJhZ21l
bnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDExIj5wc2V1ZG8gZWxl
bWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0Y2hlcyBhbHdheXMgdW5t
YXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9hZnRlciBjb250ZW50cyBh
cmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29s
b3JlZCBibHVlLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1yaWdodG1vc3QgcHNldWRv
IGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDE0Ij48cD5ub24t
cmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKyAgICA8cCBp
ZD0idGFyZ2V0MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVj
dC48L3A+PC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241231</attachid>
            <date>2014-11-08 10:58:35 -0800</date>
            <delta_ts>2014-11-09 21:25:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141109035834.patch</filename>
            <type>text/plain</type>
            <size>57411</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI5ZmM3NDE4MmViMzU2
OWYzYjJkYjQ1OTE4ZDc0ZmI1ZDljNGZkNy4uYjdhMzk2YThjZDZmMTQ2N2RjNjRlODBiOTEzZDM3
ZmY1ZjlhOWMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTA4ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXIgaW4gdGhlIG5vbi1yaWdodG1vc3QKKyAgICAgICAgZnJhbWduZXQsIGl0IGlz
IGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1cGRh
dGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRv
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9J
ZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OlBz
ZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0
b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXZWJD
b3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMDYgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFRyeSB0byBm
aXggR1RLIGJ1aWxkIGFmdGVyIHIxNzU3MTkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCmluZGV4IDQxY2Y3NTA2MWMwN2M5MmY4NTY0Y2Y3ZGVlYWNmOTY3ZDhlZjk1MWQuLjc1
MmUwNGY2NjFhM2E5MzA3MmIxMWYxMDdhMmM4MWMzZjEzNDhiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC04LDYgKzgsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3Jh
IEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNzEsNiArNzIsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHRXaXRoU3RhdHVzIDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlYwogICAg
ICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6
Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hUeXBlOjpEaXNhYmxlZCA6IFZpc2l0
ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21l
bnQoc2VsZWN0b3IpCiAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFsc2UpCisg
ICAgICAgICwgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSh0cnVlKQogICAgICAgICAsIGhhc1Njcm9s
bGJhclBzZXVkbyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCiAg
ICAgeyB9CkBAIC04MCw2ICs4Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAgICAgVmlz
aXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBm
aXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKICAgICBib29sIGluRnVuY3Rpb25hbFBzZXVkb0Ns
YXNzOworICAgIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKICAgICBib29sIGhhc1Njcm9s
bGJhclBzZXVkbzsKICAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbzsKIH07CkBAIC0xNzEsMzYg
KzE3NCwzMyBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogYm9vbCBTZWxlY3RvckNoZWNrZXI6
Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQpIGNvbnN0CiB7CiAgICAgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyBjb250ZXh0KHByb3ZpZGVkQ29udGV4dCwgc2VsZWN0b3IsIGVs
ZW1lbnQpOwotICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gTk9QU0VVRE87Ci0gICAgaWYgKG1hdGNo
UmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWQpICE9IFNlbGVjdG9yTWF0Y2hlcykKKyAgICBQ
c2V1ZG9JZFNldCBwc2V1ZG9JZFNldDsKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJl
Y3Vyc2l2ZWx5KGNvbnRleHQsIHBzZXVkb0lkU2V0KTsKKyAgICBpZiAocmVzdWx0Lm1hdGNoICE9
IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
Y29udGV4dC5wc2V1ZG9JZCAhPSBOT1BTRVVETyAmJiBjb250ZXh0LnBzZXVkb0lkICE9IHBzZXVk
b0lkKQorICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmICFwc2V1ZG9JZFNl
dC5oYXMoY29udGV4dC5wc2V1ZG9JZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
Y29udGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1ZG9JZCAhPSBOT1BTRVVETykgewot
ICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxl
ICYmIHBzZXVkb0lkIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICBjb250
ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUocHNldWRvSWQpOworICAgIGlmIChj
b250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lkU2V0KSB7CisgICAgICAgIFBz
ZXVkb0lkU2V0IHB1YmxpY1BzZXVkb0lkU2V0ID0gcHNldWRvSWRTZXQgJiBQc2V1ZG9JZFNldDo6
ZnJvbU1hc2soUFVCTElDX1BTRVVET0lEX01BU0spOworICAgICAgICBpZiAoY29udGV4dC5yZXNv
bHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHB1YmxpY1BzZXVkb0lkU2V0KQor
ICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhwdWJs
aWNQc2V1ZG9JZFNldCk7CiAKICAgICAgICAgLy8gV2hlbiBpZ25vcmluZyB2aXJ0dWFsIHBzZXVk
byBlbGVtZW50cywgdGhlIGNvbnRleHQncyBwc2V1ZG8gc2hvdWxkIGFsc28gYmUgTk9QU0VVRE8g
YnV0IHRoYXQgZG9lcwogICAgICAgICAvLyBub3QgY2F1c2UgYSBmYWlsdXJlLgotICAgICAgICBy
ZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9y
aW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzOworICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1l
bnRzIHx8IHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hUeXBlOjpFbGVtZW50OwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHN0YXRpYyBib29sIGhhc1Njcm9sbGJhclBzZXVk
b0VsZW1lbnQoUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCitpbmxpbmUgc3RhdGljIGJvb2wgaGFz
U2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lk
U2V0KQogewotICAgIGlmIChkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUgotICAgICAgICB8fCBk
eW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9USFVNQgotICAgICAgICB8fCBkeW5hbWljUHNldWRv
ID09IFNDUk9MTEJBUl9CVVRUT04KLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExC
QVJfVFJBQ0sKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0tfUElF
Q0UKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfQ09STkVSKSB7CisgICAg
UHNldWRvSWRTZXQgc2Nyb2xsYmFySWRTZXQgPSB7IFNDUk9MTEJBUiwgU0NST0xMQkFSX1RIVU1C
LCBTQ1JPTExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJBQ0ssIFNDUk9MTEJBUl9UUkFDS19QSUVD
RSwgU0NST0xMQkFSX0NPUk5FUiB9OworICAgIGlmIChkeW5hbWljUHNldWRvSWRTZXQgJiBzY3Jv
bGxiYXJJZFNldCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCiAgICAgLy8gUkVTSVpF
UiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIHNjcm9sbGJhciBidXQgaXQgaXMgYSBzY3JvbGxiYXIt
bGlrZSBwc2V1ZG8gZWxlbWVudAogICAgIC8vIGJlY2F1c2UgaXQgY2FuIGhhdmUgbW9yZSB0aGFu
IG9uZSBwc2V1ZG8gZWxlbWVudC4KLSAgICByZXR1cm4gZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVS
OworICAgIHJldHVybiBkeW5hbWljUHNldWRvSWRTZXQuaGFzKFJFU0laRVIpOwogfQogCiBzdGF0
aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29u
dGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmIGNvbnRleHQpCkBAIC0yMTksMzQgKzIxOSwzOCBAQCBzdGF0aWMgU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChj
b25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMg
Zm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNl
bGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcg
b3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBTZWxlY3RvckNoZWNrZXI6
Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4
dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
UmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0
KSBjb25zdAogeworICAgIE1hdGNoVHlwZSBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OkVsZW1lbnQ7
CisKICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoLgotICAgIGlmICghY2hl
Y2tPbmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKKyAg
ICBpZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9JZFNldCwgbWF0Y2hUeXBlKSkK
KyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xv
Y2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVsIDQsIGEg
cHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMgdW5kZWZp
bmVkIChpc3N1ZSA3KS4KLSAgICAgICAgLy8gTWFrZSBpdCBhcyBtYXRjaGluZyBmYWlsdXJlIHVu
dGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0gICAgICAgIGlmIChjb250ZXh0Lmlu
RnVuY3Rpb25hbFBzZXVkb0NsYXNzKQotICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5OwotCiAgICAgICAgIGlmIChjb250ZXh0LnNlbGVjdG9yLT5pc0N1c3RvbVBzZXVk
b0VsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gSW4gZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3Ms
IGN1c3RvbSBwc2V1ZG8gZWxlbWVudHMgYXJlIGFsd2F5cyBkaXNhYmxlZC4KKyAgICAgICAgICAg
IGlmICghY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7
CiAgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGNvbnRleHQuZWxlbWVudC0+Y29u
dGFpbmluZ1NoYWRvd1Jvb3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1l
bnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gY29udGV4dC5zZWxlY3Rvci0+dmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9j
YWxseSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxl
bWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFdlYktpdEN1c3RvbSAmJiBy
b290LT50eXBlKCkgIT0gU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxs
eSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0xvY2FsbHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhN
YXRjaDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKCghY29udGV4dC5lbGVtZW50U3R5bGUgJiYgY29udGV4dC5yZXNvbHZpbmdNb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6
UXVlcnlpbmdSdWxlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2Fs
bHk7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6UXVlcnlpbmdSdWxlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgICAg
IFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGNvbnRleHQuc2VsZWN0
b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwogICAgICAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5P
UFNFVURPKQotICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKKyAgICAg
ICAgICAgICAgICBkeW5hbWljUHNldWRvSWRTZXQuYWRkKHBzZXVkb0lkKTsKKyAgICAgICAgICAg
IG1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6VmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5OwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0yNTYsNDcgKzI2MCw1MCBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25z
dAogICAgIC8vIFByZXBhcmUgbmV4dCBzZWxlY3RvcgogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBo
aXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CiAgICAgaWYg
KCFoaXN0b3J5U2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CisgICAg
ICAgIHJldHVybiBNYXRjaFJlc3VsdDo6bWF0Y2hlcyhtYXRjaFR5cGUpOwogCiAgICAgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4
dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFt
aWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yKSB7CiAgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJy
ZWxldmFudCBmb3IgdGhlIHBzZXVkb0lkCi0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9
IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQu
cHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIWR5bmFtaWNQc2V1ZG9JZFNldC5oYXMoY29udGV4dC5w
c2V1ZG9JZCkpCisgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBt
YXRjaGluZyB3aGVuIHdlIHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0
b3JzLgogICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYg
cmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKQogICAgICAgICAgICAgbmV4dENvbnRleHQu
dmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogCiAgICAgICAg
IG5leHRDb250ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87CisgICAgICAgIC8vIFZpcnR1YWwgcHNl
dWRvIGVsZW1lbnQgaXMgb25seSBlZmZlY3RpdmUgaW4gdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4K
KyAgICAgICAgbmV4dENvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAg
IH0KIAogICAgIHN3aXRjaCAocmVsYXRpb24pIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNj
ZW5kYW50OgogICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChu
ZXh0Q29udGV4dCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdt
ZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRT
dHlsZSA9IDA7CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAg
ICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dCA9IGNoZWNraW5n
Q29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCkpIHsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNo
ID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVk
byk7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsK
KyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAg
ICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25v
cmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2ggPT0gTWF0Y2g6
OlNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0
aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZh
aWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICBjYXNlIENTU1NlbGVj
dG9yOjpDaGlsZDoKICAgICAgICAgewogICAgICAgICAgICAgbmV4dENvbnRleHQgPSBjaGVja2lu
Z0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOwogICAgICAgICAgICAgaWYgKCFuZXh0Q29u
dGV4dC5lbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpT
ZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNl
bGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAg
bmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE1hdGNoIG1h
dGNoID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7
Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICBQ
c2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICAgICAgTWF0Y2hSZXN1bHQg
cmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVk
byk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNo
ZXMgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUocmVz
dWx0LCBtYXRjaFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhN
YXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKICAgICAgICAgfQogCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CkBAIC0zMDYsNTYgKzMxMyw1OSBAQCBzdGF0aWMg
U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4
dEZvclBhcmVudChjb25zdAogCiAgICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQg
PSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAg
IGlmICghcHJldmlvdXNFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWls
cyhNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKICAgICAgICAgICAgIGlmIChjb250
ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5nU3R5bGUpCiAgICAgICAgICAgICAg
ICAgcHJldmlvdXNFbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsK
ICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBwcmV2aW91c0VsZW1lbnQ7CiAgICAg
ICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250
ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsK
LSAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVE
eW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51
bGxwdHI7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAg
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKG1hdGNoUmVj
dXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFR5cGUpOwog
ICAgICAgICB9CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKICAgICAg
ICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAg
ICAgICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1Np
YmxpbmcoKTsKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+
cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVj
dG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUg
PSBudWxscHRyOwogICAgICAgICBmb3IgKDsgbmV4dENvbnRleHQuZWxlbWVudDsgbmV4dENvbnRl
eHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KSkgewogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpSZXNv
bHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQtPnNldEFmZmVjdHNO
ZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogCi0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9IHRo
aXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOwot
ICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBtYXRjaCA9PSBTZWxl
Y3RvckZhaWxzQWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgUHNldWRvSWRTZXQg
aWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAg
ICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzIHx8IHJlc3Vs
dC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIHx8IHJlc3VsdC5tYXRj
aCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0Y2hUeXBlKTsK
ICAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNp
YmxpbmdzKTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgogICAgICAgICAv
LyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8tZWxl
bWVudAogICAgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBzZXVk
byBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3RoaW5n
IGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAgICAg
ICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9FbGVt
ZW50KGR5bmFtaWNQc2V1ZG8pOwotICAgICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Qc2V1
ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVDVElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0LmVs
ZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGluZ1J1
bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPCisgICAgICAgIG5leHRDb250ZXh0Lmhh
c1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1BzZXVk
b0lkU2V0KTsKKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHluYW1p
Y1BzZXVkb0lkU2V0LmhhcyhTRUxFQ1RJT04pOworICAgICAgICBpZiAoKGNvbnRleHQuZWxlbWVu
dFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVsZXMp
ICYmIGR5bmFtaWNQc2V1ZG9JZFNldAogICAgICAgICAgICAgJiYgIW5leHRDb250ZXh0Lmhhc1Nl
bGVjdGlvblBzZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQ
c2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzKSkKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsK
LSAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFtaWNQc2V1
ZG8pOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0ZVdp
dGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVkb0lk
U2V0KSwgbWF0Y2hUeXBlKTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRh
bnQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0gY29u
dGV4dC5lbGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hvc3RO
b2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZh
aWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hhZG93
SG9zdE5vZGU7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFn
bWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQuZWxl
bWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRD
b250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0LmVs
ZW1lbnRTdHlsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5h
bWljUHNldWRvOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0
Y2hUeXBlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
LCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgIHJldHVybiBNYXRj
aFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIH0KIAogc3Rh
dGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRl
LCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JW
YWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQpAQCAtNDkwLDcgKzUwMCw3IEBAIHN0YXRpYyBib29s
IGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29u
c3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0LCBNYXRj
aFR5cGUmIG1hdGNoVHlwZSkgY29uc3QKIHsKICAgICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQg
PSBjb250ZXh0LmVsZW1lbnQ7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0
b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAtNTMwLDEzICs1NDAsMTQgQEAgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRl
eHQpIGNvbnN0CiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3Rv
ciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NT
U2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIENoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAg
ICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgICAgICAg
ICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHNlbGVjdG9yTGlzdC0+
Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRv
OwogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgICAgICAgICAgICAgIFBz
ZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBT
ZWxlY3Rvck1hdGNoZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5bmFt
aWNQc2V1ZG8gPT0gTk9QU0VVRE8pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2
ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxl
Y3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVEeW5hbWlj
UHNldWRvKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
ICAgIH0KICNlbHNlCkBAIC01NDksNyArNTYwLDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdWJjb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICghY2hlY2tPbmUoc3ViY29udGV4dCkpCisgICAgICAgICAgICAgICAgLy8gU2luY2UgOm5v
dCBjYW5ub3QgY29udGFpbiBwc2V1ZG8gZWxlbWVudHMsIHRoZXJlJ3Mgbm8gZWZmZWN0IG9uIG1h
dGNoZWRUb05vblBzZXVkb0VsZW1lbnQuCisgICAgICAgICAgICAgICAgTWF0Y2hUeXBlIGlnbm9y
ZU1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKyAgICAgICAgICAgICAgICBpZiAoIWNo
ZWNrT25lKHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGlnbm9yZU1hdGNoVG9Ob25Q
c2V1ZG9FbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYK
ICAgICAgICAgICAgIH0KQEAgLTY2NSwxNiArNjc4LDM0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25z
dAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6Ci0gICAgICAgICAg
ICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxlY3Rv
ckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JM
aXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBzdWJjb250
ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgc3ViY29udGV4
dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICAgICAg
ICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgICAg
ICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRv
KSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgaGFzTWF0Y2hlZEFueXRoaW5nID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgbWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFsUHNl
dWRvRWxlbWVudE9ubHk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciog
c3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YnNlbGVj
dG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsK
KyAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250ZXh0
KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBz
ZXVkb0NsYXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5wc2V1ZG9F
bGVtZW50RWZmZWN0aXZlID0gY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlOworICAgICAg
ICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CisgICAgICAg
ICAgICAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJz
ZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgbG9jYWxEeW5hbWljUHNl
dWRvSWRTZXQ7CisgICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNo
UmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5wc2V1ZG9FbGVtZW50RWZm
ZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwc2V1ZG8gZWxl
bWVudHMgYXJlIG5vdCBlZmZlY3RpdmUgaW4gdGhpcyBmcmFnbWVudCAoZS5nLiBpdCdzIG5vdCBy
aWdobW9zdCBmcmFnbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBu
b3QgbmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1ZG8gZWxl
bWVudCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFsb2NhbER5bmFt
aWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQubWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxlbWVudCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OkVsZW1lbnQ7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldC5tZXJnZShsb2NhbER5bmFtaWNQc2V1
ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNNYXRjaGVkQW55dGhpbmcgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBoYXNNYXRjaGVkQW55dGhpbmc7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PigqZWxlbWVudCkpIHsKQEAgLTc3MCwxMCArODAxLDExIEBAIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMgc3ViQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJDb250
ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBQc2V1
ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAgc3Vi
Q29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
Zm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJz
dCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0
b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0
LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICAg
ICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05MjMs
MTIgKzk1NSwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tp
bmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICBpZiAoc2VsZWN0b3ItPm1h
dGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKICAgICAgICAg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCi0gICAgICAg
IFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29uc3Qg
Q1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwogICAgICAg
ICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZp
cnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgIHN1YkNv
bnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwog
ICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7Ci0g
ICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWlj
UHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBzdWJDb250ZXh0LnBzZXVk
b0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9y
ZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVz
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTk0NSwxMCArOTc4LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjptYXRj
aFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBiYXNlQ29uCiAg
ICAgICAgIHN1YmNvbnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBzdWJjb250ZXh0
LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlvbmFs
UHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZl
Y3RpdmUgPSBmYWxzZTsKICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFn
bWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRv
ID0gTk9QU0VVRE87Ci0gICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGln
bm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgewotICAgICAgICAgICAgQVNT
RVJUKGlnbm9yZUR5bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOworICAgICAgICBQc2V1ZG9JZFNl
dCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJj
b250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRj
aGVzKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmgKaW5kZXggODA3NzcxNzQ0NWVhMzY4NTc0NjQ5YzE0NTEzM2Q4NzdjMzY3YTI2
Yy4uZTI0YjVjNjBmMzNmNWJjZDg5YWNmZDAzMWNhMDY0MmExMGY5ODg1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNDMsNyArNDMsMzEgQEAKIAogY2xhc3MgU2VsZWN0
b3JDaGVja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWxlY3RvckNoZWNrZXIpOwot
ICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBT
ZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CisgICAg
ZW51bSBjbGFzcyBNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHks
IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncywgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsKKwor
ICAgIGVudW0gY2xhc3MgTWF0Y2hUeXBlIHsgVmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5LCBFbGVt
ZW50IH07CisKKyAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgeworICAgICAgICBNYXRjaCBtYXRjaDsK
KyAgICAgICAgTWF0Y2hUeXBlIG1hdGNoVHlwZTsKKworICAgICAgICBzdGF0aWMgTWF0Y2hSZXN1
bHQgbWF0Y2hlcyhNYXRjaFR5cGUgbWF0Y2hUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4geyBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzLCBtYXRjaFR5cGUgfTsKKyAgICAgICAgfQor
CisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCB1cGRhdGVXaXRoTWF0Y2hUeXBlKE1hdGNoUmVz
dWx0IHJlc3VsdCwgTWF0Y2hUeXBlIG1hdGNoVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1hdGNoVHlwZSA9PSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQubWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFsUHNldWRv
RWxlbWVudE9ubHk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIE1hdGNoUmVzdWx0IGZhaWxzKE1hdGNoIG1hdGNoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4geyBtYXRjaCwgTWF0Y2hUeXBlOjpFbGVtZW50IH07CisgICAgICAg
IH0KKyAgICB9OwogCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIDogdW5zaWduZWQgY2hh
ciB7CkBAIC04Myw4ICsxMDcsOCBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIHN0YXRp
YyB1bnNpZ25lZCBkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CiAK
IHByaXZhdGU6Ci0gICAgTWF0Y2ggbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzJiwgUHNldWRvSWQmKSBjb25zdDsKLSAgICBib29sIGNoZWNrT25lKGNvbnN0
IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmKSBjb25zdDsKKyAgICBNYXRjaFJlc3VsdCBtYXRj
aFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9JZFNl
dCYpIGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJikgY29uc3Q7CiAgICAgYm9vbCBtYXRjaFNl
bGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVudCYsIGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYpIGNvbnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBz
ZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NTZWxl
Y3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
CmluZGV4IDFlMzNhOTc5MmViOTVkMTBkYzQ3NjdiZmQyZjRiN2ZlYTE5ZDFhYjQuLjUxZjAwNTJk
YTc4ZDI2OGZkYTUxNGM1M2YwYjcxMWFlNTkzMTZkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTM3Miw3ICszNzIsOSBAQCBlbnVtIGNsYXNzIEZy
YWdtZW50c0xldmVsIHsKICAgICBJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMQogfTsKIAotc3Rh
dGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJv
b3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0
b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJik7CitlbnVtIGNsYXNz
IFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yIHsgQ2FuTWF0Y2gsIE5ldmVyTWF0Y2ggfTsK
Kworc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0
b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYg
c2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiwgUHNldWRv
RWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFja3RyYWNr
aW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCB1
bnNpZ25lZCBsZXZlbCA9IDApOwogCkBAIC00NjIsNyArNDY0LDcgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9y
JiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwog
fQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3Qg
Q1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0
b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwg
RnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywg
Ym9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitzdGF0
aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0
b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0
IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQ
b3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRN
YXRjaGluZ0JlaGF2aW9yIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yKQogewogICAgIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgdHlwZSA9IHNlbGVjdG9yLnBzZXVkb0NsYXNzVHlw
ZSgpOwogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNjM2LDcgKzYzOCw3IEBAIHN0YXRpYyBpbmxp
bmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2Vs
ZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc3Vi
c2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3Rv
ciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAgICAg
ICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAg
ICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5v
bmU7Ci0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBjb25z
dHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFn
bWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbklu
Um9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUpOwor
ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3RydWN0
RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRz
LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RG
cmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQc2V1ZG9F
bGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5v
bmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3Nl
cyIpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uVHlwZSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOgpA
QCAtNjcxLDcgKzY3Myw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0Ns
YXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBm
b3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3Qo
KTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNl
bGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IHNlbGVjdG9y
RnJhZ21lbnRzOwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2Rl
ID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxvY2Fs
RnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNv
bnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNl
dWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGln
bm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5j
dGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4
dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9U
eXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3Jl
VmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZlck1hdGNoKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2RlID09
IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0aW9u
YWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMg
bm90IHBzZXVkbyBjbGFzcyBmaWx0ZXIsIENhbm5vdE1hdGNoQW55dGhpbmcgaW1wbGllcyB0aGlz
IGZpbHRlciBhbHdheXMgcGFzc2VzLgpAQCAtNjk1LDcgKzY5Nyw3IEBAIHN0YXRpYyBpbmxpbmUg
RnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0
b3IsIFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0
b3IgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgcm9vdFNlbGVjdG9yOyByb290
U2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocm9vdFNlbGVjdG9yKSkgewogICAgICAg
ICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IGZyYWdtZW50TGlzdDsKICAgICAgICAgICAg
ICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25lOwot
ICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RG
cmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIGZyYWdtZW50TGlzdCwgRnJh
Z21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAgICAg
ICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhy
b290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNMZXZl
bDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0
ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdC
ZWhhdmlvcjo6TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlzIGRp
c2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAgICAg
ICAgICAvLyBTaW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoIGFnYWluc3QgdGhlIGVs
ZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVudHMuCkBAIC03NTksNyArNzYxLDcg
QEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENT
U1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rvcjsg
c3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAgICAg
ICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAg
ICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9kZTo6
Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBj
b25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JG
cmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUp
OworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNvbnN0
cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZyYWdt
ZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5S
b290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwgcHNl
dWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRl
ZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAgICAg
ICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBmcmFnbWVudCBuZXZlciBtYXRjaGVzIGFnYWluc3Qg
dGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBtYXRjaGVzTGlzdC4KQEAgLTc2OSw2ICs3
NzEsMTAgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNv
bnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAobG9j
YWxGdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSBwc2V1ZG8gZWxlbWVudHMgaW5zaWRlIDptYXRj
aGVzIGFyZSBzdXBwb3J0ZWQgaW4gbm9uLUpJVCBjb2RlLgorICAgICAgICAgICAgICAgIGlmIChz
ZWxlY3RvckZyYWdtZW50cy5maXJzdCgpLnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKKwogICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5j
dGlvblR5cGUsIGxvY2FsRnVuY3Rpb25UeXBlKTsKICAgICAgICAgICAgICAgICBtYXRjaGVzTGlz
dC5hcHBlbmQoc2VsZWN0b3JGcmFnbWVudHMpOwogICAgICAgICAgICAgfQpAQCAtODA5LDcgKzgx
NSw3IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgLy8gSW4gUXVlcnlTZWxlY3RvciBj
b250ZXh0LCA6dmlzaXRlZCBhbHdheXMgaGFzIG5vIGVmZmVjdCBkdWUgdG8gc2VjdXJpdHkgaXNz
dWVzLgogICAgIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCA9IHNlbGVjdG9yQ29udGV4dCAhPSBT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3I7CiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9IGNv
bnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVj
dG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9v
dEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2Rl
KTsKKyAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3Is
IG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6
Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVk
TWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlv
cjo6Q2FuTWF0Y2gpOwogICAgIGlmIChtX2Z1bmN0aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6OkNh
bm5vdENvbXBpbGUgJiYgbV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRj
aEFueXRoaW5nKQogICAgICAgICBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24obV9zZWxl
Y3RvckZyYWdtZW50cyk7CiB9CkBAIC04MjUsNyArODMxLDcgQEAgc3RhdGljIGJvb2wgaXNTY3Jv
bGxiYXJQc2V1ZG9FbGVtZW50KENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VHlwZSB0eXBlKQog
ICAgIHJldHVybiB0eXBlID49IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyICYm
IHR5cGUgPD0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJUcmFja1BpZWNlOwog
fQogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxl
Y3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBTZWxl
Y3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZyYWdt
ZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJvb3RG
cmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0ZWRN
b2RlKQorc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgU2Vs
ZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCBmcmFn
bWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9uSW5Sb290
RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiB2aXNpdGVk
TW9kZSwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgcHNldWRvRWxlbWVudE1hdGNoaW5n
QmVoYXZpb3IpCiB7CiAgICAgU2VsZWN0b3JGcmFnbWVudCBmcmFnbWVudDsKICAgICBGcmFnbWVu
dFJlbGF0aW9uIHJlbGF0aW9uVG9QcmV2aW91c0ZyYWdtZW50ID0gRnJhZ21lbnRSZWxhdGlvbjo6
UmlnaHRtb3N0OwpAQCAtODcwLDcgKzg3Niw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29uc3Ry
dWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9yCiAg
ICAgICAgICAgICBpZiAoZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yICYmIGlzU2Nyb2xs
YmFyUHNldWRvRWxlbWVudChmcmFnbWVudC5wc2V1ZG9FbGVtZW50U2VsZWN0b3ItPnBzZXVkb0Vs
ZW1lbnRUeXBlKCkpKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmlj
dGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFNjcm9sbGJhclBzZXVkb0NsYXNzVHlw
ZSgqc2VsZWN0b3IsIGZyYWdtZW50KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlw
ZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4
dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0
ZWRNb2RlKSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZl
RnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3Rvciwg
ZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZp
c2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhh
dmlvcikpOwogICAgICAgICAgICAgaWYgKCFwc2V1ZG9DbGFzc09ubHlNYXRjaGVzTGlua3NJblF1
aXJrc01vZGUoKnNlbGVjdG9yKSkKICAgICAgICAgICAgICAgICBmcmFnbWVudC5vbmx5TWF0Y2hl
c0xpbmtzSW5RdWlya3NNb2RlID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25UeXBl
ID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSB8fCBmdW5jdGlvblR5cGUgPT0gRnVuY3Rp
b25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtODg0LDExICs4OTAsNiBAQCBzdGF0aWMg
RnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNl
bGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4dCA9PSBTZWxl
Y3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAotICAgICAgICAgICAgLy8gSW4gU2VsZWN0
b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1ZG8g
Y2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgICAgIC8vIE1ha2UgaXQgYXMg
bWF0Y2hpbmcgZmFpbHVyZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgotICAg
ICAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25h
bFBzZXVkb1R5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90
TWF0Y2hBbnl0aGluZzsKLQogICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvRWxl
bWVudFR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dEFmdGVyOgogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEJlZm9y
ZToKQEAgLTkwNyw5ICs5MDgsMTMgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFn
bWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAgICAg
ICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogICAgICAg
ICAgICAgLy8gRklYTUU6IFN1cHBvcnQgUkVTSVpFUiwgU0VMRUNUSU9OIGV0Yy4KICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBicmFuY2ggaW5jbHVkZXMgY3Vz
dG9tIHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBl
OjpDYW5ub3RDb21waWxlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAocHNldWRv
RWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgPT0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6
Ok5ldmVyTWF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90
TWF0Y2hBbnl0aGluZzsKKwogICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gRnVuY3Rpb25UeXBl
OjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTk1OCwxMiArOTYzLDE1IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29u
c3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9y
CiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIH0KIAor
ICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkgZWZmZWN0aXZlIGluIHRo
ZSByaWdodG1vc3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2
aW9yID0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2g7CisKICAgICAg
ICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdtZW50UmVsYXRpb25Gb3JT
ZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub1Jp
Z2h0RnJhZ21lbnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudDsKICAgICAgICAgZnJhZ21l
bnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbkluUm9vdEZyYWdtZW50czsKICAg
ICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFnbWVudC5yZWxhdGlvblRvTGVm
dEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09IEZyYWdtZW50c0xldmVs
OjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCAhPSBG
cmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVzTGlu
a3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0b3JGcmFnbWVudHMuYXBwZW5k
KGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3RvckZyYWdtZW50KCk7CkBAIC0y
ODUwLDcgKzI4NTgsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JgogICAgIGZ1bmN0aW9uQ2Fs
bC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxl
cjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2Fz
ZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVn
aXN0ZXIoKTsKQEAgLTM1NDgsMTYgKzM1NTYsMTEgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNldWRvQ2xhc3MoQXNzZW1ibGVyOjoK
ICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRI
YXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiwgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYWdtZW50LnBz
ZXVkb0VsZW1lbnRTZWxlY3Rvcik7CisgICAgQVNTRVJUX1VOVVNFRChmcmFnbWVudCwgZnJhZ21l
bnQucHNldWRvRWxlbWVudFNlbGVjdG9yKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc2Vs
ZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvciwgIldoZW4gdGhl
IGZyYWdtZW50IGhhcyBwc2V1ZG8gZWxlbWVudCwgdGhlIHNlbGVjdG9yIGJlY29tZXMgQ2Fubm90
TWF0Y2hBbnl0aGluZyBmb3IgUXVlcnlTZWxlY3RvciBhbmQgdGhpcyB0ZXN0IGZ1bmN0aW9uIGlz
IG5vdCBjYWxsZWQuIik7Ci0KLSAgICBpZiAoIWZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9zdEVs
ZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkgewotICAgICAgICBMb2NhbFJlZ2lz
dGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgbG9hZENo
ZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNzZW1ibGVyOjpF
cXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSwgY2hlY2tpbmdDb250
ZXh0KSk7Ci0gICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGZyYWdtZW50LCBm
cmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFn
bWVudCksICJWaXJ0dWFsIHBzZXVkbyBlbGVtZW50cyBoYW5kbGluZyBpcyBvbmx5IGVmZmVjdGl2
ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LiBJZiB0aGUgY3VycmVudCBmcmFnbWVudCBpcyBu
b3QgcmlnaHRtb3N0IGZyYWdtZW50LCBDU1MgSklUIGNvbXBpbGVyIG1ha2VzIGl0IENhbm5vdE1h
dGNoQW55dGhpbmcgaW4gZnJhZ21lbnQgY29uc3RydWN0aW9uIHBoYXNlLCBzbyBuZXZlciByZWFj
aCBoZXJlLiIpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSZXF1
ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVu
dCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNmNjYTViNzk1NDRhNGIyODQw
MTk4YmUxOTMxMzJhNDVmMmNhZGIxYS4uZGJiZGExZmQ4NjA0YjJkMzEyM2VhOWE1YjFiNjc2MDY2
YTljMzVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgKQEAgLTIzNCw2ICsyMzQsMTQgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlbmRlclN0eWxlPiB7CiAgICAgICAgICAgICBBU1NFUlQocHNldWRvIDwgRklSU1RfSU5U
RVJOQUxfUFNFVURPSUQpOwogICAgICAgICAgICAgbV9mbGFncyB8PSBvbmVCaXRNYXNrIDw8IChw
c2V1ZG9CaXRzT2Zmc2V0IC0gMSArIHBzZXVkbyk7CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBz
ZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvSWRTZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChwc2V1ZG9JZFNldCk7CisgICAgICAgICAgICB1aW50NjRfdCByYXdQ
c2V1ZG9JZFNldCA9IHBzZXVkb0lkU2V0LmRhdGEoKTsKKyAgICAgICAgICAgIEFTU0VSVCgocmF3
UHNldWRvSWRTZXQgJiBQVUJMSUNfUFNFVURPSURfTUFTSykgPT0gcmF3UHNldWRvSWRTZXQpOwor
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChwc2V1ZG9CaXRzT2Zmc2V0ID49IDEsICIocHNldWRv
Qml0c09mZnNldCAtIDEpIHNob3VsZCBiZSB2YWxpZC4iKTsKKyAgICAgICAgICAgIG1fZmxhZ3Mg
fD0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYXdQc2V1ZG9JZFNldCkgPDwgKHBzZXVkb0JpdHNP
ZmZzZXQgLSAxKSk7CisgICAgICAgIH0KIAogICAgICAgICBFVGFibGVMYXlvdXQgdGFibGVMYXlv
dXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGFibGVMYXlvdXQ+KGdldFZhbHVlKHRh
YmxlTGF5b3V0Qml0TWFzaywgdGFibGVMYXlvdXRPZmZzZXQpKTsgfQogICAgICAgICB2b2lkIHNl
dFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB0YWJsZUxheW91dCkgeyB1cGRhdGVWYWx1ZSh0YWJs
ZUxheW91dCwgdGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCk7IH0KQEAgLTU2
MSw2ICs1NjksNyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVy
U3R5bGU+IHsKICAgICBib29sIGhhc0FueVB1YmxpY1BzZXVkb1N0eWxlcygpIGNvbnN0OwogICAg
IGJvb2wgaGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKSBjb25zdDsKICAgICB2b2lkIHNl
dEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbyk7CisgICAgdm9pZCBzZXRIYXNQc2V1ZG9T
dHlsZXMoUHNldWRvSWRTZXQpOwogICAgIGJvb2wgaGFzVW5pcXVlUHNldWRvU3R5bGUoKSBjb25z
dDsKIAogICAgIC8vIGF0dHJpYnV0ZSBnZXR0ZXIgbWV0aG9kcwpAQCAtMjE2OSw2ICsyMTc4LDEx
IEBAIGlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZCBw
c2V1ZG8pCiAgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVkb1N0eWxlKHBzZXVkbyk7
CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRv
SWRTZXQgcHNldWRvSWRTZXQpCit7CisgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVk
b1N0eWxlcyhwc2V1ZG9JZFNldCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFJlbmRlclN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXggMmE0YWVmNWJlNzQ4MGUyMDAzNjFi
MzgyMmFiMDgzZDc1YzBhMzU4ZC4uNzVkNmQzOTYzMTM4ZDI2M2M4OGU2OGMxOGQ5ZGUxNjU3Nzk0
ZGUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlQ29uc3RhbnRzLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgUmVuZGVyU3R5bGVD
b25zdGFudHNfaAogI2RlZmluZSBSZW5kZXJTdHlsZUNvbnN0YW50c19oCiAKKyNpbmNsdWRlIDxp
bml0aWFsaXplcl9saXN0PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBz
aXplX3QgUHJpbnRDb2xvckFkanVzdEJpdHMgPSAxOwpAQCAtODAsNiArODIsNjMgQEAgZW51bSBQ
c2V1ZG9JZCA6IHVuc2lnbmVkIGNoYXIgewogICAgIFBVQkxJQ19QU0VVRE9JRF9NQVNLID0gKCgx
IDw8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKSAtIDEpICYgfigoMSA8PCBGSVJTVF9QVUJMSUNf
UFNFVURPSUQpIC0gMSkKIH07CiAKK2NsYXNzIFBzZXVkb0lkU2V0IHsKK3B1YmxpYzoKKyAgICBQ
c2V1ZG9JZFNldCgpCisgICAgICAgIDogbV9kYXRhKDApCisgICAgeyB9CisKKyAgICBQc2V1ZG9J
ZFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UHNldWRvSWQ+IGluaXRpYWxpemVyTGlzdCkKKyAg
ICAgICAgOiBtX2RhdGEoMCkKKyAgICB7CisgICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQg
OiBpbml0aWFsaXplckxpc3QpCisgICAgICAgICAgICBhZGQocHNldWRvSWQpOworICAgIH0KKwor
ICAgIHN0YXRpYyBQc2V1ZG9JZFNldCBmcm9tTWFzayh1bnNpZ25lZCByYXdQc2V1ZG9JZFNldCkK
KyAgICB7CisgICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChyYXdQc2V1ZG9JZFNldCk7CisgICAg
fQorCisgICAgYm9vbCBoYXMoUHNldWRvSWQgcHNldWRvSWQpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9kYXRhICYgKDEgPDwgcHNldWRvSWQpOworICAgIH0KKworICAgIHZvaWQgYWRk
KFBzZXVkb0lkIHBzZXVkb0lkKQorICAgIHsKKyAgICAgICAgbV9kYXRhIHw9ICgxIDw8IHBzZXVk
b0lkKTsKKyAgICB9CisKKyAgICB2b2lkIG1lcmdlKFBzZXVkb0lkU2V0IHNvdXJjZSkKKyAgICB7
CisgICAgICAgIG1fZGF0YSB8PSBzb3VyY2UubV9kYXRhOworICAgIH0KKworICAgIFBzZXVkb0lk
U2V0IG9wZXJhdG9yICYoY29uc3QgUHNldWRvSWRTZXQmIHBzZXVkb0lkU2V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFBzZXVkb0lkU2V0KG1fZGF0YSAmIHBzZXVkb0lkU2V0Lm1fZGF0
YSk7CisgICAgfQorCisgICAgUHNldWRvSWRTZXQgb3BlcmF0b3IgfChjb25zdCBQc2V1ZG9JZFNl
dCYgcHNldWRvSWRTZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gUHNldWRvSWRTZXQo
bV9kYXRhIHwgcHNldWRvSWRTZXQubV9kYXRhKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQor
CisgICAgdW5zaWduZWQgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBQc2V1ZG9JZFNldCh1bnNpZ25lZCByYXdQc2V1ZG9JZFNldCkKKyAgICAg
ICAgOiBtX2RhdGEocmF3UHNldWRvSWRTZXQpCisgICAgeyB9CisKKyAgICB1bnNpZ25lZCBtX2Rh
dGE7Cit9OworCiBlbnVtIENvbHVtbkZpbGwgeyBDb2x1bW5GaWxsQmFsYW5jZSwgQ29sdW1uRmls
bEF1dG8gfTsKIAogZW51bSBDb2x1bW5TcGFuIHsgQ29sdW1uU3Bhbk5vbmUgPSAwLCBDb2x1bW5T
cGFuQWxsIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggZjRhNzM2OWE1M2MyZjFlNjhlOTJhODdkNzg3NDNlZTk3OGQzNTA4
ZC4uMTE3ZjVkMTZmZjc5OGZkM2MyM2YzYWZkYzg3NzNlYTVlNzc3Y2IyYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDE0LTExLTA4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPgorCisgICAgICAgIENTUzQgU2VsZWN0b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1l
bnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODIxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJp
Z2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9z
ZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRtbDog
QWRkZWQuCisgICAgICAgIEluIHRoaXMgdGVzdCwgd2UgZW5zdXJlIHRoYXQgcHNldWRvIGVsZW1l
bnRzIHNlbGVjdG9yIGluIHRoZQorICAgICAgICBub24tcmlnaHRtb3N0IGZyYWdtZW50cyBiZWNv
bWVzIHVubWF0Y2hlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1p
bnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVj
dG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdodG1v
c3QtZnJhZ21lbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zZWxlY3Rv
cnMvaWdub3JlLXBzZXVkby1lbGVtZW50LWluc2lkZS1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5o
dG1sOiBBZGRlZC4KKwogMjAxNC0xMS0wNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgR2FyZGVuaW5nOiBnZXQtYnktcG5hbWUuanMgaXMgZmFpbGluZyB3aGVuIHJ1
biB3aXRoIEpTQ191c2VMTElOVD1mYWxzZSBhbmQgb3RoZXIgc3BlY2lhbCBKSVQgY29uZmlndXJh
dGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNl
dWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL2lnbm9yZS1wc2V1ZG8tZWxlbWVudC1pbnNpZGUt
bm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmMDIyYzlh
ODU2YTIwOTM4N2ZmZjY4MDFlYWQ3YTcxNTI2MDAzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1y
aWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitJZ25vcmUg
cHNldWRvIGVsZW1lbnRzIGluc2lkZSBub24tcmlnaHRtb3N0IGZyYWdtZW50cyB3aGVuIGNvbGxl
Y3RpbmcgcnVsZXMgZm9yIGEgbm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dGVzdGNhc2UxJykpIGlzIG51bGwKK1BBU1Mgd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGNhc2UyJykpIGlzIG51bGwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdo
dG1vc3QtZnJhZ21lbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25vcmUt
cHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzRmMWJkZjhiMTU1MzU1NjMwOTUyYWIyODlhMjM5OTMzNjAxZGJlNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL2lnbm9yZS1wc2V1ZG8tZWxlbWVu
dC1pbnNpZGUtbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRtbApAQCAtMCwwICsxLDM0IEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNzdWl0ZTo6YWZ0ZXIgI3Rl
c3RjYXNlMSwKKyNzdWl0ZTo6YmVmb3JlICN0ZXN0Y2FzZTEsCisjc3VpdGU6OmZpcnN0LWxldHRl
ciAjdGVzdGNhc2UxLAorI3N1aXRlOjpmaXJzdC1saW5lICN0ZXN0Y2FzZTEKK3sKKyAgICBjb2xv
cjogcmVkOworfQorCisjc3VpdGU6bWF0Y2hlcyg6OmFmdGVyLCA6OmJlZm9yZSwgOjpmaXJzdC1s
ZXR0ZXIsIDo6Zmlyc3QtbGluZSkgI3Rlc3RjYXNlMiB7CisgICAgY29sb3I6IHJlZDsKK30KKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9InN1aXRlIiBzdHlsZT0iZGlzcGxheTpu
b25lIj4KKzxwIGlkPSJ0ZXN0Y2FzZTEiPkNvY29hPC9wPgorPHAgaWQ9InRlc3RjYXNlMiI+Q2Fw
cHVjY2lubzwvcD4KKzwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdJZ25v
cmUgcHNldWRvIGVsZW1lbnRzIGluc2lkZSBub24tcmlnaHRtb3N0IGZyYWdtZW50cyB3aGVuIGNv
bGxlY3RpbmcgcnVsZXMgZm9yIGEgbm9kZS4nKTsKKworLy8gU2hvdWxkIG5vdCBjb2xsZWN0IHJ1
bGVzIHRoYXQgc2VsZWN0b3IgaGFzIHBzZXVkby1lbGVtZW50IGluc2lkZSBub24tcmlnaHRtb3N0
IGZyYWdtZW50LAorLy8gZXZlbiBpZiBleGVjdXRpbmcgd2l0aCBDb2xsZWN0aW5nUnVsZXMgJiBD
b2xsZWN0aW5nUnVsZXNJZ25vcmluZ1ZpcnR1YWxQc2V1ZG9FbGVtZW50cy4KK3Nob3VsZEJlKCJ3
aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Y2Fz
ZTEnKSkiLCAibnVsbCIpOworc2hvdWxkQmUoIndpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RjYXNlMicpKSIsICJudWxsIik7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1l
bGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdt
ZW50cy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MDg2NjhkOTI4NzdmMGM3ZDE4MWJlYjQz
MmFjZWU4ZmJjMDEzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVj
dG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3RlZC5o
dG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
dHlsZT4KKy50YXJnZXQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cit9Cis8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJn
ZXQxIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0
IiBpZD0idGFyZ2V0MiI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xh
c3M9InRhcmdldCIgaWQ9InRhcmdldDMiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgor
ICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ0Ij5UaGlzIGxpbmUgc2hvdWxkIGJlIGdy
ZWVuLjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVu
dHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5v
bi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFiMDM0NWE5NjMzOGYxYjhm
NmFlOWFkNjczMzAzODk2NDhlODE5MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0
bWwKQEAgLTAsMCArMSw4MyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorLnRhcmdldCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworOjphZnRl
ciAjdGFyZ2V0MSwKKzo6YmVmb3JlICN0YXJnZXQxLAorOjpmaXJzdC1saW5lICN0YXJnZXQxLAor
OjpmaXJzdC1sZXR0ZXIgI3RhcmdldDEsCis6Oi13ZWJraXQtcmVzaXplciAjdGFyZ2V0MSwKKzo6
LXdlYmtpdC1zY3JvbGxiYXIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiAj
dGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyICN0YXJnZXQxLAorOjotd2Via2l0
LXNjcm9sbGJhci10aHVtYiAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgI3Rh
cmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlICN0YXJnZXQxLAorOjpzZWxl
Y3Rpb24gI3RhcmdldDEKK3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzo6YWZ0
ZXIgPiAjdGFyZ2V0MiwKKzo6YmVmb3JlID4gI3RhcmdldDIsCis6OmZpcnN0LWxpbmUgPiAjdGFy
Z2V0MiwKKzo6Zmlyc3QtbGV0dGVyID4gI3RhcmdldDIsCis6Oi13ZWJraXQtcmVzaXplciA+ICN0
YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9s
bGJhci1idXR0b24gPiAjdGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyID4gI3Rh
cmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iID4gI3RhcmdldDIsCis6Oi13ZWJraXQt
c2Nyb2xsYmFyLXRyYWNrID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBp
ZWNlID4gI3RhcmdldDIsCis6OnNlbGVjdGlvbiA+ICN0YXJnZXQyCit7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmVkOworfQorCis6OmFmdGVyICsgI3RhcmdldDMsCis6OmJlZm9yZSArICN0YXJn
ZXQzLAorOjpmaXJzdC1saW5lICsgI3RhcmdldDMsCis6OmZpcnN0LWxldHRlciArICN0YXJnZXQz
LAorOjotd2Via2l0LXJlc2l6ZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXIgKyAj
dGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uICsgI3RhcmdldDMsCis6Oi13ZWJr
aXQtc2Nyb2xsYmFyLWNvcm5lciArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10aHVt
YiArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjayArICN0YXJnZXQzLAorOjot
d2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSArICN0YXJnZXQzLAorOjpzZWxlY3Rpb24gKyAj
dGFyZ2V0MworeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworOjphZnRlciB+ICN0
YXJnZXQ0LAorOjpiZWZvcmUgfiAjdGFyZ2V0NCwKKzo6Zmlyc3QtbGluZSB+ICN0YXJnZXQ0LAor
OjpmaXJzdC1sZXR0ZXIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1yZXNpemVyIH4gI3RhcmdldDQs
Cis6Oi13ZWJraXQtc2Nyb2xsYmFyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1
dHRvbiB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgfiAjdGFyZ2V0NCwK
Kzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxi
YXItdHJhY2sgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2UgfiAj
dGFyZ2V0NCwKKzo6c2VsZWN0aW9uIH4gI3RhcmdldDQKK3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZWQ7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAgY2xh
c3M9InRhcmdldCIgaWQ9InRhcmdldDEiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgor
ICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQyIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdy
ZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MyI+VGhpcyBsaW5lIHNo
b3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDQiPlRo
aXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNp
ZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNl
dWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWE2
Zjc2MDU1ZWE0ODU5NjdkZjAyZDcxYzUzNWYwMWM3ZTdlMmMyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMt
ZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDc1IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0Mjo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29s
b3I6IGxpbWU7CisgICAgY29udGVudDogImNvY29hIjsKK30KKworI3RhcmdldDM6OmJlZm9yZSB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiY2FwcHVjY2lubyI7
Cit9CisKKyN0YXJnZXQ0OjpiZWZvcmUsCisjdGFyZ2V0NDo6YWZ0ZXIgeworICAgIGJhY2tncm91
bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQ1LAor
I3RhcmdldDU6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30K
KworI3RhcmdldDYsCisjdGFyZ2V0Njo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBsaW1lOworfQorCisjdGFyZ2V0NywKKyN0YXJnZXQ3OjpiZWZvcmUsCisjdGFyZ2V0Nzo6
YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3Vu
ZCI7Cit9CisKKy8qIGZpcnN0IGxldHRlciBvZiBiZWZvcmUgY29udGVudCBpcyBjb2xvcmVkIGJs
dWUuICovCisjdGFyZ2V0MTI6OmFmdGVyLAorI3RhcmdldDEyOjpiZWZvcmUgeworICAgIGJhY2tn
cm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKyN0YXJnZXQx
Mjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworfQorCisKKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAgaWQ9InRhcmdldDEiPnBzZXVk
byBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFy
Z2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAg
IDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVj
dC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hl
cyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NSI+cHNldWRvIGVsZW1lbnQgaW5z
aWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3RvcnMgc2hvdWxkIGJlIGNoZWNr
ZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgbmVzdGVk
IDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDciPmJv
dGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91bGQgYmUgY29sb3JlZC48L3A+Cisg
ICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bm90IGRvZXNuJ3QgaGF2
ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5Ij46OmZpcnN0LWxpbmUgaW4gbm9uLXJp
Z2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+CisgICAgPHAgaWQ9InRhcmdldDEw
Ij46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgYWx3YXlz
IHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDExIj5wc2V1ZG8gZWxlbWVudCBpbiBu
b24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0Y2hlcyBhbHdheXMgdW5tYXRjaGVzLjwv
cD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9hZnRlciBjb250ZW50cyBhcmUgY29sb3Jl
ZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVl
LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQg
aGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDE0Ij48cD5ub24tcmlnaHRtb3N0
IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0
MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+PC9w
PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jOTMzOTU2YWYzODA3ODY4Y2FlY2NkYWVkN2IyYzJiMGUxYjcyYzJhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5z
aWRlLW1hdGNoZXMuaHRtbApAQCAtMCwwICsxLDk3IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTptYXRjaGVzKDo6Zmlyc3QtbGV0dGVyKSB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDI6bWF0Y2hlcyg6OmFmdGVy
KSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiY29jb2EiOwor
fQorCisjdGFyZ2V0MzptYXRjaGVzKDo6YmVmb3JlKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
bGltZTsKKyAgICBjb250ZW50OiAiY2FwcHVjY2lubyI7Cit9CisKKyN0YXJnZXQ0Om1hdGNoZXMo
OjpiZWZvcmUsIDo6YWZ0ZXIpIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNv
bnRlbnQ6ICJhcm91bmQiOworfQorCisjdGFyZ2V0NTptYXRjaGVzKDo6Zmlyc3QtbGV0dGVyLCBw
KSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDY6bWF0Y2hlcyhw
LCA6bWF0Y2hlcyhwLCA6OmZpcnN0LWxldHRlcikpIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBs
aW1lOworfQorCisjdGFyZ2V0NzptYXRjaGVzKDo6YmVmb3JlLCA6OmFmdGVyLCAqKSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsKK30KKworI3Rh
cmdldDg6bm90KDptYXRjaGVzKDo6Zmlyc3QtbGluZSkpIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZWQ7Cit9CisKKzo6Zmlyc3QtbGluZSAjdGFyZ2V0OSB7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogcmVkOworfQorCis6bWF0Y2hlcyg6OmZpcnN0LWxpbmUpICN0YXJnZXQxMCB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0MTE6bWF0Y2hlcyg6OmZpcnN0LWxpbmUg
PiBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisvKiBmaXJzdCBsZXR0ZXIg
b2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLiAqLworI3RhcmdldDEyOm1hdGNoZXMo
OjpmaXJzdC1sZXR0ZXIsIDo6YWZ0ZXIsIDo6YmVmb3JlKSB7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsKK30KKworI3RhcmdldDEyOjpmaXJzdC1s
ZXR0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7Cit9CisKKyN0YXJnZXQxMzptYXRj
aGVzKDo6YWZ0ZXIgPiBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIGNvbnRl
bnQ6ICJidWciOworfQorCisjdGFyZ2V0MTQ6bWF0Y2hlcyg6OmFmdGVyKSA+IHB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0MTU6bWF0Y2hlcyg6OmFmdGVyID4gcCkg
PiBweworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdj4KKyAgICA8cCBpZD0idGFyZ2V0MSI+cHNldWRvIGVsZW1lbnQgaW5zaWRl
IDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQyIj5wc2V1ZG8gZWxl
bWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDMi
PnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBp
ZD0idGFyZ2V0NCI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9w
PgorICAgIDxwIGlkPSJ0YXJnZXQ1Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFz
IGVmZmVjdCwgc28gYWxsIHNlbGVjdG9ycyBzaG91bGQgYmUgY2hlY2tlZC48L3A+CisgICAgPHAg
aWQ9InRhcmdldDYiPnBzZXVkbyBlbGVtZW50IGluc2lkZSBuZXN0ZWQgOm1hdGNoZXMgc2hvdWxk
IGhhdmUgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NyI+Ym90aCBsaW5lIGl0c2VsZiBh
bmQgYmVmb3JlL2FmdGVyIHNob3VsZCBiZSBjb2xvcmVkLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0
OCI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDpub3QgZG9lc24ndCBoYXZlIGVmZmVjdC48L3A+Cisg
ICAgPHAgaWQ9InRhcmdldDkiPjo6Zmlyc3QtbGluZSBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50
IGFsd2F5cyB1bm1hdGNoLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTAiPjptYXRjaGVzKDo6Zmly
c3QtbGluZSkgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaGVzLjwvcD4K
KyAgICA8cCBpZD0idGFyZ2V0MTEiPnBzZXVkbyBlbGVtZW50IGluIG5vbi1yaWdodG1vc3QgZnJh
Z21lbnQgaW5zaWRlIDptYXRjaGVzIGFsd2F5cyB1bm1hdGNoZXMuPC9wPgorICAgIDxwIGlkPSJ0
YXJnZXQxMiI+YmVmb3JlL2FmdGVyIGNvbnRlbnRzIGFyZSBjb2xvcmVkIGxpbWUgYW5kIGZpcnN0
LWxldHRlciBvZiBiZWZvcmUgY29udGVudCBpcyBjb2xvcmVkIGJsdWUuPC9wPgorICAgIDxwIGlk
PSJ0YXJnZXQxMyI+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxlbWVudCBoYXMgbm8gZWZmZWN0Ljwv
cD4KKyAgICA8cCBpZD0idGFyZ2V0MTQiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQg
aGFzIG5vIGVmZmVjdC48L3A+PC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxNSI+PHA+bm9uLXJpZ2h0
bW9zdCBwc2V1ZG8gZWxlbWVudCBoYXMgbm8gZWZmZWN0LjwvcD48L3A+Cis8L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241271</attachid>
            <date>2014-11-09 21:25:31 -0800</date>
            <delta_ts>2014-11-11 00:50:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141110142531.patch</filename>
            <type>text/plain</type>
            <size>57427</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1Nzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY2ZTM1NzA5N2VjYTlm
NzYxZGI3MGJkYTQ2MWY3ZTZmMTc5YjYwMS4uZmUwODc0ZDAxYjVkYzQ5YWFmMzJmMDIwYTY1ZGM0
MzczZWM1NjVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTA5ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXIgaW4gdGhlIG5vbi1yaWdodG1vc3QKKyAgICAgICAgZnJhbWduZXQsIGl0IGlz
IGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAgICAg
KiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hl
Y2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1cGRh
dGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRv
RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9J
ZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OlBz
ZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0
b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChXZWJD
b3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMDkgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBtb3JlIGNvcnJlY3Qgd2F5IHRvIGNvbXBh
cmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhbmQgdXNlIGl0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCmluZGV4IDhkZDJmMzM4YjIzZmM4ZWJmZDQ3ZTc4NjY1OGVhMmRkNDhl
MWU1M2EuLjU1NDY1ZDJlN2VmN2RjN2ZmOTc5Mjk0OGEyOGQ5OGFjMjlhMTY1OTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC04LDYgKzgsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENv
ZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzEsNiArNzIsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVj
a2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlYwogICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9kZSA9PSBTZWxlY3Rv
ckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hUeXBlOjpEaXNhYmxl
ZCA6IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmlyc3RTZWxlY3Rvck9m
VGhlRnJhZ21lbnQoc2VsZWN0b3IpCiAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3Mo
ZmFsc2UpCisgICAgICAgICwgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSh0cnVlKQogICAgICAgICAs
IGhhc1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8o
ZmFsc2UpCiAgICAgeyB9CkBAIC04MCw2ICs4Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVj
CiAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNvbnN0IENTU1Nl
bGVjdG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKICAgICBib29sIGluRnVuY3Rpb25h
bFBzZXVkb0NsYXNzOworICAgIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKICAgICBib29s
IGhhc1Njcm9sbGJhclBzZXVkbzsKICAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbzsKIH07CkBA
IC0xNzEsMzggKzE3NCwzNSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBl
QWZ0ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQsIHVuc2lnbmVkJiBz
cGVjaWZpY2l0eSkgY29uc3QKIHsKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNvbnRl
eHQocHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7Ci0gICAgUHNldWRvSWQgcHNl
dWRvSWQgPSBOT1BTRVVETzsKLSAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250ZXh0LCBwc2V1
ZG9JZCkgIT0gU2VsZWN0b3JNYXRjaGVzKQorICAgIFBzZXVkb0lkU2V0IHBzZXVkb0lkU2V0Owor
ICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRv
SWRTZXQpOworICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNF
VURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRvSWQpCisgICAgaWYgKGNvbnRleHQucHNl
dWRvSWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBzZXVkb0lkKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3BlY2lmaWNpdHkgPSBzZWxlY3Rvci0+c3Bl
Y2lmaWNpdHkoKTsKLSAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1
ZG9JZCAhPSBOT1BTRVVETykgewotICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09
IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkIDwgRklSU1RfSU5URVJOQUxfUFNFVURP
SUQpCi0gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUo
cHNldWRvSWQpOworICAgIGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVk
b0lkU2V0KSB7CisgICAgICAgIFBzZXVkb0lkU2V0IHB1YmxpY1BzZXVkb0lkU2V0ID0gcHNldWRv
SWRTZXQgJiBQc2V1ZG9JZFNldDo6ZnJvbU1hc2soUFVCTElDX1BTRVVET0lEX01BU0spOworICAg
ICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYm
IHB1YmxpY1BzZXVkb0lkU2V0KQorICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNl
dEhhc1BzZXVkb1N0eWxlcyhwdWJsaWNQc2V1ZG9JZFNldCk7CiAKICAgICAgICAgLy8gV2hlbiBp
Z25vcmluZyB2aXJ0dWFsIHBzZXVkbyBlbGVtZW50cywgdGhlIGNvbnRleHQncyBwc2V1ZG8gc2hv
dWxkIGFsc28gYmUgTk9QU0VVRE8gYnV0IHRoYXQgZG9lcwogICAgICAgICAvLyBub3QgY2F1c2Ug
YSBmYWlsdXJlLgotICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6
OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzOworICAgICAgICBy
ZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9y
aW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hUeXBl
OjpFbGVtZW50OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHN0YXRpYyBi
b29sIGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCitp
bmxpbmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBQc2V1ZG9J
ZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0KQogewotICAgIGlmIChkeW5hbWljUHNldWRvID09IFND
Uk9MTEJBUgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9USFVNQgotICAg
ICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9CVVRUT04KLSAgICAgICAgfHwgZHlu
YW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0sKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9
PSBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JP
TExCQVJfQ09STkVSKSB7CisgICAgUHNldWRvSWRTZXQgc2Nyb2xsYmFySWRTZXQgPSB7IFNDUk9M
TEJBUiwgU0NST0xMQkFSX1RIVU1CLCBTQ1JPTExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJBQ0ss
IFNDUk9MTEJBUl9UUkFDS19QSUVDRSwgU0NST0xMQkFSX0NPUk5FUiB9OworICAgIGlmIChkeW5h
bWljUHNldWRvSWRTZXQgJiBzY3JvbGxiYXJJZFNldCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQogCiAgICAgLy8gUkVTSVpFUiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIHNjcm9sbGJhciBi
dXQgaXQgaXMgYSBzY3JvbGxiYXItbGlrZSBwc2V1ZG8gZWxlbWVudAogICAgIC8vIGJlY2F1c2Ug
aXQgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwc2V1ZG8gZWxlbWVudC4KLSAgICByZXR1cm4gZHlu
YW1pY1BzZXVkbyA9PSBSRVNJWkVSOworICAgIHJldHVybiBkeW5hbWljUHNldWRvSWRTZXQuaGFz
KFJFU0laRVIpOwogfQogCiBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6
OkNoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpCkBAIC0yMjEsMzQgKzIyMSwzOCBA
QCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNr
aW5nQ29udGV4dEZvclBhcmVudChjb25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAg
LSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWls
c0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBv
ZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBm
b3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpN
YXRjaCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250
ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNp
dmVseShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNl
dCYgZHluYW1pY1BzZXVkb0lkU2V0KSBjb25zdAogeworICAgIE1hdGNoVHlwZSBtYXRjaFR5cGUg
PSBNYXRjaFR5cGU6OkVsZW1lbnQ7CisKICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRv
IG1hdGNoLgotICAgIGlmICghY2hlY2tPbmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzTG9jYWxseTsKKyAgICBpZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1
ZG9JZFNldCwgbWF0Y2hUeXBlKSkKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhN
YXRjaDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgLy8gSW4g
U2VsZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBw
c2V1ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgLy8gTWFrZSBpdCBh
cyBtYXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0g
ICAgICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQotICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotCiAgICAgICAgIGlmIChjb250ZXh0LnNl
bGVjdG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gSW4gZnVu
Y3Rpb25hbCBwc2V1ZG8gY2xhc3MsIGN1c3RvbSBwc2V1ZG8gZWxlbWVudHMgYXJlIGFsd2F5cyBk
aXNhYmxlZC4KKyAgICAgICAgICAgIGlmICghY29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFz
cykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxl
Y3RvckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9
IGNvbnRleHQuZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gY29udGV4dC5zZWxl
Y3Rvci0+dmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNM
b2NhbGx5OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1h
dGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudFdlYktpdEN1c3RvbSAmJiByb290LT50eXBlKCkgIT0gU2hhZG93Um9vdDo6VXNlckFnZW50
U2hhZG93Um9vdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2Nh
bGx5OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNo
OjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCghY29udGV4dC5lbGVtZW50U3R5bGUgJiYgY29u
dGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKSB8fCBjb250ZXh0LnJl
c29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlpbmdSdWxlcykKLSAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQucHNldWRv
RWxlbWVudEVmZmVjdGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZh
aWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlpbmdSdWxlcykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSk7CiAKICAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBz
ZXVkb0lkKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpOwogICAgICAgICAg
ICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQotICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1
ZG8gPSBwc2V1ZG9JZDsKKyAgICAgICAgICAgICAgICBkeW5hbWljUHNldWRvSWRTZXQuYWRkKHBz
ZXVkb0lkKTsKKyAgICAgICAgICAgIG1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6VmlydHVhbFBzZXVk
b0VsZW1lbnRPbmx5OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTgsNDcgKzI2Miw1MCBAQCBz
dGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5n
Q29udGV4dEZvclBhcmVudChjb25zdAogICAgIC8vIFByZXBhcmUgbmV4dCBzZWxlY3RvcgogICAg
IGNvbnN0IENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yLT50
YWdIaXN0b3J5KCk7CiAgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBT
ZWxlY3Rvck1hdGNoZXM7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6bWF0Y2hlcyhtYXRj
aFR5cGUpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBuZXh0Q29udGV4dChjb250
ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhpc3RvcnlTZWxlY3RvcjsKIAotICAg
IFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBpZiAocmVsYXRp
b24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAgICAgICAgIC8vIEJhaWwtb3V0IGlm
IHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb0lkCi0gICAgICAgIGlm
IChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNvbnRleHQucHNldWRvSWQgIT0gZHlu
YW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsK
KyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9QU0VVRE8gJiYgIWR5bmFtaWNQc2V1
ZG9JZFNldC5oYXMoY29udGV4dC5wc2V1ZG9JZCkpCisgICAgICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAg
Ly8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdlIHRyeSB0byBtYXRjaCBhbnl0aGlu
ZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgogICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKQogICAg
ICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaFR5cGU6
OkRpc2FibGVkOwogCiAgICAgICAgIG5leHRDb250ZXh0LnBzZXVkb0lkID0gTk9QU0VVRE87Cisg
ICAgICAgIC8vIFZpcnR1YWwgcHNldWRvIGVsZW1lbnQgaXMgb25seSBlZmZlY3RpdmUgaW4gdGhl
IHJpZ2h0bW9zdCBmcmFnbWVudC4KKyAgICAgICAgbmV4dENvbnRleHQucHNldWRvRWxlbWVudEVm
ZmVjdGl2ZSA9IGZhbHNlOwogICAgIH0KIAogICAgIHN3aXRjaCAocmVsYXRpb24pIHsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgogICAgICAgICBuZXh0Q29udGV4dCA9IGNoZWNr
aW5nQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAg
IG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1l
bnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBu
ZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCkpIHsKLSAg
ICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4
dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0
b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAg
ICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFt
aWNQc2V1ZG87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBtYXRjaFJlY3Vyc2l2
ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7
CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKICAgICAgICAgewogICAgICAgICAgICAg
bmV4dENvbnRleHQgPSBjaGVja2luZ0NvbnRleHRGb3JQYXJlbnQobmV4dENvbnRleHQpOwogICAg
ICAgICAgICAgaWYgKCFuZXh0Q29udGV4dC5lbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAg
ICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNl
bGVjdG9yOwogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsK
LSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JN
YXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2li
bGluZ3M7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAg
ICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4
dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09
IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVw
ZGF0ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOworICAgICAgICAgICAgcmV0dXJu
IE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKICAg
ICAgICAgfQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CkBAIC0zMDgs
NTYgKzMxNSw1OSBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogCiAgICAgICAgICAgICBFbGVt
ZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50KQotICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQWxsU2libGluZ3M7CisgICAgICAgICAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsK
ICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UmVzb2x2aW5n
U3R5bGUpCiAgICAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50LT5zZXRBZmZlY3RzTmV4dFNp
YmxpbmdFbGVtZW50U3R5bGUoKTsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnQgPSBw
cmV2aW91c0VsZW1lbnQ7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZU
aGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5
KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIG5leHRDb250
ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25v
cmVEeW5hbWljUHNldWRvOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVX
aXRoTWF0Y2hUeXBlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQ
c2V1ZG8pLCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5k
aXJlY3RBZGphY2VudDoKICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2Rl
OjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0U3R5bGVJ
c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVu
dCA9IGNvbnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICBu
ZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVj
dG9yOwotICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOworICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50U3R5bGUgPSBudWxscHRyOwogICAgICAgICBmb3IgKDsgbmV4dENvbnRl
eHQuZWxlbWVudDsgbmV4dENvbnRleHQuZWxlbWVudCA9IG5leHRDb250ZXh0LmVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2
aW5nTW9kZSA9PSBNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBjb250ZXh0
LmVsZW1lbnQtPnNldEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogCi0gICAgICAg
ICAgICBNYXRjaCBtYXRjaCA9IHRoaXMtPm1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGln
bm9yZUR5bmFtaWNQc2V1ZG8pOwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0
Y2hlcyB8fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MgfHwgbWF0Y2ggPT0gU2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1h
dGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5
bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2Vs
ZWN0b3JNYXRjaGVzIHx8IHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNp
YmxpbmdzIHx8IHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBl
KHJlc3VsdCwgbWF0Y2hUeXBlKTsKICAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9y
RmFpbHNBbGxTaWJsaW5nczsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRj
aDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzKTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yOgogICAgICAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5n
IGZvbGxvd3MgYSBwc2V1ZG8tZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlv
biBmb3Igc2Nyb2xsYmFyIHBzZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRv
IGNsYXNzZXMgKGJ1dCBub3RoaW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNl
dWRvIGVsZW1lbnRzLgotICAgICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBo
YXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KGR5bmFtaWNQc2V1ZG8pOwotICAgICAgICBuZXh0Q29u
dGV4dC5oYXNTZWxlY3Rpb25Qc2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVDVElPTjsKLSAg
ICAgICAgaWYgKChjb250ZXh0LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUg
PT0gTW9kZTo6Q29sbGVjdGluZ1J1bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPCisg
ICAgICAgIG5leHRDb250ZXh0Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVk
b0VsZW1lbnQoZHluYW1pY1BzZXVkb0lkU2V0KTsKKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2Vs
ZWN0aW9uUHNldWRvID0gZHluYW1pY1BzZXVkb0lkU2V0LmhhcyhTRUxFQ1RJT04pOworICAgICAg
ICBpZiAoKGNvbnRleHQuZWxlbWVudFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpDb2xsZWN0aW5nUnVsZXMpICYmIGR5bmFtaWNQc2V1ZG9JZFNldAogICAgICAgICAgICAg
JiYgIW5leHRDb250ZXh0Lmhhc1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0
Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1hdGNo
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKLSAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4
dENvbnRleHQsIGR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0
OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOworICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29u
dGV4dCwgZHluYW1pY1BzZXVkb0lkU2V0KSwgbWF0Y2hUeXBlKTsKIAogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQq
IHNoYWRvd0hvc3ROb2RlID0gY29udGV4dC5lbGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAg
ICAgICBpZiAoIXNoYWRvd0hvc3ROb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZh
aWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29u
dGV4dC5lbGVtZW50ID0gc2hhZG93SG9zdE5vZGU7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5m
aXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgIHJldHVybiBt
YXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAg
ICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQ
c2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQs
IGlnbm9yZUR5bmFtaWNQc2V1ZG8pLCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0
ZWx5OworICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5KTsKIH0KIAogc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKGNvbnN0
IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IEF0
b21pY1N0cmluZyYgc2VsZWN0b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQpAQCAtNDkyLDcg
KzUwMiw3IEBAIHN0YXRpYyBib29sIGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShj
b25zdCBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyYgY29udGV4dCkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShj
b25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHlu
YW1pY1BzZXVkb0lkU2V0LCBNYXRjaFR5cGUmIG1hdGNoVHlwZSkgY29uc3QKIHsKICAgICBFbGVt
ZW50KiBjb25zdCAmIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7CiAgICAgY29uc3QgQ1NTU2Vs
ZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAtNTMyLDEzICs1
NDIsMTQgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBmb3IgKGNvbnN0IENT
U1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0
b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewog
ICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250
ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3Rp
dmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2Vs
ZWN0b3I7CiAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFn
bWVudCA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICBQc2V1ZG9JZFNl
dCBpZ25vcmVEeW5hbWljUHNldWRvOwogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0
KQotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVE
TzsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25v
cmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGlnbm9yZUR5bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOworICAgICAgICAgICAg
ICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8p
Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFpZ25vcmVEeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICNlbHNlCkBAIC01NTEsNyArNTYyLDkgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0
dXMmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJjb250ZXh0LnNl
bGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNp
dGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCkpCisgICAgICAg
ICAgICAgICAgLy8gU2luY2UgOm5vdCBjYW5ub3QgY29udGFpbiBwc2V1ZG8gZWxlbWVudHMsIHRo
ZXJlJ3Mgbm8gZWZmZWN0IG9uIG1hdGNoZWRUb05vblBzZXVkb0VsZW1lbnQuCisgICAgICAgICAg
ICAgICAgTWF0Y2hUeXBlIGlnbm9yZU1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNoZWNrT25lKHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1
ZG8sIGlnbm9yZU1hdGNoVG9Ob25Qc2V1ZG9FbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgIH0KQEAgLTY2NywxNiArNjgwLDM0IEBA
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENT
U19TRUxFQ1RPUlNfTEVWRUw0KQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c01hdGNoZXM6Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3Rv
ciA9IHNlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNl
bGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewotICAgICAgICAg
ICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKLSAg
ICAgICAgICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7Ci0gICAg
ICAgICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNl
bGVjdG9yOwotICAgICAgICAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0
LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wg
aGFzTWF0Y2hlZEFueXRoaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbWF0Y2hUeXBlID0g
TWF0Y2hUeXBlOjpWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHk7CisgICAgICAgICAgICAgICAgZm9y
IChjb25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0
KCktPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6
bmV4dChzdWJzZWxlY3RvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyBzdWJjb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgc3ViY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gY29udGV4dC5wc2V1ZG9FbGVt
ZW50RWZmZWN0aXZlOworICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0g
c3Vic2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rv
ck9mVGhlRnJhZ21lbnQgPSBzdWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgUHNldWRv
SWRTZXQgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQ7CisgICAgICAgICAgICAgICAgICAgIE1hdGNo
UmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWlj
UHNldWRvSWRTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1h
dGNoOjpTZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2hlbiBwc2V1ZG8gZWxlbWVudHMgYXJlIG5vdCBlZmZlY3RpdmUgaW4gdGhpcyBmcmFn
bWVudCAoZS5nLiBpdCdzIG5vdCByaWdobW9zdCBmcmFnbWVudCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaXQncyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMg
dG8gY29sbGVjdCBwc2V1ZG8gZWxlbWVudCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxl
bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6
OkVsZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldC5t
ZXJnZShsb2NhbER5bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBo
YXNNYXRjaGVkQW55dGhpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBoYXNNYXRjaGVkQW55dGhpbmc7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYg
KGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKQEAgLTc3MiwxMCAr
ODAzLDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViQ29udGV4dChjb250ZXh0KTsKICAg
ICAgICAgICAgICAgICBzdWJDb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87
CisgICAgICAgICAgICAgICAgc3ViQ29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3It
PnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0
LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21l
bnQgPSBzdWJDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hS
ZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1h
dGNoZXMpCisgICAgICAgICAgICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1
ZG87CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQs
IGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC05MjUsMTIgKzk1NywxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QK
ICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQg
JiYgc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnRDdWUpIHsKICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0
KGNvbnRleHQpOwogCi0gICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250
ZXh0LnNlbGVjdG9yOwogICAgICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rv
ci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRl
eHQuc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3Rvcikp
IHsKICAgICAgICAgICAgIHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBz
dWJDb250ZXh0LnNlbGVjdG9yOwogICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQ
c2V1ZG9DbGFzcyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJD
b250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAg
ICAgICBzdWJDb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICBpZiAobWF0
Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBN
YXRjaDo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk0NywxMCArOTgwLDExIEBAIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjptYXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRX
aXRoU3RhdHVzJiBiYXNlQ29uCiAgICAgICAgIHN1YmNvbnRleHQuZWxlbWVudCA9ICZlbGVtZW50
OwogICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIHN1
YmNvbnRleHQuaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICBzdWJjb250
ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgc3ViY29udGV4dC5m
aXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICBQc2V1ZG9J
ZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgICAgIGlmIChtYXRjaFJlY3Vy
c2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hl
cykgewotICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8p
OworICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICBpZiAo
bWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9
PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5
bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggMjkwYmYxN2Y3OTE4ZTM4MDRj
Y2FkNTE0NWMyODQwODhkNGJlOTk4OS4uMTYyM2NiMmMxNzUzNWZjMTJiNDA5YzA0OTAxMWViODM5
MDk1MTIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNDMsNyArNDMs
MzEgQEAKIAogY2xhc3MgU2VsZWN0b3JDaGVja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTZWxlY3RvckNoZWNrZXIpOwotICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNl
bGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFp
bHNDb21wbGV0ZWx5IH07CisgICAgZW51bSBjbGFzcyBNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywg
U2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncywgU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHkgfTsKKworICAgIGVudW0gY2xhc3MgTWF0Y2hUeXBlIHsgVmlydHVhbFBz
ZXVkb0VsZW1lbnRPbmx5LCBFbGVtZW50IH07CisKKyAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewor
ICAgICAgICBNYXRjaCBtYXRjaDsKKyAgICAgICAgTWF0Y2hUeXBlIG1hdGNoVHlwZTsKKworICAg
ICAgICBzdGF0aWMgTWF0Y2hSZXN1bHQgbWF0Y2hlcyhNYXRjaFR5cGUgbWF0Y2hUeXBlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4geyBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzLCBtYXRj
aFR5cGUgfTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCB1cGRhdGVX
aXRoTWF0Y2hUeXBlKE1hdGNoUmVzdWx0IHJlc3VsdCwgTWF0Y2hUeXBlIG1hdGNoVHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1hdGNoVHlwZSA9PSBNYXRjaFR5cGU6OlZpcnR1YWxQ
c2V1ZG9FbGVtZW50T25seSkKKyAgICAgICAgICAgICAgICByZXN1bHQubWF0Y2hUeXBlID0gTWF0
Y2hUeXBlOjpWaXJ0dWFsUHNldWRvRWxlbWVudE9ubHk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIE1hdGNoUmVzdWx0IGZhaWxzKE1hdGNo
IG1hdGNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geyBtYXRjaCwgTWF0Y2hUeXBl
OjpFbGVtZW50IH07CisgICAgICAgIH0KKyAgICB9OwogCiBwdWJsaWM6CiAgICAgZW51bSBjbGFz
cyBNb2RlIDogdW5zaWduZWQgY2hhciB7CkBAIC04Myw4ICsxMDcsOCBAQCBjbGFzcyBTZWxlY3Rv
ckNoZWNrZXIgewogICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNv
bnN0IENTU1NlbGVjdG9yKik7CiAKIHByaXZhdGU6Ci0gICAgTWF0Y2ggbWF0Y2hSZWN1cnNpdmVs
eShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWQmKSBjb25zdDsKLSAg
ICBib29sIGNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmKSBjb25zdDsK
KyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdp
dGhTdGF0dXMmLCBQc2V1ZG9JZFNldCYpIGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmUoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJikgY29u
c3Q7CiAgICAgYm9vbCBtYXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzJiwgRWxlbWVudCYsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpIGNvbnN0OwogCiAgICAg
Ym9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhT
dGF0dXMmLCBjb25zdCBDU1NTZWxlY3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCmluZGV4IDAxN2ExNjdmODFkMWEwNTEyYjVjOTVjMWE5NDlm
NjI0NGM1YjY0YzYuLjRhZTE1M2UzYjJlYTdiMGYzMmEyNmVlMjYwY2UzOTVmZWFiZDc5NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTM3MCw3ICsz
NzAsOSBAQCBlbnVtIGNsYXNzIEZyYWdtZW50c0xldmVsIHsKICAgICBJbkZ1bmN0aW9uYWxQc2V1
ZG9UeXBlID0gMQogfTsKIAotc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMo
Y29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3Rv
ckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVu
dFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0
ZWRNb2RlJik7CitlbnVtIGNsYXNzIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yIHsgQ2Fu
TWF0Y2gsIE5ldmVyTWF0Y2ggfTsKKworc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFn
bWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBT
ZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBG
cmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IFZpc2l0ZWRNb2RlJiwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpOwogCiBzdGF0aWMg
dm9pZCBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3Qm
IHNlbGVjdG9yRnJhZ21lbnRzLCB1bnNpZ25lZCBsZXZlbCA9IDApOwogCkBAIC00NjAsNyArNDYy
LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NU
eXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpD
YW5ub3RNYXRjaEFueXRoaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQ
c2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdt
ZW50JiBmcmFnbWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRz
TGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3Np
dGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9k
ZSYgdmlzaXRlZE1vZGUpCitzdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFz
c1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFn
bWVudCwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJh
Z21lbnRMZXZlbCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9v
dEZyYWdtZW50cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRl
ZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yIHBzZXVkb0VsZW1lbnRNYXRjaGlu
Z0JlaGF2aW9yKQogewogICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgdHlwZSA9IHNl
bGVjdG9yLnBzZXVkb0NsYXNzVHlwZSgpOwogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNjM0LDcg
KzYzNiw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShj
b25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBDU1NTZWxlY3Rvciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1
YnNlbGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3Rv
cikpIHsKICAgICAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JG
cmFnbWVudHM7CiAgICAgICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRN
b2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9y
Q29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQ
c2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwg
aWdub3JlVmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVu
Y3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRl
eHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRv
VHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9y
ZVZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6TmV2ZXJNYXRjaCk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1v
ZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVu
Y3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1
bmN0aW9uVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2lt
cGxlU2VsZWN0b3JDaGVja2VyOgpAQCAtNjY5LDcgKzY3MSw3IEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9
IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2Vs
ZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9y
RnJhZ21lbnRMaXN0IHNlbGVjdG9yRnJhZ21lbnRzOwogICAgICAgICAgICAgICAgIFZpc2l0ZWRN
b2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAg
ICAgRnVuY3Rpb25UeXBlIGxvY2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1
YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNM
ZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZp
c2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBG
dW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2Vs
ZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVs
OjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRl
ZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0Jl
aGF2aW9yOjpOZXZlck1hdGNoKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGlnbm9yZVZpc2l0ZWRNb2RlID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlz
YWJsZWQgaW4gdGhlIGZ1bmN0aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAg
ICAgIC8vIFNpbmNlIHRoaXMgaXMgbm90IHBzZXVkbyBjbGFzcyBmaWx0ZXIsIENhbm5vdE1hdGNo
QW55dGhpbmcgaW1wbGllcyB0aGlzIGZpbHRlciBhbHdheXMgcGFzc2VzLgpAQCAtNjkzLDcgKzY5
NSw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25z
dCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENT
U1NlbGVjdG9yKiByb290U2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3Qo
KTsgcm9vdFNlbGVjdG9yOyByb290U2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocm9v
dFNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IGZyYWdt
ZW50TGlzdDsKICAgICAgICAgICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9
IFZpc2l0ZWRNb2RlOjpOb25lOwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5j
dGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRl
eHQsIGZyYWdtZW50TGlzdCwgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUs
IHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNp
dGVkTW9kZSk7CisgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9
IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21l
bnRMaXN0LCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25J
blJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQ
c2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6
Tm9uZSwgIjp2aXNpdGVkIGlzIGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFz
c2VzIik7CiAKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1
bm1hdGNoIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVu
dHMuCkBAIC03NTcsNyArNzU5LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNl
dWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAg
ICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5m
aXJzdCgpOyBzdWJzZWxlY3Rvcjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQo
c3Vic2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2Vs
ZWN0b3JGcmFnbWVudHM7CiAgICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRl
ZE1vZGUgPSBWaXNpdGVkTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUg
bG9jYWxGdW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9u
YWxQc2V1ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxl
ZCwgaWdub3JlVmlzaXRlZE1vZGUpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2Nh
bEZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JD
b250ZXh0LCBzZWxlY3RvckZyYWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBz
ZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBp
Z25vcmVWaXNpdGVkTW9kZSwgcHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRl
ZE1vZGU6Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1
ZG8gY2xhc3NlcyIpOwogCiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBmcmFnbWVudCBu
ZXZlciBtYXRjaGVzIGFnYWluc3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBtYXRj
aGVzTGlzdC4KQEAgLTc2Nyw2ICs3NjksMTAgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUg
YWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAg
ICAgICAgICAgICAgICBpZiAobG9jYWxGdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5u
b3RDb21waWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5u
b3RDb21waWxlOwogCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSBwc2V1ZG8g
ZWxlbWVudHMgaW5zaWRlIDptYXRjaGVzIGFyZSBzdXBwb3J0ZWQgaW4gbm9uLUpJVCBjb2RlLgor
ICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvckZyYWdtZW50cy5maXJzdCgpLnBzZXVkb0VsZW1l
bnRTZWxlY3RvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90Q29tcGlsZTsKKwogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmlj
dGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGxvY2FsRnVuY3Rpb25UeXBlKTsKICAgICAg
ICAgICAgICAgICBtYXRjaGVzTGlzdC5hcHBlbmQoc2VsZWN0b3JGcmFnbWVudHMpOwogICAgICAg
ICAgICAgfQpAQCAtODA1LDcgKzgxMSw3IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OlNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAg
Ly8gSW4gUXVlcnlTZWxlY3RvciBjb250ZXh0LCA6dmlzaXRlZCBhbHdheXMgaGFzIG5vIGVmZmVj
dCBkdWUgdG8gc2VjdXJpdHkgaXNzdWVzLgogICAgIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCA9
IHNlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3I7CiAKLSAg
ICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2Vs
ZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwg
RnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hF
bmFibGVkLCBtX3Zpc2l0ZWRNb2RlKTsKKyAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZy
YWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21l
bnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50
czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2RlLCBQc2V1ZG9F
bGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6Q2FuTWF0Y2gpOwogICAgIGlmIChtX2Z1bmN0aW9uVHlw
ZSAhPSBGdW5jdGlvblR5cGU6OkNhbm5vdENvbXBpbGUgJiYgbV9mdW5jdGlvblR5cGUgIT0gRnVu
Y3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQogICAgICAgICBjb21wdXRlQmFja3RyYWNr
aW5nSW5mb3JtYXRpb24obV9zZWxlY3RvckZyYWdtZW50cyk7CiB9CkBAIC04MjEsNyArODI3LDcg
QEAgc3RhdGljIGJvb2wgaXNTY3JvbGxiYXJQc2V1ZG9FbGVtZW50KENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50VHlwZSB0eXBlKQogICAgIHJldHVybiB0eXBlID49IENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50U2Nyb2xsYmFyICYmIHR5cGUgPD0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRT
Y3JvbGxiYXJUcmFja1BpZWNlOwogfQogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZy
YWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQg
c2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMs
IEZyYWdtZW50c0xldmVsIGZyYWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFn
bWVudHMgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwg
VmlzaXRlZE1vZGUmIHZpc2l0ZWRNb2RlKQorc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RG
cmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0
IHNlbGVjdG9yQ29udGV4dCwgU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRz
LCBGcmFnbWVudHNMZXZlbCBmcmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IFZpc2l0ZWRNb2RlJiB2aXNpdGVkTW9kZSwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3Ig
cHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpCiB7CiAgICAgU2VsZWN0b3JGcmFnbWVudCBm
cmFnbWVudDsKICAgICBGcmFnbWVudFJlbGF0aW9uIHJlbGF0aW9uVG9QcmV2aW91c0ZyYWdtZW50
ID0gRnJhZ21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0OwpAQCAtODY2LDcgKzg3Miw3IEBAIHN0YXRp
YyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290
U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQucHNldWRvRWxlbWVu
dFNlbGVjdG9yICYmIGlzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChmcmFnbWVudC5wc2V1ZG9FbGVt
ZW50U2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpKQogICAgICAgICAgICAgICAgIGZ1bmN0
aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFNj
cm9sbGJhclBzZXVkb0NsYXNzVHlwZSgqc2VsZWN0b3IsIGZyYWdtZW50KSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVu
Y3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJh
Z21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0
ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRNb2RlKSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25U
eXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRv
Q2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRM
ZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRNb2RlLCBwc2V1
ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcikpOwogICAgICAgICAgICAgaWYgKCFwc2V1ZG9DbGFz
c09ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUoKnNlbGVjdG9yKSkKICAgICAgICAgICAgICAg
ICBmcmFnbWVudC5vbmx5TWF0Y2hlc0xpbmtzSW5RdWlya3NNb2RlID0gZmFsc2U7CiAgICAgICAg
ICAgICBpZiAoZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSB8fCBm
dW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtODgw
LDExICs4ODYsNiBAQCBzdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25z
dCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNl
bGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAotICAg
ICAgICAgICAgLy8gSW4gU2VsZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRl
IGEgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAg
ICAgICAgIC8vIE1ha2UgaXQgYXMgbWF0Y2hpbmcgZmFpbHVyZSB1bnRpbCB0aGUgc3BlYyBjbGFy
aWZpZXMgdGhpcyBjYXNlLgotICAgICAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21l
bnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKLQogICAgICAgICAgICAgc3dpdGNo
IChzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudEFmdGVyOgogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudEJlZm9yZToKQEAgLTkwMyw5ICs5MDQsMTMgQEAgc3RhdGljIEZ1bmN0
aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3Rv
ciwgU2VsZWN0b3IKICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RN
YXRjaEFueXRoaW5nOwogICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgUkVTSVpFUiwgU0VM
RUNUSU9OIGV0Yy4KICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gVGhp
cyBicmFuY2ggaW5jbHVkZXMgY3VzdG9tIHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICBpZiAocHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgPT0gUHNldWRvRWxl
bWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKKwogICAgICAgICAgICAgZnVuY3Rp
b25UeXBlID0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTk1NCwxMiArOTU5LDE1IEBAIHN0
YXRpYyBGdW5jdGlvblR5cGUgY29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiBy
b290U2VsZWN0b3IsIFNlbGVjdG9yCiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0g
ZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlz
IG9ubHkgZWZmZWN0aXZlIGluIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVk
b0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yID0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6
Ok5ldmVyTWF0Y2g7CisKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9
IGZyYWdtZW50UmVsYXRpb25Gb3JTZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAg
ZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFn
bWVudDsKICAgICAgICAgZnJhZ21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlv
bkluUm9vdEZyYWdtZW50czsKICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBm
cmFnbWVudC5yZWxhdGlvblRvTGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExl
dmVsID09IEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBp
ZiAoZnJhZ21lbnRMZXZlbCAhPSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZy
YWdtZW50Lm9ubHlNYXRjaGVzTGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2Vs
ZWN0b3JGcmFnbWVudHMuYXBwZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxl
Y3RvckZyYWdtZW50KCk7CkBAIC0yODU0LDcgKzI4NjIsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBM
aXN0JgogICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVh
blJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQog
ewogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVy
QWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKQEAgLTM1NTIsMTYgKzM1NjAsMTEgQEAgdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNl
dWRvQ2xhc3MoQXNzZW1ibGVyOjoKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3Nl
bWJsZXI6Okp1bXBMaXN0JiwgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0g
ICAgQVNTRVJUKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvcik7CisgICAgQVNTRVJUX1VO
VVNFRChmcmFnbWVudCwgZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yKTsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVl
cnlTZWxlY3RvciwgIldoZW4gdGhlIGZyYWdtZW50IGhhcyBwc2V1ZG8gZWxlbWVudCwgdGhlIHNl
bGVjdG9yIGJlY29tZXMgQ2Fubm90TWF0Y2hBbnl0aGluZyBmb3IgUXVlcnlTZWxlY3RvciBhbmQg
dGhpcyB0ZXN0IGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQuIik7Ci0KLSAgICBpZiAoIWZyYWdtZW50
TWF0Y2hlc1RoZVJpZ2h0bW9zdEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkg
ewotICAgICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2Nh
dG9yKTsKLSAgICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOwotICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2lu
Z0NvbnRleHQoQXNzZW1ibGVyOjpFcXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZp
bmdTdHlsZSwgY2hlY2tpbmdDb250ZXh0KSk7Ci0gICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NB
R0VfVU5VU0VEKGZyYWdtZW50LCBmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1f
c2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCksICJWaXJ0dWFsIHBzZXVkbyBlbGVtZW50cyBoYW5k
bGluZyBpcyBvbmx5IGVmZmVjdGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LiBJZiB0aGUg
Y3VycmVudCBmcmFnbWVudCBpcyBub3QgcmlnaHRtb3N0IGZyYWdtZW50LCBDU1MgSklUIGNvbXBp
bGVyIG1ha2VzIGl0IENhbm5vdE1hdGNoQW55dGhpbmcgaW4gZnJhZ21lbnQgY29uc3RydWN0aW9u
IHBoYXNlLCBzbyBuZXZlciByZWFjaCBoZXJlLiIpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBz
ZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxl
Y3RvckZyYWdtZW50JiBmcmFnbWVudCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29u
dGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5k
ZXggNmNjYTViNzk1NDRhNGIyODQwMTk4YmUxOTMxMzJhNDVmMmNhZGIxYS4uZGJiZGExZmQ4NjA0
YjJkMzEyM2VhOWE1YjFiNjc2MDY2YTljMzVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTIzNCw2ICsyMzQsMTQgQEAgY2xhc3MgUmVuZGVy
U3R5bGU6IHB1YmxpYyBSZWZDb3VudGVkPFJlbmRlclN0eWxlPiB7CiAgICAgICAgICAgICBBU1NF
UlQocHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpOwogICAgICAgICAgICAgbV9mbGFn
cyB8PSBvbmVCaXRNYXNrIDw8IChwc2V1ZG9CaXRzT2Zmc2V0IC0gMSArIHBzZXVkbyk7CiAgICAg
ICAgIH0KKyAgICAgICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRv
SWRTZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwc2V1ZG9JZFNldCk7CisgICAg
ICAgICAgICB1aW50NjRfdCByYXdQc2V1ZG9JZFNldCA9IHBzZXVkb0lkU2V0LmRhdGEoKTsKKyAg
ICAgICAgICAgIEFTU0VSVCgocmF3UHNldWRvSWRTZXQgJiBQVUJMSUNfUFNFVURPSURfTUFTSykg
PT0gcmF3UHNldWRvSWRTZXQpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChwc2V1ZG9CaXRz
T2Zmc2V0ID49IDEsICIocHNldWRvQml0c09mZnNldCAtIDEpIHNob3VsZCBiZSB2YWxpZC4iKTsK
KyAgICAgICAgICAgIG1fZmxhZ3MgfD0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYXdQc2V1ZG9J
ZFNldCkgPDwgKHBzZXVkb0JpdHNPZmZzZXQgLSAxKSk7CisgICAgICAgIH0KIAogICAgICAgICBF
VGFibGVMYXlvdXQgdGFibGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGFi
bGVMYXlvdXQ+KGdldFZhbHVlKHRhYmxlTGF5b3V0Qml0TWFzaywgdGFibGVMYXlvdXRPZmZzZXQp
KTsgfQogICAgICAgICB2b2lkIHNldFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB0YWJsZUxheW91
dCkgeyB1cGRhdGVWYWx1ZSh0YWJsZUxheW91dCwgdGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxh
eW91dE9mZnNldCk7IH0KQEAgLTU2MSw2ICs1NjksNyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVi
bGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBib29sIGhhc0FueVB1YmxpY1BzZXVk
b1N0eWxlcygpIGNvbnN0OwogICAgIGJvb2wgaGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRv
KSBjb25zdDsKICAgICB2b2lkIHNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbyk7Cisg
ICAgdm9pZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQpOwogICAgIGJvb2wgaGFzVW5p
cXVlUHNldWRvU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIGF0dHJpYnV0ZSBnZXR0ZXIgbWV0aG9k
cwpAQCAtMjE2OSw2ICsyMTc4LDExIEBAIGlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQ
c2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8pCiAgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhh
c1BzZXVkb1N0eWxlKHBzZXVkbyk7CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRI
YXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvSWRTZXQpCit7CisgICAgbm9uaW5oZXJp
dGVkX2ZsYWdzLnNldEhhc1BzZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclN0eWxlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXgg
MmE0YWVmNWJlNzQ4MGUyMDAzNjFiMzgyMmFiMDgzZDc1YzBhMzU4ZC4uNzVkNmQzOTYzMTM4ZDI2
M2M4OGU2OGMxOGQ5ZGUxNjU3Nzk0ZGUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKQEAgLTI2LDYgKzI2LDggQEAK
ICNpZm5kZWYgUmVuZGVyU3R5bGVDb25zdGFudHNfaAogI2RlZmluZSBSZW5kZXJTdHlsZUNvbnN0
YW50c19oCiAKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgUHJpbnRDb2xvckFkanVzdEJpdHMgPSAxOwpAQCAt
ODAsNiArODIsNjMgQEAgZW51bSBQc2V1ZG9JZCA6IHVuc2lnbmVkIGNoYXIgewogICAgIFBVQkxJ
Q19QU0VVRE9JRF9NQVNLID0gKCgxIDw8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKSAtIDEpICYg
figoMSA8PCBGSVJTVF9QVUJMSUNfUFNFVURPSUQpIC0gMSkKIH07CiAKK2NsYXNzIFBzZXVkb0lk
U2V0IHsKK3B1YmxpYzoKKyAgICBQc2V1ZG9JZFNldCgpCisgICAgICAgIDogbV9kYXRhKDApCisg
ICAgeyB9CisKKyAgICBQc2V1ZG9JZFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UHNldWRvSWQ+
IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgOiBtX2RhdGEoMCkKKyAgICB7CisgICAgICAgIGZv
ciAoUHNldWRvSWQgcHNldWRvSWQgOiBpbml0aWFsaXplckxpc3QpCisgICAgICAgICAgICBhZGQo
cHNldWRvSWQpOworICAgIH0KKworICAgIHN0YXRpYyBQc2V1ZG9JZFNldCBmcm9tTWFzayh1bnNp
Z25lZCByYXdQc2V1ZG9JZFNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChy
YXdQc2V1ZG9JZFNldCk7CisgICAgfQorCisgICAgYm9vbCBoYXMoUHNldWRvSWQgcHNldWRvSWQp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhICYgKDEgPDwgcHNldWRvSWQpOwor
ICAgIH0KKworICAgIHZvaWQgYWRkKFBzZXVkb0lkIHBzZXVkb0lkKQorICAgIHsKKyAgICAgICAg
bV9kYXRhIHw9ICgxIDw8IHBzZXVkb0lkKTsKKyAgICB9CisKKyAgICB2b2lkIG1lcmdlKFBzZXVk
b0lkU2V0IHNvdXJjZSkKKyAgICB7CisgICAgICAgIG1fZGF0YSB8PSBzb3VyY2UubV9kYXRhOwor
ICAgIH0KKworICAgIFBzZXVkb0lkU2V0IG9wZXJhdG9yICYoY29uc3QgUHNldWRvSWRTZXQmIHBz
ZXVkb0lkU2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFBzZXVkb0lkU2V0KG1fZGF0
YSAmIHBzZXVkb0lkU2V0Lm1fZGF0YSk7CisgICAgfQorCisgICAgUHNldWRvSWRTZXQgb3BlcmF0
b3IgfChjb25zdCBQc2V1ZG9JZFNldCYgcHNldWRvSWRTZXQpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gUHNldWRvSWRTZXQobV9kYXRhIHwgcHNldWRvSWRTZXQubV9kYXRhKTsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2RhdGE7CisgICAgfQorCisgICAgdW5zaWduZWQgZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQorcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQc2V1ZG9JZFNldCh1bnNpZ25lZCBy
YXdQc2V1ZG9JZFNldCkKKyAgICAgICAgOiBtX2RhdGEocmF3UHNldWRvSWRTZXQpCisgICAgeyB9
CisKKyAgICB1bnNpZ25lZCBtX2RhdGE7Cit9OworCiBlbnVtIENvbHVtbkZpbGwgeyBDb2x1bW5G
aWxsQmFsYW5jZSwgQ29sdW1uRmlsbEF1dG8gfTsKIAogZW51bSBDb2x1bW5TcGFuIHsgQ29sdW1u
U3Bhbk5vbmUgPSAwLCBDb2x1bW5TcGFuQWxsIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjYxYWE1MWM5MjQ4YzU0MzAw
ZTVmNDYxMGI1Yzk3Y2VkOGI4MjJlOC4uZWRhM2ZmMzQ3MjI3ODEyYjBiYWI1M2QxOGU3YzU2YTEw
MTE2OWRmYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE0LTExLTA5ICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0b3JzOiBBZGQg
bXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNl
dWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0
bW9zdC1mcmFnbWVudHMuaHRtbDogQWRkZWQuCisgICAgICAgIEluIHRoaXMgdGVzdCwgd2UgZW5z
dXJlIHRoYXQgcHNldWRvIGVsZW1lbnRzIHNlbGVjdG9yIGluIHRoZQorICAgICAgICBub24tcmln
aHRtb3N0IGZyYWdtZW50cyBiZWNvbWVzIHVubWF0Y2hlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVj
dG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNldWRvLWVsZW1l
bnQtaW5zaWRlLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9zZWxlY3RvcnMvaWdub3JlLXBzZXVkby1lbGVtZW50LWluc2lkZS1ub24t
cmlnaHRtb3N0LWZyYWdtZW50cy5odG1sOiBBZGRlZC4KKwogMjAxNC0xMS0wOSAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBQdXQgYnVnIGxpbmsgYXQg
dGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxl
Y3RvcnMvaWdub3JlLXBzZXVkby1lbGVtZW50LWluc2lkZS1ub24tcmlnaHRtb3N0LWZyYWdtZW50
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNldWRv
LWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZjAyMmM5YTg1NmEyMDkzODdmZmY2ODAxZWFkN2E3MTUyNjAwMzJlCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvaWdub3JlLXBzZXVkby1lbGVt
ZW50LWluc2lkZS1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMSBAQAorSWdub3JlIHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgbm9uLXJpZ2h0bW9zdCBmcmFn
bWVudHMgd2hlbiBjb2xsZWN0aW5nIHJ1bGVzIGZvciBhIG5vZGUuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3Rlc3RjYXNlMScpKSBpcyBudWxsCitQQVNTIHdpbmRvdy5nZXRNYXRj
aGVkQ1NTUnVsZXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RjYXNlMicpKSBpcyBudWxs
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvaWdub3JlLXBzZXVkby1lbGVtZW50
LWluc2lkZS1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9z
ZWxlY3RvcnMvaWdub3JlLXBzZXVkby1lbGVtZW50LWluc2lkZS1ub24tcmlnaHRtb3N0LWZyYWdt
ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZjFiZGY4YjE1NTM1NTYzMDk1MmFiMjg5YTIzOTkzMzYw
MWRiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25v
cmUtcHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKQEAg
LTAsMCArMSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+Cisj
c3VpdGU6OmFmdGVyICN0ZXN0Y2FzZTEsCisjc3VpdGU6OmJlZm9yZSAjdGVzdGNhc2UxLAorI3N1
aXRlOjpmaXJzdC1sZXR0ZXIgI3Rlc3RjYXNlMSwKKyNzdWl0ZTo6Zmlyc3QtbGluZSAjdGVzdGNh
c2UxCit7CisgICAgY29sb3I6IHJlZDsKK30KKworI3N1aXRlOm1hdGNoZXMoOjphZnRlciwgOjpi
ZWZvcmUsIDo6Zmlyc3QtbGV0dGVyLCA6OmZpcnN0LWxpbmUpICN0ZXN0Y2FzZTIgeworICAgIGNv
bG9yOiByZWQ7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJzdWl0ZSIg
c3R5bGU9ImRpc3BsYXk6bm9uZSI+Cis8cCBpZD0idGVzdGNhc2UxIj5Db2NvYTwvcD4KKzxwIGlk
PSJ0ZXN0Y2FzZTIiPkNhcHB1Y2Npbm88L3A+Cis8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbignSWdub3JlIHBzZXVkbyBlbGVtZW50cyBpbnNpZGUgbm9uLXJpZ2h0bW9zdCBm
cmFnbWVudHMgd2hlbiBjb2xsZWN0aW5nIHJ1bGVzIGZvciBhIG5vZGUuJyk7CisKKy8vIFNob3Vs
ZCBub3QgY29sbGVjdCBydWxlcyB0aGF0IHNlbGVjdG9yIGhhcyBwc2V1ZG8tZWxlbWVudCBpbnNp
ZGUgbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCwKKy8vIGV2ZW4gaWYgZXhlY3V0aW5nIHdpdGggQ29s
bGVjdGluZ1J1bGVzICYgQ29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVu
dHMuCitzaG91bGRCZSgid2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGVzdGNhc2UxJykpIiwgIm51bGwiKTsKK3Nob3VsZEJlKCJ3aW5kb3cuZ2V0TWF0
Y2hlZENTU1J1bGVzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Y2FzZTInKSkiLCAibnVs
bCIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Nl
bGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3Rl
ZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9u
LXJpZ2h0bW9zdC1mcmFnbWVudHMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjA4NjY4ZDky
ODc3ZjBjN2QxODFiZWI0MzJhY2VlOGZiYzAxMzVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJpZ2h0bW9zdC1mcmFn
bWVudHMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IWRvY3R5cGUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c3R5bGU+CisudGFyZ2V0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBs
aW1lOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdj4KKyAgICA8cCBjbGFzcz0i
dGFyZ2V0IiBpZD0idGFyZ2V0MSI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAg
PHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDIiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4u
PC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQzIj5UaGlzIGxpbmUgc2hvdWxk
IGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0NCI+VGhpcyBs
aW5lIHNob3VsZCBiZSBncmVlbi48L3A+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1y
aWdodG1vc3QtZnJhZ21lbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1
ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdtZW50cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUx
YjAzNDVhOTYzMzhmMWI4ZjZhZTlhZDY3MzMwMzg5NjQ4ZTgxOTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRt
b3N0LWZyYWdtZW50cy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy50YXJnZXQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxp
bWU7Cit9CisKKzo6YWZ0ZXIgI3RhcmdldDEsCis6OmJlZm9yZSAjdGFyZ2V0MSwKKzo6Zmlyc3Qt
bGluZSAjdGFyZ2V0MSwKKzo6Zmlyc3QtbGV0dGVyICN0YXJnZXQxLAorOjotd2Via2l0LXJlc2l6
ZXIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyICN0YXJnZXQxLAorOjotd2Via2l0LXNj
cm9sbGJhci1idXR0b24gI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciAjdGFy
Z2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Ny
b2xsYmFyLXRyYWNrICN0YXJnZXQxLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSAj
dGFyZ2V0MSwKKzo6c2VsZWN0aW9uICN0YXJnZXQxCit7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmVkOworfQorCis6OmFmdGVyID4gI3RhcmdldDIsCis6OmJlZm9yZSA+ICN0YXJnZXQyLAorOjpm
aXJzdC1saW5lID4gI3RhcmdldDIsCis6OmZpcnN0LWxldHRlciA+ICN0YXJnZXQyLAorOjotd2Vi
a2l0LXJlc2l6ZXIgPiAjdGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3JvbGxiYXIgPiAjdGFyZ2V0MiwK
Kzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xs
YmFyLWNvcm5lciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiA+ICN0YXJn
ZXQyLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjayA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNj
cm9sbGJhci10cmFjay1waWVjZSA+ICN0YXJnZXQyLAorOjpzZWxlY3Rpb24gPiAjdGFyZ2V0Mgor
eworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworOjphZnRlciArICN0YXJnZXQzLAor
OjpiZWZvcmUgKyAjdGFyZ2V0MywKKzo6Zmlyc3QtbGluZSArICN0YXJnZXQzLAorOjpmaXJzdC1s
ZXR0ZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1yZXNpemVyICsgI3RhcmdldDMsCis6Oi13ZWJr
aXQtc2Nyb2xsYmFyICsgI3RhcmdldDMsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiArICN0
YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtp
dC1zY3JvbGxiYXItdGh1bWIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sg
KyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2UgKyAjdGFyZ2V0MywK
Kzo6c2VsZWN0aW9uICsgI3RhcmdldDMKK3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9
CisKKzo6YWZ0ZXIgfiAjdGFyZ2V0NCwKKzo6YmVmb3JlIH4gI3RhcmdldDQsCis6OmZpcnN0LWxp
bmUgfiAjdGFyZ2V0NCwKKzo6Zmlyc3QtbGV0dGVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtcmVz
aXplciB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9sbGJhciB+ICN0YXJnZXQ0LAorOjotd2Vi
a2l0LXNjcm9sbGJhci1idXR0b24gfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29y
bmVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIH4gI3RhcmdldDQsCis6
Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFy
LXRyYWNrLXBpZWNlIH4gI3RhcmdldDQsCis6OnNlbGVjdGlvbiB+ICN0YXJnZXQ0Cit7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2PgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQxIj5UaGlzIGxpbmUgc2hvdWxk
IGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MiI+VGhpcyBs
aW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdl
dDMiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQi
IGlkPSJ0YXJnZXQ0Ij5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKzwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNl
dWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLWV4cGVjdGVkLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2VhNmY3NjA1NWVhNDg1OTY3ZGYwMmQ3MWM1MzVmMDFjN2U3ZTJjMgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50
LWluc2lkZS1tYXRjaGVzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPCFkb2N0eXBl
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RhcmdldDE6OmZpcnN0LWxldHRlciB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDI6OmFmdGVyIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJjb2NvYSI7Cit9CisKKyN0
YXJnZXQzOjpiZWZvcmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVu
dDogImNhcHB1Y2Npbm8iOworfQorCisjdGFyZ2V0NDo6YmVmb3JlLAorI3RhcmdldDQ6OmFmdGVy
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOwor
fQorCisjdGFyZ2V0NSwKKyN0YXJnZXQ1OjpmaXJzdC1sZXR0ZXIgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQ2LAorI3RhcmdldDY6OmZpcnN0LWxldHRlciB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDcsCisjdGFyZ2V0Nzo6YmVm
b3JlLAorI3RhcmdldDc6OmFmdGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAg
IGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisvKiBmaXJzdCBsZXR0ZXIgb2YgYmVmb3JlIGNvbnRl
bnQgaXMgY29sb3JlZCBibHVlLiAqLworI3RhcmdldDEyOjphZnRlciwKKyN0YXJnZXQxMjo6YmVm
b3JlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQi
OworfQorCisjdGFyZ2V0MTI6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
Ymx1ZTsKK30KKworCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxwIGlk
PSJ0YXJnZXQxIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+
CisgICAgPHAgaWQ9InRhcmdldDIiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMg
ZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MyI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDpt
YXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ0Ij5wc2V1ZG8gZWxlbWVu
dCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDUiPnBz
ZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LCBzbyBhbGwgc2VsZWN0b3Jz
IHNob3VsZCBiZSBjaGVja2VkLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NiI+cHNldWRvIGVsZW1l
bnQgaW5zaWRlIG5lc3RlZCA6bWF0Y2hlcyBzaG91bGQgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxw
IGlkPSJ0YXJnZXQ3Ij5ib3RoIGxpbmUgaXRzZWxmIGFuZCBiZWZvcmUvYWZ0ZXIgc2hvdWxkIGJl
IGNvbG9yZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ4Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUg
Om5vdCBkb2Vzbid0IGhhdmUgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0OSI+OjpmaXJz
dC1saW5lIGluIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2guPC9wPgorICAg
IDxwIGlkPSJ0YXJnZXQxMCI+Om1hdGNoZXMoOjpmaXJzdC1saW5lKSBpbiBub24tcmlnaHRtb3N0
IGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoZXMuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxMSI+cHNl
dWRvIGVsZW1lbnQgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBpbnNpZGUgOm1hdGNoZXMgYWx3
YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDEyIj5iZWZvcmUvYWZ0ZXIgY29u
dGVudHMgYXJlIGNvbG9yZWQgbGltZSBhbmQgZmlyc3QtbGV0dGVyIG9mIGJlZm9yZSBjb250ZW50
IGlzIGNvbG9yZWQgYmx1ZS48L3A+CisgICAgPHAgaWQ9InRhcmdldDEzIj5ub24tcmlnaHRtb3N0
IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQxNCI+
PHA+bm9uLXJpZ2h0bW9zdCBwc2V1ZG8gZWxlbWVudCBoYXMgbm8gZWZmZWN0LjwvcD48L3A+Cisg
ICAgPHAgaWQ9InRhcmdldDE1Ij48cD5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBu
byBlZmZlY3QuPC9wPjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluc2lkZS1t
YXRjaGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzkzMzk1NmFmMzgwNzg2OGNhZWNjZGFlZDdiMmMyYjBl
MWI3MmMyYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Bz
ZXVkby1lbGVtZW50LWluc2lkZS1tYXRjaGVzLmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPCFkb2N0
eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorI3RhcmdldDE6bWF0Y2hlcyg6OmZp
cnN0LWxldHRlcikgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0YXJnZXQy
Om1hdGNoZXMoOjphZnRlcikgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29u
dGVudDogImNvY29hIjsKK30KKworI3RhcmdldDM6bWF0Y2hlcyg6OmJlZm9yZSkgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNhcHB1Y2Npbm8iOworfQorCisj
dGFyZ2V0NDptYXRjaGVzKDo6YmVmb3JlLCA6OmFmdGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsKK30KKworI3RhcmdldDU6bWF0Y2hlcyg6
OmZpcnN0LWxldHRlciwgcCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7Cit9CisKKyN0
YXJnZXQ2Om1hdGNoZXMocCwgOm1hdGNoZXMocCwgOjpmaXJzdC1sZXR0ZXIpKSB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDc6bWF0Y2hlcyg6OmJlZm9yZSwgOjph
ZnRlciwgKikgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFy
b3VuZCI7Cit9CisKKyN0YXJnZXQ4Om5vdCg6bWF0Y2hlcyg6OmZpcnN0LWxpbmUpKSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6OmZpcnN0LWxpbmUgI3RhcmdldDkgeworICAg
IGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworOm1hdGNoZXMoOjpmaXJzdC1saW5lKSAjdGFy
Z2V0MTAgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworI3RhcmdldDExOm1hdGNo
ZXMoOjpmaXJzdC1saW5lID4gcCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKwor
LyogZmlyc3QgbGV0dGVyIG9mIGJlZm9yZSBjb250ZW50IGlzIGNvbG9yZWQgYmx1ZS4gKi8KKyN0
YXJnZXQxMjptYXRjaGVzKDo6Zmlyc3QtbGV0dGVyLCA6OmFmdGVyLCA6OmJlZm9yZSkgeworICAg
IGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9CisKKyN0
YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworfQor
CisjdGFyZ2V0MTM6bWF0Y2hlcyg6OmFmdGVyID4gcCkgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHJlZDsKKyAgICBjb250ZW50OiAiYnVnIjsKK30KKworI3RhcmdldDE0Om1hdGNoZXMoOjphZnRl
cikgPiBweworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30KKworI3RhcmdldDE1Om1hdGNo
ZXMoOjphZnRlciA+IHApID4gcHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAgaWQ9InRhcmdldDEiPnBzZXVk
byBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFy
Z2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QuPC9wPgorICAg
IDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNoZXMgaGFzIGVmZmVj
dC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hl
cyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NSI+cHNldWRvIGVsZW1lbnQgaW5z
aWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3RvcnMgc2hvdWxkIGJlIGNoZWNr
ZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgbmVzdGVk
IDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDciPmJv
dGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91bGQgYmUgY29sb3JlZC48L3A+Cisg
ICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bm90IGRvZXNuJ3QgaGF2
ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5Ij46OmZpcnN0LWxpbmUgaW4gbm9uLXJp
Z2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+CisgICAgPHAgaWQ9InRhcmdldDEw
Ij46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQgYWx3YXlz
IHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDExIj5wc2V1ZG8gZWxlbWVudCBpbiBu
b24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0Y2hlcyBhbHdheXMgdW5tYXRjaGVzLjwv
cD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9hZnRlciBjb250ZW50cyBhcmUgY29sb3Jl
ZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVl
LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQg
aGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDE0Ij48cD5ub24tcmlnaHRtb3N0
IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0
MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+PC9w
PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241342</attachid>
            <date>2014-11-11 00:50:17 -0800</date>
            <delta_ts>2014-11-11 01:57:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138214-20141111175019.patch</filename>
            <type>text/plain</type>
            <size>58864</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJhYjM4MzY0MTNmZGM2
YmQ2ZjAxZGRlZGViM2I5MTY1MjM0OTcxYi4uNmY3OGE2ZTM2NmIwM2IyYjViYzk3N2FlNDNhNDlj
ZDdhNDMwY2MzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTExICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUzQgU2VsZWN0
b3JzOiBBZGQgbXVsdGlwbGUgcHNldWRvIGVsZW1lbnRzIHN1cHBvcnQgdG8gOm1hdGNoZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODIxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGltcGxlbWVudCAobXVsdGlwbGUpIHBzZXVkbyBlbGVtZW50cyBzdXBwb3J0IHRvIDpt
YXRjaGVzLgorICAgICAgICBDdXJyZW50bHksIHdlIGltcGxlbWVudGVkIGl0IGluIGNzcy9TZWxl
Y3RvckNoZWNrZXIgYW5kIHRoZXJlJ3Mgbm8gQ1NTIEpJVCBpbXBsZW1lbnRhdGlvbi4KKworICAg
ICAgICBBbmQgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgcHNldWRvIGVsZW1lbnQgc2VsZWN0
b3IgYmVoYXZpb3IuCisgICAgICAgIFByZXZpb3VzbHkgd2hlbiBwc2V1ZG8gZWxlbWVudCBzZWxl
Y3RvciBhcHBlYXJlZCBpbiB0aGUgbm9uLXJpZ2h0bW9zdAorICAgICAgICBmcmFnbWVudCwgaXQg
d2FzIGlnbm9yZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB1bm1hdGNoZWQuCisKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
Q2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1czo6Q2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoKToKKyAgICAg
ICAgKFdlYkNvcmU6Omhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjptYXRjaFNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdDo6bWF0
Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0Ojp1
cGRhdGVXaXRoTWF0Y2hUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hSZXN1bHQ6OmZhaWxzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
b3JDb21waWxlcjo6Y29uc3RydWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNl
dWRvRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGVzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlBzZXVkb0lkU2V0OjpQc2V1ZG9JZFNldCk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1
ZG9JZFNldDo6ZnJvbU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6UHNldWRvSWRTZXQ6Omhhcyk6
CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBzZXVkb0lkU2V0OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3Bl
cmF0b3IgJik6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgfCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9JZFNldDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQc2V1ZG9JZFNldDo6ZGF0YSk6CisKIDIwMTQtMTEtMTAgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBMYXppbHkgY3JlYXRlIEhUTUxJbnB1dEVsZW1l
bnQncyBpbnB1dFR5cGUgYW5kIHNoYWRvdyBzdWJ0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCmluZGV4IDhkZDJmMzM4YjIzZmM4ZWJmZDQ3ZTc4NjY1OGVhMmRkNDhlMWU1
M2EuLmI4NWY2MTI4N2YzMzk5YjBlZjc5MmMxYzE5OTMwZGIyN2RmNWU4NTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC04LDYgKzgsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUg
QXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNzEsNiArNzIsNyBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIDogcHVibGljIFNlbGVjdG9yQ2hlY2tlcjo6Q2hl
YwogICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUocmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNo
ZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMgPyBWaXNpdGVkTWF0Y2hUeXBlOjpEaXNhYmxlZCA6
IFZpc2l0ZWRNYXRjaFR5cGU6OkVuYWJsZWQpCiAgICAgICAgICwgZmlyc3RTZWxlY3Rvck9mVGhl
RnJhZ21lbnQoc2VsZWN0b3IpCiAgICAgICAgICwgaW5GdW5jdGlvbmFsUHNldWRvQ2xhc3MoZmFs
c2UpCisgICAgICAgICwgcHNldWRvRWxlbWVudEVmZmVjdGl2ZSh0cnVlKQogICAgICAgICAsIGhh
c1Njcm9sbGJhclBzZXVkbyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFs
c2UpCiAgICAgeyB9CkBAIC04MCw2ICs4Miw3IEBAIHN0cnVjdCBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyOjpDaGVjCiAg
ICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwogICAgIGNvbnN0IENTU1NlbGVj
dG9yKiBmaXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudDsKICAgICBib29sIGluRnVuY3Rpb25hbFBz
ZXVkb0NsYXNzOworICAgIGJvb2wgcHNldWRvRWxlbWVudEVmZmVjdGl2ZTsKICAgICBib29sIGhh
c1Njcm9sbGJhclBzZXVkbzsKICAgICBib29sIGhhc1NlbGVjdGlvblBzZXVkbzsKIH07CkBAIC0x
NzEsMzggKzE3NCwzNSBAQCBzdGF0aWMgaW5saW5lIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0
ZXIoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaQogYm9vbCBTZWxlY3RvckNo
ZWNrZXI6Om1hdGNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBwcm92aWRlZENvbnRleHQsIHVuc2lnbmVkJiBzcGVj
aWZpY2l0eSkgY29uc3QKIHsKICAgICBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNvbnRleHQo
cHJvdmlkZWRDb250ZXh0LCBzZWxlY3RvciwgZWxlbWVudCk7Ci0gICAgUHNldWRvSWQgcHNldWRv
SWQgPSBOT1BTRVVETzsKLSAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShjb250ZXh0LCBwc2V1ZG9J
ZCkgIT0gU2VsZWN0b3JNYXRjaGVzKQorICAgIFBzZXVkb0lkU2V0IHBzZXVkb0lkU2V0OworICAg
IE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkoY29udGV4dCwgcHNldWRvSWRT
ZXQpOworICAgIGlmIChyZXN1bHQubWF0Y2ggIT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURP
ICYmIGNvbnRleHQucHNldWRvSWQgIT0gcHNldWRvSWQpCisgICAgaWYgKGNvbnRleHQucHNldWRv
SWQgIT0gTk9QU0VVRE8gJiYgIXBzZXVkb0lkU2V0Lmhhcyhjb250ZXh0LnBzZXVkb0lkKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3BlY2lmaWNpdHkgPSBzZWxlY3Rvci0+c3BlY2lm
aWNpdHkoKTsKLSAgICBpZiAoY29udGV4dC5wc2V1ZG9JZCA9PSBOT1BTRVVETyAmJiBwc2V1ZG9J
ZCAhPSBOT1BTRVVETykgewotICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1v
ZGU6OlJlc29sdmluZ1N0eWxlICYmIHBzZXVkb0lkIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQp
Ci0gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnRTdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUocHNl
dWRvSWQpOworICAgIGlmIChjb250ZXh0LnBzZXVkb0lkID09IE5PUFNFVURPICYmIHBzZXVkb0lk
U2V0KSB7CisgICAgICAgIFBzZXVkb0lkU2V0IHB1YmxpY1BzZXVkb0lkU2V0ID0gcHNldWRvSWRT
ZXQgJiBQc2V1ZG9JZFNldDo6ZnJvbU1hc2soUFVCTElDX1BTRVVET0lEX01BU0spOworICAgICAg
ICBpZiAoY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlICYmIHB1
YmxpY1BzZXVkb0lkU2V0KQorICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEhh
c1BzZXVkb1N0eWxlcyhwdWJsaWNQc2V1ZG9JZFNldCk7CiAKICAgICAgICAgLy8gV2hlbiBpZ25v
cmluZyB2aXJ0dWFsIHBzZXVkbyBlbGVtZW50cywgdGhlIGNvbnRleHQncyBwc2V1ZG8gc2hvdWxk
IGFsc28gYmUgTk9QU0VVRE8gYnV0IHRoYXQgZG9lcwogICAgICAgICAvLyBub3QgY2F1c2UgYSBm
YWlsdXJlLgotICAgICAgICByZXR1cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNv
bGxlY3RpbmdSdWxlc0lnbm9yaW5nVmlydHVhbFBzZXVkb0VsZW1lbnRzOworICAgICAgICByZXR1
cm4gY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OkNvbGxlY3RpbmdSdWxlc0lnbm9yaW5n
VmlydHVhbFBzZXVkb0VsZW1lbnRzIHx8IHJlc3VsdC5tYXRjaFR5cGUgPT0gTWF0Y2hUeXBlOjpF
bGVtZW50OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHN0YXRpYyBib29s
IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCitpbmxp
bmUgc3RhdGljIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvRWxlbWVudChjb25zdCBQc2V1ZG9JZFNl
dCYgZHluYW1pY1BzZXVkb0lkU2V0KQogewotICAgIGlmIChkeW5hbWljUHNldWRvID09IFNDUk9M
TEJBUgotICAgICAgICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9USFVNQgotICAgICAg
ICB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9CVVRUT04KLSAgICAgICAgfHwgZHluYW1p
Y1BzZXVkbyA9PSBTQ1JPTExCQVJfVFJBQ0sKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBT
Q1JPTExCQVJfVFJBQ0tfUElFQ0UKLSAgICAgICAgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExC
QVJfQ09STkVSKSB7CisgICAgUHNldWRvSWRTZXQgc2Nyb2xsYmFySWRTZXQgPSB7IFNDUk9MTEJB
UiwgU0NST0xMQkFSX1RIVU1CLCBTQ1JPTExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJBQ0ssIFND
Uk9MTEJBUl9UUkFDS19QSUVDRSwgU0NST0xMQkFSX0NPUk5FUiB9OworICAgIGlmIChkeW5hbWlj
UHNldWRvSWRTZXQgJiBzY3JvbGxiYXJJZFNldCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQogCiAgICAgLy8gUkVTSVpFUiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhIHNjcm9sbGJhciBidXQg
aXQgaXMgYSBzY3JvbGxiYXItbGlrZSBwc2V1ZG8gZWxlbWVudAogICAgIC8vIGJlY2F1c2UgaXQg
Y2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwc2V1ZG8gZWxlbWVudC4KLSAgICByZXR1cm4gZHluYW1p
Y1BzZXVkbyA9PSBSRVNJWkVSOworICAgIHJldHVybiBkeW5hbWljUHNldWRvSWRTZXQuaGFzKFJF
U0laRVIpOwogfQogCiBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRo
U3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdCBTZWxlY3RvckNoZWNrZXI6OkNo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpCkBAIC0yMjEsMzQgKzIyMSwzOSBAQCBz
dGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzIGNoZWNraW5n
Q29udGV4dEZvclBhcmVudChjb25zdAogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0
aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0Fs
bFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBl
CiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3Ig
ZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Igb2YgZQotU2VsZWN0b3JDaGVja2VyOjpNYXRj
aCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkoY29uc3QgQ2hlY2tpbmdDb250ZXh0
V2l0aFN0YXR1cyYgY29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0CitTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hSZWN1cnNpdmVs
eShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYg
ZHluYW1pY1BzZXVkb0lkU2V0KSBjb25zdAogeworICAgIE1hdGNoVHlwZSBtYXRjaFR5cGUgPSBN
YXRjaFR5cGU6OkVsZW1lbnQ7CisKICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1h
dGNoLgotICAgIGlmICghY2hlY2tPbmUoY29udGV4dCkpCi0gICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzTG9jYWxseTsKKyAgICBpZiAoIWNoZWNrT25lKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG9J
ZFNldCwgbWF0Y2hUeXBlKSkKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRj
aDo6U2VsZWN0b3JGYWlsc0xvY2FsbHkpOwogCiAgICAgaWYgKGNvbnRleHQuc2VsZWN0b3ItPm1h
dGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKLSAgICAgICAgLy8gSW4gU2Vs
ZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1
ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgLy8gTWFrZSBpdCBhcyBt
YXRjaGluZyBmYWlsdXJlIHVudGlsIHRoZSBzcGVjIGNsYXJpZmllcyB0aGlzIGNhc2UuCi0gICAg
ICAgIGlmIChjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzKQotICAgICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotCiAgICAgICAgIGlmIChjb250ZXh0LnNlbGVj
dG9yLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gSW4gZnVuY3Rp
b25hbCBwc2V1ZG8gY2xhc3MsIGN1c3RvbSBwc2V1ZG8gZWxlbWVudHMgYXJlIGFsd2F5cyBkaXNh
YmxlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWNjZXB0IGN1c3RvbSBwc2V1
ZG8gZWxlbWVudHMgaW5zaWRlIDptYXRjaGVzKCkuCisgICAgICAgICAgICBpZiAoY29udGV4dC5p
bkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1
bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBp
ZiAoU2hhZG93Um9vdCogcm9vdCA9IGNvbnRleHQuZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jv
b3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQtPnNoYWRvd1BzZXVk
b0lkKCkgIT0gY29udGV4dC5zZWxlY3Rvci0+dmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFdlYktpdEN1c3RvbSAmJiByb290LT50eXBlKCkgIT0g
U2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0
Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzTG9jYWxseSk7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JG
YWlsc0xvY2FsbHkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCghY29udGV4
dC5lbGVtZW50U3R5bGUgJiYgY29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmlu
Z1N0eWxlKSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlpbmdSdWxlcykK
LSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CisgICAgICAgICAg
ICBpZiAoIWNvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7
CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6UXVlcnlp
bmdSdWxlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNo
OjpTZWxlY3RvckZhaWxzQ29tcGxldGVseSk7CiAKICAgICAgICAgICAgIFBzZXVkb0lkIHBzZXVk
b0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKGNvbnRleHQuc2VsZWN0b3ItPnBzZXVkb0VsZW1l
bnRUeXBlKCkpOwogICAgICAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQotICAgICAg
ICAgICAgICAgIGR5bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKKyAgICAgICAgICAgICAgICBkeW5h
bWljUHNldWRvSWRTZXQuYWRkKHBzZXVkb0lkKTsKKyAgICAgICAgICAgIG1hdGNoVHlwZSA9IE1h
dGNoVHlwZTo6VmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5OwogICAgICAgICB9CiAgICAgfQogCkBA
IC0yNTgsNDcgKzI2Myw1MiBAQCBzdGF0aWMgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzIGNoZWNraW5nQ29udGV4dEZvclBhcmVudChjb25zdAogICAgIC8vIFByZXBh
cmUgbmV4dCBzZWxlY3RvcgogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBoaXN0b3J5U2VsZWN0b3Ig
PSBjb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCk7CiAgICAgaWYgKCFoaXN0b3J5U2VsZWN0
b3IpCi0gICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CisgICAgICAgIHJldHVybiBNYXRj
aFJlc3VsdDo6bWF0Y2hlcyhtYXRjaFR5cGUpOwogCiAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0
YXR1cyBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3RvciA9IGhp
c3RvcnlTZWxlY3RvcjsKIAotICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAg
ICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhl
IHBzZXVkb0lkCi0gICAgICAgIGlmIChjb250ZXh0LnBzZXVkb0lkICE9IE5PUFNFVURPICYmIGNv
bnRleHQucHNldWRvSWQgIT0gZHluYW1pY1BzZXVkbykKLSAgICAgICAgICAgIHJldHVybiBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgaWYgKGNvbnRleHQucHNldWRvSWQgIT0gTk9Q
U0VVRE8gJiYgIWR5bmFtaWNQc2V1ZG9JZFNldC5oYXMoY29udGV4dC5wc2V1ZG9JZCkpCisgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29t
cGxldGVseSk7CiAKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRjaGluZyB3aGVuIHdl
IHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgogICAgICAgICBp
ZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NT
U2VsZWN0b3I6OkNoaWxkKQogICAgICAgICAgICAgbmV4dENvbnRleHQudmlzaXRlZE1hdGNoVHlw
ZSA9IFZpc2l0ZWRNYXRjaFR5cGU6OkRpc2FibGVkOwogCiAgICAgICAgIG5leHRDb250ZXh0LnBz
ZXVkb0lkID0gTk9QU0VVRE87CisgICAgICAgIC8vIFZpcnR1YWwgcHNldWRvIGVsZW1lbnQgaXMg
b25seSBlZmZlY3RpdmUgaW4gdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4KKyAgICAgICAgbmV4dENv
bnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2ZSA9IGZhbHNlOwogICAgIH0KIAogICAgIHN3aXRj
aCAocmVsYXRpb24pIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgogICAgICAg
ICBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVudChuZXh0Q29udGV4dCk7CiAg
ICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRl
eHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7CisgICAg
ICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoOyBu
ZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dCA9IGNoZWNraW5nQ29udGV4dEZvclBhcmVu
dChuZXh0Q29udGV4dCkpIHsKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hS
ZWN1cnNpdmVseShuZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAg
ICBpZiAobWF0Y2ggPT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHND
b21wbGV0ZWx5KQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICBNYXRjaFJlc3VsdCBy
ZXN1bHQgPSBtYXRjaFJlY3Vyc2l2ZWx5KG5leHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRv
KTsKKyAgICAgICAgICAgIEFTU0VSVCghbmV4dENvbnRleHQucHNldWRvRWxlbWVudEVmZmVjdGl2
ZSAmJiAhaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNo
ID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMgfHwgcmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxl
Y3RvckZhaWxzQ29tcGxldGVseSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6
OnVwZGF0ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogCiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIG5leHRDb250ZXh0
ID0gY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KG5leHRDb250ZXh0KTsKICAgICAgICAgICAgIGlm
ICghbmV4dENvbnRleHQuZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWls
cyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBuZXh0Q29udGV4dC5zZWxlY3RvcjsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICBNYXRjaCBtYXRjaCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFt
aWNQc2V1ZG8pOwotICAgICAgICAgICAgaWYgKG1hdGNoID09IFNlbGVjdG9yTWF0Y2hlcyB8fCBt
YXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2g7Ci0gICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzOworICAg
ICAgICAgICAgUHNldWRvSWRTZXQgaWdub3JlRHluYW1pY1BzZXVkbzsKKyAgICAgICAgICAgIE1h
dGNoUmVzdWx0IHJlc3VsdCA9IG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5
bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgQVNTRVJUKCFuZXh0Q29udGV4dC5wc2V1ZG9FbGVt
ZW50RWZmZWN0aXZlICYmICFpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF0Y2ggPT0gTWF0Y2g6OlNlbGVjdG9yTWF0Y2hlcyB8fCByZXN1bHQubWF0Y2ggPT0g
TWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KQorICAgICAgICAgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CisgICAg
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQWxs
U2libGluZ3MpOwogICAgICAgICB9CiAKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGph
Y2VudDoKQEAgLTMwOCw1NiArMzE4LDYwIEBAIHN0YXRpYyBTZWxlY3RvckNoZWNrZXI6OkNoZWNr
aW5nQ29udGV4dFdpdGhTdGF0dXMgY2hlY2tpbmdDb250ZXh0Rm9yUGFyZW50KGNvbnN0CiAKICAg
ICAgICAgICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGNvbnRleHQuZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0VsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxz
QWxsU2libGluZ3MpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBN
b2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQtPnNl
dEFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSgpOwogICAgICAgICAgICAgbmV4dENvbnRl
eHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAgICAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAg
ICAgICBuZXh0Q29udGV4dC5lbGVtZW50U3R5bGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAgICAg
ICAgICAgbmV4dENvbnRleHQuZWxlbWVudFN0eWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFBz
ZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OnVwZGF0ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwg
aWdub3JlRHluYW1pY1BzZXVkbyksIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoY29udGV4dC5yZXNvbHZp
bmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAgICAgY29udGV4dC5lbGVt
ZW50LT5zZXRTdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpOwogICAgICAgICBuZXh0
Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4
dENvbnRleHQuc2VsZWN0b3I7Ci0gICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IDA7
CisgICAgICAgIG5leHRDb250ZXh0LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENvbnRl
eHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAo
Y29udGV4dC5yZXNvbHZpbmdNb2RlID09IE1vZGU6OlJlc29sdmluZ1N0eWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZWxlbWVudC0+c2V0QWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxl
KCk7CiAKLSAgICAgICAgICAgIE1hdGNoIG1hdGNoID0gdGhpcy0+bWF0Y2hSZWN1cnNpdmVseShu
ZXh0Q29udGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gg
PT0gU2VsZWN0b3JNYXRjaGVzIHx8IG1hdGNoID09IFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncyB8
fCBtYXRjaCA9PSBTZWxlY3RvckZhaWxzQ29tcGxldGVseSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2g7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOwor
ICAgICAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gbWF0Y2hSZWN1cnNpdmVseShuZXh0Q29u
dGV4dCwgaWdub3JlRHluYW1pY1BzZXVkbyk7CisgICAgICAgICAgICBBU1NFUlQoIW5leHRDb250
ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgJiYgIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzIHx8IHJl
c3VsdC5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIHx8IHJlc3VsdC5t
YXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0Y2hUeXBlKHJlc3VsdCwgbWF0Y2hUeXBl
KTsKICAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5nczsK
KyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0Fs
bFNpYmxpbmdzKTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgogICAgICAg
ICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgYSBwc2V1ZG8t
ZWxlbWVudAogICAgICAgICAvLyBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3Igc2Nyb2xsYmFyIHBz
ZXVkbyBlbGVtZW50cyBhbmQgYWxsb3cgYSBzZXQgb2YgcHNldWRvIGNsYXNzZXMgKGJ1dCBub3Ro
aW5nIGVsc2UpCiAgICAgICAgIC8vIHRvIGZvbGxvdyB0aGUgcHNldWRvIGVsZW1lbnRzLgotICAg
ICAgICBuZXh0Q29udGV4dC5oYXNTY3JvbGxiYXJQc2V1ZG8gPSBoYXNTY3JvbGxiYXJQc2V1ZG9F
bGVtZW50KGR5bmFtaWNQc2V1ZG8pOwotICAgICAgICBuZXh0Q29udGV4dC5oYXNTZWxlY3Rpb25Q
c2V1ZG8gPSBkeW5hbWljUHNldWRvID09IFNFTEVDVElPTjsKLSAgICAgICAgaWYgKChjb250ZXh0
LmVsZW1lbnRTdHlsZSB8fCBjb250ZXh0LnJlc29sdmluZ01vZGUgPT0gTW9kZTo6Q29sbGVjdGlu
Z1J1bGVzKSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPCisgICAgICAgIG5leHRDb250ZXh0
Lmhhc1Njcm9sbGJhclBzZXVkbyA9IGhhc1Njcm9sbGJhclBzZXVkb0VsZW1lbnQoZHluYW1pY1Bz
ZXVkb0lkU2V0KTsKKyAgICAgICAgbmV4dENvbnRleHQuaGFzU2VsZWN0aW9uUHNldWRvID0gZHlu
YW1pY1BzZXVkb0lkU2V0LmhhcyhTRUxFQ1RJT04pOworICAgICAgICBpZiAoKGNvbnRleHQuZWxl
bWVudFN0eWxlIHx8IGNvbnRleHQucmVzb2x2aW5nTW9kZSA9PSBNb2RlOjpDb2xsZWN0aW5nUnVs
ZXMpICYmIGR5bmFtaWNQc2V1ZG9JZFNldAogICAgICAgICAgICAgJiYgIW5leHRDb250ZXh0Lmhh
c1NlbGVjdGlvblBzZXVkbwogICAgICAgICAgICAgJiYgIShuZXh0Q29udGV4dC5oYXNTY3JvbGxi
YXJQc2V1ZG8gJiYgbmV4dENvbnRleHQuc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzKSkKLSAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVs
eTsKLSAgICAgICAgcmV0dXJuIG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGR5bmFtaWNQ
c2V1ZG8pOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2Vs
ZWN0b3JGYWlsc0NvbXBsZXRlbHkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVwZGF0
ZVdpdGhNYXRjaFR5cGUobWF0Y2hSZWN1cnNpdmVseShuZXh0Q29udGV4dCwgZHluYW1pY1BzZXVk
b0lkU2V0KSwgbWF0Y2hUeXBlKTsKIAogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2Nl
bmRhbnQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIEVsZW1lbnQqIHNoYWRvd0hvc3ROb2RlID0g
Y29udGV4dC5lbGVtZW50LT5zaGFkb3dIb3N0KCk7CiAgICAgICAgICAgICBpZiAoIXNoYWRvd0hv
c3ROb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSk7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gc2hh
ZG93SG9zdE5vZGU7CiAgICAgICAgICAgICBuZXh0Q29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IG5leHRDb250ZXh0LnNlbGVjdG9yOwotICAgICAgICAgICAgbmV4dENvbnRleHQu
ZWxlbWVudFN0eWxlID0gMDsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaFJlY3Vyc2l2ZWx5KG5l
eHRDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgIG5leHRDb250ZXh0
LmVsZW1lbnRTdHlsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVE
eW5hbWljUHNldWRvOworICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRo
TWF0Y2hUeXBlKG1hdGNoUmVjdXJzaXZlbHkobmV4dENvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1
ZG8pLCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgIHJldHVybiBN
YXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5KTsKIH0KIAog
c3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0
b3JWYWx1ZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKQpAQCAtNDkyLDcgKzUwNiw3IEBAIHN0YXRpYyBi
b29sIGNhbk1hdGNoSG92ZXJPckFjdGl2ZUluUXVpcmtzTW9kZShjb25zdCBTZWxlY3RvckNoZWNr
ZXI6OkNoZWNraW5nQ29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkg
Y29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRl
eHRXaXRoU3RhdHVzJiBjb250ZXh0LCBQc2V1ZG9JZFNldCYgZHluYW1pY1BzZXVkb0lkU2V0LCBN
YXRjaFR5cGUmIG1hdGNoVHlwZSkgY29uc3QKIHsKICAgICBFbGVtZW50KiBjb25zdCAmIGVsZW1l
bnQgPSBjb250ZXh0LmVsZW1lbnQ7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2Vs
ZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAtNTMyLDEzICs1NDYsMTQgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNv
bnRleHQpIGNvbnN0CiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0g
Q1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIENo
ZWNraW5nQ29udGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAg
ICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgICAg
ICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHNlbGVjdG9yTGlz
dC0+Zmlyc3QoKTsKKyAgICAgICAgICAgICAgICBQc2V1ZG9JZFNldCBpZ25vcmVEeW5hbWljUHNl
dWRvOwogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgICAgICAgICAgICAg
IFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgICAgICAg
ICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9
PSBTZWxlY3Rvck1hdGNoZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlnbm9yZUR5
bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOworICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlY3Vy
c2l2ZWx5KHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8pLm1hdGNoID09IE1hdGNoOjpT
ZWxlY3Rvck1hdGNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpZ25vcmVEeW5h
bWljUHNldWRvKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIH0KICNlbHNlCkBAIC01NTEsNyArNTY2LDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQpIGNvbnN0
CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJjb250ZXh0LnNlbGVjdG9yLT5wc2V1ZG9DbGFz
c1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghY2hlY2tPbmUoc3ViY29udGV4dCkpCisgICAgICAgICAgICAgICAgLy8gU2luY2Ug
Om5vdCBjYW5ub3QgY29udGFpbiBwc2V1ZG8gZWxlbWVudHMsIHRoZXJlJ3Mgbm8gZWZmZWN0IG9u
IG1hdGNoZWRUb05vblBzZXVkb0VsZW1lbnQuCisgICAgICAgICAgICAgICAgTWF0Y2hUeXBlIGln
bm9yZU1hdGNoVHlwZSA9IE1hdGNoVHlwZTo6RWxlbWVudDsKKyAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrT25lKHN1YmNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGlnbm9yZU1hdGNoVG9O
b25Qc2V1ZG9FbGVtZW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5k
aWYKICAgICAgICAgICAgIH0KQEAgLTY2NywxNiArNjg0LDM0IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0KSBj
b25zdAogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0
KQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6Ci0gICAgICAg
ICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yLT5zZWxl
Y3Rvckxpc3QoKS0+Zmlyc3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0
b3JMaXN0OjpuZXh0KHN1YnNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgIENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgc3ViY29udGV4dChjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBzdWJj
b250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBz
dWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgc3ViY29u
dGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVGcmFnbWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICAg
ICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNl
dWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgaGFzTWF0Y2hlZEFueXRoaW5n
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFs
UHNldWRvRWxlbWVudE9ubHk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rv
ciogc3Vic2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCktPmZpcnN0KCk7IHN1YnNl
bGVjdG9yOyBzdWJzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3Rvcikp
IHsKKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJjb250
ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LmluRnVuY3Rpb25h
bFBzZXVkb0NsYXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3ViY29udGV4dC5wc2V1
ZG9FbGVtZW50RWZmZWN0aXZlID0gY29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlOworICAg
ICAgICAgICAgICAgICAgICBzdWJjb250ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CisgICAg
ICAgICAgICAgICAgICAgIHN1YmNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBz
dWJzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgUHNldWRvSWRTZXQgbG9jYWxEeW5hbWlj
UHNldWRvSWRTZXQ7CisgICAgICAgICAgICAgICAgICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IG1h
dGNoUmVjdXJzaXZlbHkoc3ViY29udGV4dCwgbG9jYWxEeW5hbWljUHNldWRvSWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNo
ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5wc2V1ZG9FbGVtZW50
RWZmZWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBwc2V1ZG8g
ZWxlbWVudHMgYXJlIG5vdCBlZmZlY3RpdmUgaW4gdGhpcyBmcmFnbWVudCAoZS5nLiBpdCdzIG5v
dCByaWdobW9zdCBmcmFnbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQn
cyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIGFsbCBzZWxlY3RvcnMgdG8gY29sbGVjdCBwc2V1ZG8g
ZWxlbWVudCBpZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFsb2NhbER5
bmFtaWNQc2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQubWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6RWxlbWVudCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaFR5cGUgPSBNYXRjaFR5cGU6OkVsZW1lbnQ7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG9JZFNldC5tZXJnZShsb2NhbER5bmFtaWNQ
c2V1ZG9JZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNNYXRjaGVkQW55dGhpbmcg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBoYXNNYXRjaGVkQW55dGhpbmc7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKQEAgLTc3MiwxMCArODA3LDExIEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBj
b250ZXh0KSBjb25zdAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENoZWNraW5nQ29u
dGV4dFdpdGhTdGF0dXMgc3ViQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgICAgICBzdWJD
b250ZXh0LmluRnVuY3Rpb25hbFBzZXVkb0NsYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBQ
c2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgICAgICAgICAg
c3ViQ29udGV4dC5wc2V1ZG9FbGVtZW50RWZmZWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5m
aXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9yID0gQ1NTU2Vs
ZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHN1YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNl
bGVjdG9yOwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250
ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAg
ICAgICAgICAgIFBzZXVkb0lkU2V0IGlnbm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YkNvbnRleHQsIGlnbm9yZUR5bmFtaWNQc2V1
ZG8pLm1hdGNoID09IE1hdGNoOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05
MjUsMTIgKzk2MSwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hl
Y2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCkgY29uc3QKICAgICBpZiAoc2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgc2VsZWN0b3ItPnBzZXVk
b0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWUpIHsKICAgICAg
ICAgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyBzdWJDb250ZXh0KGNvbnRleHQpOwogCi0gICAg
ICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICAgICAgY29u
c3QgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwogICAg
ICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgIHN1
YkNvbnRleHQuZmlyc3RTZWxlY3Rvck9mVGhlRnJhZ21lbnQgPSBzdWJDb250ZXh0LnNlbGVjdG9y
OwogICAgICAgICAgICAgc3ViQ29udGV4dC5pbkZ1bmN0aW9uYWxQc2V1ZG9DbGFzcyA9IHRydWU7
Ci0gICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJDb250ZXh0LCBpZ25vcmVEeW5h
bWljUHNldWRvKSA9PSBTZWxlY3Rvck1hdGNoZXMpCisgICAgICAgICAgICBzdWJDb250ZXh0LnBz
ZXVkb0VsZW1lbnRFZmZlY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIFBzZXVkb0lkU2V0IGln
bm9yZUR5bmFtaWNQc2V1ZG87CisgICAgICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShzdWJD
b250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JNYXRj
aGVzKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTk0NywxMCArOTg0LDExIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpt
YXRjaFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBiYXNlQ29u
CiAgICAgICAgIHN1YmNvbnRleHQuZWxlbWVudCA9ICZlbGVtZW50OwogICAgICAgICBzdWJjb250
ZXh0LnNlbGVjdG9yID0gc3Vic2VsZWN0b3I7CiAgICAgICAgIHN1YmNvbnRleHQuaW5GdW5jdGlv
bmFsUHNldWRvQ2xhc3MgPSB0cnVlOworICAgICAgICBzdWJjb250ZXh0LnBzZXVkb0VsZW1lbnRF
ZmZlY3RpdmUgPSBmYWxzZTsKICAgICAgICAgc3ViY29udGV4dC5maXJzdFNlbGVjdG9yT2ZUaGVG
cmFnbWVudCA9IHN1YnNlbGVjdG9yOwotICAgICAgICBQc2V1ZG9JZCBpZ25vcmVEeW5hbWljUHNl
dWRvID0gTk9QU0VVRE87Ci0gICAgICAgIGlmIChtYXRjaFJlY3Vyc2l2ZWx5KHN1YmNvbnRleHQs
IGlnbm9yZUR5bmFtaWNQc2V1ZG8pID09IFNlbGVjdG9yTWF0Y2hlcykgewotICAgICAgICAgICAg
QVNTRVJUKGlnbm9yZUR5bmFtaWNQc2V1ZG8gPT0gTk9QU0VVRE8pOworICAgICAgICBQc2V1ZG9J
ZFNldCBpZ25vcmVEeW5hbWljUHNldWRvOworICAgICAgICBpZiAobWF0Y2hSZWN1cnNpdmVseShz
dWJjb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvKS5tYXRjaCA9PSBNYXRjaDo6U2VsZWN0b3JN
YXRjaGVzKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlnbm9yZUR5bmFtaWNQc2V1ZG8pOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmgKaW5kZXggMjkwYmYxN2Y3OTE4ZTM4MDRjY2FkNTE0NWMyODQwODhkNGJl
OTk4OS4uMTYyM2NiMmMxNzUzNWZjMTJiNDA5YzA0OTAxMWViODM5MDk1MTIxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtNDMsNyArNDMsMzEgQEAKIAogY2xhc3MgU2Vs
ZWN0b3JDaGVja2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZWxlY3RvckNoZWNrZXIp
OwotICAgIGVudW0gTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXMsIFNlbGVjdG9yRmFpbHNMb2NhbGx5
LCBTZWxlY3RvckZhaWxzQWxsU2libGluZ3MsIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07Cisg
ICAgZW51bSBjbGFzcyBNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2Fs
bHksIFNlbGVjdG9yRmFpbHNBbGxTaWJsaW5ncywgU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgfTsK
KworICAgIGVudW0gY2xhc3MgTWF0Y2hUeXBlIHsgVmlydHVhbFBzZXVkb0VsZW1lbnRPbmx5LCBF
bGVtZW50IH07CisKKyAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgeworICAgICAgICBNYXRjaCBtYXRj
aDsKKyAgICAgICAgTWF0Y2hUeXBlIG1hdGNoVHlwZTsKKworICAgICAgICBzdGF0aWMgTWF0Y2hS
ZXN1bHQgbWF0Y2hlcyhNYXRjaFR5cGUgbWF0Y2hUeXBlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4geyBNYXRjaDo6U2VsZWN0b3JNYXRjaGVzLCBtYXRjaFR5cGUgfTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyBNYXRjaFJlc3VsdCB1cGRhdGVXaXRoTWF0Y2hUeXBlKE1hdGNo
UmVzdWx0IHJlc3VsdCwgTWF0Y2hUeXBlIG1hdGNoVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1hdGNoVHlwZSA9PSBNYXRjaFR5cGU6OlZpcnR1YWxQc2V1ZG9FbGVtZW50T25seSkK
KyAgICAgICAgICAgICAgICByZXN1bHQubWF0Y2hUeXBlID0gTWF0Y2hUeXBlOjpWaXJ0dWFsUHNl
dWRvRWxlbWVudE9ubHk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIE1hdGNoUmVzdWx0IGZhaWxzKE1hdGNoIG1hdGNoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4geyBtYXRjaCwgTWF0Y2hUeXBlOjpFbGVtZW50IH07CisgICAg
ICAgIH0KKyAgICB9OwogCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBNb2RlIDogdW5zaWduZWQg
Y2hhciB7CkBAIC04Myw4ICsxMDcsOCBAQCBjbGFzcyBTZWxlY3RvckNoZWNrZXIgewogICAgIHN0
YXRpYyB1bnNpZ25lZCBkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7
CiAKIHByaXZhdGU6Ci0gICAgTWF0Y2ggbWF0Y2hSZWN1cnNpdmVseShjb25zdCBDaGVja2luZ0Nv
bnRleHRXaXRoU3RhdHVzJiwgUHNldWRvSWQmKSBjb25zdDsKLSAgICBib29sIGNoZWNrT25lKGNv
bnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmKSBjb25zdDsKKyAgICBNYXRjaFJlc3VsdCBt
YXRjaFJlY3Vyc2l2ZWx5KGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBQc2V1ZG9J
ZFNldCYpIGNvbnN0OworICAgIGJvb2wgY2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0
aFN0YXR1cyYsIFBzZXVkb0lkU2V0JiwgTWF0Y2hUeXBlJikgY29uc3Q7CiAgICAgYm9vbCBtYXRj
aFNlbGVjdG9yTGlzdChjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiwgRWxlbWVudCYs
IGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpIGNvbnN0OwogCiAgICAgYm9vbCBjaGVja1Njcm9sbGJh
clBzZXVkb0NsYXNzKGNvbnN0IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmLCBjb25zdCBDU1NT
ZWxlY3RvciopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCmluZGV4IDk2NzZmODhhOWVkMGU4Y2VlNjY0YjU5MWM3NTQwOGMzMDdjMmQxNzUuLmFmOTQ4
MjM1YTE4ZDNlNTVkNWY0YzM1YmFlMDI2YzA4MGJhMDI0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTM3MCw3ICszNzAsOSBAQCBlbnVtIGNsYXNz
IEZyYWdtZW50c0xldmVsIHsKICAgICBJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlID0gMQogfTsKIAot
c3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3Iq
IHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlzdCYgc2Vs
ZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJik7CitlbnVtIGNs
YXNzIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yIHsgQ2FuTWF0Y2gsIE5ldmVyTWF0Y2gg
fTsKKworc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0LCBTZWxlY3RvckZyYWdtZW50TGlz
dCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5S
b290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiwgUHNl
dWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpOwogCiBzdGF0aWMgdm9pZCBjb21wdXRlQmFja3Ry
YWNraW5nSW5mb3JtYXRpb24oU2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRz
LCB1bnNpZ25lZCBsZXZlbCA9IDApOwogCkBAIC00NjAsNyArNDYyLDcgQEAgc3RhdGljIGlubGlu
ZSBGdW5jdGlvblR5cGUgYWRkU2Nyb2xsYmFyUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3QKICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5n
OwogfQogCi1zdGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29u
c3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2Vs
ZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZl
bCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50
cywgYm9vbCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUpCitz
dGF0aWMgaW5saW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3ImIHNlbGVjdG9yLCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0b3JDb250
ZXh0IHNlbGVjdG9yQ29udGV4dCwgRnJhZ21lbnRzTGV2ZWwgZnJhZ21lbnRMZXZlbCwgRnJhZ21l
bnRQb3NpdGlvbkluUm9vdEZyYWdtZW50cyBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgYm9vbCB2
aXNpdGVkTWF0Y2hFbmFibGVkLCBWaXNpdGVkTW9kZSYgdmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1l
bnRNYXRjaGluZ0JlaGF2aW9yIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yKQogewogICAg
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgdHlwZSA9IHNlbGVjdG9yLnBzZXVkb0NsYXNz
VHlwZSgpOwogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNjM0LDcgKzYzNiw3IEBAIHN0YXRpYyBp
bmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYg
c2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciog
c3Vic2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YnNlbGVjdG9yOyBzdWJzZWxl
Y3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJzZWxlY3RvcikpIHsKICAgICAgICAgICAg
ICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAgICAgICAg
ICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRNb2RlID0gVmlzaXRlZE1vZGU6
Ok5vbmU7Ci0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBj
b25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0b3JG
cmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3NpdGlv
bkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1vZGUp
OworICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gY29uc3Ry
dWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIHNlbGVjdG9yRnJhZ21l
bnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJv
b3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQc2V1
ZG9FbGVtZW50TWF0Y2hpbmdCZWhhdmlvcjo6TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6
Ok5vbmUsICI6dmlzaXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xh
c3NlcyIpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uVHlwZSkgewogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2Vy
OgpAQCAtNjY5LDcgKzY3MSw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVk
b0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgICAgICAg
ICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzdWJzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmly
c3QoKTsgc3Vic2VsZWN0b3I7IHN1YnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1
YnNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IHNlbGVj
dG9yRnJhZ21lbnRzOwogICAgICAgICAgICAgICAgIFZpc2l0ZWRNb2RlIGlnbm9yZVZpc2l0ZWRN
b2RlID0gVmlzaXRlZE1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGxv
Y2FsRnVuY3Rpb25UeXBlID0gY29uc3RydWN0RnJhZ21lbnRzKHN1YnNlbGVjdG9yLCBzZWxlY3Rv
ckNvbnRleHQsIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6SW5GdW5jdGlvbmFs
UHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZpc2l0ZWRNYXRjaEVuYWJsZWQs
IGlnbm9yZVZpc2l0ZWRNb2RlKTsKKyAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxG
dW5jdGlvblR5cGUgPSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29u
dGV4dCwgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1
ZG9UeXBlLCBwb3NpdGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdu
b3JlVmlzaXRlZE1vZGUsIFBzZXVkb0VsZW1lbnRNYXRjaGluZ0JlaGF2aW9yOjpOZXZlck1hdGNo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlnbm9yZVZpc2l0ZWRNb2Rl
ID09IFZpc2l0ZWRNb2RlOjpOb25lLCAiOnZpc2l0ZWQgaXMgZGlzYWJsZWQgaW4gdGhlIGZ1bmN0
aW9uYWwgcHNldWRvIGNsYXNzZXMiKTsKIAogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMg
aXMgbm90IHBzZXVkbyBjbGFzcyBmaWx0ZXIsIENhbm5vdE1hdGNoQW55dGhpbmcgaW1wbGllcyB0
aGlzIGZpbHRlciBhbHdheXMgcGFzc2VzLgpAQCAtNjkzLDcgKzY5NSw3IEBAIHN0YXRpYyBpbmxp
bmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2Vs
ZWN0b3IsIFNlbGVjCiAgICAgICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2Vs
ZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgcm9vdFNlbGVjdG9yOyBy
b290U2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocm9vdFNlbGVjdG9yKSkgewogICAg
ICAgICAgICAgICAgIFNlbGVjdG9yRnJhZ21lbnRMaXN0IGZyYWdtZW50TGlzdDsKICAgICAgICAg
ICAgICAgICBWaXNpdGVkTW9kZSBpZ25vcmVWaXNpdGVkTW9kZSA9IFZpc2l0ZWRNb2RlOjpOb25l
OwotICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBzdWJGdW5jdGlvblR5cGUgPSBjb25zdHJ1
Y3RGcmFnbWVudHMocm9vdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQsIGZyYWdtZW50TGlzdCwg
RnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9uSW5Sb290RnJh
Z21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSk7CisgICAgICAg
ICAgICAgICAgRnVuY3Rpb25UeXBlIHN1YkZ1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50
cyhyb290U2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMaXN0LCBGcmFnbWVudHNM
ZXZlbDo6SW5GdW5jdGlvbmFsUHNldWRvVHlwZSwgcG9zaXRpb25JblJvb3RGcmFnbWVudHMsIHZp
c2l0ZWRNYXRjaEVuYWJsZWQsIGlnbm9yZVZpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hp
bmdCZWhhdmlvcjo6TmV2ZXJNYXRjaCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShpZ25vcmVWaXNpdGVkTW9kZSA9PSBWaXNpdGVkTW9kZTo6Tm9uZSwgIjp2aXNpdGVkIGlz
IGRpc2FibGVkIGluIHRoZSBmdW5jdGlvbmFsIHBzZXVkbyBjbGFzc2VzIik7CiAKICAgICAgICAg
ICAgICAgICAvLyBTaW5jZSB0aGlzIGZyYWdtZW50IGFsd2F5cyB1bm1hdGNoIGFnYWluc3QgdGhl
IGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBhbnlGcmFnbWVudHMuCkBAIC03NTcsNyArNzU5
LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0
IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NT
U2VsZWN0b3IqIHN1YnNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJzZWxlY3Rv
cjsgc3Vic2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc3Vic2VsZWN0b3IpKSB7CiAg
ICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3Qgc2VsZWN0b3JGcmFnbWVudHM7CiAg
ICAgICAgICAgICAgICAgVmlzaXRlZE1vZGUgaWdub3JlVmlzaXRlZE1vZGUgPSBWaXNpdGVkTW9k
ZTo6Tm9uZTsKLSAgICAgICAgICAgICAgICBGdW5jdGlvblR5cGUgbG9jYWxGdW5jdGlvblR5cGUg
PSBjb25zdHJ1Y3RGcmFnbWVudHMoc3Vic2VsZWN0b3IsIHNlbGVjdG9yQ29udGV4dCwgc2VsZWN0
b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlLCBwb3Np
dGlvbkluUm9vdEZyYWdtZW50cywgdmlzaXRlZE1hdGNoRW5hYmxlZCwgaWdub3JlVmlzaXRlZE1v
ZGUpOworICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBsb2NhbEZ1bmN0aW9uVHlwZSA9IGNv
bnN0cnVjdEZyYWdtZW50cyhzdWJzZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0LCBzZWxlY3RvckZy
YWdtZW50cywgRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rpb25hbFBzZXVkb1R5cGUsIHBvc2l0aW9u
SW5Sb290RnJhZ21lbnRzLCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBpZ25vcmVWaXNpdGVkTW9kZSwg
cHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoaWdub3JlVmlzaXRlZE1vZGUgPT0gVmlzaXRlZE1vZGU6Ok5vbmUsICI6dmlz
aXRlZCBpcyBkaXNhYmxlZCBpbiB0aGUgZnVuY3Rpb25hbCBwc2V1ZG8gY2xhc3NlcyIpOwogCiAg
ICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBmcmFnbWVudCBuZXZlciBtYXRjaGVzIGFnYWlu
c3QgdGhlIGVsZW1lbnQsIGRvbid0IGluc2VydCBpdCB0byBtYXRjaGVzTGlzdC4KQEAgLTc2Nyw2
ICs3NjksMTAgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBl
KGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICAgICAgICAgICAgICBpZiAo
bG9jYWxGdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSBwc2V1ZG8gZWxlbWVudHMgaW5zaWRlIDpt
YXRjaGVzIGFyZSBzdXBwb3J0ZWQgaW4gbm9uLUpJVCBjb2RlLgorICAgICAgICAgICAgICAgIGlm
IChzZWxlY3RvckZyYWdtZW50cy5maXJzdCgpLnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKKwogICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0cmljdGl2ZUZ1bmN0aW9uVHlwZShm
dW5jdGlvblR5cGUsIGxvY2FsRnVuY3Rpb25UeXBlKTsKICAgICAgICAgICAgICAgICBtYXRjaGVz
TGlzdC5hcHBlbmQoc2VsZWN0b3JGcmFnbWVudHMpOwogICAgICAgICAgICAgfQpAQCAtODA1LDcg
KzgxMSw3IEBAIGlubGluZSBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OlNlbGVjdG9yQ29kZUdlbmVy
YXRvcihjb25zdCBDU1NTZWxlY3Rvciogcm9vdFNlbGVjCiAgICAgLy8gSW4gUXVlcnlTZWxlY3Rv
ciBjb250ZXh0LCA6dmlzaXRlZCBhbHdheXMgaGFzIG5vIGVmZmVjdCBkdWUgdG8gc2VjdXJpdHkg
aXNzdWVzLgogICAgIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCA9IHNlbGVjdG9yQ29udGV4dCAh
PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3I7CiAKLSAgICBtX2Z1bmN0aW9uVHlwZSA9
IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3Nl
bGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbklu
Um9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNpdGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRN
b2RlKTsKKyAgICBtX2Z1bmN0aW9uVHlwZSA9IGNvbnN0cnVjdEZyYWdtZW50cyhyb290U2VsZWN0
b3IsIG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZl
bDo6Um9vdCwgRnJhZ21lbnRQb3NpdGlvbkluUm9vdEZyYWdtZW50czo6UmlnaHRtb3N0LCB2aXNp
dGVkTWF0Y2hFbmFibGVkLCBtX3Zpc2l0ZWRNb2RlLCBQc2V1ZG9FbGVtZW50TWF0Y2hpbmdCZWhh
dmlvcjo6Q2FuTWF0Y2gpOwogICAgIGlmIChtX2Z1bmN0aW9uVHlwZSAhPSBGdW5jdGlvblR5cGU6
OkNhbm5vdENvbXBpbGUgJiYgbV9mdW5jdGlvblR5cGUgIT0gRnVuY3Rpb25UeXBlOjpDYW5ub3RN
YXRjaEFueXRoaW5nKQogICAgICAgICBjb21wdXRlQmFja3RyYWNraW5nSW5mb3JtYXRpb24obV9z
ZWxlY3RvckZyYWdtZW50cyk7CiB9CkBAIC04MjEsNyArODI3LDcgQEAgc3RhdGljIGJvb2wgaXNT
Y3JvbGxiYXJQc2V1ZG9FbGVtZW50KENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VHlwZSB0eXBl
KQogICAgIHJldHVybiB0eXBlID49IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFy
ICYmIHR5cGUgPD0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJUcmFja1BpZWNl
OwogfQogCi1zdGF0aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NT
ZWxlY3Rvciogcm9vdFNlbGVjdG9yLCBTZWxlY3RvckNvbnRleHQgc2VsZWN0b3JDb250ZXh0LCBT
ZWxlY3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMsIEZyYWdtZW50c0xldmVsIGZy
YWdtZW50TGV2ZWwsIEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHMgcG9zaXRpb25JblJv
b3RGcmFnbWVudHMsIGJvb2wgdmlzaXRlZE1hdGNoRW5hYmxlZCwgVmlzaXRlZE1vZGUmIHZpc2l0
ZWRNb2RlKQorc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RGcmFnbWVudHMoY29uc3QgQ1NT
U2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwg
U2VsZWN0b3JGcmFnbWVudExpc3QmIHNlbGVjdG9yRnJhZ21lbnRzLCBGcmFnbWVudHNMZXZlbCBm
cmFnbWVudExldmVsLCBGcmFnbWVudFBvc2l0aW9uSW5Sb290RnJhZ21lbnRzIHBvc2l0aW9uSW5S
b290RnJhZ21lbnRzLCBib29sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIFZpc2l0ZWRNb2RlJiB2aXNp
dGVkTW9kZSwgUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgcHNldWRvRWxlbWVudE1hdGNo
aW5nQmVoYXZpb3IpCiB7CiAgICAgU2VsZWN0b3JGcmFnbWVudCBmcmFnbWVudDsKICAgICBGcmFn
bWVudFJlbGF0aW9uIHJlbGF0aW9uVG9QcmV2aW91c0ZyYWdtZW50ID0gRnJhZ21lbnRSZWxhdGlv
bjo6UmlnaHRtb3N0OwpAQCAtODY2LDcgKzg3Miw3IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUgY29u
c3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVjdG9y
CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yICYmIGlzU2Ny
b2xsYmFyUHNldWRvRWxlbWVudChmcmFnbWVudC5wc2V1ZG9FbGVtZW50U2VsZWN0b3ItPnBzZXVk
b0VsZW1lbnRUeXBlKCkpKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZSA9IG1vc3RSZXN0
cmljdGl2ZUZ1bmN0aW9uVHlwZShmdW5jdGlvblR5cGUsIGFkZFNjcm9sbGJhclBzZXVkb0NsYXNz
VHlwZSgqc2VsZWN0b3IsIGZyYWdtZW50KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9u
VHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3RvciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29u
dGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24sIHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZp
c2l0ZWRNb2RlKSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gbW9zdFJlc3RyaWN0
aXZlRnVuY3Rpb25UeXBlKGZ1bmN0aW9uVHlwZSwgYWRkUHNldWRvQ2xhc3NUeXBlKCpzZWxlY3Rv
ciwgZnJhZ21lbnQsIHNlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnRMZXZlbCwgc3ViUG9zaXRpb24s
IHZpc2l0ZWRNYXRjaEVuYWJsZWQsIHZpc2l0ZWRNb2RlLCBwc2V1ZG9FbGVtZW50TWF0Y2hpbmdC
ZWhhdmlvcikpOwogICAgICAgICAgICAgaWYgKCFwc2V1ZG9DbGFzc09ubHlNYXRjaGVzTGlua3NJ
blF1aXJrc01vZGUoKnNlbGVjdG9yKSkKICAgICAgICAgICAgICAgICBmcmFnbWVudC5vbmx5TWF0
Y2hlc0xpbmtzSW5RdWlya3NNb2RlID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25U
eXBlID09IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSB8fCBmdW5jdGlvblR5cGUgPT0gRnVu
Y3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nKQpAQCAtODgwLDExICs4ODYsNiBAQCBzdGF0
aWMgRnVuY3Rpb25UeXBlIGNvbnN0cnVjdEZyYWdtZW50cyhjb25zdCBDU1NTZWxlY3Rvciogcm9v
dFNlbGVjdG9yLCBTZWxlY3RvcgogICAgICAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4dCA9PSBT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uVHlwZTo6Q2Fubm90TWF0Y2hBbnl0aGluZzsKIAotICAgICAgICAgICAgLy8gSW4gU2Vs
ZWN0b3JzIExldmVsIDQsIGEgcHNldWRvIGVsZW1lbnQgaW5zaWRlIGEgZnVuY3Rpb25hbCBwc2V1
ZG8gY2xhc3MgaXMgdW5kZWZpbmVkIChpc3N1ZSA3KS4KLSAgICAgICAgICAgIC8vIE1ha2UgaXQg
YXMgbWF0Y2hpbmcgZmFpbHVyZSB1bnRpbCB0aGUgc3BlYyBjbGFyaWZpZXMgdGhpcyBjYXNlLgot
ICAgICAgICAgICAgaWYgKGZyYWdtZW50TGV2ZWwgPT0gRnJhZ21lbnRzTGV2ZWw6OkluRnVuY3Rp
b25hbFBzZXVkb1R5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90TWF0Y2hBbnl0aGluZzsKLQogICAgICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRv
RWxlbWVudFR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudEFmdGVyOgogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEJl
Zm9yZToKQEAgLTkwMyw5ICs5MDQsMTMgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBjb25zdHJ1Y3RG
cmFnbWVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RTZWxlY3RvciwgU2VsZWN0b3IKICAgICAg
ICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgUkVTSVpFUiwgU0VMRUNUSU9OIGV0Yy4KICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBicmFuY2ggaW5jbHVkZXMg
Y3VzdG9tIHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25U
eXBlOjpDYW5ub3RDb21waWxlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAocHNl
dWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3IgPT0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZp
b3I6Ok5ldmVyTWF0Y2gpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fu
bm90TWF0Y2hBbnl0aGluZzsKKwogICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gRnVuY3Rpb25U
eXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTk1NCwxMiArOTU5LDE1IEBAIHN0YXRpYyBGdW5jdGlvblR5cGUg
Y29uc3RydWN0RnJhZ21lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiByb290U2VsZWN0b3IsIFNlbGVj
dG9yCiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIH0K
IAorICAgICAgICAvLyBWaXJ0dWFsIHBzZXVkbyBlbGVtZW50IGlzIG9ubHkgZWZmZWN0aXZlIGlu
IHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCisgICAgICAgIHBzZXVkb0VsZW1lbnRNYXRjaGluZ0Jl
aGF2aW9yID0gUHNldWRvRWxlbWVudE1hdGNoaW5nQmVoYXZpb3I6Ok5ldmVyTWF0Y2g7CisKICAg
ICAgICAgZnJhZ21lbnQucmVsYXRpb25Ub0xlZnRGcmFnbWVudCA9IGZyYWdtZW50UmVsYXRpb25G
b3JTZWxlY3RvclJlbGF0aW9uKHJlbGF0aW9uKTsKICAgICAgICAgZnJhZ21lbnQucmVsYXRpb25U
b1JpZ2h0RnJhZ21lbnQgPSByZWxhdGlvblRvUHJldmlvdXNGcmFnbWVudDsKICAgICAgICAgZnJh
Z21lbnQucG9zaXRpb25JblJvb3RGcmFnbWVudHMgPSBwb3NpdGlvbkluUm9vdEZyYWdtZW50czsK
ICAgICAgICAgcmVsYXRpb25Ub1ByZXZpb3VzRnJhZ21lbnQgPSBmcmFnbWVudC5yZWxhdGlvblRv
TGVmdEZyYWdtZW50OwogCi0gICAgICAgIGlmIChmcmFnbWVudExldmVsID09IEZyYWdtZW50c0xl
dmVsOjpJbkZ1bmN0aW9uYWxQc2V1ZG9UeXBlKQorICAgICAgICBpZiAoZnJhZ21lbnRMZXZlbCAh
PSBGcmFnbWVudHNMZXZlbDo6Um9vdCkKICAgICAgICAgICAgIGZyYWdtZW50Lm9ubHlNYXRjaGVz
TGlua3NJblF1aXJrc01vZGUgPSBmYWxzZTsKICAgICAgICAgc2VsZWN0b3JGcmFnbWVudHMuYXBw
ZW5kKGZyYWdtZW50KTsKICAgICAgICAgZnJhZ21lbnQgPSBTZWxlY3RvckZyYWdtZW50KCk7CkBA
IC0yODU4LDcgKzI4NjYsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtZW50RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JgogICAgIGZ1bmN0aW9u
Q2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzcyk7CiAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2Vt
Ymxlcjo6WmVybykpOwogfQotICAgIAorCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVDb250ZXh0RnVuY3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJl
Q2FzZXMsIEpTQzo6RnVuY3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRl
UmVnaXN0ZXIoKTsKQEAgLTM1NTYsMTYgKzM1NjQsMTEgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoZXNNYXRjaGVzUHNldWRvQ2xhc3MoQXNzZW1ibGVy
OjoKICAgICB9CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRIYXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0Jiwg
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgQVNTRVJUKGZyYWdtZW50
LnBzZXVkb0VsZW1lbnRTZWxlY3Rvcik7CisgICAgQVNTRVJUX1VOVVNFRChmcmFnbWVudCwgZnJh
Z21lbnQucHNldWRvRWxlbWVudFNlbGVjdG9yKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
c2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvciwgIldoZW4g
dGhlIGZyYWdtZW50IGhhcyBwc2V1ZG8gZWxlbWVudCwgdGhlIHNlbGVjdG9yIGJlY29tZXMgQ2Fu
bm90TWF0Y2hBbnl0aGluZyBmb3IgUXVlcnlTZWxlY3RvciBhbmQgdGhpcyB0ZXN0IGZ1bmN0aW9u
IGlzIG5vdCBjYWxsZWQuIik7Ci0KLSAgICBpZiAoIWZyYWdtZW50TWF0Y2hlc1RoZVJpZ2h0bW9z
dEVsZW1lbnQobV9zZWxlY3RvckNvbnRleHQsIGZyYWdtZW50KSkgewotICAgICAgICBMb2NhbFJl
Z2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKLSAgICAgICAgbG9h
ZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOwotICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKGJyYW5jaE9uUmVzb2x2aW5nTW9kZVdpdGhDaGVja2luZ0NvbnRleHQoQXNzZW1ibGVy
OjpFcXVhbCwgU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSwgY2hlY2tpbmdD
b250ZXh0KSk7Ci0gICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKGZyYWdtZW50
LCBmcmFnbWVudE1hdGNoZXNUaGVSaWdodG1vc3RFbGVtZW50KG1fc2VsZWN0b3JDb250ZXh0LCBm
cmFnbWVudCksICJWaXJ0dWFsIHBzZXVkbyBlbGVtZW50cyBoYW5kbGluZyBpcyBvbmx5IGVmZmVj
dGl2ZSBpbiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LiBJZiB0aGUgY3VycmVudCBmcmFnbWVudCBp
cyBub3QgcmlnaHRtb3N0IGZyYWdtZW50LCBDU1MgSklUIGNvbXBpbGVyIG1ha2VzIGl0IENhbm5v
dE1hdGNoQW55dGhpbmcgaW4gZnJhZ21lbnQgY29uc3RydWN0aW9uIHBoYXNlLCBzbyBuZXZlciBy
ZWFjaCBoZXJlLiIpOwogfQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVS
ZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQoQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFn
bWVudCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNmNjYTViNzk1NDRhNGIy
ODQwMTk4YmUxOTMxMzJhNDVmMmNhZGIxYS4uZGJiZGExZmQ4NjA0YjJkMzEyM2VhOWE1YjFiNjc2
MDY2YTljMzVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgKQEAgLTIzNCw2ICsyMzQsMTQgQEAgY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZD
b3VudGVkPFJlbmRlclN0eWxlPiB7CiAgICAgICAgICAgICBBU1NFUlQocHNldWRvIDwgRklSU1Rf
SU5URVJOQUxfUFNFVURPSUQpOwogICAgICAgICAgICAgbV9mbGFncyB8PSBvbmVCaXRNYXNrIDw8
IChwc2V1ZG9CaXRzT2Zmc2V0IC0gMSArIHBzZXVkbyk7CiAgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBzZXRIYXNQc2V1ZG9TdHlsZXMoUHNldWRvSWRTZXQgcHNldWRvSWRTZXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChwc2V1ZG9JZFNldCk7CisgICAgICAgICAgICB1aW50NjRfdCBy
YXdQc2V1ZG9JZFNldCA9IHBzZXVkb0lkU2V0LmRhdGEoKTsKKyAgICAgICAgICAgIEFTU0VSVCgo
cmF3UHNldWRvSWRTZXQgJiBQVUJMSUNfUFNFVURPSURfTUFTSykgPT0gcmF3UHNldWRvSWRTZXQp
OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChwc2V1ZG9CaXRzT2Zmc2V0ID49IDEsICIocHNl
dWRvQml0c09mZnNldCAtIDEpIHNob3VsZCBiZSB2YWxpZC4iKTsKKyAgICAgICAgICAgIG1fZmxh
Z3MgfD0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYXdQc2V1ZG9JZFNldCkgPDwgKHBzZXVkb0Jp
dHNPZmZzZXQgLSAxKSk7CisgICAgICAgIH0KIAogICAgICAgICBFVGFibGVMYXlvdXQgdGFibGVM
YXlvdXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGFibGVMYXlvdXQ+KGdldFZhbHVl
KHRhYmxlTGF5b3V0Qml0TWFzaywgdGFibGVMYXlvdXRPZmZzZXQpKTsgfQogICAgICAgICB2b2lk
IHNldFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB0YWJsZUxheW91dCkgeyB1cGRhdGVWYWx1ZSh0
YWJsZUxheW91dCwgdGFibGVMYXlvdXRCaXRNYXNrLCB0YWJsZUxheW91dE9mZnNldCk7IH0KQEAg
LTU2MSw2ICs1NjksNyBAQCBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVu
ZGVyU3R5bGU+IHsKICAgICBib29sIGhhc0FueVB1YmxpY1BzZXVkb1N0eWxlcygpIGNvbnN0Owog
ICAgIGJvb2wgaGFzUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvKSBjb25zdDsKICAgICB2b2lk
IHNldEhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbyk7CisgICAgdm9pZCBzZXRIYXNQc2V1
ZG9TdHlsZXMoUHNldWRvSWRTZXQpOwogICAgIGJvb2wgaGFzVW5pcXVlUHNldWRvU3R5bGUoKSBj
b25zdDsKIAogICAgIC8vIGF0dHJpYnV0ZSBnZXR0ZXIgbWV0aG9kcwpAQCAtMjE2OSw2ICsyMTc4
LDExIEBAIGlubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1ZG9J
ZCBwc2V1ZG8pCiAgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1BzZXVkb1N0eWxlKHBzZXVk
byk7CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZXMoUHNl
dWRvSWRTZXQgcHNldWRvSWRTZXQpCit7CisgICAgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1Bz
ZXVkb1N0eWxlcyhwc2V1ZG9JZFNldCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFJlbmRlclN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXggMmE0YWVmNWJlNzQ4MGUyMDAz
NjFiMzgyMmFiMDgzZDc1YzBhMzU4ZC4uNTgyZjlhOWM2NWY2OTFhYjVjYTE2MDBlOGM1NTA5Mjk4
MTAwODk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlQ29uc3RhbnRzLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgUmVuZGVyU3R5
bGVDb25zdGFudHNfaAogI2RlZmluZSBSZW5kZXJTdHlsZUNvbnN0YW50c19oCiAKKyNpbmNsdWRl
IDxpbml0aWFsaXplcl9saXN0PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25z
dCBzaXplX3QgUHJpbnRDb2xvckFkanVzdEJpdHMgPSAxOwpAQCAtODAsNiArODIsNjcgQEAgZW51
bSBQc2V1ZG9JZCA6IHVuc2lnbmVkIGNoYXIgewogICAgIFBVQkxJQ19QU0VVRE9JRF9NQVNLID0g
KCgxIDw8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKSAtIDEpICYgfigoMSA8PCBGSVJTVF9QVUJM
SUNfUFNFVURPSUQpIC0gMSkKIH07CiAKK2NsYXNzIFBzZXVkb0lkU2V0IHsKK3B1YmxpYzoKKyAg
ICBQc2V1ZG9JZFNldCgpCisgICAgICAgIDogbV9kYXRhKDApCisgICAgeworICAgIH0KKworICAg
IFBzZXVkb0lkU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxQc2V1ZG9JZD4gaW5pdGlhbGl6ZXJM
aXN0KQorICAgICAgICA6IG1fZGF0YSgwKQorICAgIHsKKyAgICAgICAgZm9yIChQc2V1ZG9JZCBw
c2V1ZG9JZCA6IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgICAgIGFkZChwc2V1ZG9JZCk7Cisg
ICAgfQorCisgICAgc3RhdGljIFBzZXVkb0lkU2V0IGZyb21NYXNrKHVuc2lnbmVkIHJhd1BzZXVk
b0lkU2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBzZXVkb0lkU2V0KHJhd1BzZXVkb0lkU2V0
KTsKKyAgICB9CisKKyAgICBib29sIGhhcyhQc2V1ZG9JZCBwc2V1ZG9JZCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVCgoc2l6ZW9mKG1fZGF0YSkgKiA4KSA+IHBzZXVkb0lkKTsKKyAgICAg
ICAgcmV0dXJuIG1fZGF0YSAmICgxVSA8PCBwc2V1ZG9JZCk7CisgICAgfQorCisgICAgdm9pZCBh
ZGQoUHNldWRvSWQgcHNldWRvSWQpCisgICAgeworICAgICAgICBBU1NFUlQoKHNpemVvZihtX2Rh
dGEpICogOCkgPiBwc2V1ZG9JZCk7CisgICAgICAgIG1fZGF0YSB8PSAoMVUgPDwgcHNldWRvSWQp
OworICAgIH0KKworICAgIHZvaWQgbWVyZ2UoUHNldWRvSWRTZXQgc291cmNlKQorICAgIHsKKyAg
ICAgICAgbV9kYXRhIHw9IHNvdXJjZS5tX2RhdGE7CisgICAgfQorCisgICAgUHNldWRvSWRTZXQg
b3BlcmF0b3IgJihjb25zdCBQc2V1ZG9JZFNldCYgcHNldWRvSWRTZXQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gUHNldWRvSWRTZXQobV9kYXRhICYgcHNldWRvSWRTZXQubV9kYXRhKTsK
KyAgICB9CisKKyAgICBQc2V1ZG9JZFNldCBvcGVyYXRvciB8KGNvbnN0IFBzZXVkb0lkU2V0JiBw
c2V1ZG9JZFNldCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBQc2V1ZG9JZFNldChtX2Rh
dGEgfCBwc2V1ZG9JZFNldC5tX2RhdGEpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Citwcml2YXRlOgorICAg
IGV4cGxpY2l0IFBzZXVkb0lkU2V0KHVuc2lnbmVkIHJhd1BzZXVkb0lkU2V0KQorICAgICAgICA6
IG1fZGF0YShyYXdQc2V1ZG9JZFNldCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9k
YXRhOworfTsKKwogZW51bSBDb2x1bW5GaWxsIHsgQ29sdW1uRmlsbEJhbGFuY2UsIENvbHVtbkZp
bGxBdXRvIH07CiAKIGVudW0gQ29sdW1uU3BhbiB7IENvbHVtblNwYW5Ob25lID0gMCwgQ29sdW1u
U3BhbkFsbCB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGMyODU4ZTQ0ODg1M2MxOGQ5YTM4NWE1NzgzYjg4ODVhM2JhMzRh
ZTkuLjZmNTU4NGY5NjZiYTJkZGFkZjgyNjA5OThhZGNjMjAyZDAyMjdmMzIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNC0xMS0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDU1M0IFNlbGVjdG9yczogQWRkIG11bHRpcGxlIHBzZXVkbyBlbGVt
ZW50cyBzdXBwb3J0IHRvIDptYXRjaGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzgyMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1y
aWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
c2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWw6
IEFkZGVkLgorICAgICAgICBJbiB0aGlzIHRlc3QsIHdlIGVuc3VyZSB0aGF0IHBzZXVkbyBlbGVt
ZW50cyBzZWxlY3RvciBpbiB0aGUKKyAgICAgICAgbm9uLXJpZ2h0bW9zdCBmcmFnbWVudHMgYmVj
b21lcyB1bm1hdGNoZWQuCisgICAgICAgICogZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQt
aW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zZWxl
Y3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9zZWxlY3RvcnMvaWdub3JlLXBzZXVkby1lbGVtZW50LWluc2lkZS1ub24tcmlnaHRt
b3N0LWZyYWdtZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0
b3JzL2lnbm9yZS1wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMu
aHRtbDogQWRkZWQuCisKIDIwMTQtMTEtMTAgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIHBhcnNpbmcgc3VwcG9ydCBmb3IgdGhlIGV4dGVuZGVk
IDpudGgtbGFzdC1jaGlsZChBbitCIG9mIHNlbGVjdG9yLWxpc3QpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9pZ25vcmUtcHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1y
aWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0
b3JzL2lnbm9yZS1wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhZWU1MWQ4MjVhMjU4NDBmNjg1ZjMxZDdiYThiNWFk
MDYwYzU0YjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9p
Z25vcmUtcHNldWRvLWVsZW1lbnQtaW5zaWRlLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitJZ25vcmUgcHNldWRvIGVsZW1lbnRzIGluc2lkZSBu
b24tcmlnaHRtb3N0IGZyYWdtZW50cyB3aGVuIGNvbGxlY3RpbmcgcnVsZXMgZm9yIGEgbm9kZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgd2luZG93LmdldE1hdGNoZWRD
U1NSdWxlcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGNhc2UxJyksICcnKSBpcyBudWxs
CitQQVNTIHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3RjYXNlMicpLCAnJykgaXMgbnVsbAorUEFTUyB3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVz
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Y2FzZTEnKSwgJzo6YWZ0ZXInKSBpcyBudWxs
CitQQVNTIHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3RjYXNlMicpLCAnOjphZnRlcicpIGlzIG51bGwKK1BBU1Mgd2luZG93LmdldE1hdGNoZWRD
U1NSdWxlcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGNhc2UxJyksICc6OmJlZm9yZScp
IGlzIG51bGwKK1BBU1Mgd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGVzdGNhc2UyJyksICc6OmJlZm9yZScpIGlzIG51bGwKK1BBU1Mgd2luZG93Lmdl
dE1hdGNoZWRDU1NSdWxlcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGNhc2UxJyksICc6
OmZpcnN0LWxldHRlcicpIGlzIG51bGwKK1BBU1Mgd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGNhc2UyJyksICc6OmZpcnN0LWxldHRlcicpIGlz
IG51bGwKK1BBU1Mgd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndGVzdGNhc2UxJyksICc6OmZpcnN0LWxpbmUnKSBpcyBudWxsCitQQVNTIHdpbmRvdy5n
ZXRNYXRjaGVkQ1NTUnVsZXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RjYXNlMicpLCAn
OjpmaXJzdC1saW5lJykgaXMgbnVsbAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3Jz
L2lnbm9yZS1wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL2lnbm9yZS1wc2V1ZG8tZWxlbWVudC1pbnNp
ZGUtbm9uLXJpZ2h0bW9zdC1mcmFnbWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjBiN2VhYTY2YTk0
NjA2M2E2MTQ1MTZmMDBlNjE2YzBlODYwMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9zZWxlY3RvcnMvaWdub3JlLXBzZXVkby1lbGVtZW50LWluc2lkZS1ub24tcmlnaHRt
b3N0LWZyYWdtZW50cy5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHN0eWxlPgorI3N1aXRlOjphZnRlciAjdGVzdGNhc2UxLAorI3N1aXRlOjpi
ZWZvcmUgI3Rlc3RjYXNlMSwKKyNzdWl0ZTo6Zmlyc3QtbGV0dGVyICN0ZXN0Y2FzZTEsCisjc3Vp
dGU6OmZpcnN0LWxpbmUgI3Rlc3RjYXNlMQoreworICAgIGNvbG9yOiByZWQ7Cit9CisKKyNzdWl0
ZTptYXRjaGVzKDo6YWZ0ZXIsIDo6YmVmb3JlLCA6OmZpcnN0LWxldHRlciwgOjpmaXJzdC1saW5l
KSAjdGVzdGNhc2UyIHsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0ic3VpdGUiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorPHAgaWQ9InRlc3Rj
YXNlMSI+Q29jb2E8L3A+Cis8cCBpZD0idGVzdGNhc2UyIj5DYXBwdWNjaW5vPC9wPgorPC9kaXY+
Cis8L2JvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ0lnbm9yZSBwc2V1ZG8gZWxlbWVudHMg
aW5zaWRlIG5vbi1yaWdodG1vc3QgZnJhZ21lbnRzIHdoZW4gY29sbGVjdGluZyBydWxlcyBmb3Ig
YSBub2RlLicpOworCit2YXIgcHNldWRvSWRzID0gWworICAgICIiLAorICAgICI6OmFmdGVyIiwK
KyAgICAiOjpiZWZvcmUiLAorICAgICI6OmZpcnN0LWxldHRlciIsCisgICAgIjo6Zmlyc3QtbGlu
ZSIsCitdOworCisvLyBTaG91bGQgbm90IGNvbGxlY3QgcnVsZXMgdGhhdCBzZWxlY3RvciBoYXMg
cHNldWRvLWVsZW1lbnQgaW5zaWRlIG5vbi1yaWdodG1vc3QgZnJhZ21lbnQsCisvLyBldmVuIGlm
IGV4ZWN1dGluZyB3aXRoIENvbGxlY3RpbmdSdWxlcyAmIENvbGxlY3RpbmdSdWxlc0lnbm9yaW5n
VmlydHVhbFBzZXVkb0VsZW1lbnRzLgorcHNldWRvSWRzLmZvckVhY2goZnVuY3Rpb24gKHBzZXVk
b0lkKSB7CisgICAgc2hvdWxkQmUoIndpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3Rlc3RjYXNlMScpLCAnIiArIHBzZXVkb0lkICsgIicpIiwgIm51bGwi
KTsKKyAgICBzaG91bGRCZSgid2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdGNhc2UyJyksICciICsgcHNldWRvSWQgKyAiJykiLCAibnVsbCIpOwor
fSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Vs
ZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLWV4cGVjdGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24t
cmlnaHRtb3N0LWZyYWdtZW50cy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MDg2NjhkOTI4
NzdmMGM3ZDE4MWJlYjQzMmFjZWU4ZmJjMDEzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbi1ub24tcmlnaHRtb3N0LWZyYWdt
ZW50cy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy50YXJnZXQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxp
bWU7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2PgorICAgIDxwIGNsYXNzPSJ0
YXJnZXQiIGlkPSJ0YXJnZXQxIj5UaGlzIGxpbmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8
cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0MiI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48
L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDMiPlRoaXMgbGluZSBzaG91bGQg
YmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQ0Ij5UaGlzIGxp
bmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW4tbm9uLXJp
Z2h0bW9zdC1mcmFnbWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVk
by1lbGVtZW50LWluLW5vbi1yaWdodG1vc3QtZnJhZ21lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFi
MDM0NWE5NjMzOGYxYjhmNmFlOWFkNjczMzAzODk2NDhlODE5MwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3BzZXVkby1lbGVtZW50LWluLW5vbi1yaWdodG1v
c3QtZnJhZ21lbnRzLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHN0eWxlPgorLnRhcmdldCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGlt
ZTsKK30KKworOjphZnRlciAjdGFyZ2V0MSwKKzo6YmVmb3JlICN0YXJnZXQxLAorOjpmaXJzdC1s
aW5lICN0YXJnZXQxLAorOjpmaXJzdC1sZXR0ZXIgI3RhcmdldDEsCis6Oi13ZWJraXQtcmVzaXpl
ciAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXIgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Ny
b2xsYmFyLWJ1dHRvbiAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyICN0YXJn
ZXQxLAorOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiAjdGFyZ2V0MSwKKzo6LXdlYmtpdC1zY3Jv
bGxiYXItdHJhY2sgI3RhcmdldDEsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlICN0
YXJnZXQxLAorOjpzZWxlY3Rpb24gI3RhcmdldDEKK3sKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
ZWQ7Cit9CisKKzo6YWZ0ZXIgPiAjdGFyZ2V0MiwKKzo6YmVmb3JlID4gI3RhcmdldDIsCis6OmZp
cnN0LWxpbmUgPiAjdGFyZ2V0MiwKKzo6Zmlyc3QtbGV0dGVyID4gI3RhcmdldDIsCis6Oi13ZWJr
aXQtcmVzaXplciA+ICN0YXJnZXQyLAorOjotd2Via2l0LXNjcm9sbGJhciA+ICN0YXJnZXQyLAor
Ojotd2Via2l0LXNjcm9sbGJhci1idXR0b24gPiAjdGFyZ2V0MiwKKzo6LXdlYmtpdC1zY3JvbGxi
YXItY29ybmVyID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iID4gI3Rhcmdl
dDIsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrID4gI3RhcmdldDIsCis6Oi13ZWJraXQtc2Ny
b2xsYmFyLXRyYWNrLXBpZWNlID4gI3RhcmdldDIsCis6OnNlbGVjdGlvbiA+ICN0YXJnZXQyCit7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6OmFmdGVyICsgI3RhcmdldDMsCis6
OmJlZm9yZSArICN0YXJnZXQzLAorOjpmaXJzdC1saW5lICsgI3RhcmdldDMsCis6OmZpcnN0LWxl
dHRlciArICN0YXJnZXQzLAorOjotd2Via2l0LXJlc2l6ZXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtp
dC1zY3JvbGxiYXIgKyAjdGFyZ2V0MywKKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uICsgI3Rh
cmdldDMsCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciArICN0YXJnZXQzLAorOjotd2Via2l0
LXNjcm9sbGJhci10aHVtYiArICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjayAr
ICN0YXJnZXQzLAorOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSArICN0YXJnZXQzLAor
OjpzZWxlY3Rpb24gKyAjdGFyZ2V0MworeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKK30K
KworOjphZnRlciB+ICN0YXJnZXQ0LAorOjpiZWZvcmUgfiAjdGFyZ2V0NCwKKzo6Zmlyc3QtbGlu
ZSB+ICN0YXJnZXQ0LAorOjpmaXJzdC1sZXR0ZXIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1yZXNp
emVyIH4gI3RhcmdldDQsCis6Oi13ZWJraXQtc2Nyb2xsYmFyIH4gI3RhcmdldDQsCis6Oi13ZWJr
aXQtc2Nyb2xsYmFyLWJ1dHRvbiB+ICN0YXJnZXQ0LAorOjotd2Via2l0LXNjcm9sbGJhci1jb3Ju
ZXIgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgfiAjdGFyZ2V0NCwKKzo6
LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgfiAjdGFyZ2V0NCwKKzo6LXdlYmtpdC1zY3JvbGxiYXIt
dHJhY2stcGllY2UgfiAjdGFyZ2V0NCwKKzo6c2VsZWN0aW9uIH4gI3RhcmdldDQKK3sKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXY+CisgICAgPHAgY2xhc3M9InRhcmdldCIgaWQ9InRhcmdldDEiPlRoaXMgbGluZSBzaG91bGQg
YmUgZ3JlZW4uPC9wPgorICAgIDxwIGNsYXNzPSJ0YXJnZXQiIGlkPSJ0YXJnZXQyIj5UaGlzIGxp
bmUgc2hvdWxkIGJlIGdyZWVuLjwvcD4KKyAgICA8cCBjbGFzcz0idGFyZ2V0IiBpZD0idGFyZ2V0
MyI+VGhpcyBsaW5lIHNob3VsZCBiZSBncmVlbi48L3A+CisgICAgPHAgY2xhc3M9InRhcmdldCIg
aWQ9InRhcmdldDQiPlRoaXMgbGluZSBzaG91bGQgYmUgZ3JlZW4uPC9wPgorPC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1
ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZWE2Zjc2MDU1ZWE0ODU5NjdkZjAyZDcxYzUzNWYwMWM3ZTdlMmMyCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQt
aW5zaWRlLW1hdGNoZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDc1IEBACis8IWRvY3R5cGUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTo6Zmlyc3QtbGV0dGVyIHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0Mjo6YWZ0ZXIgeworICAg
IGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImNvY29hIjsKK30KKworI3Rh
cmdldDM6OmJlZm9yZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50
OiAiY2FwcHVjY2lubyI7Cit9CisKKyN0YXJnZXQ0OjpiZWZvcmUsCisjdGFyZ2V0NDo6YWZ0ZXIg
eworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7Cit9
CisKKyN0YXJnZXQ1LAorI3RhcmdldDU6OmZpcnN0LWxldHRlciB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogbGltZTsKK30KKworI3RhcmdldDYsCisjdGFyZ2V0Njo6Zmlyc3QtbGV0dGVyIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NywKKyN0YXJnZXQ3OjpiZWZv
cmUsCisjdGFyZ2V0Nzo6YWZ0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAg
Y29udGVudDogImFyb3VuZCI7Cit9CisKKy8qIGZpcnN0IGxldHRlciBvZiBiZWZvcmUgY29udGVu
dCBpcyBjb2xvcmVkIGJsdWUuICovCisjdGFyZ2V0MTI6OmFmdGVyLAorI3RhcmdldDEyOjpiZWZv
cmUgeworICAgIGJhY2tncm91bmQtY29sb3I6IGxpbWU7CisgICAgY29udGVudDogImFyb3VuZCI7
Cit9CisKKyN0YXJnZXQxMjo6Zmlyc3QtbGV0dGVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBi
bHVlOworfQorCisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAgaWQ9
InRhcmdldDEiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4K
KyAgICA8cCBpZD0idGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBl
ZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1h
dGNoZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVkbyBlbGVtZW50
IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NSI+cHNl
dWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3RvcnMg
c2hvdWxkIGJlIGNoZWNrZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxlbWVu
dCBpbnNpZGUgbmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAg
aWQ9InRhcmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91bGQgYmUg
Y29sb3JlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6
bm90IGRvZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5Ij46OmZpcnN0
LWxpbmUgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+CisgICAg
PHAgaWQ9InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1vc3Qg
ZnJhZ21lbnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDExIj5wc2V1
ZG8gZWxlbWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0Y2hlcyBhbHdh
eXMgdW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9hZnRlciBjb250
ZW50cyBhcmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQg
aXMgY29sb3JlZCBibHVlLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1yaWdodG1vc3Qg
cHNldWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDE0Ij48
cD5ub24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKyAg
ICA8cCBpZD0idGFyZ2V0MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5v
IGVmZmVjdC48L3A+PC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9wc2V1ZG8tZWxlbWVudC1pbnNpZGUtbWF0Y2hlcy5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNldWRvLWVsZW1lbnQtaW5zaWRlLW1h
dGNoZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjFkMWJiMTNhOGM2YThjMzhjNmNkYjhmMTQ5MGZiMGRi
MDkyZmYxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcHNl
dWRvLWVsZW1lbnQtaW5zaWRlLW1hdGNoZXMuaHRtbApAQCAtMCwwICsxLDk3IEBACis8IWRvY3R5
cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjdGFyZ2V0MTptYXRjaGVzKDo6Zmly
c3QtbGV0dGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3RhcmdldDI6
bWF0Y2hlcyg6OmFmdGVyKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250
ZW50OiAiY29jb2EiOworfQorCisjdGFyZ2V0MzptYXRjaGVzKDo6YmVmb3JlKSB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiY2FwcHVjY2lubyI7Cit9CisKKyN0
YXJnZXQ0Om1hdGNoZXMoOjpiZWZvcmUsIDo6YWZ0ZXIpIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBsaW1lOworICAgIGNvbnRlbnQ6ICJhcm91bmQiOworfQorCisjdGFyZ2V0NTptYXRjaGVzKDo6
Zmlyc3QtbGV0dGVyLCBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKK30KKworI3Rh
cmdldDY6bWF0Y2hlcyhwLCA6bWF0Y2hlcyhwLCA6OmZpcnN0LWxldHRlcikpIHsKKyAgICBiYWNr
Z3JvdW5kLWNvbG9yOiBsaW1lOworfQorCisjdGFyZ2V0NzptYXRjaGVzKDo6YmVmb3JlLCA6OmFm
dGVyLCAqKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJv
dW5kIjsKK30KKworI3RhcmdldDg6bm90KDptYXRjaGVzKDo6Zmlyc3QtbGluZSkpIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZWQ7Cit9CisKKzo6Zmlyc3QtbGluZSAjdGFyZ2V0OSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCis6bWF0Y2hlcyg6OmZpcnN0LWxpbmUpICN0YXJn
ZXQxMCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFyZ2V0MTE6bWF0Y2hl
cyg6OmZpcnN0LWxpbmUgPiBwKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisv
KiBmaXJzdCBsZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMgY29sb3JlZCBibHVlLiAqLworI3Rh
cmdldDEyOm1hdGNoZXMoOjpmaXJzdC1sZXR0ZXIsIDo6YWZ0ZXIsIDo6YmVmb3JlKSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogbGltZTsKKyAgICBjb250ZW50OiAiYXJvdW5kIjsKK30KKworI3Rh
cmdldDEyOjpmaXJzdC1sZXR0ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWUgIWltcG9y
dGFudDsKK30KKworI3RhcmdldDEzOm1hdGNoZXMoOjphZnRlciA+IHApIHsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZWQ7CisgICAgY29udGVudDogImJ1ZyI7Cit9CisKKyN0YXJnZXQxNDptYXRj
aGVzKDo6YWZ0ZXIpID4gcCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworfQorCisjdGFy
Z2V0MTU6bWF0Y2hlcyg6OmFmdGVyID4gcCkgPiBwIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
ZWQ7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXY+CisgICAgPHAgaWQ9InRh
cmdldDEiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAg
ICA8cCBpZD0idGFyZ2V0MiI+cHNldWRvIGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZl
Y3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQzIj5wc2V1ZG8gZWxlbWVudCBpbnNpZGUgOm1hdGNo
ZXMgaGFzIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDQiPnBzZXVkbyBlbGVtZW50IGlu
c2lkZSA6bWF0Y2hlcyBoYXMgZWZmZWN0LjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0NSI+cHNldWRv
IGVsZW1lbnQgaW5zaWRlIDptYXRjaGVzIGhhcyBlZmZlY3QsIHNvIGFsbCBzZWxlY3RvcnMgc2hv
dWxkIGJlIGNoZWNrZWQuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ2Ij5wc2V1ZG8gZWxlbWVudCBp
bnNpZGUgbmVzdGVkIDptYXRjaGVzIHNob3VsZCBoYXZlIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9
InRhcmdldDciPmJvdGggbGluZSBpdHNlbGYgYW5kIGJlZm9yZS9hZnRlciBzaG91bGQgYmUgY29s
b3JlZC48L3A+CisgICAgPHAgaWQ9InRhcmdldDgiPnBzZXVkbyBlbGVtZW50IGluc2lkZSA6bm90
IGRvZXNuJ3QgaGF2ZSBlZmZlY3QuPC9wPgorICAgIDxwIGlkPSJ0YXJnZXQ5Ij46OmZpcnN0LWxp
bmUgaW4gbm9uLXJpZ2h0bW9zdCBmcmFnbWVudCBhbHdheXMgdW5tYXRjaC48L3A+CisgICAgPHAg
aWQ9InRhcmdldDEwIj46bWF0Y2hlcyg6OmZpcnN0LWxpbmUpIGluIG5vbi1yaWdodG1vc3QgZnJh
Z21lbnQgYWx3YXlzIHVubWF0Y2hlcy48L3A+CisgICAgPHAgaWQ9InRhcmdldDExIj5wc2V1ZG8g
ZWxlbWVudCBpbiBub24tcmlnaHRtb3N0IGZyYWdtZW50IGluc2lkZSA6bWF0Y2hlcyBhbHdheXMg
dW5tYXRjaGVzLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTIiPmJlZm9yZS9hZnRlciBjb250ZW50
cyBhcmUgY29sb3JlZCBsaW1lIGFuZCBmaXJzdC1sZXR0ZXIgb2YgYmVmb3JlIGNvbnRlbnQgaXMg
Y29sb3JlZCBibHVlLjwvcD4KKyAgICA8cCBpZD0idGFyZ2V0MTMiPm5vbi1yaWdodG1vc3QgcHNl
dWRvIGVsZW1lbnQgaGFzIG5vIGVmZmVjdC48L3A+CisgICAgPHAgaWQ9InRhcmdldDE0Ij48cD5u
b24tcmlnaHRtb3N0IHBzZXVkbyBlbGVtZW50IGhhcyBubyBlZmZlY3QuPC9wPjwvcD4KKyAgICA8
cCBpZD0idGFyZ2V0MTUiPjxwPm5vbi1yaWdodG1vc3QgcHNldWRvIGVsZW1lbnQgaGFzIG5vIGVm
ZmVjdC48L3A+PC9wPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="266192"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>