<?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>230469</bug_id>
          
          <creation_ts>2021-09-19 18:05:52 -0700</creation_ts>
          <short_desc>Inline RegExp.test JIT code in DFG and FTL</short_desc>
          <delta_ts>2021-11-14 00:08:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=233095</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1794951</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-19 18:05:52 -0700</bug_when>
    <thetext>RegExp.test() is used to check if a string matches, without recording any captured groups.  Currently we call out to C++ code that compiles JIT code for the regular expression, then calls the regular expression, creates a matches array with the result, and then converts the result to a boolean. There are several levels of calls.  If we inlined the RegExp processing and customize it to do what is minimally needed for the &quot;test()&quot; function this would benefit frequently use.  It makes sense to limit the amount of inlined code and continue to use the the current path for larger expressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794952</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-19 18:06:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/83289752&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794974</commentid>
    <comment_count>2</comment_count>
      <attachid>438636</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-19 22:43:42 -0700</bug_when>
    <thetext>Created attachment 438636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794981</commentid>
    <comment_count>3</comment_count>
      <attachid>438636</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-20 00:04:26 -0700</bug_when>
    <thetext>Comment on attachment 438636
Patch

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

Added quick comment.

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:809
&gt; +                    dataLog(&quot; can&apos;t inline expr\n&quot;);

We should not emit dataLog.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:14321
&gt; +        patchpoint-&gt;append(ConstrainedValue(stringLength, ValueRep::SomeLateRegister));

Let&apos;s add zeroExt(stringLength, Int64) since YarrJIT signature is UCPURegister (to avoid emitting zeroExtend32ToPtr in the YarrJIT side).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794986</commentid>
    <comment_count>4</comment_count>
      <attachid>438636</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-20 00:32:28 -0700</bug_when>
    <thetext>Comment on attachment 438636
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2773
&gt; +        Yarr::jitCompileInlinedTest(&amp;m_graph.m_stackChecker, regExp-&gt;pattern(), regExp-&gt;flags(), Yarr::CharSize::Char8, &amp;vm(), m_jit, yarrRegisters);

How does DFG / FTL hold used Bitmap for BoyreMoore search?
It is held by YarrCodeBlock. Which can be cleared. If DFG / FTL does not keep the bitmap used inside the inlined code, then we will access the freed memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795139</commentid>
    <comment_count>5</comment_count>
      <attachid>438636</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-20 10:21:34 -0700</bug_when>
    <thetext>Comment on attachment 438636
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2773
&gt;&gt; +        Yarr::jitCompileInlinedTest(&amp;m_graph.m_stackChecker, regExp-&gt;pattern(), regExp-&gt;flags(), Yarr::CharSize::Char8, &amp;vm(), m_jit, yarrRegisters);
&gt; 
&gt; How does DFG / FTL hold used Bitmap for BoyreMoore search?
&gt; It is held by YarrCodeBlock. Which can be cleared. If DFG / FTL does not keep the bitmap used inside the inlined code, then we will access the freed memory.

The inline path doesn&apos;t use BoyerMoore to save one register.  See YarrJIT.cpp ~3811, where we create and use BoyerMoore info where we don&apos;t go down that path for InlineTest code generation.

&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:809
&gt;&gt; +                    dataLog(&quot; can&apos;t inline expr\n&quot;);
&gt; 
&gt; We should not emit dataLog.

Removed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:14321
&gt;&gt; +        patchpoint-&gt;append(ConstrainedValue(stringLength, ValueRep::SomeLateRegister));
&gt; 
&gt; Let&apos;s add zeroExt(stringLength, Int64) since YarrJIT signature is UCPURegister (to avoid emitting zeroExtend32ToPtr in the YarrJIT side).

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795150</commentid>
    <comment_count>6</comment_count>
      <attachid>438636</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-20 10:36:27 -0700</bug_when>
    <thetext>Comment on attachment 438636
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2773
&gt;&gt;&gt; +        Yarr::jitCompileInlinedTest(&amp;m_graph.m_stackChecker, regExp-&gt;pattern(), regExp-&gt;flags(), Yarr::CharSize::Char8, &amp;vm(), m_jit, yarrRegisters);
&gt;&gt; 
&gt;&gt; How does DFG / FTL hold used Bitmap for BoyreMoore search?
&gt;&gt; It is held by YarrCodeBlock. Which can be cleared. If DFG / FTL does not keep the bitmap used inside the inlined code, then we will access the freed memory.
&gt; 
&gt; The inline path doesn&apos;t use BoyerMoore to save one register.  See YarrJIT.cpp ~3811, where we create and use BoyerMoore info where we don&apos;t go down that path for InlineTest code generation.

Hmm, I think we need to enable it: disabling BoyreMoore searching dramatically decreases performance of RegExp in Speedometer2/jQuery-TodoMVC (50%).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795151</commentid>
    <comment_count>7</comment_count>
      <attachid>438693</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-20 10:39:04 -0700</bug_when>
    <thetext>Created attachment 438693
Updated Patch with suggested changes and speculative fixes for EWS failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795732</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-21 13:38:28 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #6)
&gt; Comment on attachment 438636 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=438636&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2773
&gt; &gt;&gt;&gt; +        Yarr::jitCompileInlinedTest(&amp;m_graph.m_stackChecker, regExp-&gt;pattern(), regExp-&gt;flags(), Yarr::CharSize::Char8, &amp;vm(), m_jit, yarrRegisters);
&gt; &gt;&gt; 
&gt; &gt;&gt; How does DFG / FTL hold used Bitmap for BoyreMoore search?
&gt; &gt;&gt; It is held by YarrCodeBlock. Which can be cleared. If DFG / FTL does not keep the bitmap used inside the inlined code, then we will access the freed memory.
&gt; &gt; 
&gt; &gt; The inline path doesn&apos;t use BoyerMoore to save one register.  See YarrJIT.cpp ~3811, where we create and use BoyerMoore info where we don&apos;t go down that path for InlineTest code generation.
&gt; 
&gt; Hmm, I think we need to enable it: disabling BoyreMoore searching
&gt; dramatically decreases performance of RegExp in Speedometer2/jQuery-TodoMVC
&gt; (50%).

Will make these changes and repost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797266</commentid>
    <comment_count>9</comment_count>
      <attachid>439286</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-25 22:01:59 -0700</bug_when>
    <thetext>Created attachment 439286
Updated patch adding Boyer-Moore searching and test fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797295</commentid>
    <comment_count>10</comment_count>
      <attachid>439295</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-26 13:24:26 -0700</bug_when>
    <thetext>Created attachment 439295
Patch with speculative fix for Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798124</commentid>
    <comment_count>11</comment_count>
      <attachid>439286</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-28 17:51:37 -0700</bug_when>
    <thetext>Comment on attachment 439286
Updated patch adding Boyer-Moore searching and test fixes

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2731
&gt; +    auto jitCodeBlock = regExp-&gt;getRegExpJITCodeBlock();
&gt; +    auto inlineCodeStats8Bit = jitCodeBlock-&gt;get8BitInlineStats();

How is this not a total race? it seems like m_regExpJITCode pointer is set before the stats are. I think you want some kind of concurrency protocol, probably at the very least a storeStoreFence before storing to the pointer. Especially because you&apos;re using this to drive register allocation, this seems super important.

If it were up to me, I&apos;d remove the ensureRegExpJITCode function. I&apos;d allocate my own data structure I pass into ::compile, like this:
```
auto jitCode = makeUnique&lt;Yarr::YarrCodeBlock&gt;();
Yarr::jitCompile(pattern, m_patternString, charSize, vm, *jitCode, Yarr::JITCompileMode::IncludeSubpatterns);
storeStoreFence()
m_regExpJITCode = = WTFMove(jitCode);
```

Something like that. What isn&apos;t clear to me is why we&apos;re calling ensure at all, instead of straight up allocating it. Like, can that pointer ever be non-null? If so, then my suggestion probably won&apos;t work, and you&apos;ll need something else.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2746
&gt; +    auto swapRegIfNeeded = [&amp;] {

this whole thing looks so weird. If you didn&apos;t use GPRFlushedCallResult I don&apos;t think any of these checks would be needed

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2748
&gt; +            swapReg = allocate();

why not use a GPRTemporary?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2796
&gt; +        if (inlineCodeStats8Bit.needsTemp2()) {
&gt; +            JSGlobalObject* globalObjectPtr = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
&gt; +            m_jit.move(CCallHelpers::TrustedImmPtr(globalObjectPtr), globalObjectGPR);
&gt; +        }

&quot;needsTemp2&quot; is a weird name for something that means I need the lexical global object. Why would we ever be dealing with lexical global object here instead of the other global object gpr that is a child to this node?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2874
&gt; +    m_jit.exceptionCheck();

does the exception check only need to be for the callOpeartion?

&gt; Source/JavaScriptCore/runtime/StackAlignment.h:58
&gt; +    unsigned sizeInRegisters = sizeInBytes / sizeof(void*);

I think you want sizeof(CPURegister) instead of void* here, because arm64_32

&gt; Source/JavaScriptCore/runtime/StackAlignment.h:61
&gt; +    if (sizeInRegisters &lt;= CallFrame::headerSizeInRegisters)
&gt; +        return 0;

This check looks weird. What&apos;s the deal with it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798544</commentid>
    <comment_count>12</comment_count>
      <attachid>439286</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-09-29 13:50:31 -0700</bug_when>
    <thetext>Comment on attachment 439286
Updated patch adding Boyer-Moore searching and test fixes

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2731
&gt;&gt; +    auto inlineCodeStats8Bit = jitCodeBlock-&gt;get8BitInlineStats();
&gt; 
&gt; How is this not a total race? it seems like m_regExpJITCode pointer is set before the stats are. I think you want some kind of concurrency protocol, probably at the very least a storeStoreFence before storing to the pointer. Especially because you&apos;re using this to drive register allocation, this seems super important.
&gt; 
&gt; If it were up to me, I&apos;d remove the ensureRegExpJITCode function. I&apos;d allocate my own data structure I pass into ::compile, like this:
&gt; ```
&gt; auto jitCode = makeUnique&lt;Yarr::YarrCodeBlock&gt;();
&gt; Yarr::jitCompile(pattern, m_patternString, charSize, vm, *jitCode, Yarr::JITCompileMode::IncludeSubpatterns);
&gt; storeStoreFence()
&gt; m_regExpJITCode = = WTFMove(jitCode);
&gt; ```
&gt; 
&gt; Something like that. What isn&apos;t clear to me is why we&apos;re calling ensure at all, instead of straight up allocating it. Like, can that pointer ever be non-null? If so, then my suggestion probably won&apos;t work, and you&apos;ll need something else.

The m_regExpJITCode pointer is null before we JIT a RegExp expression.  It will always be null for RegExp&apos;s that use the YARR interpreter and not the JIT.  Once we have a m_regExpJITCode, we have stats that at least say we can&apos;t inline.

The YarrCodeBlock can point to up to 4 JIT&apos;ed regions, with all combinations of 8 bit / 16 bit and match only / match with sub patterns.  Therefore we don&apos;t want to replace the YarrCodeBlock when we compile a possibly additional JIT variant for a given RegExp*.  I believe that is why we have ensureRegExpJITCode().  Once a RegExp has a m_regExpJITCode, it is never deleted only cleared which deletes the code and currently resets the stats.  I will eliminate the clearing of the stats, since that information is useful for inlining even if the corresponding out of line YARR JIT code has been deleted.  I&apos;ll  reorder the setting of the stats so that m_canInline is the last things set with it preceded by a store store fence.

 I&apos;ll add a null check in DFGStrengthReduction where we first access the m_regExpJITCode for a given RegExp.  I&apos;ll also add a null check at the top of this function and call the operation if it is null.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2746
&gt;&gt; +    auto swapRegIfNeeded = [&amp;] {
&gt; 
&gt; this whole thing looks so weird. If you didn&apos;t use GPRFlushedCallResult I don&apos;t think any of these checks would be needed

Since there is the possibility we will call out to C++, I use GPRFlushedCallResult.  Therefore we may need to swap registers.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2748
&gt;&gt; +            swapReg = allocate();
&gt; 
&gt; why not use a GPRTemporary?

I was following the pattern I see in compileArithDiv() &amp; compileArithMod().

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2796
&gt;&gt; +        }
&gt; 
&gt; &quot;needsTemp2&quot; is a weird name for something that means I need the lexical global object. Why would we ever be dealing with lexical global object here instead of the other global object gpr that is a child to this node?

If we need Temp2 on X86_64, we run out of registers.  I figured I&apos;d use the global object register for the inline code and materialize the GO afterwards.

I&apos;ll change it so that we always materialize the constant GlobalObject for node1 since strength reduction has already proven that.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2874
&gt;&gt; +    m_jit.exceptionCheck();
&gt; 
&gt; does the exception check only need to be for the callOpeartion?

Yes.  The inline path doesn&apos;t throw any exceptions.

&gt;&gt; Source/JavaScriptCore/runtime/StackAlignment.h:58
&gt;&gt; +    unsigned sizeInRegisters = sizeInBytes / sizeof(void*);
&gt; 
&gt; I think you want sizeof(CPURegister) instead of void* here, because arm64_32

Will change.

&gt;&gt; Source/JavaScriptCore/runtime/StackAlignment.h:61
&gt;&gt; +        return 0;
&gt; 
&gt; This check looks weird. What&apos;s the deal with it?

See the return statement below.  If sizeInRegisters is &lt; CallFrame::headerSizeInRegisters, then we underflow on the unsigned subtraction and return a huge number.

This code handles the case where the YARR JIT may not need any space or space that is equal to the call frame header.  The rest of the out going stack space is based on argument count.  This function converts the YARR stack needs to argument count.

Want a comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800217</commentid>
    <comment_count>13</comment_count>
      <attachid>440102</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-10-04 14:11:49 -0700</bug_when>
    <thetext>Created attachment 440102
Patch with changes from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804127</commentid>
    <comment_count>14</comment_count>
      <attachid>439286</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-13 19:05:18 -0700</bug_when>
    <thetext>Comment on attachment 439286
Updated patch adding Boyer-Moore searching and test fixes

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/StackAlignment.h:61
&gt;&gt;&gt; +        return 0;
&gt;&gt; 
&gt;&gt; This check looks weird. What&apos;s the deal with it?
&gt; 
&gt; See the return statement below.  If sizeInRegisters is &lt; CallFrame::headerSizeInRegisters, then we underflow on the unsigned subtraction and return a huge number.
&gt; 
&gt; This code handles the case where the YARR JIT may not need any space or space that is equal to the call frame header.  The rest of the out going stack space is based on argument count.  This function converts the YARR stack needs to argument count.
&gt; 
&gt; Want a comment?

Gotcha, I suppose I glossed right over that subtract.

The people calling this function, why would they pass &lt; headerSizeInRegisters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804138</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-10-13 20:32:14 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #14)
&gt; Comment on attachment 439286 [details]
&gt; Updated patch adding Boyer-Moore searching and test fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=439286&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/runtime/StackAlignment.h:61
&gt; &gt;&gt;&gt; +        return 0;
&gt; &gt;&gt; 
&gt; &gt;&gt; This check looks weird. What&apos;s the deal with it?
&gt; &gt; 
&gt; &gt; See the return statement below.  If sizeInRegisters is &lt; CallFrame::headerSizeInRegisters, then we underflow on the unsigned subtraction and return a huge number.
&gt; &gt; 
&gt; &gt; This code handles the case where the YARR JIT may not need any space or space that is equal to the call frame header.  The rest of the out going stack space is based on argument count.  This function converts the YARR stack needs to argument count.
&gt; &gt; 
&gt; &gt; Want a comment?
&gt; 
&gt; Gotcha, I suppose I glossed right over that subtract.
&gt; 
&gt; The people calling this function, why would they pass &lt;
&gt; headerSizeInRegisters?

As I said above, the count coming from the YARR JIT engine could be 0 or 8.  This is the space that YARR uses to save state needed for backtracking and not the space for it to make an outgoing call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804463</commentid>
    <comment_count>16</comment_count>
      <attachid>440102</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-14 13:23:58 -0700</bug_when>
    <thetext>Comment on attachment 440102
Patch with changes from review

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

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:686
&gt; +#define ABSTRACT_HEAP_NOT_RegExpObject_lastIndex(name) if (name != InvalidAbstractHeap &amp;&amp; \
&gt; +    name != InvalidAbstractHeap &amp;&amp; \
&gt; +    name != World &amp;&amp; \
&gt; +    name != Stack &amp;&amp; \
&gt; +    name != Heap &amp;&amp; \
&gt; +    name != RegExpObject_lastIndex) \
&gt; +        write(name);
&gt; +    FOR_EACH_ABSTRACT_HEAP_KIND(ABSTRACT_HEAP_NOT_RegExpObject_lastIndex)

😊

&gt; Source/JavaScriptCore/dfg/DFGCommonData.h:126
&gt; +    Yarr::YarrBoyerMoyerData m_boyerMooreData;

is it ok for this to be shared between all RegExpTestInline nodes?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2710
&gt; +    GPRFlushedCallResult result(this);

I&apos;m not sure anything is preventing the above from allocating into rax (on x86). Is it ok if one of them do and have the same value as resultGPR?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2749
&gt; +            swapReg = allocate();

I still think it&apos;s simpler to have something like std::optional&lt;GPRTemporary&gt; that we emplace here. Not sure if there is a reason not to use that approach? The benefit is it frees us from worrying about calling unlock() below.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2856
&gt; +    swapRegIfNeeded();

this seems slightly wrong to do after flushRegisters above. It might be innocuous since we don&apos;t associate it with any particular value in the graph, but logically, I think these should be swapped in order with flushRegisters. Like, the call below might clobber the swap we allocate(), and if we had associated it with a value, the register allocation state might be wrong.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2876
&gt; +    m_jit.exceptionCheck();

should this only go after the callOperation?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:14297
&gt; +        LValue globalObject = lowCell(m_node-&gt;child1());

Isn&apos;t this a constant? Why is it still in child1? Same goes to code in DFG.

I think we can just change the code to use the constant in op info?

This should be sound since we&apos;re using KnownCelluse on child1, so we don&apos;t need to preserve the &quot;type check&quot;.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:14404
&gt; +        patchpoint-&gt;effects = Effects::none();

This doesn&apos;t seem right. At the very least we&apos;re storing some stuff to global object, etc.
Don&apos;t we also read from the Heap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804466</commentid>
    <comment_count>17</comment_count>
      <attachid>440102</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-14 13:29:00 -0700</bug_when>
    <thetext>Comment on attachment 440102
Patch with changes from review

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

&gt; Source/JavaScriptCore/yarr/YarrJITRegisters.h:38
&gt; +struct YarrJITDefaultRegisters : private MacroAssembler {

Does this need to inherit from MacroAssembler?

&gt; Source/JavaScriptCore/yarr/YarrJITRegisters.h:151
&gt; +class YarrJITRegisters : private MacroAssembler {

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1804530</commentid>
    <comment_count>18</comment_count>
      <attachid>440102</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-10-14 15:00:27 -0700</bug_when>
    <thetext>Comment on attachment 440102
Patch with changes from review

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

r=me with the stuff we spoke about when talking on the phone

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:4100
&gt; +        m_boyerMooreData = dynamic_cast&lt;YarrBoyerMoyerData*&gt;(m_codeBlock);

dynamic_cast?
Why not static_cast?

&gt; Source/JavaScriptCore/yarr/YarrJITRegisters.h:32
&gt; +#define YARR_CALL

don&apos;t think this is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806121</commentid>
    <comment_count>19</comment_count>
      <attachid>441749</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-10-19 10:15:28 -0700</bug_when>
    <thetext>Created attachment 441749
Patch for landing

Incorporated changes in response to reviewer&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806164</commentid>
    <comment_count>20</comment_count>
      <attachid>441759</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-10-19 11:05:32 -0700</bug_when>
    <thetext>Created attachment 441759
Patch for landing

Fixed Windows build issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814174</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-11-11 13:02:35 -0800</bug_when>
    <thetext>Committed r285651 (244149@main): &lt;https://commits.webkit.org/244149@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438636</attachid>
            <date>2021-09-19 22:43:42 -0700</date>
            <delta_ts>2021-09-20 10:39:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>230469.patch</filename>
            <type>text/plain</type>
            <size>254761</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODI3NDApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTA5LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG1pY3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTA5LTE3ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIGZhc3QgcHJvcGVydHkgZW51bWVyYXRp
b24gbW9kZSBmb3IgSlNPTi5zdHJpbmdpZnkKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3JlZ2V4cC10ZXN0LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvcmVnZXhwLXRlc3QtaW5saW5lZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAgQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2VyaWVzIDMi
CisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHN0cmluZ3MgPSBbICJ0aGVtIiwgInRoZXJlIiwgInRo
ZXkiLCAiYW50aGVtIiwgImFtcGhpdGhlYXRlciIsICJib3RoZXIiLCAiYW5vdGhlciIsICJicm90
aGVyIiwgImFwb3RoZWNhcnkiLCAiYW5hdGhlbWEiXTsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAg
ICBsZXQgbiA9IDEwMDAwMDAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKQorICAg
ICAgICByZXN1bHQgKz0gL3RoZS8udGVzdChzdHJpbmdzW2kgJSAxMF0pOworICAgIGlmIChyZXN1
bHQgIT0gbikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgyNzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDg2IEBACisyMDIxLTA5LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgor
CisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNDY5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzdHJ1Y3R1cmVk
IFlhcnJKSVQgZnJvbSBpbmhlcml0aW5nIGZyb20gTWFjcm9Bc3NlbWJsZXIgdG8gaGF2aW5nIGEg
TWFjcm9Bc3NlbWJsZXIKKyAgICAgICAgbWVtYmVyLiAgQWRkZWQgYSBuZXcgcGF0aCB0byBZYXJy
IEpJVCBjb2RlIHRvIGNvbXBpbGUgaW5saW5lIGNvZGUgYnkgY2hhbmdpbmcgaG93IHRoZQorICAg
ICAgICBjb2RlIGlzIGVudGVyZWQgYW5kIGV4aXRlZC4gIEFkZGVkIHN0YXRpc3RpYyB0byB0aGUg
bm9ybWFsIGNvbXBpbGF0aW9uIHBhdGggdG8gcmVjb3JkCisgICAgICAgIHRoZSBzaXplIG9mIHRo
ZSBtYXRjaGluZyBjb2RlIGdlbmVyYXRlZCwgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBuZWVk
ZWQsIGFuZCBpZgorICAgICAgICB0aGUgY29kZSBjYW4gYmUgaW5saW5lZC4gIFRoaXMgcGF0Y2gg
b25seSBpbmxpbmVzIDhiaXQgY29kZSwgYXMgdGhpcyBzZWVtcyB0byBjb3ZlcgorICAgICAgICB0
aGUgbW9zdCBjb21tb24gcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNhc2VzLiAgQWRkaW5nIDE2IGJp
dCwgbm9uLVVuaWNvZGUgaW5saW5pbmcKKyAgICAgICAgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJk
LiAgVGhlIGNvZGUgaXMgc3RydWN0dXJlZCB0byB0YWtlIHRoZSBpbmxpbmVkIHBhdGggZm9yIHRo
ZQorICAgICAgICBjYXNlIG9mIG5vbi1yb3BlIHN0cmluZyBhcmd1bWVudHMuICBGb3Igb3RoZXIg
Y2FzZXMsIHdlIGZhbGwgYmFjayB0byBjYWxsaW5nIG91dAorICAgICAgICB0byBDKysgcGF0aHMu
CisKKyAgICAgICAgSGVyZSBhcmUgdGhlIHBlcmYgcmVzdWx0cyBydW5uaW5nIHRoZSBuZXdseSBh
ZGRlZCByZWdleHAtdGVzdC1pbmxpbmVkIG1pY3JvCisgICAgICAgIGJlbmNobWFyayAodGltZSBp
biBtc2VjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lICAgICAgIFdpdGggdGhp
cyBwYXRjaCAgICAgUmVzdWx0CisgICAgICAgICAgICBBUk02NCAgIDEzOS41ODc1Ky0zLjcyNzQg
ICA2MS4zMTAxKy0wLjk2NzYgIDIuMjh4IGZhc3RlcgorICAgICAgICAgICAgWDg2LTY0ICAyMTku
NTgzMSstMjguMDkxICAxMDIuNjI2NSstMTguMDAyICAyLjE0eCBmYXN0ZXIKKworICAgICAgICBB
cyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBmb3VuZCB0aGF0IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24g
ZGlkbid0IHdvcmsgcHJvcGVybHkgZm9yIHRoZQorICAgICAgICBleGlzdGluZyBjYXNlcyBmb3Ig
UmVnRXhwRXhlYywgUmVnRXhwVGVzdCBhbmQgcmVsYXRlZCBzaW5jZSB3ZSBhZGRlZCB0aGF0IGNo
ZWNrcyBmb3IKKyAgICAgICAgb3ZlcnJpZGluZyB0aGUgUmVnRXhwIG9iamVjdC4gIENsb2JiZXJp
emUgZm9yIHRyeUdldEJ5SWQgd2FzIGNsb2JiZXIgdG9wLCBidXQgYWRkZWQKKyAgICAgICAgYW4g
ZXhjZXB0aW9uIGZvciBSZWdFeHAubGFzdEluZGV4LiAgVGhpcyBmaXggYWxsb3dlZCBtYW55IG9m
IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb25zCisgICAgICAgIGNhc2VzIHRvIHN0YXJ0IHdvcmtpbmcg
YWdhaW4sIG5hbWVseSB0aGUgY29zdGFudCBmb2xkaW5nIGNhc2VzLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dD
KToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGlj
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQ2VsbE9wZXJhbmQpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6aGFuZGxl
Tm9kZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwLmg6CisgICAgICAgICogcnVudGltZS9TdGFja0FsaWdubWVudC5oOgorICAgICAgICAoSlND
Ojphcmd1bWVudENvdW50Rm9yU3RhY2tTaXplKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
aml0Q29tcGlsZUlubGluZWRUZXN0KToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OklubGluZVN0YXRzKToK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OnNldCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpjbGVhcik6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpjb2RlU2l6ZSBj
b25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpz
dGFja1NpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxp
bmVTdGF0czo6Y2FuSW5saW5lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6c2V0OEJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6c2V0MTZCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OmdldDhCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OmdldDE2Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29k
ZUJsb2NrOjpjbGVhcik6CisgICAgICAgICogeWFyci9ZYXJySklUUmVnaXN0ZXJzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJySklUUmVnaXN0ZXJzOjpZYXJySklUUmVnaXN0ZXJz
KToKKyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmg6CisKIDIwMjEtMDktMTcgIE1pa2hhaWwg
Ui4gR2FkZWxoYSAgPG1pa2hhaWxAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggQ2VsbFRhZyBi
ZWluZyBzZXQgMzIgYml0cyBldmVuIGlmIHRoZSBiYXNlIGlzIG5vdCBhIGNlbGwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDcgQEAKIAkJODY3MDRCNDMxMkRCOEE4MTAwQTlG
RTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI0MTEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENo
ZWNrZXIuaCAqLzsgfTsKIAkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnBy
ZXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3
MDRCN0UxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjcwNEI4MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTY1M0JDNDNGMjZEMDEzQTYw
MEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJl
Z2lzdGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODMxMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZh
dGVOYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDI0NSw2ICs0MjQ2LDcgQEAKIAkJ
ODY3MDRCN0UxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySW50ZXJwcmV0ZXIuaDsgcGF0aCA9IHlhcnIvWWFy
ckludGVycHJldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjdGMTJE
QkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFlhcnJKSVQuY3BwOyBwYXRoID0geWFyci9ZYXJySklULmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCODAxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckpJVC5oOyBwYXRoID0geWFy
ci9ZYXJySklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1M0JDNDNFMjZEMDEz
QTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFlhcnJKSVRSZWdpc3RlcnMuaDsgcGF0aCA9IHlhcnIvWWFyckpJVFJlZ2lzdGVy
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJy
UGFyc2VyLmg7IHBhdGggPSB5YXJyL1lhcnJQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlhcnJQYXR0ZXJuLmNwcDsgcGF0aCA9
IHlhcnIvWWFyclBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Njcw
NEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gWWFyclBhdHRlcm4uaDsgcGF0aCA9IHlhcnIvWWFyclBhdHRlcm4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxNTEsNiArODE1Myw3IEBACiAJCQkJODY3
MDRCN0UxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oICovLAogCQkJCTg2NzA0
QjdGMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmNwcCAqLywKIAkJCQk4NjcwNEI4MDEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovLAorCQkJCTY1M0JDNDNFMjZEMDEzQTYwMEQ4QkUy
MCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi8sCiAJCQkJRTNGMEZDOTQyNkExMUI0QTAwOTlGRkEw
IC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCAqLywKIAkJCQk4NjcwNEI4MTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oICovLAogCQkJCTg2NzA0QjgyMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGF0dGVybi5jcHAgKi8sCkBAIC0xMDIyMCw2ICsxMDIyMyw4IEBACiAJCQkJQTM4
RDI1MEUyNTgwMEQ0NDAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2NzA0Qjg3
MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTNCQzQz
RjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzlERDdGNTIzQzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDcgKzEwOTMwLDYgQEAKIAkJCQlFMzI4
MkJCQjFGRTkzMEFGMDBFREFGNzEgLyogWWFyckVycm9yQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8qIFlhcnJGbGFncy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFCNEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdD
b250ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjY0Myw2ICsy
NjQzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxp
bmU6CiAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFz
IFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4
IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4cC4KICAgICAgICAgY2xvYmJlcldv
cmxkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NzMsMTQgKzY3MywyNiBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFRyeUdldEJ5SWQ6CisgICAgICAgIHJlYWQoV29y
bGQpOworI2RlZmluZSBBQlNUUkFDVF9IRUFQX05PVF9SZWdFeHBPYmplY3RfbGFzdEluZGV4KG5h
bWUpIGlmIChuYW1lICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYgXAorICAgIG5hbWUgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCAmJiBcCisgICAgbmFtZSAhPSBXb3JsZCAmJiBcCisgICAgbmFtZSAh
PSBTdGFjayAmJiBcCisgICAgbmFtZSAhPSBIZWFwICYmIFwKKyAgICBuYW1lICE9IFJlZ0V4cE9i
amVjdF9sYXN0SW5kZXgpIFwKKyAgICAgICAgd3JpdGUobmFtZSk7CisgICAgRk9SX0VBQ0hfQUJT
VFJBQ1RfSEVBUF9LSU5EKEFCU1RSQUNUX0hFQVBfTk9UX1JlZ0V4cE9iamVjdF9sYXN0SW5kZXgp
CisjdW5kZWYgQUJTVFJBQ1RfSEVBUF9OT1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleAorICAgICAg
ICByZXR1cm47CisKICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAg
ICAgY2FzZSBHZXRCeUlkV2l0aFRoaXM6CiAgICAgY2FzZSBHZXRCeUlkRGlyZWN0OgogICAgIGNh
c2UgR2V0QnlJZERpcmVjdEZsdXNoOgogICAgIGNhc2UgR2V0QnlWYWxXaXRoVGhpczoKLSAgICBj
YXNlIFRyeUdldEJ5SWQ6CiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZFdpdGhU
aGlzOgogICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoKQEAgLTE3NTAsNiArMTc2Miw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgUmVnRXhw
RXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgog
ICAgICAgICAvLyBFdmVuIGlmIHdlJ3ZlIHByb3ZlbiBrbm93biBpbnB1dCB0eXBlcyBhcyBSZWdF
eHBPYmplY3QgYW5kIFN0cmluZywKICAgICAgICAgLy8gYWNjZXNzaW5nIGxhc3RJbmRleCBpcyBl
ZmZlY3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCiAgICAgICAgIGNsb2JiZXJUb3AoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDI4
MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM1LDYgKzMzNSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICBjYXNlIFJlZ0V4cE1hdGNo
RmFzdEdsb2JhbDoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5s
aW5lOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJldHVybjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjgyNzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE0NzIsNyArMTQ3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgICAgIGNhc2UgUmVnRXhw
VGVzdDogeworICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIGNhc2UgUmVnRXhwVGVz
dElubGluZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVSZWdFeHBPYmplY3QoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuY3BwCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIxLDYgKzMyMSwxNiBAQCB2b2lk
IE5vZGU6OmNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAgICAgbV9vcEluZm8gPSByZWdF
eHA7CiB9CiAKK3ZvaWQgTm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZShGcm96ZW5WYWx1
ZSogcmVnRXhwKQoreworICAgIEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9w
QW5kRGVmYXVsdEZsYWdzKFJlZ0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgp
ID0gRWRnZShjaGlsZHJlbi5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hp
bGRyZW4uY2hpbGQyKCkgPSBFZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2Jq
ZWN0VXNlKTsKKyAgICAvLyBXZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcElu
Zm8gPSByZWdFeHA7Cit9CisKIFN0cmluZyBOb2RlOjp0cnlHZXRTdHJpbmcoR3JhcGgmIGdyYXBo
KQogewogICAgIGlmIChoYXNDb25zdGFudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIzLDYgKzgyMyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY29udmVydFRvUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5V2l0aG91dENoZWNr
cyhGcm96ZW5WYWx1ZSogcmVnRXhwKTsKICAgICB2b2lkIGNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFz
dEdsb2JhbFdpdGhvdXRDaGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4cCk7CisgICAgdm9pZCBjb252
ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKEZyb3plblZhbHVlKiByZWdFeHApOwogCiAgICAgdm9pZCBj
b252ZXJ0VG9TZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoKQogICAgIHsKQEAgLTE4MDAsNiArMTgw
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJl
Z0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAg
ICAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0
OgogICAgICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6CkBAIC0xODk2LDYgKzE4OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRGly
ZWN0VGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9i
YWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CisgICAgICAg
IGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE5LDYg
KzMxOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhSZWdF
eHBFeGVjLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVn
RXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhSZWdF
eHBUZXN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmVn
RXhwVGVzdElubGluZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKFJlZ0V4cE1hdGNoRmFzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKFJlZ0V4cE1hdGNoRmFzdEdsb2JhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oU3RyaW5nUmVwbGFjZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODY4LDYgKzg2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhw
RXhlYzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6CiAgICAgICAg
IGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgICAg
ICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9i
YWw6CiAgICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU1NCw2ICs1NTQsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9y
U3RpY2t5OgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6
CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9i
YWw6CiAgICAgY2FzZSBDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI3MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI5NDEsNyArMjk0MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFJlZ0V4
cFRlc3Q6IHsKKyAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5l
OiB7CiAgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0KG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
Q2hhaW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVn
aXN0ZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjY5OSw2
ICsyNzAwLDE2OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kCiAg
ICAgfSB9CiB9CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSogbm9kZSkKK3sK
KyAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihub2RlLT5jZWxsT3BlcmFuZCgp
LT52YWx1ZSgpKTsKKworICAgIEFTU0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKTsKKwor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGdsb2JhbE9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGdsb2JhbE9iamVjdC5ncHIoKTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50R1BSOworICAg
IEdQUlRlbXBvcmFyeSBzdHJpbmdJbXBsKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdHJpbmdE
YXRhKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdHJMZW5ndGgodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IG91dHB1dCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0Mih0aGlzKTsKKyAg
ICBHUFJUZW1wb3JhcnkgdGVtcDAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAxKHRoaXMp
OworICAgIEdQUlJlZyBzdHJpbmdJbXBsR1BSID0gc3RyaW5nSW1wbC5ncHIoKTsKKyAgICBHUFJS
ZWcgc3RyaW5nRGF0YUdQUiA9IHN0cmluZ0RhdGEuZ3ByKCk7CisgICAgR1BSUmVnIG91dHB1dEdQ
UiA9IG91dHB1dC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyTGVuZ3RoR1BSID0gc3RyTGVuZ3RoLmdw
cigpOworICAgIEdQUlJlZyByZXN1bHQyR1BSID0gcmVzdWx0Mi5ncHIoKTsKKyAgICBHUFJSZWcg
dGVtcDBHUFIgPSB0ZW1wMC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDFHUFIgPSB0ZW1wMS5ncHIo
KTsKKworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHN3YXBSZWcgPSBJbnZhbGlk
R1BSUmVnOworCisgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KG5vZGUtPmNoaWxkMigpLCBiYXNl
R1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKworICAgIGF1dG8gc3dhcFJlZ0lmTmVl
ZGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSByZXN1bHRHUFIpIHsK
KyAgICAgICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgbV9qaXQubW92
ZShnbG9iYWxPYmplY3RHUFIsIHN3YXBSZWcpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BS
ID0gc3dhcFJlZzsKKyAgICAgICAgfSBlbHNlIGlmIChiYXNlR1BSID09IHJlc3VsdEdQUikgewor
ICAgICAgICAgICAgc3dhcFJlZyA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGJhc2VHUFIsIHN3YXBSZWcpOworICAgICAgICAgICAgYmFzZUdQUiA9IHN3YXBSZWc7CisgICAg
ICAgIH0gZWxzZSBpZiAoYXJndW1lbnRHUFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBz
d2FwUmVnID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoYXJndW1lbnRHUFIs
IHN3YXBSZWcpOworICAgICAgICAgICAgYXJndW1lbnRHUFIgPSBzd2FwUmVnOworICAgICAgICB9
CisgICAgfTsKKworICAgIGF1dG8gcmVnRXhwVGVzdElubGluZUNhc2UgPSBbJl0geworICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0ltcGxHUFIsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0cmluZ0RhdGFHUFIpOworICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nSW1wbEdQUiwgU3RyaW5nSW1wbDo6
bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLCBzdHJMZW5ndGhHUFIpOworCisgICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IHN0cmluZ0ltcGxHUFI7CisKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoMCksIGluZGV4R1BSKTsKKworICAgICAgICBZYXJyOjpZYXJySklUUmVnaXN0ZXJzIHlhcnJS
ZWdpc3RlcnM7CisgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOwor
ICAgICAgICB5YXJyUmVnaXN0ZXJzLmluZGV4ID0gaW5kZXhHUFI7CisgICAgICAgIHlhcnJSZWdp
c3RlcnMubGVuZ3RoID0gc3RyTGVuZ3RoR1BSOworICAgICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1
dCA9IG91dHB1dEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5yZWdUMCA9IHRlbXAwR1BSOwor
ICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QxID0gdGVtcDFHUFI7CisgICAgICAgIHlhcnJSZWdp
c3RlcnMucmV0dXJuUmVnaXN0ZXIgPSByZXN1bHRHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMu
cmV0dXJuUmVnaXN0ZXIyID0gcmVzdWx0MkdQUjsKKyAgICAgICAgWWFycjo6aml0Q29tcGlsZUlu
bGluZWRUZXN0KCZtX2dyYXBoLm1fc3RhY2tDaGVja2VyLCByZWdFeHAtPnBhdHRlcm4oKSwgcmVn
RXhwLT5mbGFncygpLCBZYXJyOjpDaGFyU2l6ZTo6Q2hhcjgsICZ2bSgpLCBtX2ppdCwgeWFyclJl
Z2lzdGVycyk7CisKKyAgICAgICAgYXV0byBmYWlsZWRNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworCisg
ICAgICAgIC8vICBTYXZlZCBjYWNoZWQgcmVzdWx0CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQg
PSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNldCgpICsgUmVnRXhwR2xvYmFs
RGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsKKworICAgICAgICBtX2ppdC5zdG9yZVB0cihU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCByZWdFeHApLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zm
c2V0T2ZMYXN0UmVnRXhwKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJndW1lbnRHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2Fj
aGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RJbnB1dCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
cmVzdWx0R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCAr
IFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihN
YXRjaFJlc3VsdCwgc3RhcnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVzdWx0MkdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNo
ZWRSZXN1bHQ6Om9mZnNldE9mUmVzdWx0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQs
IGVuZCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6
Om9mZnNldE9mUmVpZmllZCgpKSk7CisKKyAgICAgICAgaWYgKHN3YXBSZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIHVubG9jayhzd2FwUmVnKTsKKworICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKworICAgICAgICBmYWlsZWRNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgIH07CisKKyAgICBpZiAobm9kZS0+Y2hpbGQzKCkudXNlS2lu
ZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVu
dCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQu
Z3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDMoKSwgYXJndW1lbnRH
UFIpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgc3dhcFJlZ0lmTmVl
ZGVkKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhh
cmd1bWVudEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0cmluZ0ltcGxHUFIpOwor
ICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgcm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhl
IG9wZXJhdGlvbi4KKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
Um9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikpOworICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBT
dHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihTdHJp
bmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisKKyAgICAgICAgcmVnRXhwVGVzdElubGluZUNhc2Uo
KTsKKworICAgICAgICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25SZWdFeHBUZXN0U3RyaW5nLCByZXN1bHRHUFIsIGdsb2JhbE9i
amVjdEdQUiwgYmFzZUdQUiwgYXJndW1lbnRHUFIpOworCisgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIHVuYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwor
ICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygp
OworCisgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisKKyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZOb3RDZWxsKGFyZ3VtZW50R1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5nKGFyZ3VtZW50R1BSKSk7CisKKyAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RyaW5nSW1wbEdQUik7CisgICAgLy8gSWYgdGhlIHN0cmluZyBp
cyBhIHJvcGUgb3IgMTYgYml0LCB3ZSBjYWxsIHRoZSBvcGVyYXRpb24uCisgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikp
OworICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3Rl
ZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKworICAgIHJlZ0V4cFRlc3RJbmxp
bmVDYXNlKCk7CisKKyAgICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BS
LCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworfQorI2Vsc2UKK05PX1JFVFVSTiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVnRXhwVGVzdElubGluZShOb2RlKiBub2RlKQoreworICAgIFVOVVNFRF9QQVJBTShu
b2RlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2VuZGlmCisKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlVHlwZSBv
cCA9IG5vZGUtPm9wKCk7CkBAIC0zODMzLDYgKzM5OTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNl
IFJlZ0V4cFRlc3RJbmxpbmU6IHsKKyAgICAgICAgY29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OiB7
CiAgICAgICAgIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5OSw2ICsxNDk5LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
UmVnRXhwTWF0Y2hGYXN0R2xvYmFsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBUZXN0
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTdHJpbmdSZXBsYWNlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc09iamVj
dChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mSXNPYmplY3QoTm9kZSopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzkx
LDYgKzc5MSw0NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfTsKIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRUZXN0VG9UZXN0SW5saW5lID0gWyZdIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9ub2RlLT5vcCgpICE9IFJlZ0V4cFRlc3QpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmIChyZWdFeHAtPmdsb2JhbE9y
U3RpY2t5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIGlmIChyZWdFeHAtPnVuaWNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgYXV0byBqaXRDb2RlQmxvY2sgPSByZWdFeHAtPmdl
dFJlZ0V4cEpJVENvZGVCbG9jaygpOworICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQ29kZVN0
YXRzOEJpdCA9IGppdENvZGVCbG9jay0+Z2V0OEJpdElubGluZVN0YXRzKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWlubGluZUNvZGVTdGF0czhCaXQuY2FuSW5saW5lKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiIGNhbid0IGlubGluZSBleHByXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvZGVTaXplID0gaW5saW5lQ29kZVN0YXRzOEJpdC5jb2RlU2l6ZSgpOwor
CisgICAgICAgICAgICAgICAgaWYgKGNvZGVTaXplID4gT3B0aW9uczo6bWF4aW11bVJlZ0V4cFRl
c3RJbmxpbmVDb2Rlc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgaW5saW5lQ29kZVN0YXRzOEJpdC5z
dGFja1NpemUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWxpZ25lZEZyYW1lU2l6ZSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gc3RkOjptYXgobV9n
cmFwaC5tX3BhcmFtZXRlclNsb3RzLCBhcmd1bWVudENvdW50Rm9yU3RhY2tTaXplKGFsaWduZWRG
cmFtZVNpemUpKTsKKworICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9ub2Rl
LT5vcmlnaW47CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBt
X25vZGUtPmNoaWxkcmVuLmp1c3RDaGVja3MoKSk7CisgICAgICAgICAgICAgICAgbV9ub2RlLT5j
b252ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKG1fZ3JhcGguZnJlZXplKHJlZ0V4cCkpOworICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9OworI2VuZGlmCisKICAgICAgICAgICAgIGF1dG8gY29udmVydFRvU3Rh
dGljID0gWyZdIHsKICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpICE9IFJlZ0V4cEV4
ZWMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgwOSw2ICs4NDcsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChmb2xkVG9Db25zdGFudCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkK
KyAgICAgICAgICAgIGlmIChjb252ZXJ0VGVzdFRvVGVzdElubGluZSgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisKICAgICAgICAgICAgIGlmIChjb252ZXJ0VG9TdGF0aWMoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzM3LDYgKzMzNyw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAK
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlj
a3k6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAg
ICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoK
ICAgICBjYXNlIE5ld1JlZ2V4cDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiAr
OTcsNyBAQAogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJh
dG9ycy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2luY2x1ZGUgIllhcnJKSVRS
ZWdpc3RlcnMuaCIKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWN1cnNhYmxlTGFtYmRhLmg+CkBAIC0xNTc5LDYgKzE1ODAsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgICAgICBjb21waWxlUmVnRXhw
VGVzdCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVnRXhwVGVzdElubGlu
ZToKKyAgICAgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKCk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgICAgICAgICBjb21waWxl
UmVnRXhwTWF0Y2hGYXN0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0MjQ4LDYgKzE0MjUy
LDE1MCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7CiAgICAgfQogCisj
aWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKyAgICB2b2lkIGNvbXBpbGVS
ZWdFeHBUZXN0SW5saW5lKCkKKyAgICB7CisgICAgICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0
PFJlZ0V4cCo+KG1fbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7CisKKyAgICAgICAgQVNT
RVJUKCFyZWdFeHAtPmdsb2JhbE9yU3RpY2t5KCkpOworCisgICAgICAgIGF1dG8gaml0Q29kZUJs
b2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRDb2RlQmxvY2soKTsKKyAgICAgICAgYXV0byBpbmxp
bmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5nZXQ4Qml0SW5saW5lU3RhdHMoKTsKKwor
ICAgICAgICB1bnNpZ25lZCBhbGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgaW5saW5lQ29kZVN0YXRzOEJpdC5zdGFja1NpemUo
KSk7CisKKyAgICAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKGFsaWdu
ZWRGcmFtZVNpemUpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrOEJpdFN0cmluZyA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUNhc2UgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25DYXNlID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRyOworCisgICAgICAg
IExWYWx1ZSBnbG9iYWxPYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd1JlZ0V4cE9iamVjdChtX25vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgTFZhbHVlIGFyZ3VtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBoYXZlU3RyaW5nQXJn
ID0gbV9ub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlOworCisgICAgICAgIGlm
IChoYXZlU3RyaW5nQXJnKQorICAgICAgICAgICAgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9ub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBhdXRvIHZtID0gJnRoaXMtPnZtKCk7
CisgICAgICAgIGF1dG8gc3RhY2tDaGVja2VyID0gJm1fZ3JhcGgubV9zdGFja0NoZWNrZXI7CisK
KyAgICAgICAgaWYgKCFoYXZlU3RyaW5nQXJnKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBp
c0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
U3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChpc0NlbGwoYXJndW1lbnQpLCB1c3VhbGx5KGlzQ2VsbENhc2UpLCByYXJlbHkob3BlcmF0aW9u
Q2FzZSkpOworCisgICAgICAgICAgICBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENh
c2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoYXJn
dW1lbnQpLCB1c3VhbGx5KGlzU3RyaW5nQ2FzZSksIHVuc3VyZShvcGVyYXRpb25DYXNlKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY2hlY2s4Qml0U3RyaW5n
KTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzUm9wZVN0cmluZyhhcmd1bWVudCwgbV9u
b2RlLT5jaGlsZDMoKSksIHVuc3VyZShvcGVyYXRpb25DYXNlKSwgdW5zdXJlKGNoZWNrOEJpdFN0
cmluZykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVjazhCaXRTdHJpbmcsIGlu
bGluZUNhc2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Um9wZVN0cmluZyhhcmd1bWVudCwgbV9ub2RlLT5jaGlsZDMoKSksIHVuc3VyZShvcGVyYXRpb25D
YXNlKSwgdW5zdXJlKGNoZWNrOEJpdFN0cmluZykpOworCisgICAgICAgICAgICBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGNoZWNrOEJpdFN0cmluZywgaW5saW5lQ2FzZSk7CisgICAgICAgIH0K
KworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIoYXJndW1lbnQsIG1f
aGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAg
ICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHN0cmlu
Z0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAorICAgICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCisgICAgICAgICAg
ICB1bnN1cmUob3BlcmF0aW9uQ2FzZSksIHVuc3VyZShpbmxpbmVDYXNlKSk7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaW5saW5lQ2FzZSwgb3BlcmF0aW9uQ2FzZSk7CisgICAgICAgIExWYWx1
ZSBzdHJpbmdMZW5ndGggPSBtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJ
bXBsX2xlbmd0aCk7CisgICAgICAgIExWYWx1ZSBzdHJpbmdEYXRhID0gbV9vdXQubG9hZFB0cihz
dHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7CisKKyAgICAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQzMik7CisgICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHN0cmluZ0RhdGEsIFZhbHVlUmVwOjpT
b21lTGF0ZVJlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKHN0cmluZ0xlbmd0aCwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoZ2xvYmFsT2JqZWN0LCBWYWx1
ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29u
c3RyYWluZWRWYWx1ZShhcmd1bWVudCwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gNTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKworICAgICAgICAgICAgICAgIEdQUlJlZyByZXR1cm5HUFIgPSBwYXJhbXNbMF0u
Z3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBwYXJhbXNbMV0u
Z3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0xlbmd0aEdQUiA9IHBhcmFtc1sy
XS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcGFyYW1z
WzNdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdHJpbmdHUFIgPSBwYXJhbXNbNF0u
Z3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gcGFyYW1zLmdwU2NyYXRj
aCgwKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmV0dXJuMkdQUiA9IHBhcmFtcy5ncFNjcmF0
Y2goMSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIG91dHB1dEdQUiA9IHBhcmFtcy5ncFNjcmF0
Y2goMik7CisgICAgICAgICAgICAgICAgR1BSUmVnIHRlbXAwR1BSID0gcGFyYW1zLmdwU2NyYXRj
aCgzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdGVtcDFHUFIgPSBwYXJhbXMuZ3BTY3JhdGNo
KDQpOworCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMCksIGluZGV4R1BSKTsKKworICAgICAgICAgICAgICAgIFlhcnI6OllhcnJKSVRSZWdpc3Rl
cnMgeWFyclJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQg
PSBzdHJpbmdEYXRhR1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXggPSBp
bmRleEdQUjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0cmluZ0xl
bmd0aEdQUjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1dCA9IG91dHB1dEdQ
UjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAg
ICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZWdUMSA9IHRlbXAxR1BSOworICAgICAgICAgICAg
ICAgIHlhcnJSZWdpc3RlcnMucmV0dXJuUmVnaXN0ZXIgPSByZXR1cm5HUFI7CisgICAgICAgICAg
ICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlcjIgPSByZXR1cm4yR1BSOworICAgICAg
ICAgICAgICAgIFlhcnI6OmppdENvbXBpbGVJbmxpbmVkVGVzdChzdGFja0NoZWNrZXIsIHJlZ0V4
cC0+cGF0dGVybigpLCByZWdFeHAtPmZsYWdzKCksIFlhcnI6OkNoYXJTaXplOjpDaGFyOCwgdm0s
IGppdCwgeWFyclJlZ2lzdGVycyk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7CisKKyAgICAgICAgICAgICAgICBhdXRvIGZhaWxlZE1hdGNoID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4sIHJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMCkpOworCisgICAgICAgICAgICAgICAgLy8gU2F2ZWQgY2FjaGVkIHJlc3Vs
dC4KKyAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gSlNHbG9iYWxPYmplY3Q6OnJl
Z0V4cEdsb2JhbERhdGFPZmZzZXQoKSArIFJlZ0V4cEdsb2JhbERhdGE6Om9mZnNldE9mQ2FjaGVk
UmVzdWx0KCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHJlZ0V4cCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0UmVnRXhwKCkpKTsK
KyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoc3RyaW5nR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNl
dE9mTGFzdElucHV0KCkpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihyZXR1cm5HUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENh
Y2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3Vs
dCwgc3RhcnQpKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIocmV0dXJuMkdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVk
UmVzdWx0OjpvZmZzZXRPZlJlc3VsdCgpICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBl
bmQpKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsg
UmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZlJlaWZpZWQoKSkpOworCisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHJldHVybkdQUik7Cisg
ICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAg
ICBmYWlsZWRNYXRjaC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCByZXR1cm5HUFIpOworICAgICAgICAgICAgICAgIGRv
bmUubGluaygmaml0KTsKKworICAgICAgICAgICAgfSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlubGluZXJl
c3VsdCA9IG1fb3V0LmFuY2hvcihwYXRjaHBvaW50KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkNhc2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9wZXJhdGlvblJlc3VsdDsKKworICAg
ICAgICBpZiAoaGF2ZVN0cmluZ0FyZykKKyAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IG1f
b3V0LmFuY2hvcih2bUNhbGwoSW50MzIsIG9wZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcsIGdsb2Jh
bE9iamVjdCwgYmFzZSwgYXJndW1lbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3Bl
cmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uUmVnRXhw
VGVzdCwgZ2xvYmFsT2JqZWN0LCBiYXNlLCBhcmd1bWVudCkpOworICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBpbmxpbmVyZXN1
bHQsIG9wZXJhdGlvblJlc3VsdCkpOworICAgIH0KKyNlbHNlCisgICAgTk9fUkVUVVJOIHZvaWQg
Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1h
dGNoRmFzdCgpCiAgICAgewogICAgICAgICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw3IEBA
IGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgXAogICAgIHYoVW5zaWdu
ZWQsIG1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hDYXNlTGVuZ3RoLCA1MCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVu
Z3RoLCAyMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KFVuc2lnbmVkLCBtYXhpbXVtUmVn
RXhwVGVzdElubGluZUNvZGVzaXplLCA1MDAsIE5vcm1hbCwgIk1heGltdW0gY29kZSBzaXplIGlu
IGJ5dGVzIGZvciBpbmxpbmVkIFJlZ0V4cC50ZXN0IEpJVCBjb2RlLiIpIFwKICAgICBcCiAgICAg
dihEb3VibGUsIGppdFBvbGljeVNjYWxlLCAxLjAsIE5vcm1hbCwgInNjYWxlIEpJVCB0aHJlc2hv
bGRzIHRvIHRoaXMgc3BlY2lmaWVkIHJhdGlvIGJldHdlZW4gMC4wIChjb21waWxlIEFTQVApIGFu
ZCAxLjAgKGNvbXBpbGUgbGlrZSBub3JtYWwpLiIpIFwKICAgICB2KEJvb2wsIGZvcmNlRWFnZXJD
b21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQx
LDEzIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0b1NvdXJjZVN0cmluZygpIGNvbnN0OwogCisj
aWYgRU5BQkxFKFlBUlJfSklUKQorICAgIFlhcnI6OllhcnJDb2RlQmxvY2sqIGdldFJlZ0V4cEpJ
VENvZGVCbG9jaygpCisgICAgeworICAgICAgICByZXR1cm4gbV9yZWdFeHBKSVRDb2RlLmdldCgp
OworICAgIH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNo
ZTsKICAgICBSZWdFeHAoVk0mLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1l
bnQuaAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tBbGlnbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw2ICs1MywxNiBAQCBpbmxp
bmUgdW5zaWduZWQgcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGCiAgICAgcmV0dXJuIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBsb2NhbFJlZ2lzdGVy
Q291bnQgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpIC0gQ2FsbGVyRnJhbWVB
bmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwogfQogCitpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDb3Vu
dEZvclN0YWNrU2l6ZSh1bnNpZ25lZCBzaXplSW5CeXRlcykKK3sKKyAgICB1bnNpZ25lZCBzaXpl
SW5SZWdpc3RlcnMgPSBzaXplSW5CeXRlcyAvIHNpemVvZih2b2lkKik7CisKKyAgICBpZiAoc2l6
ZUluUmVnaXN0ZXJzIDw9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBzaXplSW5SZWdpc3RlcnMgLSBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVyczsKK30KKwogaW5saW5lIHVuc2lnbmVkIGxvZ1N0YWNrQWxpZ25t
ZW50UmVnaXN0ZXJzKCkKIHsKICAgICByZXR1cm4gV1RGOjpmYXN0TG9nMihzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3Bw
CShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIllhcnIuaCIK
ICNpbmNsdWRlICJZYXJyQ2Fub25pY2FsaXplLmgiCiAjaW5jbHVkZSAiWWFyckRpc2Fzc2VtYmxl
ci5oIgorI2luY2x1ZGUgIllhcnJKSVRSZWdpc3RlcnMuaCIKICNpbmNsdWRlICJZYXJyTWF0Y2hp
bmdDb250ZXh0SG9sZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRl
IDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0xODIsMTE1ICsxODMsMTEgQEAgc3RkOjp0dXBsZTxCb3ll
ck1vb3JlQml0bWFwOjpNYXAsIEJveWVyTQogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgV1RGTW92
ZShtYXApLCBXVEZNb3ZlKGNoYXJhY3RlcnNGYXN0UGF0aCkgfTsKIH0KIAotY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbywgcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7Cit0ZW1wbGF0ZTxjbGFzcyBZYXJySklUUmVncyA9IFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJz
PgorY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbyB7CiAKLSNp
ZiBDUFUoQVJNX1RIVU1CMikKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQg
PSBBUk1SZWdpc3RlcnM6OnIwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRl
eCA9IEFSTVJlZ2lzdGVyczo6cjE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxl
bmd0aCA9IEFSTVJlZ2lzdGVyczo6cjI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IG91dHB1dCA9IEFSTVJlZ2lzdGVyczo6cjM7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgcmVnVDAgPSBBUk1SZWdpc3RlcnM6OnI0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMSA9IEFSTVJlZ2lzdGVyczo6cjU7Ci0gICAgLy8gcjYgaXMgcmVzZXJ2ZWQg
Zm9yIE1hY3JvQXNzZW1ibGVyQVJNdjcsCi0gICAgLy8gcjcgaXMgZnAuCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gQVJNUmVnaXN0ZXJzOjpyODsKLSAgICAvLyByOSBp
cyBzYiBpbiBFQUJJLgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3Rh
cnQgPSBBUk1SZWdpc3RlcnM6OnIxMDsgLy8gcjEwIGlzIFNMLCBidXQgbm8gbG9uZ2VyIGEgc3Bl
Y2lhbCByZWdpc3Rlci4KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJldHVyblJlZ2lzdGVyMiA9IEFSTVJlZ2lzdGVyczo6cjE7Ci0KLSNlbGlmIENQVShBUk02
NCkKLSAgICAvLyBBcmd1bWVudCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgaW5wdXQgPSBBUk02NFJlZ2lzdGVyczo6eDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIGluZGV4ID0gQVJNNjRSZWdpc3RlcnM6OngxOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBBUk02NFJlZ2lzdGVyczo6eDI7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gQVJNNjRSZWdpc3RlcnM6
Ong0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0g
QVJNNjRSZWdpc3RlcnM6Ong0OyAvLyBMb2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9s
ZGVyIGluIHRoZSBwcm9sb2d1ZS4KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJl
ZWxpc3RTaXplUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDU7IC8vIE9ubHkgdXNlZCBkdXJp
bmcgaW5pdGlhbGl6YXRpb24uCi0KLSAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IEFSTTY0UmVnaXN0ZXJzOjp4NjsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBBUk02NFJlZ2lzdGVyczo6eDc7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gQVJNNjRSZWdpc3RlcnM6Ong4
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0g
QVJNNjRSZWdpc3RlcnM6Ong5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdV
bmljb2RlSW5wdXRBbmRUcmFpbCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTA7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIHVuaWNvZGVUZW1wID0gQVJNNjRSZWdpc3RlcnM6Ong1OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgPSBBUk02NFJlZ2lzdGVy
czo6eDExOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBzdXBwbGVtZW50YXJ5UGxh
bmVzQmFzZSA9IEFSTTY0UmVnaXN0ZXJzOjp4MTI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGxlYWRpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6eDEzOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IEFSTTY0UmVn
aXN0ZXJzOjp4MTQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGVuZE9mU3RyaW5n
QWRkcmVzcyA9IEFSTTY0UmVnaXN0ZXJzOjp4MTU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFJl
Z2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDA7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IEFSTTY0UmVnaXN0ZXJzOjp4
MTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIHN1cnJvZ2F0ZVRhZ01hc2sg
PSBUcnVzdGVkSW1tMzIoMHhmZmZmZmMwMCk7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6YTI7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IE1JUFNSZWdpc3RlcnM6OmEz
OwotCi0gICAgLy8gdDAgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KLSAgICAv
LyB0MSBpcyByZXNlcnZlZCBmb3IgTWFjcm9Bc3NlbWJsZXJNSVBTLgotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQyOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQzOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgPSBNSVBTUmVnaXN0ZXJzOjp0
NTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnYwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlcjIgPSBNSVBTUmVnaXN0ZXJzOjp2MTsKLQotI2VsaWYgQ1BVKFg4Nl82NCkKLSNpZiAh
T1MoV0lORE9XUykKLSAgICAvLyBBcmd1bWVudCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVkaTsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVzaTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6ZWN4OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBYODZSZWdpc3Rl
cnM6OnI4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVy
ID0gWDg2UmVnaXN0ZXJzOjpyODsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhv
bGRlciBpbiB0aGUgcHJvbG9ndWUuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZy
ZWVsaXN0U2l6ZVJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyOTsgLy8gT25seSB1c2VkIGR1cmlu
ZyBpbml0aWFsaXphdGlvbi4KLSNlbHNlCi0gICAgLy8gSWYgdGhlIHJldHVybiB2YWx1ZSBkb2Vz
bid0IGZpdCBpbiA2NGJpdHMsIGl0cyBkZXN0aW5hdGlvbiBpcyBwb2ludGVkIGJ5IHJjeCBhbmQg
dGhlIHBhcmFtZXRlcnMgYXJlIHNoaWZ0ZWQuCi0gICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5Lzc1NzJ6dHo0LmFzcHgKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihNYXRjaFJlc3VsdCkgPiBzaXplb2Yodm9pZCopLCAiTWF0Y2hSZXN1bHQgZG9lcyBub3QgZml0
IGluIDY0Yml0cyIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4
NlJlZ2lzdGVyczo6ZWR4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9
IFg4NlJlZ2lzdGVyczo6cjg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0
aCA9IFg4NlJlZ2lzdGVyczo6cjk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91
dHB1dCA9IFg4NlJlZ2lzdGVyczo6cjEwOwotI2VuZGlmCi0KLSAgICAvLyBTY3JhdGNoIHJlZ2lz
dGVycwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IFg4NlJlZ2lzdGVy
czo6ZWF4OwotI2lmICFPUyhXSU5ET1dTKQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZWdUMSA9IFg4NlJlZ2lzdGVyczo6cjk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJlZ1QyID0gWDg2UmVnaXN0ZXJzOjpyMTA7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZWdUMSA9IFg4NlJlZ2lzdGVyczo6ZWN4OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVyczo6ZWRpOwotI2VuZGlmCi0KLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gWDg2UmVnaXN0ZXJz
OjplYng7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IHJlbWFpbmluZ01hdGNoQ291bnQgPSBYODZSZWdpc3RlcnM6OnIxMjsKLSNlbHNlCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgPSBYODZSZWdpc3Rl
cnM6OmVzaTsKLSNlbmRpZgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdVbmlj
b2RlSW5wdXRBbmRUcmFpbCA9IFg4NlJlZ2lzdGVyczo6cjEzOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCA9IFg4NlJlZ2lzdGVyczo6cjE0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgPSBYODZSZWdpc3RlcnM6
OnIxNTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9
IFg4NlJlZ2lzdGVyczo6ZWF4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1
cm5SZWdpc3RlcjIgPSBYODZSZWdpc3RlcnM6OmVkeDsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
VHJ1c3RlZEltbTMyIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlID0gVHJ1c3RlZEltbTMyKDB4MTAw
MDApOwotICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIGxlYWRpbmdTdXJyb2dhdGVU
YWcgPSBUcnVzdGVkSW1tMzIoMHhkODAwKTsKLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJ
bW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IFRydXN0ZWRJbW0zMigweGRjMDApOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIHN1cnJvZ2F0ZVRhZ01hc2sgPSBUcnVzdGVkSW1t
MzIoMHhmZmZmZmMwMCk7CisjaWZkZWYgIEpJVF9VTklDT0RFX0VYUFJFU1NJT05TCisgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGZmZmZmYzAwKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCkBAIC0zNjAsOCArMjU3LDggQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgdm9pZCBpbml0UGFy
ZW5Db250ZXh0RnJlZUxpc3QoKQogICAgIHsKLSAgICAgICAgUmVnaXN0ZXJJRCBwYXJlbkNvbnRl
eHRQb2ludGVyID0gcmVnVDA7Ci0gICAgICAgIFJlZ2lzdGVySUQgbmV4dFBhcmVuQ29udGV4dFBv
aW50ZXIgPSByZWdUMjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5D
b250ZXh0UG9pbnRlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIgPSBtX3JlZ3MucmVnVDI7CiAKICAgICAg
ICAgc2l6ZV90IHBhcmVuQ29udGV4dFNpemUgPSBQYXJlbkNvbnRleHQ6OnNpemVGb3IobV9wYXJl
bkNvbnRleHRTaXplcyk7CiAKQEAgLTM3Miw5NCArMjY5LDkzIEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0
SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgZnJlZWxpc3RTaXpl
UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9yZWdzLm1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlBh
dHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsK
ICAgICAgICAgLy8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RSZWdpc3Rl
ciBhcmUgbGlrZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
bWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNv
bnRleHRCdWZmZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAgICAgICBKdW1wIGVtcHR5RnJl
ZUxpc3QgPSBicmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAgICAgICBt
b3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVyLCBuZXh0
UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGFkZFB0cihmcmVlbGlzdFJlZ2lzdGVyLCBm
cmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0gICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIocGFyZW5D
b250ZXh0U2l6ZSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBNYXRjaGlu
Z0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXIoKSksIG1fcmVncy5m
cmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1wdHlGcmVl
TGlzdCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1fcmVncy5m
cmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxpc3RSZWdp
c3RlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7CisgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJlZWxpc3RS
ZWdpc3RlciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5hZGRQdHIo
bV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rlcik7Cisg
ICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhcmVuQ29u
dGV4dFNpemUpLCBtX3JlZ3MuZnJlZWxpc3RTaXplUmVnaXN0ZXIpOwogCi0gICAgICAgIExhYmVs
IGxvb3BUb3AodGhpcyk7Ci0gICAgICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2hQdHIoQWJvdmUs
IG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0gICAgICAg
IHN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBBZGRyZXNzKHBhcmVuQ29udGV4dFBv
aW50ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIG1vdmUobmV4dFBh
cmVuQ29udGV4dFBvaW50ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBwYXJlbkNvbnRleHRQb2ludGVyLCBuZXh0
UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGp1bXAobG9vcFRvcCk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wVG9wKCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGluaXREb25lID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6Om5leHRP
ZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5tb3ZlKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBw
YXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBhcmVuQ29udGV4dFBvaW50ZXIsIG5l
eHRQYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuanVtcChsb29wVG9wKTsKIAot
ICAgICAgICBpbml0RG9uZS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50ZXIsIFBhcmVuQ29udGV4dDo6
bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIGVtcHR5RnJlZUxpc3QubGluayh0aGlzKTsKKyAgICAg
ICAgaW5pdERvbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKKyAgICAg
ICAgZW1wdHlGcmVlTGlzdC5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCBhbGxvY2F0
ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB2b2lkIGFsbG9jYXRlUGFyZW5D
b250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0gICAgICAg
IG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxpc3RSZWdp
c3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlbWFpbmluZ01hdGNoQ291
bnQpOwotICAgICAgICBtX2hpdE1hdGNoTGltaXQuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVtYWluaW5nTWF0Y2hDb3VudCkpOwotICAgICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHJl
c3VsdCk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmVlbGlzdFJlZ2lzdGVyLCBQYXJlbkNv
bnRleHQ6Om5leHRPZmZzZXQoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBtX2Fib3J0
RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlcikpOworICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3VudCk7Cisg
ICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpKTsKKyAgICAgICAgbV9q
aXQubW92ZShtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MuZnJlZWxpc3RSZWdpc3Rlciwg
UGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3Rlcik7CiAg
ICAgfQogCi0gICAgdm9pZCBmcmVlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgaGVhZFB0clJlZ2lz
dGVyLCBSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdpc3RlcikKKyAgICB2b2lkIGZyZWVQYXJlbkNv
bnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaGVhZFB0clJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdIZWFkUHRyUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQo
KSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7Ci0gICAgICAgIHN0b3JlUHRyKGZyZWVsaXN0UmVnaXN0
ZXIsIEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSkp
OwotICAgICAgICBtb3ZlKGhlYWRQdHJSZWdpc3RlciwgZnJlZWxpc3RSZWdpc3Rlcik7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaGVhZFB0clJlZ2lzdGVy
LCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7CisgICAg
ICAgIG1faml0LnN0b3JlUHRyKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSk7
CisgICAgICAgIG1faml0Lm1vdmUoaGVhZFB0clJlZ2lzdGVyLCBtX3JlZ3MuZnJlZWxpc3RSZWdp
c3Rlcik7CiAgICAgfQogCi0KLSAgICB2b2lkIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3VudFRvUGFy
ZW5Db250ZXh0KFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIs
IFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSKQorICAgIHZvaWQgc3RvcmVCZWdpbkFuZE1hdGNo
QW1vdW50VG9QYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmVnaW5HUFIs
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoQW1vdW50R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCiAgICAgewogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSArIDQgPT0gUGFyZW5Db250ZXh0OjptYXRj
aEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1hdGNoQW1v
dW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6OmJlZ2lu
T2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1hdGNoQW1v
dW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoUGFy
ZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkQmVnaW5B
bmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIs
IFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIpCisgICAgdm9p
ZCBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBi
ZWdpbkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIpCiAgICAg
ewogICAgICAgICBzdGF0aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSArIDQg
PT0gUGFyZW5Db250ZXh0OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgbG9hZFBhaXIz
MihwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6OmJlZ2luT2Zmc2V0
KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUGFpcjMy
KHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihQYXJlbkNvbnRl
eHQ6OmJlZ2luT2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOwogICAgIH0KIAot
ICAgIHZvaWQgc2F2ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHBhcmVuQ29udGV4dFJlZywgUmVn
aXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RT
dWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCisgICAgdm9p
ZCBzYXZlUGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVuQ29udGV4
dFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgdW5zaWduZWQgZmlyc3RT
dWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwgdW5zaWduZWQgc3VicGF0dGVybkJh
c2VGcmFtZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgbG9hZEZyb21GcmFtZShzdWJwYXR0ZXJu
QmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50
SW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3VudFRvUGFy
ZW5Db250ZXh0KGluZGV4LCB0ZW1wUmVnLCBwYXJlbkNvbnRleHRSZWcpOworICAgICAgICBzdG9y
ZUJlZ2luQW5kTWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChtX3JlZ3MuaW5kZXgsIHRlbXBSZWcs
IHBhcmVuQ29udGV4dFJlZyk7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUoc3VicGF0dGVybkJhc2VG
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRyZXNzSW5k
ZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlUHRyKHRlbXBSZWcsIEFkZHJlc3MocGFyZW5D
b250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSkpOworICAgICAg
ICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNv
bnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSk7CiAgICAgICAg
IGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMp
IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0U3VicGF0dGVy
bjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7CiAgICAgICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAgICAgIGxvYWQ2
NChBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWduZWQpKSwg
dGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2NCh0ZW1wUmVnLCBBZGRyZXNzKHBhcmVu
Q29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1YnBhdHRlcm4pKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
cmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKHVuc2lnbmVkKSksIHRlbXBS
ZWcpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGVtcFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRlcm5PZmZz
ZXQoc3VicGF0dGVybikpKTsKICAgICAgICAgICAgICAgICBjbGVhclN1YnBhdHRlcm5TdGFydChz
dWJwYXR0ZXJuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdWJwYXR0ZXJu
QmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlvbiA9IHN1YnBhdHRlcm5C
YXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5Db250ZXh0U2l6ZXMuZnJh
bWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
ZnJhbWVMb2NhdGlvbiwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzdG9yZVB0cih0ZW1wUmVnLCBB
ZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zmc2V0KG1f
cGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRyX3QpKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9mZnNldChtX3Bh
cmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0cl90KSkpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlUGFyZW5Db250ZXh0KFJlZ2lzdGVy
SUQgcGFyZW5Db250ZXh0UmVnLCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3Vi
cGF0dGVybiwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNl
RnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHJlc3RvcmVQYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RTdWJwYXR0
ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAg
ICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQocGFyZW5Db250ZXh0UmVn
LCBpbmRleCwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgc3VicGF0dGVy
bkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4
KCkpOworICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQocGFy
ZW5Db250ZXh0UmVnLCBtX3JlZ3MuaW5kZXgsIHRlbXBSZWcpOworICAgICAgICBzdG9yZVRvRnJh
bWUobV9yZWdzLmluZGV4LCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIHN0b3JlVG9GcmFtZSh0ZW1w
UmVnLCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhwYXJlbkNv
bnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwgdGVtcFJlZyk7
CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocGFyZW5Db250
ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSksIHRlbXBSZWcpOwog
ICAgICAgICBzdG9yZVRvRnJhbWUodGVtcFJlZywgc3VicGF0dGVybkJhc2VGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRyZXNzSW5kZXgoKSk7CiAgICAg
ICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVy
bnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0U3VicGF0
dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7CiAgICAg
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAgICAgIGxv
YWQ2NChBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zm
c2V0KHN1YnBhdHRlcm4pKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2NCh0ZW1w
UmVnLCBBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWduZWQp
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1YnBhdHRl
cm4pKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0ZW1wUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAq
IHNpemVvZih1bnNpZ25lZCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBz
dWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlvbiA9IHN1
YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5Db250ZXh0
U2l6ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9mZnNl
dChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0cl90
KSksIHRlbXBSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9mZnNldCht
X3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0cl90KSks
IHRlbXBSZWcpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKHRlbXBSZWcsIGZyYW1lTG9jYXRp
b24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNDg3LDcgKzM4Myw3IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQg
bWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKFJlZ2lzdGVySUQgY2hhcmFjdGVyLCBKdW1wTGlzdCYg
ZmFpbHVyZXMsIEp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdlKiByYW5n
ZXMsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNoYXIzMiog
bWF0Y2hlcywgdW5zaWduZWQgbWF0Y2hDb3VudCkKKyAgICB2b2lkIG1hdGNoQ2hhcmFjdGVyQ2xh
c3NSYW5nZShNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgZmFpbHVyZXMsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgbWF0Y2hE
ZXN0LCBjb25zdCBDaGFyYWN0ZXJSYW5nZSogcmFuZ2VzLCB1bnNpZ25lZCBjb3VudCwgdW5zaWdu
ZWQqIG1hdGNoSW5kZXgsIGNvbnN0IFVDaGFyMzIqIG1hdGNoZXMsIHVuc2lnbmVkIG1hdGNoQ291
bnQpCiAgICAgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICAvLyBwaWNrIHdoaWNoIHJhbmdl
IHdlJ3JlIGdvaW5nIHRvIGdlbmVyYXRlCkBAIC00OTgsMzMgKzM5NCwzMyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAvLyBjaGVjayBpZiB0
aGVyZSBhcmUgYW55IHJhbmdlcyBvciBtYXRjaGVzIGJlbG93IGxvLiAgSWYgbm90LCBqdXN0IGps
IHRvIGZhaWx1cmUgLQogICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcgZWxzZSB0
byBjaGVjaywgY2hlY2sgdGhhdCBmaXJzdCwgaWYgaXQgZmFsbHMgdGhyb3VnaCBqbXAgdG8gZmFp
bHVyZS4KICAgICAgICAgICAgIGlmICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAobWF0
Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGxvT3JBYm92
ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWdu
ZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb09y
QWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbG8pKTsK
IAogICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNvZGUgZm9yIGFsbCByYW5nZXMgYmVmb3Jl
IHRoaXMgb25lCiAgICAgICAgICAgICAgICAgaWYgKHdoaWNoKQogICAgICAgICAgICAgICAgICAg
ICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0
LCByYW5nZXMsIHdoaWNoLCBtYXRjaEluZGV4LCBtYXRjaGVzLCBtYXRjaENvdW50KTsKIAogICAg
ICAgICAgICAgICAgIHdoaWxlICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAobWF0Y2hl
c1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFw
cGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpbWF0
Y2hlc1sqbWF0Y2hJbmRleF0pKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBl
bmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbWF0Y2hlc1sqbWF0Y2hJbmRleF0pKSk7
CiAgICAgICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAg
IGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICAgICAgbG9PckFi
b3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsoJm1faml0KTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hpY2gpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGxv
T3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5P
ckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQp
bG8pKTsKIAogICAgICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0
ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgsIG1hdGNo
ZXMsIG1hdGNoQ291bnQpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAg
ICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbG9PckFi
b3ZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWdu
ZWQgc2hvcnQpbG8pKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWxvKSkpOwogCiAgICAgICAgICAgICB3aGlsZSAoKCpt
YXRjaEluZGV4IDwgbWF0Y2hDb3VudCkgJiYgKG1hdGNoZXNbKm1hdGNoSW5kZXhdIDw9IGhpKSkK
ICAgICAgICAgICAgICAgICArKyptYXRjaEluZGV4OwogCi0gICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWdu
ZWQgc2hvcnQpaGkpKSk7CisgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCloaSkpKTsKICAgICAgICAgICAgIC8vIGZhbGwg
dGhyb3VnaCB0byBoZXJlLCB0aGUgdmFsdWUgaXMgYWJvdmUgaGkuCiAKICAgICAgICAgICAgIC8v
IHNodWZmbGUgYWxvbmcgJiBsb29wIGFyb3VuZCBpZiB0aGVyZSBhcmUgYW55IG1vcmUgbWF0Y2hl
cyB0byBoYW5kbGUuCkBAIC01MzQsMjQgKzQzMCwyNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0gd2hpbGUgKGNvdW50KTsKICAgICB9CiAKLSAg
ICB2b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoUmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIEp1bXBMaXN0
JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlckNsYXNzKiBjaGFyQ2xhc3MpCisgICAgdm9pZCBt
YXRjaENoYXJhY3RlckNsYXNzKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3Rlciwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlckNsYXNz
KiBjaGFyQ2xhc3MpCiAgICAgewogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX3RhYmxlICYmICFt
X2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3MgdGFi
bGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNoYXJDbGFzcy0+
bV90YWJsZSkpOwotICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2hUZXN0OChjaGFy
Q2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IFplcm8gOiBOb25aZXJvLCB0YWJsZUVudHJ5KSk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIHRhYmxlRW50cnkoY2hh
cmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihjaGFyQ2xhc3MtPm1fdGFibGUpKTsK
KyAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDgoY2hhckNsYXNz
LT5tX3RhYmxlSW52ZXJ0ZWQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCB0YWJsZUVudHJ5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBKdW1wTGlzdCB1bmljb2RlRmFpbDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHVuaWNvZGVGYWlsOwogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX21hdGNoZXNV
bmljb2RlLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZS5zaXplKCkpIHsKLSAg
ICAgICAgICAgIEp1bXBMaXN0IGlzQXNjaWk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgaXNBc2NpaTsKICAgICAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5z
aXplKCkgfHwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgaXNB
c2NpaS5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJ
bW0zMigweDdmKSkpOworICAgICAgICAgICAgICAgIGlzQXNjaWkuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigweDdmKSkpOwogCiAgICAgICAgICAgICBpZiAoY2hhckNsYXNz
LT5tX21hdGNoZXNVbmljb2RlLnNpemUoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjaCA9IGNoYXJDbGFzcy0+bV9tYXRjaGVzVW5p
Y29kZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihF
cXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3Rl
ciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIApAQCAtNTYwLDI1ICs0NTYsMjUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGxvID0gY2hhckNs
YXNzLT5tX3Jhbmdlc1VuaWNvZGVbaV0uYmVnaW47CiAgICAgICAgICAgICAgICAgICAgIFVDaGFy
MzIgaGkgPSBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5lbmQ7CiAKLSAgICAgICAgICAg
ICAgICAgICAgSnVtcCBiZWxvdyA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIsIEltbTMy
KGxvKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGhpKSkpOwotICAgICAgICAgICAgICAgICAg
ICBiZWxvdy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBiZWxvdyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hh
cmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobG8pKTsKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5P
ckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihoaSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYmVsb3cubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSB8
fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB1bmljb2RlRmFp
bCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGlzQXNjaWkubGluayh0aGlzKTsKKyAgICAgICAgICAg
ICAgICB1bmljb2RlRmFpbCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGlzQXNjaWkubGlu
aygmbV9qaXQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9yYW5nZXMu
c2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4ID0gMDsKLSAgICAgICAg
ICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVzOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNoYXJh
Y3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5iZWdpbigpLCBj
aGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+bV9tYXRj
aGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAgICAgICB3
aGlsZSAobWF0Y2hJbmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKLSAgICAgICAg
ICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMy
KCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkpOwor
ICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQg
c2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIAotICAgICAgICAg
ICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmxpbmsoJm1faml0
KTsKICAgICAgICAgfSBlbHNlIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkpIHsKICAg
ICAgICAgICAgIC8vIG9wdGltaXphdGlvbjogZ2F0aGVyICdhJywnQScgZXRjIGJhY2sgdG9nZXRo
ZXIsIGNhbiBtYXNrICYgdGVzdCBvbmNlLgogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG1hdGNo
ZXNBWmF6OwpAQCAtNTkzLDc4ICs0ODksODMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVyKGNoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaCkpKTsKKyAgICAgICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVyLCBN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAodW5zaWduZWQgY291bnRBWmF6ID0gbWF0Y2hlc0FaYXouc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0ZXIp
OworICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigzMiksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50QVphejsgKytpKQotICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5k
KGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJbW0zMihtYXRjaGVzQVpheltpXSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihtYXRjaGVzQVpheltpXSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJDbGFzcy0+
bV9yYW5nZXNVbmljb2RlLnNpemUoKSkKLSAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxpbmsodGhp
cyk7CisgICAgICAgICAgICB1bmljb2RlRmFpbC5saW5rKCZtX2ppdCk7CiAgICAgfQogCiAjaWYg
RU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCi0gICAgdm9pZCBhZHZhbmNlSW5k
ZXhBZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKGNvbnN0IFBhdHRlcm5UZXJtKiB0ZXJtLCBK
dW1wTGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBSZWdpc3RlcklE
IGNoYXJhY3RlcikKKyAgICB2b2lkIGFkdmFuY2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJt
TWF0Y2goY29uc3QgUGF0dGVyblRlcm0qIHRlcm0sIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQodGVybS0+dHlwZSA9PSBQ
YXR0ZXJuVGVybTo6VHlwZTo6Q2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0ZXJtLT5p
c0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAyIDogMSks
IGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAx
KSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0gYnJhbmNo
MzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdz
LmluZGV4KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQk1QQ2hhciA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBtX3JlZ3Mu
c3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwogICAgICAgICAgICAgZmFpbHVyZXNBZnRlckluY3Jl
bWVudGluZ0luZGV4LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAg
ICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIEp1bXBzIGlmIGlucHV0IG5vdCBhdmFp
bGFibGU7IHdpbGwgaGF2ZSAoaW5jb3JyZWN0bHkpIGluY3JlbWVudGVkIGFscmVhZHkhCi0gICAg
SnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9IDApCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcElmTm9BdmFpbGFibGVJbnB1dCh1bnNpZ25lZCBj
b3VudFRvQ2hlY2sgPSAwKQogICAgIHsKICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykKLSAgICAg
ICAgICAgIGFkZDMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2spLCBtX3JlZ3MuaW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBtX3JlZ3Mu
aW5kZXgsIG1fcmVncy5sZW5ndGgpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykKKyAgICB7CisgICAg
ICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2spLCBtX3Jl
Z3MuaW5kZXgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93T3JFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsKICAgICB9CiAKLSAg
ICBKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVja05vdEVub3VnaElucHV0KE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCiAgICAgewotICAgICAgICBhZGQzMihJbW0zMihj
b3VudFRvQ2hlY2spLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihCZWxvd09yRXF1
YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICBtX2ppdC5hZGQzMihtX3JlZ3MuaW5kZXgsIGFk
ZGl0aW9uYWxBbW91bnQpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlLCBhZGRpdGlvbmFsQW1vdW50LCBtX3JlZ3MubGVuZ3RoKTsKICAgICB9CiAK
LSAgICBKdW1wIGNoZWNrTm90RW5vdWdoSW5wdXQoUmVnaXN0ZXJJRCBhZGRpdGlvbmFsQW1vdW50
KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrSW5wdXQoKQogICAgIHsKLSAgICAgICAg
YWRkMzIoaW5kZXgsIGFkZGl0aW9uYWxBbW91bnQpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIo
QWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVn
cy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgY2hlY2tJbnB1dCgpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgYXRFbmRPZklucHV0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2gz
MihCZWxvd09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgp
OwogICAgIH0KIAotICAgIEp1bXAgYXRFbmRPZklucHV0KCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RBdEVuZE9mSW5wdXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVx
dWFsLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsKICAgICB9
CiAKLSAgICBKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0
aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1wUmVnKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgbGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRpdmVDaGFy
YWN0ZXJPZmZzZXQsIHRlbXBSZWcsIG1fcmVncy5pbmRleCk7CiAgICAgfQogCi0gICAgQmFzZUlu
ZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MoQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRp
dmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVySUQgdGVtcFJlZywgUmVnaXN0ZXJJRCBpbmRleFJl
ZyA9IGluZGV4KQorICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggbmVnYXRpdmVPZmZzZXRJ
bmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgaW5kZXhSZWcpCiAgICAgewotICAgICAgICBSZWdpc3RlcklEIGJhc2UgPSBpbnB1dDsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmFzZSA9IG1fcmVncy5pbnB1dDsK
IAotICAgICAgICAvLyBCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50MzJfdCBv
ZmZzZXQuIEdpdmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCi0gICAgICAgIC8vIGV4cHJl
c3Npb24gdGhhdCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIEJhc2VJbmRleCdzIHNp
Z25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CisgICAgICAgIC8vIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50MzJfdCBvZmZzZXQuIEdpdmVuIHRo
YXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCisgICAgICAgIC8vIGV4cHJlc3Npb24gdGhhdCBoYXMg
dW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgncyBz
aWduZWQgb2Zmc2V0IGlzIGluc3VmZmljaWVudAogICAgICAgICAvLyBmb3IgYWRkcmVzc2luZyBp
biBleHRyZW1lIGNhc2VzIHdoZXJlIHdlIG1pZ2h0IHVuZGVyZmxvdy4gVGhlcmVmb3JlIHdlIGNo
ZWNrIHRvIHNlZSBpZgogICAgICAgICAvLyBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCB3aWxsIHVu
ZGVyZmxvdyBkaXJlY3RseSBvciBhZnRlciBjb252ZXJ0aW5nIGZvciAxNiBiaXQgY2hhcmFjdGVy
cy4KICAgICAgICAgLy8gSWYgc28sIHdlIGRvIG91ciBvd24gYWRkcmVzcyBjYWxjdWxhdGluZyBi
eSBhZGp1c3RpbmcgdGhlIGJhc2UsIHVzaW5nIHRoZSByZXN1bHQgcmVnaXN0ZXIKQEAgLTY3Mywx
MSArNTc0LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0QWRqdXN0QW1vdW50ID0gMHg0MDAwMDAwMDsKICAgICAgICAg
aWYgKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0ID4gbWF4aW11bU5lZ2F0aXZlT2Zmc2V0Rm9yQ2hh
cmFjdGVyU2l6ZSkgewogICAgICAgICAgICAgYmFzZSA9IHRlbXBSZWc7Ci0gICAgICAgICAgICBt
b3ZlKGlucHV0LCBiYXNlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmlucHV0LCBi
YXNlKTsKICAgICAgICAgICAgIHdoaWxlIChuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCA+IG1heGlt
dW1OZWdhdGl2ZU9mZnNldEZvckNoYXJhY3RlclNpemUpIHsKLSAgICAgICAgICAgICAgICBzdWJQ
dHIoVHJ1c3RlZEltbTMyKG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAgICAgICAg
ICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG9mZnNldEFkanVz
dEFtb3VudCksIGJhc2UpOwogICAgICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplICE9IENoYXJT
aXplOjpDaGFyOCkKLSAgICAgICAgICAgICAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihvZmZz
ZXRBZGp1c3RBbW91bnQpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwgYmFzZSk7
CiAgICAgICAgICAgICAgICAgbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgLT0gb2Zmc2V0QWRqdXN0
QW1vdW50OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODUsNjcgKzU4Niw3MiBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIENoZWNrZWQ8
aW50MzJfdD4gY2hhcmFjdGVyT2Zmc2V0KC1zdGF0aWNfY2FzdDxpbnQzMl90PihuZWdhdGl2ZUNo
YXJhY3Rlck9mZnNldCkpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpD
aGFyOCkKLSAgICAgICAgICAgIHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVnLCBUaW1l
c09uZSwgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGNoYXIp
KSk7CisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3Mu
aW5wdXQsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIGNoYXJhY3Rlck9mZnNl
dCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihjaGFyKSkpOwogCi0gICAgICAgIHJldHVy
biBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVnLCBUaW1lc1R3bywgY2hhcmFjdGVyT2Zmc2V0ICog
c3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNUd28sIGNoYXJhY3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNp
emVvZihVQ2hhcikpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBS
RVNTSU9OUykKLSAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhckltcGwoUmVnaXN0ZXJJRCByZXN1
bHRSZWcpCisgICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NoYXJTaXplID09
IENoYXJTaXplOjpDaGFyMTYpOwogCi0gICAgICAgIEp1bXBMaXN0IG5vdFVuaWNvZGU7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub3RVbmljb2RlOwogCi0gICAgICAgIGxvYWQx
NlVuYWxpZ25lZChyZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgcmVzdWx0UmVnKTsKKyAgICAgICAg
bV9qaXQubG9hZDE2VW5hbGlnbmVkKG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgcmVz
dWx0UmVnKTsKIAogICAgICAgICAvLyBJcyB0aGUgY2hhcmFjdGVyIGEgbGVhZGluZyBzdXJyb2dh
dGU/Ci0gICAgICAgIGFuZDMyKHN1cnJvZ2F0ZVRhZ01hc2ssIHJlc3VsdFJlZywgdW5pY29kZVRl
bXApOwotICAgICAgICBub3RVbmljb2RlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgdW5pY29k
ZVRlbXAsIGxlYWRpbmdTdXJyb2dhdGVUYWcpKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoWWFyckpJ
VERlZmF1bHRSZWdpc3RlcnM6OnN1cnJvZ2F0ZVRhZ01hc2ssIHJlc3VsdFJlZywgbV9yZWdzLnVu
aWNvZGVUZW1wKTsKKyAgICAgICAgbm90VW5pY29kZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MudW5pY29kZVRlbXAsIG1fcmVncy5sZWFkaW5n
U3Vycm9nYXRlVGFnKSk7CiAKICAgICAgICAgLy8gSXMgdGhlIGlucHV0IGxvbmcgZW5vdWdoIHRv
IHJlYWQgYSB0cmFpbGluZyBzdXJyb2dhdGU/Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
MiksIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKTsKLSAgICAgICAgbm90VW5pY29kZS5hcHBlbmQo
YnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIGVuZE9mU3Ry
aW5nQWRkcmVzcykpOworICAgICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigyKSwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKTsKKyAgICAgICAgbm90
VW5pY29kZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgbV9yZWdzLmVuZE9mU3RyaW5nQWRk
cmVzcykpOwogCiAgICAgICAgIC8vIElzIHRoZSBjaGFyYWN0ZXIgYSB0cmFpbGluZyBzdXJyb2dh
dGU/Ci0gICAgICAgIGxvYWQxNlVuYWxpZ25lZChBZGRyZXNzKHJlZ1VuaWNvZGVJbnB1dEFuZFRy
YWlsKSwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwotICAgICAgICBhbmQzMihzdXJyb2dhdGVU
YWdNYXNrLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgdW5pY29kZVRlbXApOwotICAgICAgICBu
b3RVbmljb2RlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgdW5pY29kZVRlbXAsIHRyYWlsaW5n
U3Vycm9nYXRlVGFnKSk7CisgICAgICAgIG1faml0LmxvYWQxNlVuYWxpZ25lZChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpLCBtX3JlZ3MucmVn
VW5pY29kZUlucHV0QW5kVHJhaWwpOworICAgICAgICBtX2ppdC5hbmQzMihZYXJySklURGVmYXVs
dFJlZ2lzdGVyczo6c3Vycm9nYXRlVGFnTWFzaywgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRy
YWlsLCBtX3JlZ3MudW5pY29kZVRlbXApOworICAgICAgICBub3RVbmljb2RlLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy51bmljb2RlVGVtcCwg
bV9yZWdzLnRyYWlsaW5nU3Vycm9nYXRlVGFnKSk7CiAKICAgICAgICAgLy8gQ29tYmluZSBsZWFk
aW5nIGFuZCB0cmFpbGluZyBzdXJyb2dhdGVzIHRvIHByb2R1Y2UgYSBjb2RlIHBvaW50LgotICAg
ICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoMTApLCByZXN1bHRSZWcpOwotICAgICAgICBnZXRF
ZmZlY3RpdmVBZGRyZXNzKEJhc2VJbmRleChyZXN1bHRSZWcsIHJlZ1VuaWNvZGVJbnB1dEFuZFRy
YWlsLCBUaW1lc09uZSwgLVUxNl9TVVJST0dBVEVfT0ZGU0VUKSwgcmVzdWx0UmVnKTsKLSAgICAg
ICAgbm90VW5pY29kZS5saW5rKHRoaXMpOworICAgICAgICBtX2ppdC5sc2hpZnQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEwKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQuZ2V0
RWZmZWN0aXZlQWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJlZywgbV9y
ZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIC1V
MTZfU1VSUk9HQVRFX09GRlNFVCksIHJlc3VsdFJlZyk7CisgICAgICAgIG5vdFVuaWNvZGUubGlu
aygmbV9qaXQpOwogICAgIH0KIAotICAgIHZvaWQgdHJ5UmVhZFVuaWNvZGVDaGFyKEJhc2VJbmRl
eCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdFJlZykKKyAgICB2b2lkIHRyeVJlYWRVbmljb2Rl
Q2hhcihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFkZHJlc3MsIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NoYXJTaXplID09
IENoYXJTaXplOjpDaGFyMTYpOwogCi0gICAgICAgIGdldEVmZmVjdGl2ZUFkZHJlc3MoYWRkcmVz
cywgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOworICAgICAgICBtX2ppdC5nZXRFZmZlY3RpdmVB
ZGRyZXNzKGFkZHJlc3MsIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CiAKLSAgICAg
ICAgaWYgKHJlc3VsdFJlZyA9PSByZWdUMCkKLSAgICAgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJDYWxscy5hcHBlbmQobmVhckNhbGwoKSk7CisgICAgICAgIGlmIChyZXN1bHRSZWcg
PT0gbV9yZWdzLnJlZ1QwKQorICAgICAgICAgICAgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNh
bGxzLmFwcGVuZChtX2ppdC5uZWFyQ2FsbCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
dHJ5UmVhZFVuaWNvZGVDaGFySW1wbChyZXN1bHRSZWcpOwogICAgIH0KICNlbmRpZgogICAgIAot
ICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rl
ck9mZnNldCwgUmVnaXN0ZXJJRCByZXN1bHRSZWcsIFJlZ2lzdGVySUQgaW5kZXhSZWcgPSBpbmRl
eCkKKyAgICB2b2lkIHJlYWRDaGFyYWN0ZXIoQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFy
YWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7
Ci0gICAgICAgIEJhc2VJbmRleCBhZGRyZXNzID0gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVz
cyhuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBpbmRleFJlZyk7CisgICAgICAg
IHJlYWRDaGFyYWN0ZXIobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIHJlc3VsdFJlZywgbV9yZWdz
LmluZGV4KTsKKyAgICB9CisKKyAgICB2b2lkIHJlYWRDaGFyYWN0ZXIoQ2hlY2tlZDx1bnNpZ25l
ZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
c3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhSZWcpCisgICAgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFkZHJlc3MgPSBuZWdhdGl2ZU9mZnNldElu
ZGV4ZWRBZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIGluZGV4UmVn
KTsKIAogICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpCi0gICAgICAg
ICAgICBsb2FkOChhZGRyZXNzLCByZXN1bHRSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgo
YWRkcmVzcywgcmVzdWx0UmVnKTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNT
SU9OUykKICAgICAgICAgZWxzZSBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAg
ICAgIHRyeVJlYWRVbmljb2RlQ2hhcihhZGRyZXNzLCByZXN1bHRSZWcpOwogI2VuZGlmCiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNlVuYWxpZ25lZChhZGRyZXNzLCByZXN1bHRSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKGFkZHJlc3MsIHJlc3VsdFJlZyk7
CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZDaGFyTm90RXF1YWxzKFVDaGFyMzIgY2gsIENoZWNr
ZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBSZWdpc3RlcklEIGNoYXJhY3Rl
cikKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wSWZDaGFyTm90RXF1YWxzKFVDaGFyMzIg
Y2gsIENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICByZWFkQ2hhcmFjdGVy
KG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXIpOwogCkBAIC03NTMsNDMgKzY1OSw0
MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIC8v
IHVwcGVyICYgbG93ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMgYXJlIGNvbnZlcnRlZCB0byBhIGNo
YXJhY3RlciBjbGFzcy4KICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpIHx8
IGlzQVNDSUlBbHBoYShjaCkgfHwgaXNDYW5vbmljYWxseVVuaXF1ZShjaCwgbV9jYW5vbmljYWxN
b2RlKSk7CiAgICAgICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIGlzQVNDSUlBbHBo
YShjaCkpIHsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0ZXIp
OworICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4
MjApLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgY2ggfD0gMHgyMDsKICAgICAgICAgfQogCi0g
ICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpOwor
ICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHN0b3JlVG9GcmFtZShSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikK
KyAgICB2b2lkIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcsIHVu
c2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICBwb2tlKHJlZywgZnJhbWVMb2Nh
dGlvbik7CisgICAgICAgIG1faml0LnBva2UocmVnLCBmcmFtZUxvY2F0aW9uKTsKICAgICB9CiAK
LSAgICB2b2lkIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIgaW1tLCB1bnNpZ25lZCBmcmFtZUxv
Y2F0aW9uKQorICAgIHZvaWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIgaW1tLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAgcG9rZShpbW0s
IGZyYW1lTG9jYXRpb24pOworICAgICAgICBtX2ppdC5wb2tlKGltbSwgZnJhbWVMb2NhdGlvbik7
CiAgICAgfQogCiAjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoWDg2XzY0KQotICAgIHZvaWQgc3RvcmVU
b0ZyYW1lKFRydXN0ZWRJbW1QdHIgaW1tLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQorICAgIHZv
aWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyIGltbSwgdW5zaWdu
ZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHBva2UoaW1tLCBmcmFtZUxvY2F0aW9u
KTsKKyAgICAgICAgbV9qaXQucG9rZShpbW0sIGZyYW1lTG9jYXRpb24pOwogICAgIH0KICNlbmRp
ZgogCi0gICAgRGF0YUxhYmVsUHRyIHN0b3JlVG9GcmFtZVdpdGhQYXRjaCh1bnNpZ25lZCBmcmFt
ZUxvY2F0aW9uKQorICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RvcmVUb0ZyYW1l
V2l0aFBhdGNoKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4g
c3RvcmVQdHJXaXRoUGF0Y2goVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAg
cmV0dXJuIG1faml0LnN0b3JlUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAg
fQogCi0gICAgdm9pZCBsb2FkRnJvbUZyYW1lKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIFJlZ2lz
dGVySUQgcmVnKQorICAgIHZvaWQgbG9hZEZyb21GcmFtZSh1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpCiAgICAgewotICAgICAgICBwZWVrKHJl
ZywgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0LnBlZWsocmVnLCBmcmFtZUxvY2F0aW9u
KTsKICAgICB9CiAKICAgICB2b2lkIGxvYWRGcm9tRnJhbWVBbmRKdW1wKHVuc2lnbmVkIGZyYW1l
TG9jYXRpb24pCiAgICAgewotICAgICAgICBmYXJKdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSwgWWFyckJhY2t0cmFja1B0clRh
Zyk7CisgICAgICAgIG1faml0LmZhckp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZv
aWQqKSksIFlhcnJCYWNrdHJhY2tQdHJUYWcpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFsaWdu
Q2FsbEZyYW1lU2l6ZUluQnl0ZXModW5zaWduZWQgY2FsbEZyYW1lU2l6ZSkKQEAgLTgwNywxMyAr
NzEzLDIxIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxsRnJhbWVT
aXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOwogICAgICAgICBp
ZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpCi0gICAgICAgICAgICBhZGRQdHIoSW1tMzIoY2FsbEZy
YW1lU2l6ZUluQnl0ZXMpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2pp
dC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICB9CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFpbFJldHVybigpCiAgICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZv
aWQqKVdURjo6bm90Rm91bmQpLCByZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXR1cm5SZWdpc3RlcjIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilXVEY6Om5vdEZvdW5kKSwgbV9yZWdzLnJldHVy
blJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKKworI2lmIEVOQUJMRShZQVJSX0pJVF9S
RUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBp
bGVNb2RlOjpJbmxpbmVUZXN0KSB7CisgICAgICAgICAgICBtX2lubGluZWRGYWlsZWRNYXRjaC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2Vu
ZGlmCisKICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKICAgICB9CiAKQEAgLTgyMiw0OCArNzM2
LDQyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAg
aWYgKG1fYWJvcnRFeGVjdXRpb24uZW1wdHkoKSAmJiBtX2hpdE1hdGNoTGltaXQuZW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBKdW1wTGlzdCBmaW5pc2hFeGl0aW5nOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmluaXNoRXhpdGluZzsKICAgICAgICAg
aWYgKCFtX2Fib3J0RXhlY3V0aW9uLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fYWJvcnRFeGVj
dXRpb24ubGluayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCop
c3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpLCByZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgICAgICBm
aW5pc2hFeGl0aW5nLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlv
bi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSksIG1fcmVncy5yZXR1
cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBmaW5pc2hFeGl0aW5nLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX2hpdE1hdGNoTGltaXQuZW1wdHkoKSkg
ewotICAgICAgICAgICAgbV9oaXRNYXRjaExpbWl0LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oLTEpKSwgcmV0dXJu
UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9oaXRNYXRjaExpbWl0LmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQq
KXN0YXRpY19jYXN0PHNpemVfdD4oLTEpKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGZpbmlzaEV4aXRpbmcubGluayh0aGlzKTsKKyAgICAgICAgZmluaXNo
RXhpdGluZy5saW5rKCZtX2ppdCk7CiAgICAgICAgIHJlbW92ZUNhbGxGcmFtZSgpOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmV0dXJuUmVnaXN0ZXIyKTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBtX3JlZ3MucmV0dXJuUmVnaXN0
ZXIyKTsKICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRv
IHJlY29yZCBzdWJwYXR0ZXJucywgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIG1fY29tcGlsZU1v
ZGUgaXMgSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucy4KLSAgICB2b2lkIHNldFN1
YnBhdHRlcm5TdGFydChSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVybikKKyAgICB2
b2lkIHNldFN1YnBhdHRlcm5TdGFydChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcsIHVu
c2lnbmVkIHN1YnBhdHRlcm4pCiAgICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVybik7CiAg
ICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQobV9jb21waWxlTW9kZSA9
PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSwgYnV0IHRoZW4gdGhpcyBmdW5j
dGlvbiBpcyBjb25kaXRpb25hbGx5IE5PUkVUVVJOLiA6LSgKLSAgICAgICAgc3RvcmUzMihyZWcs
IEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0
cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgfQotICAgIHZvaWQg
c2V0U3VicGF0dGVybkVuZChSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVybikKKyAg
ICB2b2lkIHNldFN1YnBhdHRlcm5FbmQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnLCB1
bnNpZ25lZCBzdWJwYXR0ZXJuKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN1YnBhdHRlcm4pOwog
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKG1fY29tcGlsZU1vZGUg
PT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyksIGJ1dCB0aGVuIHRoaXMgZnVu
Y3Rpb24gaXMgY29uZGl0aW9uYWxseSBOT1JFVFVSTi4gOi0oCi0gICAgICAgIHN0b3JlMzIocmVn
LCBBZGRyZXNzKG91dHB1dCwgKChzdWJwYXR0ZXJuIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKHJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9y
ZWdzLm91dHB1dCwgKChzdWJwYXR0ZXJuIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwogICAg
IH0KICAgICB2b2lkIGNsZWFyU3VicGF0dGVyblN0YXJ0KHVuc2lnbmVkIHN1YnBhdHRlcm4pCiAg
ICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVybik7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91
bGQgYmUgYWJsZSB0byBBU1NFUlQobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5j
bHVkZVN1YnBhdHRlcm5zKSwgYnV0IHRoZW4gdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5
IE5PUkVUVVJOLiA6LSgKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoLTEpLCBBZGRyZXNz
KG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YoaW50KSkpOwotICAgIH0KLQotICAg
IHZvaWQgY2xlYXJNYXRjaGVzKHVuc2lnbmVkIHN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RTdWJw
YXR0ZXJuKQotICAgIHsKLSAgICAgICAgZm9yICg7IHN1YnBhdHRlcm4gPD0gbGFzdFN1YnBhdHRl
cm47IHN1YnBhdHRlcm4rKykKLSAgICAgICAgICAgIGNsZWFyU3VicGF0dGVyblN0YXJ0KHN1YnBh
dHRlcm4pOworICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3VicGF0dGVy
biA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgdXNlIG9uZSBvZiB0
aHJlZSBkaWZmZXJlbnQgc3RyYXRlZ2llcyB0byB0cmFjayB0aGUgc3RhcnQgb2YgdGhlIGN1cnJl
bnQgbWF0Y2gsCkBAIC04NzEsMjUgKzc3OSwyNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgLy8gMSkgSWYgdGhlIHBhdHRlcm4gaGFzIGEgZml4ZWQgc2l6
ZSwgZG8gbm90aGluZyEgLSB3ZSBjYWxjdWxhdGUgdGhlIHZhbHVlIGxhemlseQogICAgIC8vICAg
IGF0IHRoZSBlbmQgb2YgbWF0Y2hpbmcuIFRoaXMgaXMgaXJyZXNwZWN0aXZlIG9mIG1fY29tcGls
ZU1vZGUsIGFuZCBpbiB0aGlzIGNhc2UKICAgICAvLyAgICB0aGVzZSBtZXRob2RzIHNob3VsZCBu
ZXZlciBiZSBjYWxsZWQuCi0gICAgLy8gMikgSWYgd2UncmUgY29tcGlsaW5nIEpJVENvbXBpbGVN
b2RlOjpJbmNsdWRlU3VicGF0dGVybnMsICdvdXRwdXQnIGNvbnRhaW5zIGEgcG9pbnRlciB0byBh
biBvdXRwdXQKKyAgICAvLyAyKSBJZiB3ZSdyZSBjb21waWxpbmcgSklUQ29tcGlsZU1vZGU6Oklu
Y2x1ZGVTdWJwYXR0ZXJucywgJ21fcmVncy5vdXRwdXQnIGNvbnRhaW5zIGEgcG9pbnRlciB0byBh
biBvdXRwdXQKICAgICAvLyAgICB2ZWN0b3IsIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBpbiB0aGUg
b3V0cHV0IHZlY3Rvci4KLSAgICAvLyAzKSBJZiB3ZSdyZSBjb21waWxpbmcgTWF0Y2hPbmx5LCAn
b3V0cHV0JyBpcyB1bnVzZWQsIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBkaXJlY3RseQorICAgIC8v
IDMpIElmIHdlJ3JlIGNvbXBpbGluZyBNYXRjaE9ubHkgb3IgSW5saW5lZFRlc3QsICdtX3JlZ3Mu
b3V0cHV0JyBpcyB1bnVzZWQsIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBkaXJlY3RseQogICAgIC8v
ICAgIGluIHRoaXMgcmVnaXN0ZXIuCi0gICAgdm9pZCBzZXRNYXRjaFN0YXJ0KFJlZ2lzdGVySUQg
cmVnKQorICAgIHZvaWQgc2V0TWF0Y2hTdGFydChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBy
ZWcpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRT
aXplKTsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1
ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAgIHN0b3JlMzIocmVnLCBvdXRwdXQpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtb3ZlKHJlZywgb3V0cHV0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUocmVn
LCBtX3JlZ3Mub3V0cHV0KTsKICAgICB9Ci0gICAgdm9pZCBnZXRNYXRjaFN0YXJ0KFJlZ2lzdGVy
SUQgcmVnKQorICAgIHZvaWQgZ2V0TWF0Y2hTdGFydChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4
ZWRTaXplKTsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6Oklu
Y2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAgIGxvYWQzMihvdXRwdXQsIHJlZyk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIobV9yZWdzLm91dHB1dCwgcmVnKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbW92ZShvdXRwdXQsIHJlZyk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1f
cmVncy5vdXRwdXQsIHJlZyk7CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBZYXJyT3BDb2RlIDog
dWludDhfdCB7CkBAIC05NjUsMTIgKzg3MywxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIC8vIHVzZWQgZm9yIGp1bXBzIG91dCB0byBiYWNrdHJh
Y2tpbmcgY29kZSwgYW5kIGEgc2luZ2xlIHJlZW50cnkgYmFjawogICAgICAgICAvLyBpbnRvIHRo
ZSBjb2RlIGZvciBhIG5vZGUgKGxpa2VseSB3aGVyZSBhIGJhY2t0cmFjayB3aWxsIHRyaWdnZXIK
ICAgICAgICAgLy8gcmVtYXRjaGluZykuCi0gICAgICAgIExhYmVsIG1fcmVlbnRyeTsKLSAgICAg
ICAgSnVtcExpc3QgbV9qdW1wczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fcmVl
bnRyeTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fanVtcHM7CiAKICAgICAg
ICAgLy8gVXNlZCBmb3IgYmFja3RyYWNraW5nIHdoZW4gdGhlIHByaW9yIGFsdGVybmF0aXZlIGRp
ZCBub3QgY29uc3VtZSBhbnkKICAgICAgICAgLy8gY2hhcmFjdGVycyBidXQgbWF0Y2hlZC4KLSAg
ICAgICAgSnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbV96ZXJvTGVuZ3RoTWF0Y2g7CiAKICAgICAgICAgLy8gVGhpcyBmbGFnIGlzIHVzZWQgdG8g
bnVsbCBvdXQgdGhlIHNlY29uZCBwYXR0ZXJuIGNoYXJhY3Rlciwgd2hlbgogICAgICAgICAvLyB0
d28gYXJlIGZ1c2VkIHRvIG1hdGNoIGEgcGFpciB0b2dldGhlci4KQEAgLTk4NCw3ICs4OTIsNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIC8vIFVz
ZWQgYnkgWWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJuYXRpdmVOZXh0L0VuZCB0byBob2xkIHRoZSBw
b2ludGVyIHRvIHRoZQogICAgICAgICAvLyB2YWx1ZSB0aGF0IHdpbGwgYmUgcHVzaGVkIGludG8g
dGhlIHBhdHRlcm4ncyBmcmFtZSB0byByZXR1cm4gdG8sCiAgICAgICAgIC8vIHVwb24gYmFja3Ry
YWNraW5nIGJhY2sgaW50byB0aGUgZGlzanVuY3Rpb24uCi0gICAgICAgIERhdGFMYWJlbFB0ciBt
X3JldHVybkFkZHJlc3M7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9y
ZXR1cm5BZGRyZXNzOwogCiAgICAgICAgIEJveWVyTW9vcmVJbmZvKiBtX2JtSW5mbyB7IG51bGxw
dHIgfTsKICAgICB9OwpAQCAtMTAwNiw3ICs5MTQsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgIC8vICAtIEEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhl
IGN1cnJlbnQgc2VxdWVuY2Ugb2YgZ2VuZXJhdGVkIGNvZGUgdXAgdG8KICAgICAvLyAgICB0aGlz
IHBvaW50IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KICAgICBjbGFzcyBCYWNrdHJhY2tpbmdTdGF0
ZSB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RydWN0IFJldHVybkFkZHJlc3NSZWNvcmQgewor
ICAgICAgICAgICAgUmV0dXJuQWRkcmVzc1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyIGRhdGFMYWJlbCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJhY2t0cmFja0xvY2F0aW9uKQor
ICAgICAgICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQorICAgICAgICAgICAgICAg
ICwgbV9iYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBtX2RhdGFMYWJlbDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2JhY2t0
cmFja0xvY2F0aW9uOworICAgICAgICB9OworCiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVm
IFZlY3RvcjxSZXR1cm5BZGRyZXNzUmVjb3JkLCA0PiBCYWNrdHJhY2tSZWNvcmRzOworCiAgICAg
ICAgIEJhY2t0cmFja2luZ1N0YXRlKCkKICAgICAgICAgICAgIDogbV9wZW5kaW5nRmFsbHRocm91
Z2goZmFsc2UpCiAgICAgICAgIHsKQEAgLTEwMTQsMTUgKzkzNiwxNSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgLy8gQWRkIGEganVtcCBvciBq
dW1wcywgYSByZXR1cm4gYWRkcmVzcywgb3Igc2V0IHRoZSBmbGFnIGluZGljYXRpbmcKICAgICAg
ICAgLy8gdGhhdCB0aGUgY3VycmVudCAnZmFsbHRocm91Z2gnIGNvbnRyb2wgZmxvdyByZXF1aXJl
cyBiYWNrdHJhY2tpbmcuCi0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXAmIGp1bXApCisg
ICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXApOwogICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBqdW1wTGlzdCkKKyAgICAgICAgdm9p
ZCBhcHBlbmQoTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wTGlzdCkKICAgICAgICAgewog
ICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmFwcGVuZChqdW1wTGlzdCk7CiAgICAgICAgIH0K
LSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YUxhYmVsUHRyJiByZXR1cm5BZGRyZXNzKQor
ICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyJiBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmFw
cGVuZChyZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTAzOSw3ICs5NjEsNyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIHZvaWQgbGluayhN
YWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9w
ZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2Vt
Ymxlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1i
bGVyKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5n
UmV0dXJucy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNv
cmRzLmFwcGVuZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUp
KTsKICAgICAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDQ4LDcg
Kzk3MCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigpOwogICAgICAgICAgICAgbV9wZW5kaW5nRmFs
bHRocm91Z2ggPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtUbyhMYWJlbCBs
YWJlbCwgTWFjcm9Bc3NlbWJsZXIqIGFzc2VtYmxlcikKKyAgICAgICAgdm9pZCBsaW5rVG8oTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5zaXpl
KCk7ICsraSkKQEAgLTEwNjEsMTAgKzk4MywxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuY2xlYXIoKTsKICAg
ICAgICAgICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgdm9pZCB0YWtlQmFja3RyYWNrc1RvSnVtcExpc3QoSnVtcExpc3QmIGp1bXBMaXN0LCBNYWNy
b0Fzc2VtYmxlciogYXNzZW1ibGVyKQorICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1w
TGlzdChNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2VtYmxlciog
YXNzZW1ibGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5z
aXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2VtYmxlcik7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1ibGVyKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5zaXplKCk7
ICsraSkKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChSZXR1
cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUpKTsKICAgICAgICAgICAg
ICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDgyLDYgKzEwMDQsMTcgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgcmV0dXJu
IG1fbGF0ZXJGYWlsdXJlcy5lbXB0eSgpICYmIG1fcGVuZGluZ1JldHVybnMuaXNFbXB0eSgpICYm
ICFtX3BlbmRpbmdGYWxsdGhyb3VnaDsKICAgICAgICAgfQogCisgICAgICAgIEJhY2t0cmFja1Jl
Y29yZHMmIGJhY2t0cmFja1JlY29yZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9iYWNrdHJhY2tSZWNvcmRzOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgbGlu
a0JhY2t0cmFja1JlY29yZHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgY29uc3QgQmFja3RyYWNr
UmVjb3JkcyYgYmFja3RyYWNrUmVjb3JkcykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJhY2t0cmFja1JlY29yZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5wYXRjaChiYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxhYmVs
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8WWFyckJhY2t0cmFja1B0clRhZz4oYmFja3RyYWNrUmVj
b3Jkc1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBD
YWxsZWQgYXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGluayBhbGwgcmV0dXJuIGFk
ZHJlc3Nlcy4KICAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogICAgICAgICB7CkBAIC0xMDkxLDIwICsxMDI0LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBzdHJ1Y3QgUmV0dXJuQWRkcmVzc1JlY29yZCB7Ci0gICAgICAgICAgICBSZXR1cm5BZGRyZXNz
UmVjb3JkKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExhYmVsIGJhY2t0cmFja0xvY2F0aW9uKQot
ICAgICAgICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQotICAgICAgICAgICAgICAg
ICwgbV9iYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsOwot
ICAgICAgICAgICAgTGFiZWwgbV9iYWNrdHJhY2tMb2NhdGlvbjsKLSAgICAgICAgfTsKLQotICAg
ICAgICBKdW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7CiAgICAgICAgIGJvb2wgbV9wZW5kaW5nRmFsbHRocm91
Z2g7Ci0gICAgICAgIFZlY3RvcjxEYXRhTGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVybnM7Cisg
ICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyLCA0PiBtX3BlbmRpbmdS
ZXR1cm5zOwogICAgICAgICBWZWN0b3I8UmV0dXJuQWRkcmVzc1JlY29yZCwgND4gbV9iYWNrdHJh
Y2tSZWNvcmRzOwogICAgIH07CiAKQEAgLTExMjcsMjMgKzEwNDksMjMgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9
IG9wLm1fdGVybTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAg
ICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1Qw
OwogCi0gICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1
dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIGluZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgbWF0
Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVn
cy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKIAogICAg
ICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0
aW9uICsgMSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hh
cmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0g
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbWF0Y2hEZXN0Lmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQgdGhlc2Ug
YWx0ZXJuYXRpdmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0
aW9uKQotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
aW5kZXgsIEltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVn
cy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbkJPTChzaXplX3Qgb3BJbmRl
eCkKQEAgLTExNTcsMjMgKzEwNzksMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAogICAg
ICAgICBpZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogCi0gICAgICAgICAgICBK
dW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
bWF0Y2hEZXN0OwogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0gbV9jaGVj
a2VkT2Zmc2V0KQogICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYXRFbmRPZklucHV0
KCkpOwogCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0t
PmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNs
YXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNz
KCkpOwotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG1hdGNoRGVz
dC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsoJm1faml0KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hl
Y2tlZE9mZnNldCkKICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChub3RBdEVuZE9m
SW5wdXQoKSk7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0
aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGJh
Y2t0cmFja0Fzc2VydGlvbkVPTChzaXplX3Qgb3BJbmRleCkKQEAgLTExODIsMTIgKzExMDQsMTIg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIH0KIAogICAg
IC8vIEFsc28gZmFsbHMgdGhvdWdoIG9uIG5leHRJc05vdFdvcmRDaGFyLgotICAgIHZvaWQgbWF0
Y2hBc3NlcnRpb25Xb3JkY2hhcihzaXplX3Qgb3BJbmRleCwgSnVtcExpc3QmIG5leHRJc1dvcmRD
aGFyLCBKdW1wTGlzdCYgbmV4dElzTm90V29yZENoYXIpCisgICAgdm9pZCBtYXRjaEFzc2VydGlv
bldvcmRjaGFyKHNpemVfdCBvcEluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJ
c1dvcmRDaGFyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJc05vdFdvcmRDaGFyKQog
ICAgIHsKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9z
aXRpb24gPT0gbV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgbmV4dElzTm90V29yZENoYXIu
YXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKQEAgLTEyMDksMTIgKzExMzEsMTIgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9v
cHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0g
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAot
ICAgICAgICBKdW1wIGF0QmVnaW47Ci0gICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXRCZWdpbjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQot
ICAgICAgICAgICAgYXRCZWdpbiA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIobV9jaGVj
a2VkT2Zmc2V0KSk7CisgICAgICAgICAgICBhdEJlZ2luID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtX2No
ZWNrZWRPZmZzZXQpKTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0
ZXJtLT5pbnB1dFBvc2l0aW9uICsgMSwgY2hhcmFjdGVyKTsKIAogICAgICAgICBDaGFyYWN0ZXJD
bGFzcyogd29yZGNoYXJDaGFyYWN0ZXJDbGFzczsKQEAgLTEyMjYsMjcgKzExNDgsMjcgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIG1hdGNoQ2hh
cmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHdvcmRjaGFyQ2hhcmFjdGVyQ2xhc3Mp
OwogICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICBhdEJlZ2lu
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdEJlZ2luLmxpbmsoJm1faml0KTsKIAogICAgICAg
ICAvLyBXZSBmYWxsIHRocm91Z2ggdG8gaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIG5v
dCBhIHdvcmRjaGFyLgotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsK
LSAgICAgICAgSnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyOwogICAg
ICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29y
ZGNoYXIob3BJbmRleCwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIsIG5vbldvcmRDaGFyVGhl
bldvcmRDaGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldv
cmRjaGFyKG9wSW5kZXgsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5O
b25Xb3JkQ2hhcik7Ci0gICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG5v
bldvcmRDaGFyVGhlbk5vbldvcmRDaGFyKTsKIAogICAgICAgICAvLyBXZSBqdW1wIGhlcmUgaWYg
dGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBhIHdvcmRjaGFyLgotICAgICAgICBtYXRjaERlc3QubGlu
ayh0aGlzKTsKLSAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENoYXI7Ci0gICAgICAg
IEp1bXBMaXN0IHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyOworICAgICAgICBtYXRjaERlc3QubGlu
aygmbV9qaXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgd29yZENoYXJUaGVu
V29yZENoYXI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCB3b3JkQ2hhclRoZW5O
b25Xb3JkQ2hhcjsKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKSB7CiAgICAgICAgICAgICBt
YXRjaEFzc2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCB3
b3JkQ2hhclRoZW5Xb3JkQ2hhcik7Ci0gICAgICAgICAgICB3b3JkQ2hhclRoZW5Xb3JkQ2hhci5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHdvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRp
b25Xb3JkY2hhcihvcEluZGV4LCB3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgd29yZENoYXJUaGVuTm9u
V29yZENoYXIpOwogICAgICAgICAgICAgLy8gVGhpcyBjYW4gZmFsbC10aG91Z2ghCkBAIC0xMjU0
LDggKzExNzYsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAK
ICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQod29yZENoYXJUaGVuV29yZENoYXIpOwogCi0gICAg
ICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmxpbmsodGhpcyk7Ci0gICAgICAgIHdvcmRDaGFy
VGhlbk5vbldvcmRDaGFyLmxpbmsodGhpcyk7CisgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyLmxpbmsoJm1faml0KTsKKyAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIubGluaygm
bV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbldvcmRCb3VuZGFyeShz
aXplX3Qgb3BJbmRleCkKICAgICB7CkBAIC0xMjYzLDQwICsxMTg1LDQwIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9K
SVRfQkFDS1JFRkVSRU5DRVMpCi0gICAgdm9pZCBtYXRjaEJhY2tyZWZlcmVuY2Uoc2l6ZV90IG9w
SW5kZXgsIEp1bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBSZWdpc3RlcklEIGNoYXJhY3Rl
ciwgUmVnaXN0ZXJJRCBwYXR0ZXJuSW5kZXgsIFJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikK
KyAgICB2b2lkIG1hdGNoQmFja3JlZmVyZW5jZShzaXplX3Qgb3BJbmRleCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5JbmRleCwg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKICAgICB7CiAgICAg
ICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRl
cm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJh
Y2tSZWZlcmVuY2VTdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKIAogICAgICAgICByZWFk
Q2hhcmFjdGVyKDAsIHBhdHRlcm5DaGFyYWN0ZXIsIHBhdHRlcm5JbmRleCk7CiAgICAgICAgIHJl
YWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFj
dGVyKTsKICAgICAKICAgICAgICAgaWYgKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpKQotICAgICAg
ICAgICAgY2hhcmFjdGVyTWF0Y2hGYWlscy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJh
Y3RlciwgcGF0dGVybkNoYXJhY3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyTWF0Y2hGYWls
cy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0
ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKdW1w
IGNoYXJhY3RlcnNNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFy
YWN0ZXIpOwotICAgICAgICAgICAgRXh0ZW5kZWRBZGRyZXNzIGNoYXJhY3RlclRhYmxlRW50cnko
Y2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVMQ2hh
cikpOwotICAgICAgICAgICAgbG9hZDE2KGNoYXJhY3RlclRhYmxlRW50cnksIGNoYXJhY3Rlcik7
Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNo
YXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIp
KTsKLSAgICAgICAgICAgIGxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNoYXJhY3Rl
cik7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBjaGFyYWN0
ZXJzTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNo
YXJhY3RlcnNNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hh
cmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
eHRlbmRlZEFkZHJlc3MgY2hhcmFjdGVyVGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJsZUxDaGFyKSk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMTYoY2hhcmFjdGVyVGFibGVFbnRyeSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNo
YXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIp
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNo
YXJhY3Rlcik7CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgcGF0dGVybkNoYXJh
Y3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyc01hdGNoLmxpbmsoJm1faml0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAg
IG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRl
eCk7CiAKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAg
IEp1bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVu
dGFyeVBsYW5lc0Jhc2UpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRl
eCk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7Ci0g
ICAgICAgICAgICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGlzQk1QQ2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgY2hhcmFjdGVyLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdz
LmluZGV4KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9q
aXQpOwogICAgICAgICB9CiAKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRl
eCwgQWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50
KSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
cmVncy5vdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpLmxp
bmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVCYWNrUmVmZXJl
bmNlKHNpemVfdCBvcEluZGV4KQpAQCAtMTMxMiwxMTYgKzEyMzQsMTE2IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVy
bklkID0gdGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKICAgICAgICAgdW5zaWduZWQg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIAotICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3Rlck9yVGVtcCA9IHJlZ1QwOwotICAgICAgICBjb25z
dCBSZWdpc3RlcklEIHBhdHRlcm5JbmRleCA9IHJlZ1QxOwotICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIHBhdHRlcm5UZW1wID0gcmVnVDI7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGNoYXJhY3Rlck9yVGVtcCA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gbV9yZWdzLnJlZ1QxOwor
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuVGVtcCA9IG1f
cmVncy5yZWdUMjsKIAotICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOwor
ICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0
ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IDEpCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1
c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFj
a1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAot
ICAgICAgICBKdW1wTGlzdCBtYXRjaGVzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgbWF0Y2hlczsKIAogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZp
ZXJUeXBlOjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwg
c3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIGxv
YWRTdWJQYXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1Y2Nlc3Nm
dWwgd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0ZXJtLT5xdWFudGl0
eU1heENvdW50ICE9IDEpIHsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRl
bXApKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0
ZXJuSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoTWF0Y2gg
PSBicmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKLSAgICAg
ICAgICAgICAgICBKdW1wIHRyeU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0
ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKLSAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0Y2gu
bGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKDEp
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6
bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICAgICAgICAgIHRyeU5vblplcm9NYXRjaC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigtMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgdHJ5Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICB6ZXJvTGVu
Z3RoTWF0Y2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHRy
eU5vblplcm9NYXRjaC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBzd2l0Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50
aWZpZXJUeXBlOjpGaXhlZENvdW50OiB7Ci0gICAgICAgICAgICBMYWJlbCBvdXRlckxvb3AodGhp
cyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgb3V0ZXJMb29wKCZtX2ppdCk7
CiAKICAgICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWluIHBhdHRlcm4gZW5k
IGluZGV4IGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5JbmRleCwgcGF0
dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0
KHBhdHRlcm5UZW1wKSk7CiAKICAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5jZShvcEluZGV4
LCBvcC5tX2p1bXBzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
OwogCiAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSAxKSB7CiAgICAg
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFyYWN0ZXJPclRl
bXApOwotICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JU
ZW1wKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBjaGFyYWN0ZXJPclRlbXApOwogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShjaGFyYWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1h
dGNoZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50
KSwgY2hhcmFjdGVyT3JUZW1wKSk7Ci0gICAgICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0
cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAg
ICAgICAgIGp1bXAob3V0ZXJMb29wKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0z
Mih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hhcmFjdGVyT3JUZW1wKSk7CisgICAgICAgICAg
ICAgICAgbG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJu
SW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG91dGVyTG9v
cCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBtYXRjaGVzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5OiB7Ci0gICAgICAgICAg
ICBKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKIAotICAgICAgICAgICAgTGFiZWwgb3V0ZXJM
b29wKHRoaXMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG91dGVyTG9vcCgm
bV9qaXQpOwogCiAgICAgICAgICAgICAvLyBQYXR0ZXJuVGVtcCBzaG91bGQgY29udGFpbiBwYXR0
ZXJuIGVuZCBpbmRleCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICBzdWIzMihwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHBhdHRlcm5JbmRleCwg
cGF0dGVyblRlbXApOwogICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoY2hlY2tOb3RFbm91Z2hJ
bnB1dChwYXR0ZXJuVGVtcCkpOwogCiAgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJ
bmRleCwgaW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgo
KSwgY2hhcmFjdGVyT3JUZW1wKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
Y2hhcmFjdGVyT3JUZW1wKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUoY2hhcmFjdGVyT3JUZW1wLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICAgICAgICAgIGlm
ICh0ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCi0gICAgICAgICAg
ICAgICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5
TWF4Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJu
KG91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAg
ICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hh
cmFjdGVyT3JUZW1wKSk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0
LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAgICAgICAgICAg
ICAvLyBTdG9yZSBjdXJyZW50IGluZGV4IGluIGZyYW1lIGZvciByZXN0b3JpbmcgYWZ0ZXIgYSBw
YXJ0aWFsIG1hdGNoCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkp
OwotICAgICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgc3RvcmVUb0ZyYW1l
KG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0Jh
Y2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG91dGVy
TG9vcCk7CiAKLSAgICAgICAgICAgIGluY29tcGxldGVNYXRjaGVzLmxpbmsodGhpcyk7Ci0gICAg
ICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGlu
Y29tcGxldGVNYXRjaGVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJl
Z2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKIAotICAgICAgICAgICAgbWF0Y2hlcy5saW5rKHRo
aXMpOwotICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIG1h
dGNoZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBRdWFu
dGlmaWVyVHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBpbmNvbXBsZXRl
TWF0Y2hlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBpbmNvbXBsZXRl
TWF0Y2hlczsKIAotICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgp
OwogCi0gICAgICAgICAgICBsb2FkU3ViUGF0dGVybihvdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0
dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3Jl
Z3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAg
ICAgICAgICAgICAvLyBBbiBlbXB0eSBtYXRjaCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgY29uc3Vt
aW5nIGNoYXJhY3RlcnMKLSAgICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNo
MzIoRXF1YWwsIFRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7Ci0gICAgICAgICAgICBK
dW1wIHRyeU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBh
dHRlcm5UZW1wKTsKLSAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7
Ci0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgdHJ5Tm9u
WmVyb01hdGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB6
ZXJvTGVuZ3RoTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAg
ICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzdG9y
ZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgo
KSk7CisgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UgaGF2ZSBpbnB1dCByZW1haW5pbmcgdG8gbWF0Y2gKLSAgICAgICAgICAgIHN1YjMyKHBh
dHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVy
bkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChjaGVja05v
dEVub3VnaElucHV0KHBhdHRlcm5UZW1wKSk7CiAKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShp
bmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVu
Y2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6
YmVnaW5JbmRleCgpKTsKIAogICAgICAgICAgICAgbWF0Y2hCYWNrcmVmZXJlbmNlKG9wSW5kZXgs
IGluY29tcGxldGVNYXRjaGVzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVy
blRlbXApOwogCi0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaW5jb21wbGV0
ZU1hdGNoZXMubGluayh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgo
KSwgaW5kZXgpOworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0g
ICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaGVzLmxpbmso
Jm1faml0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0
MzMsNDkgKzEzNTUsNDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogCiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZlcmVuY2VT
dWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwot
ICAgICAgICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUubGluaygmbV9qaXQpOworICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKIAotICAg
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVzOwogCiAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9
IHRlcm0tPmZyYW1lTG9jYXRpb247CiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBl
KSB7CiAgICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6Ci0gICAgICAgICAg
ICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9C
YWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRGcm9t
RnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVu
Y2U6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkdyZWVkeTogewotICAgICAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBwYXR0ZXJuU3RhcnRJbmRleCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBwYXR0ZXJuRW5kSW5kZXhPckxlbiA9IHJlZ1QyOworICAgICAgICAgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSBtX3JlZ3MucmVnVDA7CisgICAg
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuU3RhcnRJbmRl
eCA9IG1fcmVncy5yZWdUMTsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBhdHRlcm5FbmRJbmRleE9yTGVuID0gbV9yZWdzLnJlZ1QyOwogCiAgICAgICAgICAg
ICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9C
YWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCksIG1hdGNoQW1vdW50KTsKLSAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgbWF0Y2hBbW91bnQpKTsKKyAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIG1hdGNoQW1vdW50KSk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91
dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JM
ZW4pOwotICAgICAgICAgICAgc3ViMzIocGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRl
eE9yTGVuKTsKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5FbmRJbmRleE9yTGVuLCBpbmRleCk7
CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQs
IHBhdHRlcm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7CisgICAgICAgICAgICBt
X2ppdC5zdWIzMihwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOworICAg
ICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkVuZEluZGV4T3JMZW4sIG1fcmVncy5pbmRleCk7
CiAKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbWF0
Y2hBbW91bnQpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1hdGNoQW1vdW50LCBwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91
bnRJbmRleCgpKTsKLSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAg
IG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7CisgICAgICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IG1fcmVncy5yZWdUMDsK
IAogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAg
ICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5m
b0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOwogICAgICAg
ICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAg
ICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBJbW0z
Mih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgbWF0Y2hBbW91bnQpKTsKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCksIG1hdGNoQW1vdW50
KSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtYXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpt
YXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAg
ICAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAg
ICBmYWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFs
bHRocm91Z2goKTsKICAgICB9CiAjZW5kaWYKQEAgLTE0OTcsMTEgKzE0MTksMTEgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIGlmICghaXNMYXRp
bjEoY2gpICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsKICAgICAgICAgICAg
IC8vIEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAt
IHNob3J0IGNpcmN1aXQKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSByZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gbV9yZWdzLnJlZ1QwOwogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKICAgICAg
ICAgdW5zaWduZWQgbWF4Q2hhcmFjdGVyc0F0T25jZSA9IG1fY2hhclNpemUgPT0gQ2hhclNpemU6
OkNoYXI4ID8gOCA6IDQ7CiAjZWxzZQpAQCAtMTU1Miw3ICsxNDc0LDcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBpZiAoIWlzTGF0aW4x
KGN1cnJlbnRDaGFyYWN0ZXIpICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBIYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVyIGFuZCBh
biA4IGJpdCBzdHJpbmcgLSBzaG9ydCBjaXJjdWl0Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAt
MTU3NSwyOSArMTQ5NywyOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBhdXRvIGNoZWNrMiA9IFsmXSAoQ2hl
Y2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1aW50MTZfdCBjaGFyYWN0ZXJzLCB1aW50MTZfdCBtYXNr
KSB7Ci0gICAgICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zmc2V0SW5kZXhl
ZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQxNlVuYWxpZ25lZChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNl
dCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAg
ICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAg
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJ
bW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3Iz
MihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykp
KTsKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gY2hlY2s0ID0gWyZdIChDaGVj
a2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlcnMsIHVuc2lnbmVkIG1hc2sp
IHsKICAgICAgICAgICAgICAgICBpZiAobWFzaykgewotICAgICAgICAgICAgICAgICAgICBsb2Fk
MzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zm
c2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mo
b2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
bWFzaykKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rl
cik7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVx
dWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJh
bmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4
ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7
CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzJXaXRoVW5h
bGlnbmVkSGFsZldvcmRzKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbmVnYXRpdmVPZmZzZXRJ
bmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoY2hhcmFjdGVycykpKTsKICAgICAgICAgICAgIH07CiAKICNpZiBDUFUoWDg2XzY0KSB8
fCBDUFUoQVJNNjQpCiAgICAgICAgICAgICBhdXRvIGNoZWNrOCA9IFsmXSAoQ2hlY2tlZDx1bnNp
Z25lZD4gb2Zmc2V0LCB1aW50NjRfdCBjaGFyYWN0ZXJzLCB1aW50NjRfdCBtYXNrKSB7Ci0gICAg
ICAgICAgICAgICAgbG9hZDY0KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBj
aGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChuZWdh
dGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgb3I2NChUcnVz
dGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQoYnJhbmNoNjQoTm90RXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTY0KGNoYXJhY3Rl
cnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoY2hhcmFjdGVycyB8IG1hc2sp
KSk7CiAgICAgICAgICAgICB9OwogI2VuZGlmCiAKQEAgLTE2NDksMjEgKzE1NzEsMjEgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBhdXRv
IGNoZWNrMiA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBtYXNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9mZnNl
dEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAgICAgICAgICAgICAgICBvcjMyKElt
bTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaGFyYWN0ZXJzIHwgbWFz
aykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3Rl
ciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwg
bmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIFRydXN0ZWRJ
bW0zMihjaGFyYWN0ZXJzKSkpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CiAgICAgICAgICAgICB9Owog
CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQogICAgICAgICAgICAgYXV0byBjaGVjazQg
PSBbJl0gKENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdWludDY0X3QgY2hhcmFjdGVycywgdWlu
dDY0X3QgbWFzaykgewotICAgICAgICAgICAgICAgIGxvYWQ2NChuZWdhdGl2ZU9mZnNldEluZGV4
ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJh
Y3RlciksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAg
ICAgICAgICAgIG9yNjQoVHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAg
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDY0KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIFRy
dXN0ZWRJbW02NChjaGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQub3I2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgfTsKICNlbmRpZgogCkBAIC0xNjk4
LDM0ICsxNjIwLDM0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyMzIg
Y2ggPSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
Y2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3Rl
ciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAgaWYgKG1fZGVj
b2RlU3Vycm9nYXRlUGFpcnMpCiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZO
b0F2YWlsYWJsZUlucHV0KCkpOwogCiAgICAgICAgIENoZWNrZWQ8dW5zaWduZWQ+IHNjYWxlZE1h
eENvdW50ID0gdGVybS0+cXVhbnRpdHlNYXhDb3VudDsKICAgICAgICAgc2NhbGVkTWF4Q291bnQg
Kj0gVV9JU19CTVAoY2gpID8gMSA6IDI7Ci0gICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihzY2Fs
ZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3Mu
aW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0
ZXIpOwogCi0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsb29wKCZtX2ppdCk7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zm
c2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50LCBjaGFyYWN0ZXIsIGNv
dW50UmVnaXN0ZXIpOwogICAgICAgICAvLyBGb3IgY2FzZS1pbnNlc2l0aXZlIGNvbXBhcmVzLCBu
b24tYXNjaWkgY2hhcmFjdGVycyB0aGF0IGhhdmUgZGlmZmVyZW50CiAgICAgICAgIC8vIHVwcGVy
ICYgbG93ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMgYXJlIGNvbnZlcnRlZCB0byBhIGNoYXJhY3Rl
ciBjbGFzcy4KICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpIHx8IGlzQVND
SUlBbHBoYShjaCkgfHwgaXNDYW5vbmljYWxseVVuaXF1ZShjaCwgbV9jYW5vbmljYWxNb2RlKSk7
CiAgICAgICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIGlzQVNDSUlBbHBoYShjaCkp
IHsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0ZXIpOworICAg
ICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MjApLCBj
aGFyYWN0ZXIpOwogICAgICAgICAgICAgY2ggfD0gMHgyMDsKICAgICAgICAgfQogCi0gICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNo
KSkpOworICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwog
I2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9k
ZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKQotICAgICAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDIpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOwogICAgICAg
ICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRS
ZWdpc3Rlcik7Ci0gICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBpbmRl
eCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgbV9yZWdzLmlu
ZGV4KS5saW5rVG8obG9vcCwgJm1faml0KTsKICAgICB9CiAgICAgdm9pZCBiYWNrdHJhY2tQYXR0
ZXJuQ2hhcmFjdGVyRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTczOCwzOCArMTY2
MCwzOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
IFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAgICBVQ2hhcjMyIGNoID0gdGVy
bS0+cGF0dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3Rl
ciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdU
MTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0g
bV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
b3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBVbmxlc3MgaGF2
ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQg
Y2lyY3VpdAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXplID09IENo
YXJTaXplOjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAg
ICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgm
bV9qaXQpOwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBtX2NoZWNr
ZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogI2lmIEVO
QUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYgKG1fZGVj
b2RlU3Vycm9nYXRlUGFpcnMgJiYgIVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAgICAgIEp1
bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAgICAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsodGhp
cyk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRF
bmRPZklucHV0KCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2su
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYK
LSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAg
ICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3Vu
dFJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0g
cXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAgICAgICAgICBqdW1wKGxvb3ApOworICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAobG9vcCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5
TWF4Q291bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAmbV9qaXQp
OwogCi0gICAgICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbHVy
ZXMubGluaygmbV9qaXQpOwogICAgICAgICB9Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVs
KCk7CisgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAgICAgc3Rv
cmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBAIC0xNzc4
LDE4ICsxNzAwLDE4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVn
aXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQp
OwogCiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50UmVnaXN0ZXIp
OwotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywg
Y291bnRSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVn
aXN0ZXIpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVnaXN0ZXIpKTsKKyAgICAgICAgbV9q
aXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7
CiAgICAgICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycyB8fCBVX0lTX0JNUCh0ZXJtLT5w
YXR0ZXJuQ2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDIpLCBpbmRleCk7Ci0gICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIG1fcmVn
cy5pbmRleCk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICB9CiAKICAg
ICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShzaXplX3Qgb3BJbmRleCkK
QEAgLTE3OTcsMTAgKzE3MTksMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBh
dHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
Y291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFi
ZWwoKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
LCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsK
ICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAg
ICB9CiAgICAgdm9pZCBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNpemVfdCBv
cEluZGV4KQpAQCAtMTgwOSw0MyArMTczMSw0MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwog
ICAgICAgICBVQ2hhcjMyIGNoID0gdGVybS0+cGF0dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBj
b25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0g
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNoQW1vdW50
SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gVW5sZXNzIGhhdmUgYSAxNiBi
aXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQK
ICAgICAgICAgaWYgKCEoIWlzTGF0aW4xKGNoKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6
Q2hhcjgpKSkgewotICAgICAgICAgICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CiAgICAg
ICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAgICAg
ICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAg
ICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNv
dW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgICAg
ICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgY291bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1
YW50aXR5TWF4Q291bnQpKSk7CiAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQo
anVtcElmQ2hhck5vdEVxdWFscyhjaCwgbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3Np
dGlvbiwgY2hhcmFjdGVyKSk7CiAKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
aW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBS
RVNTSU9OUykKICAgICAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lT
X0JNUChjaCkpIHsKLSAgICAgICAgICAgICAgICBKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0
RW5kT2ZJbnB1dCgpOwotICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXgpOwotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZVBhaXJPay5saW5rKHRoaXMpOwotICAgICAgICAgICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0RW5kT2ZJbnB1dCgpOworICAg
ICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7CiAKLSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKLSAgICAgICAgICAgIG5vbkdy
ZWVkeUZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVl
bnRyeSk7CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAo
Y2gpKSB7CiAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBjb3VudFJlZ2lzdGVyKjIgZm9yIG5vbi1C
TVAgY2hhcmFjdGVycwotICAgICAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDEpLCBjb3Vu
dFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3Vi
MzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBtX2ppdC5zdWIzMihjb3VudFJlZ2lz
dGVyLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJv
dWdoKCk7CiAgICAgfQogCkBAIC0xODU0LDE0ICsxNzc2LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5k
ZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBj
b25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAg
aWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7Ci0gICAgICAgICAgICBzdG9yZVRvRnJhbWUo
aW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6
OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbklu
ZGV4KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICByZWFkQ2hhcmFj
dGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4g
Y2xhc3Mgd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3RlciBhbmQg
ZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMTg3MSwx
NiArMTc5MywxNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQobWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0Lmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICAgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAg
ICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFjdGVyQ2xh
c3MtPmhhc09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpIHsKLSAgICAgICAg
ICAgIEp1bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxl
bWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNC
TVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0
ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdz
LmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0K
ICNlbmRpZgogICAgIH0KQEAgLTE4OTEsOCArMTgxMyw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcElu
ZGV4XTsKICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xh
c3M6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdz
LmluZGV4KTsKICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsK
ICAgICAgICAgfQogI2VuZGlmCkBAIC0xOTA0LDggKzE4MjYsOCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcElu
ZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAog
ICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CkBAIC0xOTE1LDEwICsxODM3LDEw
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgaWYg
KG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYgdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09ubHlO
b25CTVBDaGFyYWN0ZXJzKCkgJiYgIXRlcm0tPmludmVydCgpKQogICAgICAgICAgICAgc2NhbGVk
TWF4Q291bnQgKj0gMjsKICNlbmRpZgotICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoc2NhbGVk
TWF4Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoc2NhbGVkTWF4Q291bnQpLCBjb3VudFJlZ2lzdGVy
KTsKIAotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCBtYXRjaERl
c3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgIHJlYWRDaGFyYWN0
ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50
LCBjaGFyYWN0ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hp
bmcgdGhlICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIHdlIG9ubHkgbmVlZCB0byByZWFk
IHRoZQogICAgICAgICAvLyBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQg
d2lsbCBhbHdheXMgc3VjY2VlZC4KQEAgLTE5MjgsMjcgKzE4NTAsMjcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgaWYgKHRlcm0tPmludmVy
dCgpKQogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1hdGNoRGVzdCk7CiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxF
KFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJv
Z2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVy
Q2xhc3MoKSkKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIodGVybS0+Y2hhcmFj
dGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAxKSwgY291bnRSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBj
b3VudFJlZ2lzdGVyKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgSnVtcCBp
c0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxh
bmVzQmFzZSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAgICAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaXNC
TVBDaGFyLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4
KTsKKyAgICAgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVn
aXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVy
LCBtX3JlZ3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJh
Y2t0cmFja0NoYXJhY3RlckNsYXNzRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTk2
MCwxOSArMTg4MiwxOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
CiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRl
cm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVn
VDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9
IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJy
b2dhdGVQYWlycyAmJiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNPbmVDaGFyYWN0ZXJTaXpl
KCkgfHwgdGVybS0+aW52ZXJ0KCkpKQotICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCB0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbklu
ZGV4KCkpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIp
OwogCi0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJl
c0RlY3JlbWVudEluZGV4OwotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlc0RlY3JlbWVudEluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbG9vcCgmbV9qaXQpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJ
T05TKQogICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3MoKSAmJiB0
ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KGNoYXJhY3RlcikpOwogICAg
ICAgICB9IGVsc2UKICNlbmRpZgpAQCAtMTk4MiwxNSArMTkwNCwxNSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1f
Y2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAg
ICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZmFpbHVyZXMsIHRlcm0tPmNoYXJh
Y3RlckNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNo
RGVzdDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAg
ICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9z
aXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhl
ICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5pY29kZSBwYXR0ZXJucywK
ICAgICAgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRv
bid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KICAgICAgICAgICAg
IGlmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPm1fYW55Q2hhcmFjdGVyKSB7CiAgICAgICAgICAg
ICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hh
cmFjdGVyQ2xhc3MpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwor
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRj
aERlc3QubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5J
Q09ERV9FWFBSRVNTSU9OUykKQEAgLTE5OTgsMjIgKzE5MjAsMjIgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgYWR2YW5jZUluZGV4QWZ0ZXJD
aGFyYWN0ZXJDbGFzc1Rlcm1NYXRjaCh0ZXJtLCBmYWlsdXJlc0RlY3JlbWVudEluZGV4LCBjaGFy
YWN0ZXIpOwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgaW5kZXgpOwotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVn
aXN0ZXIpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgaWYgKHRlcm0t
PnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAgICAgYnJh
bmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgY291bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4
Q291bnQpKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGp1bXAobG9vcCk7
CisgICAgICAgICAgICBtX2ppdC5qdW1wKGxvb3ApOwogCiAgICAgICAgIGlmICghZmFpbHVyZXNE
ZWNyZW1lbnRJbmRleC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlc0RlY3JlbWVudElu
ZGV4LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4
KTsKKyAgICAgICAgICAgIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9y
ZWdzLmluZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7Ci0g
ICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgIGZhaWx1cmVzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICBz
dG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBAIC0yMDIy
LDQ1ICsxOTQ0LDQ1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVn
aXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQp
OwogCiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsK
LSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGNv
dW50UmVnaXN0ZXIpKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CisgICAgICAgIG1faml0
LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwog
ICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAogICAg
ICAgICBpZiAoIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVsc2UgaWYgKHRl
cm0tPmlzRml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIg
OiAxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8g
MiA6IDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFJl
bWF0Y2ggb25lIGxlc3MKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0g
cmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+
ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgp
LCBpbmRleCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4
KTsKIAotICAgICAgICAgICAgTGFiZWwgcmVtYXRjaExvb3AodGhpcyk7Ci0gICAgICAgICAgICBK
dW1wIGRvbmVSZW1hdGNoaW5nID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHJlbWF0Y2hMb29wKCZtX2ppdCk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lUmVtYXRjaGluZyA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRSZWdpc3Rlcik7CiAKICAgICAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlv
biwgY2hhcmFjdGVyKTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3Vu
dFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
Y291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogCiAjaWYgRU5BQkxFKFlBUlJfSklUX1VO
SUNPREVfRVhQUkVTU0lPTlMpCi0gICAgICAgICAgICBKdW1wIGlzQk1QQ2hhciA9IGJyYW5jaDMy
KExlc3NUaGFuLCBjaGFyYWN0ZXIsIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKLSAgICAgICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFy
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9y
ZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAg
ICBpc0JNUENoYXIubGluaygmbV9qaXQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGp1bXAocmVt
YXRjaExvb3ApOwotICAgICAgICAgICAgZG9uZVJlbWF0Y2hpbmcubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1faml0Lmp1bXAocmVtYXRjaExvb3ApOworICAgICAgICAgICAgZG9uZVJlbWF0Y2hp
bmcubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1hdGNoQW1vdW50SW5kZXgo
KSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIH0KLSAgICAgICAganVtcChvcC5tX3JlZW50cnkp
OworICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgfQogCiAgICAgdm9pZCBn
ZW5lcmF0ZUNoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4KQpAQCAtMjA2OCwx
NSArMTk5MCwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0q
IHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lz
dGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNv
dW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVn
aXN0ZXIpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAjaWYgRU5B
QkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1
cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5o
YXNPbmVDaGFyYWN0ZXJTaXplKCkgfHwgdGVybS0+aW52ZXJ0KCkpCi0gICAgICAgICAgICAgICAg
c3RvcmVUb0ZyYW1lKGluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0No
YXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShtX3JlZ3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFj
dGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yMDg4LDI3
ICsyMDEwLDI3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSog
dGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9
IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsK
KyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9y
ZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3Vu
dFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIEp1bXBMaXN0IG5vbkdyZWVkeUZh
aWx1cmVzOwotICAgICAgICBKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVu
dEluZGV4OwogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICNpZiBFTkFCTEUoWUFSUl9K
SVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFp
cnMpIHsKICAgICAgICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09uZUNoYXJh
Y3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkKLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZy
YW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+
ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgp
LCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICBsb2FkRnJvbUZy
YW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1h
dGNoQW1vdW50SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgbm9uR3JlZWR5RmFp
bHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMu
YXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0
eU1heENvdW50KSkpOworICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKIAotICAgICAgICBKdW1wTGlzdCBt
YXRjaERlc3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlv
biwgY2hhcmFjdGVyKTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAiYW55IGNo
YXJhY3RlciIgYnVpbHRpbiBjbGFzcyBmb3Igbm9uLXVuaWNvZGUgcGF0dGVybnMsCiAgICAgICAg
IC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8g
bWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KQEAgLTIxMTgsOCArMjA0MCw4IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGlmICh0
ZXJtLT5pbnZlcnQoKSkKICAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQo
bWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vbkdyZWVk
eUZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtMjEyOCwxNyArMjA1MCwxNyBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBhZHZhbmNlSW5kZXhBZnRl
ckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIG5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50
SW5kZXgsIGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBtX2ppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAotICAgICAg
ICBqdW1wKG9wLm1fcmVlbnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsK
IAogICAgICAgICBpZiAoIW5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXguZW1wdHkoKSkg
ewotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5rKHRoaXMp
OwotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVy
ZXNEZWNyZW1lbnRJbmRleC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5icmVha3Bv
aW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsK
LSAgICAgICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBub25HcmVlZHlG
YWlsdXJlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN1YjMyKGNvdW50UmVnaXN0ZXIs
IG1fcmVncy5pbmRleCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2go
KTsKICAgICB9CiAKQEAgLTIxNDcsNjIgKzIwNjksNjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07
CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
bWF0Y2hQb3MgPSByZWdUMTsKLSAgICAgICAgSnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5l
OwotICAgICAgICBKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKLSAgICAgICAgSnVtcExpc3QgZm91
bmRFbmRpbmdOZXdMaW5lOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIG1hdGNoUG9zID0gbV9yZWdzLnJlZ1QxOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5lOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2F2ZVN0YXJ0SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmb3VuZEVuZGluZ05ld0xpbmU7CiAKICAgICAgICAgaWYgKG1fcGF0dGVybi5kb3RB
bGwoKSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIG1hdGNoUG9zKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbWF0
Y2hQb3MpOwogICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7Ci0gICAgICAgICAg
ICBtb3ZlKGxlbmd0aCwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MubGVu
Z3RoLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAg
ICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAg
IGdldE1hdGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVu
ZChicmFuY2gzMihCZWxvd09yRXF1YWwsIG1hdGNoUG9zLCBpbml0aWFsU3RhcnQpKTsKLSAgICAg
ICAgTGFiZWwgZmluZEJPTExvb3AodGhpcyk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgbWF0Y2hQb3MpOworICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbWF0Y2hQb3MsIG1fcmVncy5pbml0aWFs
U3RhcnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpbmRCT0xMb29wKCZtX2pp
dCk7CisgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IG1hdGNoUG9zKTsKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQot
ICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNPbmUsIDAp
LCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUs
IDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkMTYoQmFzZUlu
ZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBt
YXRjaFBvcywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKICAgICAg
ICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5kQmVnaW5uaW5nTmV3TGluZSwg
bV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKIAotICAgICAgICBicmFuY2gzMihB
Ym92ZSwgbWF0Y2hQb3MsIGluaXRpYWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCB0aGlzKTsK
LSAgICAgICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbWF0Y2hQb3MsIG1fcmVncy5pbml0aWFsU3Rh
cnQpLmxpbmtUbyhmaW5kQk9MTG9vcCwgJm1faml0KTsKKyAgICAgICAgc2F2ZVN0YXJ0SW5kZXgu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgZm91bmRCZWdpbm5pbmdOZXdMaW5lLmxp
bmsodGhpcyk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOyAvLyBB
ZHZhbmNlIHBhc3QgbmV3bGluZQotICAgICAgICBzYXZlU3RhcnRJbmRleC5saW5rKHRoaXMpOwor
ICAgICAgICBmb3VuZEJlZ2lubmluZ05ld0xpbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7IC8vIEFk
dmFuY2UgcGFzdCBuZXdsaW5lCisgICAgICAgIHNhdmVTdGFydEluZGV4LmxpbmsoJm1faml0KTsK
IAogICAgICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0ZXJtLT5hbmNob3JzLmJv
bEFuY2hvcikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCBtYXRjaFBvcykpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtYXRjaFBvcykpOwogCiAgICAgICAg
IEFTU0VSVCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBzZXRN
YXRjaFN0YXJ0KG1hdGNoUG9zKTsKIAotICAgICAgICBtb3ZlKGluZGV4LCBtYXRjaFBvcyk7Cisg
ICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtYXRjaFBvcyk7CiAKLSAgICAgICAgTGFi
ZWwgZmluZEVPTExvb3AodGhpcyk7ICAgICAgICAKLSAgICAgICAgZm91bmRFbmRpbmdOZXdMaW5l
LmFwcGVuZChicmFuY2gzMihFcXVhbCwgbWF0Y2hQb3MsIGxlbmd0aCkpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZmluZEVPTExvb3AoJm1faml0KTsKKyAgICAgICAgZm91bmRFbmRp
bmdOZXdMaW5lLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1h
dGNoUG9zLCBtX3JlZ3MubGVuZ3RoKSk7CiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkKLSAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3Ms
IFRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bG9hZDE2KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzVHdvLCAwKSwgY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1f
cmVncy5pbnB1dCwgbWF0Y2hQb3MsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIGNoYXJh
Y3Rlcik7CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmb3VuZEVuZGlu
Z05ld0xpbmUsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwotICAgICAgICBqdW1wKGZpbmRFT0xMb29w
KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bWF0Y2hQb3MpOworICAgICAgICBtX2ppdC5qdW1wKGZpbmRFT0xMb29wKTsKIAotICAgICAgICBm
b3VuZEVuZGluZ05ld0xpbmUubGluayh0aGlzKTsKKyAgICAgICAgZm91bmRFbmRpbmdOZXdMaW5l
LmxpbmsoJm1faml0KTsKIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0
ZXJtLT5hbmNob3JzLmVvbEFuY2hvcikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBtYXRjaFBvcywgbGVuZ3RoKSk7CisgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1hdGNo
UG9zLCBtX3JlZ3MubGVuZ3RoKSk7CiAKLSAgICAgICAgbW92ZShtYXRjaFBvcywgaW5kZXgpOwor
ICAgICAgICBtX2ppdC5tb3ZlKG1hdGNoUG9zLCBtX3JlZ3MuaW5kZXgpOwogICAgIH0KIAogICAg
IHZvaWQgYmFja3RyYWNrRG90U3RhckVuY2xvc3VyZShzaXplX3Qgb3BJbmRleCkKQEAgLTIzNjcs
NyArMjI4OSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAog
ICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5kZXgsIGxhYmVsKCkpOwor
ICAgICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JHZW5lcmF0ZShvcEluZGV4LCBt
X2ppdC5sYWJlbCgpKTsKIAogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhd
OwogICAgICAgICAgICAgc3dpdGNoIChvcC5tX29wKSB7CkBAIC0yNDA4LDcgKzIzMzAsNyBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAg
ICAvLyBXZSB3aWxsIHJlZW50ZXIgYWZ0ZXIgdGhlIGNoZWNrLCBhbmQgYXNzdW1lIHRoZSBpbnB1
dCBwb3NpdGlvbiB0byBoYXZlIGJlZW4KICAgICAgICAgICAgICAgICAvLyBzZXQgYXMgYXBwcm9w
cmlhdGUgdG8gdGhpcyBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkg
PSBsYWJlbCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7
CiAKICAgICAgICAgICAgICAgICAvLyBFbWl0IGZhc3Qgc2tpcCBwYXRoIHdpdGggc3RyaWRlIGlm
IHdlIGhhdmUgQm95ZXJNb29yZUluZm8uCiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fYm1JbmZv
KSB7CkBAIC0yNDIwLDggKzIzNDIsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIFttYXAsIGNoYXJhY3RlcnNG
YXN0UGF0aF0gPSBvcC5tX2JtSW5mby0+Y3JlYXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgs
IGVuZEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1hcENvdW50ID0g
bWFwLmNvdW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW5kaWF0ZSBjaGFy
YWN0ZXJzIGFyZSA8PSAyLCBjaGVja2luZyBlYWNoIGlzIGJldHRlciB0aGFuIHVzaW5nIHZlY3Rv
ci4KLSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG91dE9mTGVuZ3RoRmFpbHVyZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoZWQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3V0T2ZMZW5ndGhGYWlsdXJlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoZWQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihZYXJySklUSW50ZXJuYWw6OnZl
cmJvc2UsICJCTSBCaXRtYXAgaXMgIiwgbWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFBhdHRlcm5zIGxpa2UgL1tdLyBoYXZlIHplcm8gY2FuZGlkYXRlcy4gU2luY2UgaXQgaXMgcmFy
ZSwgd2UgZG8gbm90IGRvIG5vdGhpbmcgZm9yIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbWFwQ291bnQpCkBAIC0yNDMwLDc1ICsyMzUyLDc1IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KEJveWVyTW9vcmVGYXN0Q2FuZGlkYXRlczo6bWF4U2l6ZSA9PSAyKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhw
Q29tcGlsYXRpb24oKSwgIkZvdW5kIGNoYXJhY3RlcnMgZmFzdHBhdGggbG9va2FoZWFkICIsIGNo
YXJhY3RlcnNGYXN0UGF0aCwgIiByYW5nZTpbIiwgYmVnaW5JbmRleCwgIiwgIiwgZW5kSW5kZXgs
ICIpIik7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFi
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tl
ZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKGNo
YXJhY3RlcnNGYXN0UGF0aC5hdCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGxvb3BIZWFkID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgbV9yZWdzLnJl
Z1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5yZWdUMCwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMCkpKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlcnNGYXN0UGF0aC5zaXplKCkgPiAxKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMSkpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgxKSkpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5w
dXQoZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
anVtcCgpLmxpbmtUbyhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0
byogcG9pbnRlciA9IGdldEJveWVyTW9vcmVCaXRtYXAobWFwKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24o
KSwgIkZvdW5kIGJpdG1hcCBsb29rYWhlYWQgY291bnQ6KCIsIG1hcENvdW50LCAiKSxyYW5nZTpb
IiwgYmVnaW5JbmRleCwgIiwgIiwgZW5kSW5kZXgsICIpIik7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIHJlZ1QxKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFiZWwoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4
ICsgMSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIG1fcmVncy5yZWdUMSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb29wSGVhZCA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQg
LSBlbmRJbmRleCArIDEsIG1fcmVncy5yZWdUMCk7CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJveWVyTW9vcmVCaXRtYXA6
Ok1hcDo6V29yZFR5cGUpID09IHNpemVvZih1aW50NjRfdCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCA2ID09IDY0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDYgKyAxKSA9PSBCb3llck1vb3JlQml0bWFw
OjpNYXA6OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdFVuc2ln
bmVkQml0ZmllbGQzMihyZWdUMCwgVHJ1c3RlZEltbTMyKDYpLCBUcnVzdGVkSW1tMzIoMSksIHJl
Z1QyKTsgLy8gRXh0cmFjdCAxIGJpdCBmb3IgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVzRWlnaHQpLCByZWdUMik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDY0KHJlZ1QwLCByZWdUMik7IC8v
IFdlIGNhbiBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA2Yml0cyBhcmUgZWZmZWN0
aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuZXh0cmFjdFVuc2lnbmVkQml0ZmllbGQzMihtX3JlZ3MucmVnVDAs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIG1fcmVncy5yZWdUMik7IC8vIEV4dHJhY3QgMSBiaXQgZm9yIGluZGV4LgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KG1fcmVncy5yZWdUMSwgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
dXJzaGlmdDY0KG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsgLy8gV2UgY2FuIGlnbm9yZSB1
cHBlciBiaXRzIGFuZCBvbmx5IGxvd2VyIDZiaXRzIGFyZSBlZmZlY3RpdmUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSkpKTsKICNlbGlmIENQVShYODZfNjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydCgxIDw8IDYgPT0gNjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoMSA8PCAoNiArIDEpID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMig2KSwgcmVnVDIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJl
Z1QyLCBUaW1lc0VpZ2h0KSwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWQuYXBwZW5kKGJyYW5jaFRlc3RCaXQ2NChOb25aZXJvLCByZWdUMiwgcmVnVDApKTsgLy8g
V2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3JtZWQuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIG1fcmVn
cy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEsIG1fcmVncy5yZWdU
MiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RCaXQ2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBtX3JlZ3MucmVnVDApKTsgLy8g
V2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3JtZWQuCiAj
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJv
eWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUpID09IHNpemVvZih1aW50MzJfdCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCA1ID09IDMyKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDUgKyAyKSA9PSBC
b3llck1vb3JlQml0bWFwOjpNYXA6OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hp
ZnQzMihUcnVzdGVkSW1tMzIoNSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoMGIxMSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMiwgVGltZXNGb3VyKSwgcmVnVDIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hpZnQzMihyZWdUMCwgcmVnVDIpOyAv
LyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNWJpdHMgYXJlIGVmZmVj
dGl2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMigxKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVnVDIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDUpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMGIxMSksIG1fcmVn
cy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIsIFRpbWVzRm91
ciksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJz
aGlmdDMyKG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBl
ciBiaXRzIGFuZCBvbmx5IGxvd2VyIDViaXRzIGFyZSBlZmZlY3RpdmUuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIFRydXN0ZWRJbW0zMigxKSkpOwogI2VuZGlm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0T2ZMZW5ndGhGYWlsdXJlLmFwcGVuZChq
dW1wSWZOb0F2YWlsYWJsZUlucHV0KGVuZEluZGV4IC0gYmVnaW5JbmRleCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcEhlYWQsIHRoaXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obG9vcEhlYWQsICZtX2pp
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBwYXR0ZXJuIHNpemUgaXMgbm90IGZpeGVkLCB0aGVuIHN0b3JlIHRoZSBzdGFy
dCBpbmRleCBmb3IgdXNlIGlmIHdlIG1hdGNoLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB1c2VkIGZvciBhZGp1c3RpbmcgbWF0Y2gtc3RhcnQgd2hlbiB3ZSBmYWlsZWQgdG8g
ZmluZCB0aGUgc3RhcnQgd2l0aCBCb3llck1vb3JlIHNlYXJjaC4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRPZkxlbmd0aEZhaWx1cmUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRPZkxlbmd0aEZhaWx1cmUubGluaygmbV9qaXQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIo
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0z
MihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChvdXRPZkxlbmd0aEZhaWx1cmUpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVk
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXR0ZXJuIHNpemUgaXMgbm90
IGZpeGVkLCB0aGVuIHN0b3JlIHRoZSBzdGFydCBpbmRleCBmb3IgdXNlIGlmIHdlIG1hdGNoLgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGZvciBhZGp1c3RpbmcgbWF0
Y2gtc3RhcnQgd2hlbiB3ZSBzdGFydCBwYXR0ZXJuIG1hdGNoaW5nIHdpdGggdGhlIHVwZGF0ZWQg
aW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IEJveWVyTW9vcmUgc2VhcmNoLgog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVk
U2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRl
eCwgSW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQocmVnVDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZWdUMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLnJlZ1Qw
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAg
LTI1MTcsMjEgKzI0MzksMjAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIC8vIExvYWQgYXBwcm9wcmlhdGUgdmFsdWVzIGludG8gdGhl
IHJldHVybiByZWdpc3RlciBhbmQgdGhlIGZpcnN0IG91dHB1dAogICAgICAgICAgICAgICAgIC8v
IHNsb3QsIGFuZCByZXR1cm4uIEluIHRoZSBjYXNlIG9mIHBhdHRlcm4gd2l0aCBhIGZpeGVkIHNp
emUsIHdlIHdpbGwKICAgICAgICAgICAgICAgICAvLyBub3QgaGF2ZSB5ZXQgc2V0IHRoZSB2YWx1
ZSBpbiB0aGUgZmlyc3QgCi0gICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4ICE9IHJldHVyblJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9yZWdzLmluZGV4ICE9IG1fcmVncy5y
ZXR1cm5SZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1f
aGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmlvckFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIElt
bTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCByZXR1cm5SZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLnJl
dHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgbW92ZShpbmRleCwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJ
bmNsdWRlU3VicGF0dGVybnMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVBhaXIzMihy
ZXR1cm5SZWdpc3RlciwgaW5kZXgsIG91dHB1dCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUGFpcjMyKG1fcmVncy5yZXR1cm5SZWdpc3Rlciwg
bV9yZWdzLmluZGV4LCBtX3JlZ3Mub3V0cHV0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBnZXRN
YXRjaFN0YXJ0KHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TWF0Y2hT
dGFydChtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9j
b21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsIDQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCA0KSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIHJldHVyblJlZ2lzdGVyMik7Ci0KKyAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwgbV9yZWdzLnJldHVyblJlZ2lzdGVyMik7
CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKIAogICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgdGhlIGRpdmlkZSBiZXR3ZWVuIHRoZSB0YWlsIG9mIHRoZSBwcmlvciBhbHRlcm5h
dGl2ZSwgYWJvdmUsIGFuZApAQCAtMjU0MiwxNyArMjQ2MywxNyBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQganVt
cHMgaGVyZSB0byBkbyBzbyB3aXRoIHRoZSBpbnB1dCBwb3NpdGlvbiBtYXRjaGluZyB0aGF0IG9m
IHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBQUklPUiBhbHRlcmFuYXRpdmUsIGFuZCB3ZSB3
aWxsIG9ubHkgY2hlY2sgaW5wdXQgYXZhaWxhYmlsaXR5IGlmIHdlCiAgICAgICAgICAgICAgICAg
ICAgIC8vIG5lZWQgdG8gcHJvZ3Jlc3MgaXQgZm9yd2FyZHMuCi0gICAgICAgICAgICAgICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSA+IHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
IC0gcHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSAtIHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVt
cElmTm9BdmFpbGFibGVJbnB1dCgpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChw
cmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID4gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNp
emUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihwcmlvckFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplIC0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
cHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGFsdGVybmF0aXZlLT5tX21pbmltdW1T
aXplKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wLm1fbmV4
dE9wID09IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJl
ZW50cnkgcG9pbnQgZm9yIHRoZSBFbmQgb2YgJ29uY2UgdGhyb3VnaCcgYWx0ZXJuYXRpdmVzLAog
ICAgICAgICAgICAgICAgICAgICAvLyBqdW1wZWQgdG8gd2hlbiB0aGUgbGFzdCBhbHRlcm5hdGl2
ZSBmYWlscyB0byBtYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFi
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5
ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3Mu
aW5kZXgpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChvcC5tX29w
ID09IFlhcnJPcENvZGU6OkJvZHlBbHRlcm5hdGl2ZU5leHQpCkBAIC0yNjA4LDcgKzI1MjksNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCAm
JiAhbV9vcHNbb3AubV9wcmV2aW91c09wXS5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBhbHRlcm5hdGl2ZSBtYXRj
aGVkIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMgdGhlbgogICAgICAgICAgICAgICAgICAg
ICAvLyBiYWNrdHJhY2sgdG8gdHJ5IHRvIG1hdGNoIHdoaWxlIGNvbnN1bW1pbmcgc29tZSBpbnB1
dC4KLSAgICAgICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0Y2ggPSBicmFuY2gzMihF
cXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKiBzaXplb2Yodm9pZCopKSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1femVyb0xl
bmd0aE1hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3Mu
aW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSByZWFjaCBoZXJlIHRoZW4g
dGhlIGxhc3QgYWx0ZXJuYXRpdmUgaGFzIG1hdGNoZWQgLSBqdW1wIHRvIHRoZQpAQCAtMjYyNSwx
MCArMjU0NiwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICAgICAgICAgIGVuZE9wID0gJm1fb3BzW2VuZE9wLT5tX25leHRPcF07CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChlbmRPcC0+bV9vcCA9PSBZYXJy
T3BDb2RlOjpTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZCB8fCBlbmRPcC0+bV9vcCA9PSBZYXJy
T3BDb2RlOjpOZXN0ZWRBbHRlcm5hdGl2ZUVuZCk7Ci0gICAgICAgICAgICAgICAgZW5kT3AtPm1f
anVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgZW5kT3AtPm1fanVtcHMuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbnRy
eSBwb2ludCBmb3IgdGhlIG5leHQgYWx0ZXJuYXRpdmUuCi0gICAgICAgICAgICAgICAgb3AubV9y
ZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5s
YWJlbCgpOwogCiAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBtdWNoIGlucHV0IHdl
IG5lZWQgdG8gY2hlY2sgZm9yLCBhbmQgaWYgbm9uLXplcm8gY2hlY2suCiAgICAgICAgICAgICAg
ICAgb3AubV9jaGVja0FkanVzdCA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwpAQCAtMjY1
NSwxMyArMjU3NiwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlw
ZTo6Rml4ZWRDb3VudCAmJiAhbV9vcHNbb3AubV9wcmV2aW91c09wXS5tX2FsdGVybmF0aXZlLT5t
X21pbmltdW1TaXplKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBh
bHRlcm5hdGl2ZSBtYXRjaGVkIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMgdGhlbgogICAg
ICAgICAgICAgICAgICAgICAvLyBiYWNrdHJhY2sgdG8gdHJ5IHRvIG1hdGNoIHdoaWxlIGNvbnN1
bW1pbmcgc29tZSBpbnB1dC4KLSAgICAgICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0
Y2ggPSBicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CisgICAgICAgICAgICAgICAg
ICAgIG9wLm1femVyb0xlbmd0aE1hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2
b2lkKikpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IHNldCBvZiBhbHRlcm5hdGl2ZXMgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZSwK
ICAgICAgICAgICAgICAgICAvLyB0aGVuIHRoZSBOZXh0IG5vZGVzIHdpbGwgaGF2ZSBwbGFudGVk
IGp1bXBzIHRvIHRoZSBFbmQsIGFuZCBhZGRlZAogICAgICAgICAgICAgICAgIC8vIHRoZW0gdG8g
dGhpcyBub2RlJ3MgbV9qdW1wcyBsaXN0LgotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmNsZWFyKCk7CiAKICAgICAgICAgICAgICAgICBZYXJyT3Am
IGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CkBAIC0yNjc2LDcgKzI1OTcsNyBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBjYXNl
IFlhcnJPcENvZGU6OlBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbjogewogICAgICAgICAg
ICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOwor
ICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVt
cG9yYXJ5ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJtLT5xdWFu
dGl0eU1heENvdW50ID09IDEpOwogCiAgICAgICAgICAgICAgICAgLy8gVXBvbiBlbnRyeSB0byBh
IEdyZWVkeSBxdWFudGlmaWVkIHNldCBvZiBwYXJlbnRoZXNlIHN0b3JlIHRoZSBpbmRleC4KQEAg
LTI2OTQsMTIgKzI2MTUsMTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGZvciBj
YXB0dXJpbmcgcGFyZW5zLCBjb3VsZCB1c2UgdGhlIGluZGV4IGluIHRoZSBjYXB0dXJlIGFycmF5
PwogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdp
bkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNl
OjpiZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0tPnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpOwotICAgICAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgICAgICAg
ICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2Fw
dHVyaW5nLCBzdG9yZSB0aGUgc3RhcnRpbmcgaW5kZXggdmFsdWUgdG8gdGhlCkBAIC0yNzEzLDIz
ICsyNjM0LDIzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlw
ZTo6Rml4ZWRDb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0T2Zmc2V0ICs9IHRl
cm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMy
KGluZGV4LCBJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0U3VicGF0dGVyblN0YXJ0KGluZGV4VGVtcG9yYXJ5LCB0ZXJtLT5wYXJlbnRoZXNlcy5z
dWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNldFN1YnBhdHRlcm5TdGFydChpbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3Vi
cGF0dGVybklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5TdGFydCht
X3JlZ3MuaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kOiB7CiAgICAg
ICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07Ci0gICAgICAgICAgICAg
ICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gbV9y
ZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJtLT5xdWFudGl0eU1heENvdW50
ID09IDEpOwogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5lc3RlZCBhbHRlcm5hdGl2ZSBt
YXRjaGVkIHdpdGhvdXQgY29uc3VtaW5nIGFueSBjaGFyYWN0ZXJzLCBwdW50IHRoaXMgYmFjayB0
byB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNzg2PiBBZGQgYWJpbGl0eSBmb3IgdGhl
IFlBUlIgSklUIHRvIHByb3Blcmx5CiAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIG5lc3RlZCBl
eHByZXNzaW9ucyB0aGF0IGNhbiBtYXRjaCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCiAg
ICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6
Rml4ZWRDb3VudCAmJiAhdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNp
emUpCi0gICAgICAgICAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVM
b2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWJvcnRF
eGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9y
ZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpOwog
CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJlIGNhcHR1cmluZywgc3Rv
cmUgdGhlIGVuZGluZyBpbmRleCB2YWx1ZSB0byB0aGUKICAgICAgICAgICAgICAgICAvLyBjYXB0
dXJlcyBhcnJheSwgb2Zmc2V0dGluZyBhcyBuZWNlc3NhcnkuCkBAIC0yNzQwLDIwICsyNjYxLDIw
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
ICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1v
ZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnB1dE9mZnNldCA9IG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKGluZGV4VGVtcG9yYXJ5LCB0ZXJtLT5wYXJlbnRo
ZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2Vz
LnN1YnBhdHRlcm5JZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5k
KG1fcmVncy5pbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZXMgYXJlIHF1
YW50aWZpZWQgR3JlZWR5IHRoZW4gYWRkIGEgbGFiZWwgdG8ganVtcCBiYWNrCiAgICAgICAgICAg
ICAgICAgLy8gdG8gaWYgd2UgZ2V0IGEgZmFpbGVkIG1hdGNoIGZyb20gYWZ0ZXIgdGhlIHBhcmVu
dGhlc2VzLiBGb3IgTm9uR3JlZWR5CiAgICAgICAgICAgICAgICAgLy8gcGFyZW50aGVzZXMsIGxp
bmsgdGhlIGp1bXAgZnJvbSBiZWZvcmUgdGhlIHN1YnBhdHRlcm4gdG8gaGVyZS4KICAgICAgICAg
ICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkp
Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAg
ICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHkp
IHsKICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2
aW91c09wXTsKLSAgICAgICAgICAgICAgICAgICAgYmVnaW5PcC5tX2p1bXBzLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
Mjc2NiwxMSArMjY4NywxMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICAgICAgQVNTRVJUKCF0ZXJtLT5jYXB0dXJlKCkpOwogCiAgICAgICAg
ICAgICAgICAgLy8gVXBvbiBlbnRyeSBzZXQgYSBsYWJlbCB0byBsb29wIGJhY2sgdG8uCi0gICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICBvcC5t
X3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhl
IHN0YXJ0IGluZGV4IG9mIHRoZSBjdXJyZW50IG1hdGNoOyB3ZSBuZWVkIHRvIHJlamVjdCB6ZXJv
CiAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIG1hdGNoZXMuCi0gICAgICAgICAgICAgICAgc3Rv
cmVUb0ZyYW1lKGluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzVGVybWluYWw6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKG1fcmVncy5pbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlc1Rlcm1pbmFsOjpiZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRoZXNlc1N1
YnBhdHRlcm5UZXJtaW5hbEVuZDogewpAQCAtMjc4MSwxNSArMjcwMiwxNSBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNzg2PiBBZGQgYWJp
bGl0eSBmb3IgdGhlIFlBUlIgSklUIHRvIHByb3Blcmx5CiAgICAgICAgICAgICAgICAgLy8gaGFu
ZGxlIG5lc3RlZCBleHByZXNzaW9ucyB0aGF0IGNhbiBtYXRjaCB3aXRob3V0IGNvbnN1bWluZyBj
aGFyYWN0ZXJzCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFu
dGlmaWVyVHlwZTo6Rml4ZWRDb3VudCAmJiAhdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24t
Pm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBw
ZW5kKGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
dGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yo
dm9pZCopKSkpOwogCiAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoZSBtYXRjaCBp
cyBub24temVybywgd2UgY2FuIGFjY2VwdCBpdCBhbmQKICAgICAgICAgICAgICAgICAvLyBsb29w
IGJhY2sgdXAgdG8gdGhlIGhlYWQgb2YgdGhlIHN1YnBhdHRlcm4uCi0gICAgICAgICAgICAgICAg
anVtcChiZWdpbk9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgbV9qaXQuanVtcChiZWdp
bk9wLm1fcmVlbnRyeSk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbnRyeSBw
b2ludCB0byBqdW1wIHRvIHdoZW4gd2Ugc3RvcCBtYXRjaGluZyAtIHdlIHdpbGwKICAgICAgICAg
ICAgICAgICAvLyBkbyBzbyBvbmNlIHRoZSBzdWJwYXR0ZXJuIGNhbm5vdCBtYXRjaCBhbnkgbW9y
ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAg
ICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKQEAgLTI4MTYsMjQgKzI3MzcsMjQgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IGZvciBjYXB0dXJpbmcgcGFyZW5zLCBjb3VsZCB1c2UgdGhlIGluZGV4
IGluIHRoZSBjYXB0dXJlIGFycmF5PwogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSB8fCB0ZXJtLT5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUoVHJ1c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Rv
cmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4
dEhlYWRJbmRleCgpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlU
eXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2lu
SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAg
ICAgICAgICBSZWdpc3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSByZWdUMDsKLSAgICAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSByZWdUMTsKKyAgICAg
ICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VyclBhcmVuQ29udGV4dFJlZyA9
IG1fcmVncy5yZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgbmV3UGFyZW5Db250ZXh0UmVnID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgICAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSwgY3VyclBhcmVuQ29udGV4
dFJlZyk7CiAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlUGFyZW5Db250ZXh0KG5ld1BhcmVu
Q29udGV4dFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlUHRyKGN1cnJQYXJlbkNvbnRl
eHRSZWcsIG5ld1BhcmVuQ29udGV4dFJlZyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGN1cnJQYXJlbkNvbnRleHRSZWcsIG5ld1BhcmVuQ29udGV4dFJlZyk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShuZXdQYXJlbkNvbnRleHRSZWcsIHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVh
ZEluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBzYXZlUGFyZW5Db250ZXh0KG5ld1BhcmVu
Q29udGV4dFJlZywgcmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+
cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHNhdmVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnLCBtX3Jl
Z3MucmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVz
ZXMubGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFyZSBj
YXB0dXJpbmcsIHN0b3JlIHRoZSBzdGFydGluZyBpbmRleCB2YWx1ZSB0byB0aGUKQEAgLTI4NDMs
MTUgKzI3NjQsMTUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9pbnQg
dGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3NlZC4K
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0g
SklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0g
bV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dE9mZnNldCA9
IG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQp
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dE9mZnNldCArPSB0ZXJtLT5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlu
cHV0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIo
aW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9mZnNl
dCksIGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRl
cm5TdGFydChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRT
dWJwYXR0ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQobV9yZWdzLmluZGV4LCB0
ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KICNlbHNl
IC8vICFZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TCiAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI4NjcsMTMgKzI3ODgsMTMgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4gQWRk
IGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJVCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAgIC8v
IGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25zdW1p
bmcgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0g
UXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0
aW9uLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9u
LmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIGNvdW50VGVtcG9yYXJ5ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDE7CiAKICAg
ICAgICAgICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwog
ICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsg
QmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50VGVtcG9y
YXJ5KTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVtcG9y
YXJ5KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1l
KGNvdW50VGVtcG9yYXJ5LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4IHZh
bHVlIHRvIHRoZQpAQCAtMjg4MywxNCArMjgwNCwxNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyBvbmx5IGFmdGVy
d2FyZHMsIGF0IHRoZSBwb2ludCB0aGUgcmVzdWx0cyBhcnJheSBpcwogICAgICAgICAgICAgICAg
IC8vIGJlaW5nIGFjY2Vzc2VkLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkg
JiYgbV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSBy
ZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dE9mZnNldCA9IG1fY2hlY2tlZE9mZnNl
dCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9m
ZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0
T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBp
bmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5k
KGluZGV4VGVtcG9yYXJ5LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRl
cm5FbmQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKG1fcmVncy5pbmRleCwgdGVybS0+cGFyZW50
aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgcGFyZW50aGVzZXMgYXJlIHF1YW50aWZpZWQgR3JlZWR5IHRoZW4gYWRkIGEg
bGFiZWwgdG8ganVtcCBiYWNrCkBAIC0yODk4LDE1ICsyODE5LDE1IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBwYXJlbnRoZXNl
cywgbGluayB0aGUganVtcCBmcm9tIGJlZm9yZSB0aGUgc3VicGF0dGVybiB0byBoZXJlLgogICAg
ICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Okdy
ZWVkeSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAh
PSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIoQmVs
b3csIGNvdW50VGVtcG9yYXJ5LCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlua1Rv
KGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgY291bnRUZW1wb3JhcnksIE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlua1RvKGJlZ2luT3AubV9y
ZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBqdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0Lmp1bXAoYmVnaW5PcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5
KSB7CiAgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJl
dmlvdXNPcF07Ci0gICAgICAgICAgICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRoaXMp
OwotICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAg
ICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
ICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIH0KICNl
bHNlIC8vICFZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TCiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5MjEsMTIgKzI4NDIsMTIgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8v
IFN0b3JlIHRoZSBjdXJyZW50IGluZGV4IC0gYXNzZXJ0aW9ucyBzaG91bGQgbm90IHVwZGF0ZSBp
bmRleCwgc28KICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gcmVzdG9yZSBpdCB1
cG9uIGEgc3VjY2Vzc2Z1bCBtYXRjaC4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsg
QmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSk7CiAKICAg
ICAgICAgICAgICAgICAvLyBDaGVjayAKICAgICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRqdXN0
ID0gbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAgICAg
ICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIo
b3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBtX3JlZ3MuaW5kZXgp
OwogCiAgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0IC09IG9wLm1fY2hlY2tBZGp1c3Q7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTM2LDEzICsyODU3LDEzIEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAgICAgICAgIC8vIFJl
c3RvcmUgdGhlIGlucHV0IGluZGV4IHZhbHVlLgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0gICAgICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgp
OwogCiAgICAgICAgICAgICAgICAgLy8gSWYgaW52ZXJ0ZWQsIGEgc3VjY2Vzc2Z1bCBtYXRjaCBv
ZiB0aGUgYXNzZXJ0aW9uIG11c3QgYmUgdHJlYXRlZAogICAgICAgICAgICAgICAgIC8vIGFzIGEg
ZmFpbHVyZSwgc28ganVtcCB0byBiYWNrdHJhY2tpbmcuCiAgICAgICAgICAgICAgICAgaWYgKHRl
cm0tPmludmVydCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3ByZXZp
b3VzT3BdOwpAQCAtMjk3MCw3ICsyODkxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgLS1vcEluZGV4OwogCiAgICAgICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJh
Y2t0cmFjayhvcEluZGV4LCBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0Rm9yQmFja3RyYWNrKG9wSW5kZXgsIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAgICAg
ICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG9wLm1f
b3ApIHsKQEAgLTMwMTUsNyArMjkzNiw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHRoZSBsYXN0IGFsdGVybmF0
aXZlPyBJZiBub3QsIHRoZW4gaWYgd2UgYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgd2UganVzdAog
ICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8ganVtcCB0byB0cnkgdG8gbWF0Y2ggdGhlIG5leHQg
YWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG1fb3BzW29wLm1fbmV4dE9wXS5tX29w
ICE9IFlhcnJPcENvZGU6OkJvZHlBbHRlcm5hdGl2ZUVuZCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8o
bV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFlhcnJPcCYgZW5k
T3AgPSBtX29wc1tvcC5tX25leHRPcF07CkBAIC0zMDI5LDE3ICsyOTUwLDE3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAgICAgICAgIGJvb2wg
b25jZVRocm91Z2ggPSBlbmRPcC5tX25leHRPcCA9PSBub3RGb3VuZDsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBKdW1wTGlzdCBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJl
czsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbGFzdFN0aWNreUFs
dGVybmF0aXZlRmFpbHVyZXM7CiAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgZ2VuZXJhdGUg
Y29kZSB0byBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgYmFja3RyYWNrIG91dCBvZiBhbiBhdHRlbXB0
ZWQgbWF0Y2gKICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZS4gSWYg
dGhpcyBpcyBhICdvbmNlIHRocm91Z2gnIHNldCBvZiBhbHRlcm5hdGl2ZXMgdGhlbiB3ZQogICAg
ICAgICAgICAgICAgIC8vIGhhdmUgbm90aGluZyB0byBkbyAtIGxpbmsgdGhpcyBzdHJhaWdodCB0
aHJvdWdoIHRvIHRoZSBFbmQuCiAgICAgICAgICAgICAgICAgaWYgKG9uY2VUaHJvdWdoKQotICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3JlZW50
cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtU
byhlbmRPcC5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4uc3RpY2t5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0IGlzIGEgc3RpY2t5IHBhdHRlcm4gYW5kIHRoZSBsYXN0IGFsdGVybmF0
aXZlIGZhaWxlZCwganVtcCB0byB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobGFzdFN0aWNreUFsdGVy
bmF0aXZlRmFpbHVyZXMsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobGFzdFN0aWNreUFsdGVybmF0aXZl
RmFpbHVyZXMsICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9wYXR0
ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChh
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA+IGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IDEpKSB7
CkBAIC0zMDQ3LDExICsyOTY4LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChpbiB3aGljaCBjYXNlIHdlIG9t
aXQgdGhlIHN0b3JlIG9mIHRoZSBzdGFydCBpbmRleCB1bnRpbCB0aGUgcGF0dGVybiBoYXMgbWF0
Y2hlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIGp1c3QgbGluayB0
aGUgYmFja3RyYWNrIG91dCBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBzdHJhaWdodCB0byB0aGUK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWQgb2YgdGhlIGZpcnN0IGFsdGVybmF0aXZl
LgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oYmVn
aW5PcC0+bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gZ2VuZXJhdGUgYSB0cmFtcG9saW5lIG9mIGNvZGUgdG8gZXhlY3V0ZSBiZWZvcmUgbG9vcGlu
ZyBiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcm91bmQgdG8gdGhlIGZpcnN0IGFs
dGVybmF0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5s
aW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gYWR2
YW5jZSBhbmQgcmV0cnkgZm9yIGEgc3RpY2t5IHBhdHRlcm4uIEFuZCBpdCBpcyBhbHJlYWR5IGhh
bmRsZWQgYmVmb3JlIHRoaXMgYnJhbmNoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFtX3BhdHRlcm4uc3RpY2t5KCkpOwpAQCAtMzA1OSwxMyArMjk4MCwxMyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0aGUgc3RhcnQg
aW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gMSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1T
aXplIC0gMSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplIC0gMSksIG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMwNzcsMTYgKzI5OTgs
MTYgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbHRhID0gYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZWx0YSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlbHRhICE9IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
YjMyKEltbTMyKGRlbHRhIC0gMSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqdW1wKGJlZ2luT3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSAtIDEpLCBtX3JlZ3Mu
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5PcC0+
bV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGFsdGVybmF0aXZlIGhhcyBtaW5pbXVt
IHNpemUgMHhGRkZGRkZGRnUsIHRoZW4gdGhlcmUgY2Fubm90CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYmUgc3VmZmljZW50IGlucHV0IGF2YWlsYWJsZSB0byBoYW5kbGUgdGhpcywg
c28ganVzdCBmYWxsIHRocm91Z2guCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZGVsdGEgPSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRl
bHRhICE9IDB4RkZGRkZGRkZ1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gY2hlY2sgaW5wdXQgYmVjYXVzZSB3ZSBhcmUgaW5jcmVtZW50aW5nIHRoZSBp
bnB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoZGVsdGEg
KyAxKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0
KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSArIDEp
LCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lu
cHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTMwOTksNyArMzAyMCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyAgICBmb2xsb3dpbmcgYSBmYWlsZWQg
aW5wdXQgY2hlY2suCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBFaXRo
ZXIgd2F5LCB3ZSBoYXZlIGp1c3QgZmFpbGVkIHRoZSBpbnB1dCBjaGVjayBmb3IgdGhlIGZpcnN0
IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIExhYmVsIGZpcnN0SW5wdXRDaGVja0ZhaWxl
ZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmlyc3RJbnB1
dENoZWNrRmFpbGVkKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBjb2Rl
IHRvIGhhbmRsZSBpbnB1dCBjaGVjayBmYWlsdXJlcyBmcm9tIGFsdGVybmF0aXZlcyBleGNlcHQg
dGhlIGxhc3QuCiAgICAgICAgICAgICAgICAgLy8gcHJldk9wIGlzIHRoZSBhbHRlcm5hdGl2ZSB3
ZSdyZSBoYW5kbGluZyBhIGJhaWwgb3V0IGZyb20gKGluaXRpYWxseSBCZWdpbiksIGFuZApAQCAt
MzExMCw3ICszMDMxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICAgICAgICAgIFlhcnJPcCogcHJldk9wID0gYmVnaW5PcDsKICAgICAgICAgICAg
ICAgICBZYXJyT3AqIG5leHRPcCA9ICZtX29wc1tiZWdpbk9wLT5tX25leHRPcF07CiAgICAgICAg
ICAgICAgICAgd2hpbGUgKG5leHRPcC0+bV9vcCAhPSBZYXJyT3BDb2RlOjpCb2R5QWx0ZXJuYXRp
dmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldk9wLT5tX2p1bXBzLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIHByZXZPcC0+bV9qdW1wcy5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBnZXQgaGVyZSBpZiBhbiBpbnB1dCBjaGVjayBm
YWlscywgaXQgaXMgb25seSB3b3J0aCBjaGVja2luZyBhZ2FpbgogICAgICAgICAgICAgICAgICAg
ICAvLyBpZiB0aGUgbmV4dCBhbHRlcm5hdGl2ZSBoYXMgYSBtaW5pbXVtIHNpemUgbGVzcyB0aGFu
IHRoZSBsYXN0LgpAQCAtMzExOSwxMyArMzA0MCwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBk
ZWx0YSBiYWNrIG91dCwgYW5kIHJlZHVjZSB0aGlzIGNvZGUuIFNob3VsZCBwZXJmb3JtYW5jZSB0
ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYmVuZWZpdCBvZiB0aGlzLgogICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsdGEgPSBwcmV2T3AtPm1fYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemUgLSBuZXh0T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEp1bXAgZmFpbCA9IGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGRlbHRhKSwgaW5kZXgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAganVtcChuZXh0T3AtPm1fcmVlbnRyeSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmYWlsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5kZXgp
OworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCA9IGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG5leHRPcC0+bV9yZWVudHJ5KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZhaWwubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHByZXZPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA8IG5leHRPcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZDMyKEltbTMyKG5leHRPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByZXZPcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihuZXh0T3AtPm1fYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNp
emUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBwcmV2T3AgPSBuZXh0T3A7
CiAgICAgICAgICAgICAgICAgICAgIG5leHRPcCA9ICZtX29wc1tuZXh0T3AtPm1fbmV4dE9wXTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0zMTM1LDE0ICszMDU2LDE0IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBp
cyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8gcnVuIHRoZSBsYXN0IGFsdGVybmF0aXZlLCB0aGVuIGZv
ciAnb25jZSB0aHJvdWdoJwogICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlcyB3ZSBhcmUg
ZG9uZSAtIGp1c3QganVtcCBiYWNrIHVwIGludG8gdGhlIGZvcndhcmRzIG1hdGNoaW5nIHBhdGgg
YXQgdGhlIEVuZC4KICAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpIHsKLSAgICAgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsKLSAg
ICAgICAgICAgICAgICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAg
ICAgICBvcC5tX2p1bXBzLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksICZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgICAgIG1faml0Lmp1bXAoZW5kT3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRm9y
IHJlcGVhdGluZyBhbHRlcm5hdGl2ZXMsIGxpbmsgYW55IGlucHV0IGNoZWNrIGZhaWx1cmUgZnJv
bSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSB0bwogICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQu
Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBuZWVkc1Rv
VXBkYXRlTWF0Y2hTdGFydCA9ICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZTsKIApA
QCAtMzE1MSw3ICszMDcyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIC8vIGRpc2p1bmN0aW9uIGlzIDAsIGUuZy4gL2EqfGIvKS4K
ICAgICAgICAgICAgICAgICBpZiAobmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgJiYgYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbmRleCBp
cyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IDEsIHNvIGp1c3Qgc3RvcmUgaXQgbm93IQotICAgICAg
ICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBuZWVkc1Rv
VXBkYXRlTWF0Y2hTdGFydCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMzE2NCwy
MiArMzA4NSwyMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSBtX3Bh
dHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBoYWQgdGhlIHNhbWUgbWluaW11bSBzaXplIGFzIHRo
ZSBkaXNqdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3Qgc2ltcGx5IGlu
Y3JlbWVudCBpbnB1dCBwb3MgYnkgMSwgbm8gYWRqdXN0bWVudCBiYXNlZCBvbiBtaW5pbXVtIHNp
emUuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbWludW11bSBmb3IgdGhlIGxh
c3QgYWx0ZXJuYXRpdmUgd2FzIG9uZSBncmVhdGVyIHRoYW4gdGhhbiB0aGF0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBmb3IgdGhlIGRpc2p1bmN0aW9uLCB3ZSdyZSBhbHJlYWR5IHByb2dy
ZXNzZWQgYnkgMSwgbm90aGluZyB0byBkbyEKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlbHRhID0gKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9k
eS0+bV9taW5pbXVtU2l6ZSkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRh
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGRlbHRhKSwgaW5kZXgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVy
OjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgSnVtcCBtYXRjaEZhaWxlZCA9IGp1bXBJZk5vQXZhaWxhYmxlSW5w
dXQoKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbWF0Y2hGYWls
ZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKG1fcGF0
dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9wYXR0
ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMxODcsMjIgKzMxMDgs
MjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAg
ICAgICAgICAgICAvLyBmb3IgdGhlIGJvZHkgYXMgYSB3aG9sZS4gSWYgbm8gbW9yZSBpcyBuZWVk
ZWQgdGhlbiB3ZSBkb250IG5lZWQgYW4gYWRkaXRpb25hbAogICAgICAgICAgICAgICAgICAgICAv
LyBpbnB1dCBjaGVjayBoZXJlIC0ganVtcCBzdHJhaWdodCBiYWNrIHVwIHRvIHRoZSBzdGFydCBv
ZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbk9w
LT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IG1fcGF0dGVybi5tX2JvZHktPm1fbWlu
aW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AtPm1fcmVlbnRy
eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AtPm1fcmVlbnRy
eSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPiBtX3BhdHRlcm4ubV9i
b2R5LT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMyKElt
bTMyKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBtX3BhdHRlcm4ubV9i
b2R5LT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihiZWdpbk9wLT5tX2FsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIG1fcmVn
cy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ViMzIoSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSAt
IGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRleCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwg
dGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGZpcnN0SW5wdXRDaGVja0ZhaWxl
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJs
ZXI6OkltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgLSBiZWdpbk9wLT5tX2Fs
dGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5PcC0+bV9yZWVudHJ5LCAmbV9qaXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChmaXJzdElucHV0Q2hlY2tGYWls
ZWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
anVtcCB0byBoZXJlIGlmIHdlIGl0ZXJhdGUgdG8gdGhlIHBvaW50IHRoYXQgdGhlcmUgaXMgaW5z
dWZmaWNpZW50IGlucHV0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBhbnkgbWF0Y2hl
cywgYW5kIG5lZWQgdG8gcmV0dXJuIGEgZmFpbHVyZSBzdGF0ZSBmcm9tIEpJVCBjb2RlLgotICAg
ICAgICAgICAgICAgICAgICBtYXRjaEZhaWxlZC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAg
ICAgICBtYXRjaEZhaWxlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXMubGluayh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJlcy5saW5rKCZtX2ppdCk7
CiAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVGYWlsUmV0dXJuKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjYyLDE0ICsz
MTgzLDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgICAgICAvLyBsaW5rIHRoZSBiYWNrdHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRlc3Rp
bmF0aW9uLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBsaW5rIHRo
ZSBiYWNrdHJhY2tzIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUubGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIob3AubV9jaGVj
a0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1bXAg
dG8gaXRzIHN1Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAobmV4dE9wLm1f
cmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG5leHRPcC5tX3Jl
ZW50cnkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0JlZ2luKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBvZiBtb3JlIHRoYW4gb25lIGFsdGVybmF0
aXZlcyBtdXN0IGp1bXAgYmFjayB0byB0aGUgYmVnaW5uaW5nLgotICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dE9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0T3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgc2luZ2xlIGFsdGVy
bmF0aXZlIG9uIGl0cyBvd24gY2FuIGZhbGwgdGhyb3VnaC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTMyNzgsMTAgKzMxOTks
MTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHdlIGNhbiBsaW5rIHRoZSBiYWNr
dHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRlc3RpbmF0aW9ucy4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1bXAgdG8gaXRzIHN1
Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
a1RvKG5leHRPcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8obmV4dE9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZXMgbXVzdCBqdW1w
IGJhY2sgdG8gdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG5leHRPcC5tX2p1bXBzLCB0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0
cmFja3NUb0p1bXBMaXN0KG5leHRPcC5tX2p1bXBzLCAmbV9qaXQpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgc2luZ2xlIGFs
dGVybmF0aXZlIG9uIGl0cyBvd24gZG8gbm90aGluZyAtIGl0IGNhbiBmYWxsIHRocm91Z2guCiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzMzMSw3ICszMjUyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIGludG8gdGhlIGVuZCBv
ZiBhIG5vbi1zaW1wbGUgc2V0IG9mIGFsdGVybnRpdmVzIHdlIG5lZWQgdG8ganVtcAogICAgICAg
ICAgICAgICAgIC8vIHRvIHRoZSBiYWNrdHJhY2tpbmcgcmV0dXJuIGFkZHJlc3Mgc2V0IHVwIGR1
cmluZyBnZW5lcmF0aW9uLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX29wID09IFlhcnJPcENv
ZGU6Ok5lc3RlZEFsdGVybmF0aXZlRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gUGxhbnQgYSBq
dW1wIHRvIHRoZSByZXR1cm4gYWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKQEAgLTMzNjgs
NyArMzI4OSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAog
ICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBiYWNrdHJhY2sgdG8gdGhpcyBwb2lu
dCBpZiBjYXB0dXJpbmcgb3IgZ3JlZWR5LgogICAgICAgICAgICAgICAgIGlmICgodGVybS0+Y2Fw
dHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0
ZXJucykgfHwgdGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBjYXB0dXJpbmcsIGNsZWFyIHRoZSBjYXB0dXJlICh3ZSBv
bmx5IG5lZWQgdG8gcmVzZXQgc3RhcnQpLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+
Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJw
YXR0ZXJucykKQEAgLTMzNzgsMTIgKzMyOTksMTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlU
eXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENsZWFyIHRoZSBmbGFnIGluIHRoZSBzdGFja2ZyYW1lIGluZGljYXRpbmcgd2UgcmFuIHRo
cm91Z2ggdGhlIHN1YnBhdHRlcm4uCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBKdW1wIHRvIGFmdGVyIHRoZSBwYXJlbnRoZXNlcywgc2tpcHBpbmcgdGhlIHN1YnBhdHRl
cm4uCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5tX3Jl
ZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29wc1tvcC5tX25l
eHRPcF0ubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgYmFja3RyYWNr
IGZyb20gYWZ0ZXIgdGhlIHBhcmVudGhlc2VzLCB3aGVuIHNraXBwaW5nIHRoZSBzdWJwYXR0ZXJu
LAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBqdW1wIGJhY2sgdG8gaGVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3Vn
aCgpOwpAQCAtMzM5NCwxMyArMzMxNSwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rl
cm07CiAKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZp
ZXJUeXBlOjpGaXhlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5n
U3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3
ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZW50aGVzZXMsIG9yIGlmIHdlCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gYSBzdGF0ZSB3aGVyZSB3ZSBo
YWQgc2tpcHBlZCBvdmVyIHRoZSBzdWJwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgIC8vIChp
biB3aGljaCBjYXNlIHRoZSBmbGFnIHZhbHVlIG9uIHRoZSBzdGFjayB3aWxsIGJlIC0xKS4KICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVy
bS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgSnVtcCBoYWRTa2lwcGVkID0g
YnJhbmNoMzIoRXF1YWwsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4
KCkpICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRTa2lwcGVkID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpICogc2l6ZW9mKHZvaWQqKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpKTsKIAogICAgICAgICAgICAgICAgICAg
ICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBHcmVlZHkgcGFyZW50aGVzZXMsIHdlIHNraXAg
YWZ0ZXIgaGF2aW5nIGFscmVhZHkgdHJpZWQgZ29pbmcKQEAgLTM0MTQsNyArMzMzNSw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG1hdGNoaW5nIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
dGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09w
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhZFNraXBwZWQubGlua1RvKGJlZ2luT3AubV9y
ZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZFNraXBwZWQubGlua1Rv
KGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpAQCAt
MzQzNSw3ICszMzU2LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICAgICAgICAgIC8vIHF1YW50aWZpZWQgd2l0aCBhIG1pbmltdW0gb2YgemVybykg
anVtcCBiYWNrIHRvIHRoZSBmb3J3YXJkcyBtYXRjaGluZwogICAgICAgICAgICAgICAgIC8vIHBh
dGggYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9wID0gbV9vcHNbb3Au
bV9uZXh0T3BdOwotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVu
ZE9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRoZXNl
c1N1YnBhdHRlcm5UZXJtaW5hbEVuZDoKQEAgLTM0NjUsNDAgKzMzODYsNDAgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CiAKICAgICAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhl
ZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2pp
dCk7CiAKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0UmVn
ID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgbmV3UGFyZW5Db250ZXh0
UmVnID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IG1fcmVn
cy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVh
ZEluZGV4KCksIGN1cnJQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdG9yZVBhcmVuQ29udGV4dChjdXJyUGFyZW5Db250ZXh0UmVn
LCByZWdUMiwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRoZXNl
cy5sYXN0U3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAg
ICAgICAgICAgICByZXN0b3JlUGFyZW5Db250ZXh0KGN1cnJQYXJlbkNvbnRleHRSZWcsIG1fcmVn
cy5yZWdUMiwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRoZXNl
cy5sYXN0U3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZnJlZVBhcmVuQ29udGV4dChjdXJyUGFy
ZW5Db250ZXh0UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAgICBz
dG9yZVRvRnJhbWUobmV3UGFyZW5Db250ZXh0UmVnLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpKTsKIAot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gcmVn
VDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50VGVt
cG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgemVyb0xl
bmd0aE1hdGNoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBjb3Vu
dFRlbXBvcmFyeSk7CiAKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVtcG9yYXJ5KTsKICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50VGVtcG9yYXJ5LCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7CiAK
LSAgICAgICAgICAgICAgICAgICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVu
dHJ5KTsKIAotICAgICAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0Y2gubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsoJm1faml0KTsKIAogICAg
ICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmxhZyBpbiB0aGUgc3RhY2tmcmFtZSBpbmRp
Y2F0aW5nIHdlIGRpZG4ndCBydW4gdGhyb3VnaCB0aGUgc3VicGF0dGVybi4KLSAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
LTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6
OmJlZ2luSW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAgICAgICAg
anVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgR3JlZWR5LCBqdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrdHJhY2sgZnJvbSBhZnRlciB0aGUg
cGFyZW50aGVzZXMsIHdoZW4gc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB3aWxsIGp1bXAgYmFjayB0byBoZXJlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNTEzLDcg
KzM0MzQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKICAgICAgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAK
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0g
dGVybS0+ZnJhbWVMb2NhdGlvbjsKIApAQCAtMzUyMSw3ICszNDQyLDcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgd2hldGhlciB3ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZW50aGVz
ZXMsIG9yIGlmIHdlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgY3VycmVudGx5IGlu
IGEgc3RhdGUgd2hlcmUgd2UgaGFkIHNraXBwZWQgb3ZlciB0aGUgc3VicGF0dGVybgogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gKGluIHdoaWNoIGNhc2UgdGhlIGZsYWcgdmFsdWUgb24gdGhl
IHN0YWNrIHdpbGwgYmUgLTEpLgotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcCBoYWRTa2lw
cGVkID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbklu
ZGV4KCkpICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkU2tpcHBlZCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lk
KikpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBHcmVlZHkgcGFyZW50aGVzZXMsIHdlIHNraXAgYWZ0ZXIgaGF2aW5n
IGFscmVhZHkgdHJpZWQgZ29pbmcKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRocm91Z2gg
dGhlIHN1YnBhdHRlcm4sIHNvIGlmIHdlIGdldCBoZXJlIHdlJ3JlIGRvbmUuCkBAIC0zNTM0LDI0
ICszNDU1LDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhdGguCiAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25H
cmVlZHkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGJlZ2lu
VGVtcG9yYXJ5ID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIGNvdW50VGVtcG9yYXJ5ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiZWdpblRlbXBvcmFyeSA9IG1fcmVncy5yZWdU
MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpLCBiZWdpblRlbXBvcmFyeSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gzMihFcXVhbCwgYmVnaW5UZW1wb3Jhcnks
IFRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IGJlZ2luVGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSkubGlua1Rv
KGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBK
dW1wTGlzdCBleGNlZWRlZE1hdGNoTGltaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZXhjZWVkZWRNYXRjaExpbWl0OwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5k
ZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2Vl
ZGVkTWF0Y2hMaW1pdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBjb3VudFRlbXBvcmFy
eSwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGNvdW50VGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIoQWJvdmUsIGluZGV4LCBiZWdpblRl
bXBvcmFyeSkubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbV9yZWdzLmlu
ZGV4LCBiZWdpblRlbXBvcmFyeSkubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VlZGVkTWF0Y2hMaW1pdC5saW5rKCZtX2ppdCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNTczLDE3ICszNDk0LDE3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBvZiBh
IHBhcmVudGhldGljYWwgYXNzZXJ0aW9uIGlmIGVpdGhlciB3ZSBuZWVkIHRvIGNvcnJlY3QKICAg
ICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgaW5kZXgsIG9yIHRoZSBhc3NlcnRpb24gd2FzIGlu
dmVydGVkLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0IHx8IHRlcm0tPmlu
dmVydCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9q
aXQpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0z
MihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAgICAg
ICAvLyBJbiBhbiBpbnZlcnRlZCBhc3NlcnRpb24gZmFpbHVyZSB0byBtYXRjaCB0aGUgc3VicGF0
dGVybgogICAgICAgICAgICAgICAgICAgICAvLyBpcyB0cmVhdGVkIGFzIGEgc3VjY2Vzc2Z1bCBt
YXRjaCAtIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gc3Vi
cGF0dGVybi4gV2UgYWxyZWFkeSBoYXZlIGFkanVzdGVkIHRoZSBpbnB1dCBwb3NpdGlvbgogICAg
ICAgICAgICAgICAgICAgICAvLyBiYWNrIHRvIHRoYXQgYmVmb3JlIHRoZSBhc3NlcnRpb24sIHdo
aWNoIGlzIGNvcnJlY3QuCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAoZW5kT3AubV9yZWVudHJ5KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoZW5kT3AubV9yZWVudHJ5KTsKIAogICAgICAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMzYwMiw3ICszNTIzLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIHRoaXMgYnVnIHRvbyAocHJlc3VtYWJs
eSBiZWNhdXNlIHRoZXkgdXNlIFlBUlIhKQogCiAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgYmFj
a3RyYWNrIGludG8gYW4gYXNzZXJ0aW9uOyBsYXRlciBmYWlsdXJlcyBiYWlsIHRvIGJlZm9yZSB0
aGUgYmVnaW4uCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3Ry
YWNrc1RvSnVtcExpc3Qob3AubV9qdW1wcywgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9iYWNr
dHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3Qob3AubV9qdW1wcywgJm1faml0
KTsKIAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91
c09wXTsKICAgICAgICAgICAgICAgICBtX2NoZWNrZWRPZmZzZXQgLT0gbGFzdE9wLm1fY2hlY2tB
ZGp1c3Q7CkBAIC0zNjM3LDcgKzM1NTgsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcENvZGUgYWx0ZXJuYXRpdmVOZXh0T3BDb2RlID0g
WWFyck9wQ29kZTo6U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OwogICAgICAgICBZYXJyT3BD
b2RlIGFsdGVybmF0aXZlRW5kT3BDb2RlID0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVkQWx0ZXJu
YXRpdmVFbmQ7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2Uo
KSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAgICAg
ICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhlc2lzTmVz
dGVkVG9vRGVlcDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzc0OCw3ICsz
NjY5LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIC8v
IG9uY2UsIGFuZCB3aWxsIG5ldmVyIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIGFzc2VydGlvbi4K
ICAgICB2b2lkIG9wQ29tcGlsZVBhcmVudGhldGljYWxBc3NlcnRpb24oUGF0dGVyblRlcm0qIHRl
cm0pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgp
KSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAgICAg
ICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6UGFyZW50aGVzaXNOZXN0
ZWRUb29EZWVwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODMzLDcgKzM3
NTQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgLy8g
dG8gcmV0dXJuIHRoZSBmYWlsaW5nIHJlc3VsdC4KICAgICB2b2lkIG9wQ29tcGlsZUJvZHkoUGF0
dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghaXNT
YWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRGYWls
dXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3RlZFRvb0RlZXA7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTM4ODcsNyArMzgwOCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgLy8gaXQgZmFpbHMgd2hlbiB0aGUgYm9keSBhbHRl
cm5hdGl2ZXMgZmFpbCB0byBtYXRjaCB3aXRoIHRoZSBjdXJyZW50IG9mZnNldC4KICAgICAgICAg
Ly8gRklYTUU6IFN1cHBvcnQgdW5pY29kZSBmbGFnLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4NjExCi0gICAgICAgIGlmIChkaXNqdW5jdGlv
bi0+bV9taW5pbXVtU2l6ZSAmJiAhbV9wYXR0ZXJuLnN0aWNreSgpICYmICFtX3BhdHRlcm4udW5p
Y29kZSgpKSB7CisgICAgICAgIGlmIChkaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSAmJiAhbV9w
YXR0ZXJuLnN0aWNreSgpICYmICFtX3BhdHRlcm4udW5pY29kZSgpICYmIG1fY29tcGlsZU1vZGUg
IT0gSklUQ29tcGlsZU1vZGU6OklubGluZVRlc3QpIHsKICAgICAgICAgICAgIGF1dG8gYm1JbmZv
ID0gQm95ZXJNb29yZUluZm86OmNyZWF0ZShtX2NoYXJTaXplLCBzdGQ6Om1pbjx1bnNpZ25lZD4o
ZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUsIEJveWVyTW9vcmVJbmZvOjptYXhMZW5ndGgpKTsK
ICAgICAgICAgICAgIGlmIChjb2xsZWN0Qm95ZXJNb29yZUluZm8oZGlzanVuY3Rpb24sIGN1cnJl
bnRBbHRlcm5hdGl2ZUluZGV4LCBibUluZm8uZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgbV9v
cHMubGFzdCgpLm1fYm1JbmZvID0gYm1JbmZvLnB0cigpOwpAQCAtNDAwOCw4ICszOTI5LDEwIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgIGNvbnN0IEJv
eWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUqIGdldEJveWVyTW9vcmVCaXRtYXAoY29uc3Qg
Qm95ZXJNb29yZUJpdG1hcDo6TWFwJiBtYXApCiAgICAgewotICAgICAgICBpZiAoY29uc3QgYXV0
byogZXhpc3RpbmdQb2ludGVyID0gbV9jb2RlQmxvY2sudHJ5UmV1c2VCb3llck1vb3JlQml0bWFw
KG1hcCkpCi0gICAgICAgICAgIHJldHVybiBleGlzdGluZ1BvaW50ZXI7CisgICAgICAgIGlmICht
X2NvZGVCbG9jaykgeworICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8qIGV4aXN0aW5nUG9pbnRl
ciA9IG1fY29kZUJsb2NrLT50cnlSZXVzZUJveWVyTW9vcmVCaXRtYXAobWFwKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXhpc3RpbmdQb2ludGVyOworICAgICAgICB9CiAgICAgICAgIGF1dG8g
aGVhcE1hcCA9IG1ha2VVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPihtYXApOwogICAg
ICAgICBjb25zdCBhdXRvKiBwb2ludGVyID0gaGVhcE1hcC0+c3RvcmFnZSgpOwogICAgICAgICBt
X2JtTWFwcy5hcHBlbmQoV1RGTW92ZShoZWFwTWFwKSk7CkBAIC00MDI0LDYzICszOTQ3LDYzIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICBBU1NF
UlQobV9kZWNvZGVTdXJyb2dhdGVQYWlycyk7CiAKLSAgICAgICAgbV90cnlSZWFkVW5pY29kZUNo
YXJhY3RlckVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgbV90cnlSZWFkVW5pY29kZUNoYXJhY3Rl
ckVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAotICAgICAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Cisg
ICAgICAgIG1faml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgICAgICB0cnlSZWFkVW5pY29k
ZUNoYXJJbXBsKHJlZ1QwKTsKKyAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChtX3JlZ3Mu
cmVnVDApOwogCi0gICAgICAgIHJldCgpOworICAgICAgICBtX2ppdC5yZXQoKTsKICNlbmRpZgog
ICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVFbnRlcigpCiAgICAgewogI2lmIENQVShYODZfNjQp
Ci0gICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwotICAgICAgICBtb3ZlKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVicCk7CisgICAgICAgIG1faml0LnB1c2goWDg2
UmVnaXN0ZXJzOjplYnApOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplYnApOwogCiAgICAgICAgIGlmIChtX3Bh
dHRlcm4ubV9zYXZlSW5pdGlhbFN0YXJ0VmFsdWUpCi0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lz
dGVyczo6ZWJ4KTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYngpOwog
CiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OmVkaSk7CisgICAg
ICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjplZGkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFlB
UlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2NvbnRhaW5zTmVz
dGVkU3VicGF0dGVybnMpIHsKICNpZiBPUyhXSU5ET1dTKQotICAgICAgICAgICAgcHVzaChYODZS
ZWdpc3RlcnM6OmVzaSk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZXNp
KTsKICNlbmRpZgotICAgICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OnIxMik7CisgICAgICAg
ICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6cjEyKTsKICAgICAgICAgfQogI2VuZGlmCiAK
ICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIHB1c2go
WDg2UmVnaXN0ZXJzOjpyMTMpOwotICAgICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OnIxNCk7
Ci0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6cjE1KTsKKyAgICAgICAgICAgIG1faml0
LnB1c2goWDg2UmVnaXN0ZXJzOjpyMTMpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZSZWdp
c3RlcnM6OnIxNCk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6cjE1KTsK
ICAgICAgICAgfQogI2lmIE9TKFdJTkRPV1MpCiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09
IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDYgKiBzaXplb2Yodm9pZCopKSwgb3V0cHV0KTsK
KyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplYnAsIDYgKiBzaXplb2Yodm9pZCopKSwgbV9yZWdzLm91dHB1dCk7CiAgICAgICAg
IC8vIHJjeCBpcyB0aGUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIHNwYWNlIGZvciByZXN1bHQg
aW4geDY0IFdpbmRvd3MuCi0gICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplY3gpOworICAgICAg
ICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWN4KTsKICNlbmRpZgogI2VsaWYgQ1BVKEFSTTY0
KQogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICAgICAgICAgIG1faml0LnRhZ1JldHVybkFkZHJlc3MoKTsKICAg
ICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICghT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MHgxMDAwMCksIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDB4ZDgwMCksIGxlYWRpbmdTdXJyb2dhdGVUYWcpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMHhkYzAwKSwgdHJhaWxpbmdTdXJyb2dhdGVUYWcpOworICAgICAgICAg
ICAgICAgIG1faml0LnB1c2hQYWlyKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgTWFjcm9Bc3NlbWJsZXI6OmxpbmtSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgxMDAwMCksIG1fcmVncy5zdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMHhkODAwKSwgbV9yZWdzLmxlYWRpbmdTdXJyb2dhdGVUYWcpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZGMwMCksIG1f
cmVncy50cmFpbGluZ1N1cnJvZ2F0ZVRhZyk7CiAgICAgICAgIH0KICNlbGlmIENQVShBUk1fVEhV
TUIyKQotICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjQpOwotICAgICAgICBwdXNoKEFSTVJl
Z2lzdGVyczo6cjUpOwotICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjYpOwotICAgICAgICBw
dXNoKEFSTVJlZ2lzdGVyczo6cjgpOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6
cjQpOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjUpOworICAgICAgICBtX2pp
dC5wdXNoKEFSTVJlZ2lzdGVyczo6cjYpOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVy
czo6cjgpOwogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjEwKTsKICNlbGlmIENQVShNSVBT
KQogICAgICAgICAvLyBEbyBub3RoaW5nLgpAQCAtNDA4OSw3MCArNDAxMiw5OCBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICB2b2lkIGdlbmVyYXRlUmV0
dXJuKCkKICAgICB7CisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKyAg
ICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OklubGluZVRlc3QpIHsK
KyAgICAgICAgICAgIG1faW5saW5lZE1hdGNoZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorCiAjaWYgQ1BVKFg4Nl82NCkKICNp
ZiBPUyhXSU5ET1dTKQogICAgICAgICAvLyBTdG9yZSB0aGUgcmV0dXJuIHZhbHVlIGluIHRoZSBh
bGxvY2F0ZWQgc3BhY2UgcG9pbnRlZCBieSByY3guCi0gICAgICAgIHBvcChYODZSZWdpc3RlcnM6
OmVjeCk7Ci0gICAgICAgIHN0b3JlNjQocmV0dXJuUmVnaXN0ZXIsIEFkZHJlc3MoWDg2UmVnaXN0
ZXJzOjplY3gpKTsKLSAgICAgICAgc3RvcmU2NChyZXR1cm5SZWdpc3RlcjIsIEFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjplY3gsIHNpemVvZih2b2lkKikpKTsKLSAgICAgICAgbW92ZShYODZSZWdpc3Rl
cnM6OmVjeCwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJz
OjplY3gpOworICAgICAgICBzdG9yZTY0KG1fcmVncy5yZXR1cm5SZWdpc3RlciwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplY3gpKTsKKyAgICAgICAgc3RvcmU2NChtX3Jl
Z3MucmV0dXJuUmVnaXN0ZXIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhYODZSZWdpc3RlcnM6
OmVjeCwgc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICBtX2ppdC5tb3ZlKFg4NlJlZ2lzdGVyczo6
ZWN4LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogI2VuZGlmCiAgICAgICAgIGlmIChtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpyMTUpOwot
ICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjE0KTsKLSAgICAgICAgICAgIHBvcChYODZS
ZWdpc3RlcnM6OnIxMyk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjpyMTUp
OworICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICAgICAgICAg
IG1faml0LnBvcChYODZSZWdpc3RlcnM6OnIxMyk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShZ
QVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05l
c3RlZFN1YnBhdHRlcm5zKSB7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpyMTIpOwor
ICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjEyKTsKICNpZiBPUyhXSU5ET1dT
KQotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZXNpKTsKKyAgICAgICAgICAgIG1faml0
LnBvcChYODZSZWdpc3RlcnM6OmVzaSk7CiAjZW5kaWYKICAgICAgICAgfQogI2VuZGlmCiAjaWYg
T1MoV0lORE9XUykKLSAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWRpKTsKKyAgICAgICAgbV9q
aXQucG9wKFg4NlJlZ2lzdGVyczo6ZWRpKTsKICNlbmRpZgogCiAgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9zYXZlSW5pdGlhbFN0YXJ0VmFsdWUpCi0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJz
OjplYngpOwotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplYnApOworICAgICAgICAgICAgbV9q
aXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVy
czo6ZWJwKTsKICNlbGlmIENQVShBUk02NCkKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRl
UGFpcnMpIHsKICAgICAgICAgICAgIGlmICghT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAg
ICAgICAgICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQucG9wUGFpcihNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIpOwogICAgICAgICB9CiAjZWxp
ZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjEwKTsKLSAgICAg
ICAgcG9wKEFSTVJlZ2lzdGVyczo6cjgpOwotICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7
Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI1KTsKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVy
czo6cjQpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyMTApOworICAgICAgICBt
X2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyOCk7CisgICAgICAgIG1faml0LnBvcChBUk1SZWdpc3Rl
cnM6OnI2KTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJlZ2lzdGVyczo6cjUpOworICAgICAgICBt
X2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyNCk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8g
RG8gbm90aGluZwogI2VuZGlmCiAjaWYgQ1BVKEFSTTY0RSkKICAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgIGZhckp1bXAoVHJ1c3RlZEltbVB0cihyZXRhZ0Nv
ZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgT3BlcmF0aW9uUHRyVGFnPigmdm1FbnRyeVRv
WWFyckpJVEFmdGVyKSksIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgICAgICBtX2ppdC5mYXJK
dW1wKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1
bmN0aW9uUHRyVGFnLCBPcGVyYXRpb25QdHJUYWc+KCZ2bUVudHJ5VG9ZYXJySklUQWZ0ZXIpKSwg
T3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0KCk7CisgICAg
ICAgICAgICBtX2ppdC5yZXQoKTsKICNlbHNlCi0gICAgICAgIHJldCgpOworICAgICAgICBtX2pp
dC5yZXQoKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgbG9hZFN1YlBhdHRlcm4oUmVnaXN0
ZXJJRCBvdXRwdXRHUFIsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgUmVnaXN0ZXJJRCBzdGFydElu
ZGV4R1BSLCBSZWdpc3RlcklEIGVuZEluZGV4T3JMZW5HUFIpCisgICAgdm9pZCBsb2FkU3ViUGF0
dGVybihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBvdXRwdXRHUFIsIHVuc2lnbmVkIHN1YnBh
dHRlcm5JZCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgc3RhcnRJbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgZW5kSW5kZXhPckxlbkdQUikKICAgICB7Ci0gICAgICAgIGxv
YWRQYWlyMzIob3V0cHV0R1BSLCBUcnVzdGVkSW1tMzIoKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNp
emVvZihpbnQpKSwgc3RhcnRJbmRleEdQUiwgZW5kSW5kZXhPckxlbkdQUik7CisgICAgICAgIG1f
aml0LmxvYWRQYWlyMzIob3V0cHV0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKChz
dWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHN0YXJ0SW5kZXhHUFIsIGVuZEluZGV4
T3JMZW5HUFIpOwogICAgIH0KIAogcHVibGljOgotICAgIFlhcnJHZW5lcmF0b3IoVk0qIHZtLCBZ
YXJyUGF0dGVybiYgcGF0dGVybiwgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBZYXJyQ29kZUJsb2Nr
JiBjb2RlQmxvY2ssIENoYXJTaXplIGNoYXJTaXplLCBKSVRDb21waWxlTW9kZSBjb21waWxlTW9k
ZSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIFlhcnJHZW5lcmF0b3IoTWFjcm9Bc3NlbWJsZXIm
IGppdCwgY29uc3QgVk0qIHZtLCBZYXJyQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IFlhcnJK
SVRSZWdzJiByZWdzLCBZYXJyUGF0dGVybiYgcGF0dGVybiwgY29uc3QgU3RyaW5nJiBwYXR0ZXJu
U3RyaW5nLCBDaGFyU2l6ZSBjaGFyU2l6ZSwgSklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUpCisg
ICAgICAgIDogbV9qaXQoaml0KQorICAgICAgICAsIG1fdm0odm0pCisgICAgICAgICwgbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fcmVncyhyZWdzKQorICAgICAgICAsIG1fcGF0
dGVybihwYXR0ZXJuKQorICAgICAgICAsIG1fcGF0dGVyblN0cmluZyhwYXR0ZXJuU3RyaW5nKQor
ICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCisgICAgICAgICwgbV9jb21waWxlTW9kZShj
b21waWxlTW9kZSkKKyAgICAgICAgLCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKG1fY2hhclNpemUg
PT0gQ2hhclNpemU6OkNoYXIxNiAmJiBtX3BhdHRlcm4udW5pY29kZSgpKQorICAgICAgICAsIG1f
dW5pY29kZUlnbm9yZUNhc2UobV9wYXR0ZXJuLnVuaWNvZGUoKSAmJiBtX3BhdHRlcm4uaWdub3Jl
Q2FzZSgpKQorICAgICAgICAsIG1fY2Fub25pY2FsTW9kZShtX3BhdHRlcm4udW5pY29kZSgpID8g
Q2Fub25pY2FsTW9kZTo6VW5pY29kZSA6IENhbm9uaWNhbE1vZGU6OlVDUzIpCisjaWYgRU5BQkxF
KFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgICAgICwgbV9jb250YWluc05l
c3RlZFN1YnBhdHRlcm5zKGZhbHNlKQorICAgICAgICAsIG1fcGFyZW5Db250ZXh0U2l6ZXMoY29t
cGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyA/IG1fcGF0dGVy
bi5tX251bVN1YnBhdHRlcm5zIDogMCwgbV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXpl
KQorI2VuZGlmCisgICAgeworICAgIH0KKworICAgIFlhcnJHZW5lcmF0b3IoTWFjcm9Bc3NlbWJs
ZXImIGppdCwgY29uc3QgVk0qIHZtLCBjb25zdCBZYXJySklUUmVncyYgcmVncywgWWFyclBhdHRl
cm4mIHBhdHRlcm4sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hhclNpemUgY2hhclNp
emUsIEpJVENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlKQorICAgICAgICA6IG1faml0KGppdCkKKyAg
ICAgICAgLCBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKG51bGxwdHIpCisgICAgICAg
ICwgbV9yZWdzKHJlZ3MpCiAgICAgICAgICwgbV9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwg
bV9wYXR0ZXJuU3RyaW5nKHBhdHRlcm5TdHJpbmcpCi0gICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCiAgICAgICAgICwgbV9jb21w
aWxlTW9kZShjb21waWxlTW9kZSkKICAgICAgICAgLCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKG1f
Y2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXIxNiAmJiBtX3BhdHRlcm4udW5pY29kZSgpKQpAQCAt
NDE2NSw5ICs0MTE2LDIyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjb21w
aWxlKCkKKyAgICBib29sIGlzU2FmZVRvUmVjdXJzZSgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlcikKKyAgICAgICAgICAgIHJldHVybiBt
X2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLT5pc1NhZmVUb1JlY3Vyc2UoKTsKKworICAg
ICAgICByZXR1cm4gbV92bS0+aXNTYWZlVG9SZWN1cnNlKCk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRTdGFja0NoZWNrZXIoU3RhY2tDaGVjayogc3RhY2tDaGVja2VyKQorICAgIHsKKyAgICAgICAg
bV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciA9IHN0YWNrQ2hlY2tlcjsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBpbGUoWWFyckNvZGVCbG9jayYgY29kZUJsb2NrKQogICAgIHsKLSAgICAg
ICAgWWFyckNvZGVCbG9jayYgY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBzdGFydE9mTWFpbkNvZGU7CiAKICNpZiAhRU5BQkxFKFlBUlJfSklU
X1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJz
KSB7CkBAIC00MTk4LDcgKzQxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Rpc2Fzc2Vt
YmxlciA9IG1ha2VVbmlxdWU8WWFyckRpc2Fzc2VtYmxlcj4odGhpcyk7CiAKICAgICAgICAgaWYg
KG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZD
b2RlKGxhYmVsKCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2Rl
KG1faml0LmxhYmVsKCkpOwogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVT
U0lPTlMpCiAgICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpCkBAIC00MjA3
LDQyICs0MTcxLDQ2IEBAIHB1YmxpYzoKIAogICAgICAgICBnZW5lcmF0ZUVudGVyKCk7CiAKLSAg
ICAgICAgSnVtcCBoYXNJbnB1dCA9IGNoZWNrSW5wdXQoKTsKKyAgICAgICAgc3RhcnRPZk1haW5D
b2RlID0gbV9qaXQubGFiZWwoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBoYXNJ
bnB1dCA9IGNoZWNrSW5wdXQoKTsKICAgICAgICAgZ2VuZXJhdGVGYWlsUmV0dXJuKCk7Ci0gICAg
ICAgIGhhc0lucHV0LmxpbmsodGhpcyk7CisgICAgICAgIGhhc0lucHV0LmxpbmsoJm1faml0KTsK
IAogICAgICAgICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1l
U2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKICAgICAgICAg
aWYgKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSB7CiAgICAgICAgICAgICAvLyBDaGVjayBzdGFjayBz
aXplCi0gICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRl
cyksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5hZGRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtY2FsbEZyYW1lU2l6ZUluQnl0ZXMpLCBN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fcmVncy5yZWdUMCk7CiAjaWYg
Q1BVKFg4Nl82NCkgJiYgT1MoV0lORE9XUykKICAgICAgICAgICAgIC8vIG1hdGNoaW5nQ29udGV4
dCBpcyB0aGUgNXRoIGFyZ3VtZW50LCBpdCBpcyBmb3VuZCBvbiB0aGUgc3RhY2suCi0gICAgICAg
ICAgICBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IHJlZ1QxOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJwLCA3ICogc2l6ZW9mKHZvaWQqKSksIG1hdGNo
aW5nQ29udGV4dCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRj
aGluZ0NvbnRleHQgPSBtX3JlZ3MucmVnVDE7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJwLCA3ICogc2l6ZW9mKHZvaWQq
KSksIG1hdGNoaW5nQ29udGV4dCk7CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikgfHwgQ1BVKE1JUFMp
CiAgICAgICAgICAgICAvLyBtYXRjaGluZ0NvbnRleHQgaXMgdGhlIDV0aCBhcmd1bWVudCwgaXQg
aXMgZm91bmQgb24gdGhlIHN0YWNrLgotICAgICAgICAgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0Nv
bnRleHQgPSByZWdUMTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgNCAqIHNpemVvZih2b2lkKikpLCBtYXRjaGluZ0NvbnRleHQpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gbV9yZWdzLnJl
Z1QxOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDQgKiBzaXplb2Yodm9pZCopKSwg
bWF0Y2hpbmdDb250ZXh0KTsKKyNlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBtX3JlZ3MubWF0Y2hpbmdDb250ZXh0OwogI2VuZGlm
Ci0gICAgICAgICAgICBKdW1wIHN0YWNrT2sgPSBicmFuY2hQdHIoQmVsb3dPckVxdWFsLCBBZGRy
ZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlN0YWNr
TGltaXQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN0YWNr
T2sgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6
Om9mZnNldE9mU3RhY2tMaW1pdCgpKSwgbV9yZWdzLnJlZ1QwKTsKIAogICAgICAgICAgICAgLy8g
RXhjZWVkZWQgc3RhY2sgbGltaXQsIHB1bnQgdG8gdGhlIGludGVycHJldGVyLgotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KEpTUmVnRXhw
UmVzdWx0OjpKSVRDb2RlRmFpbHVyZSkpLCByZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmV0dXJuUmVnaXN0ZXIyKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNp
emVfdD4oSlNSZWdFeHBSZXN1bHQ6OkpJVENvZGVGYWlsdXJlKSksIG1fcmVncy5yZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCksIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOwogICAgICAgICAgICAgZ2VuZXJhdGVSZXR1
cm4oKTsKIAotICAgICAgICAgICAgc3RhY2tPay5saW5rKHRoaXMpOwotICAgICAgICAgICAgbW92
ZShyZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgc3RhY2tPay5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5yZWdUMCwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFlB
UlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0
ZVBhaXJzKQotICAgICAgICAgICAgZ2V0RWZmZWN0aXZlQWRkcmVzcyhCYXNlSW5kZXgoaW5wdXQs
IGxlbmd0aCwgVGltZXNUd28pLCBlbmRPZlN0cmluZ0FkZHJlc3MpOworICAgICAgICAgICAgbV9q
aXQuZ2V0RWZmZWN0aXZlQWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5p
bnB1dCwgbV9yZWdzLmxlbmd0aCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgbV9yZWdzLmVu
ZE9mU3RyaW5nQWRkcmVzcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFS
RU5TX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5z
KQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIobWF0Y2hMaW1pdCksIHJlbWFpbmluZ01h
dGNoQ291bnQpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG1hdGNoTGltaXQpLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3VudCk7CiAjZW5kaWYK
IAogICAgICAgICAvLyBJbml0aWFsaXplIHN1YnBhdHRlcm5zJyBzdGFydHMuIEFuZCBpbml0aWFs
aXplIG1hdGNoU3RhcnQgaWYgYCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZWAuCkBA
IC00MjUxLDE0ICs0MjE5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVuc2lnbmVkIHN1YnBh
dHRlcm5JZCA9IDA7CiAgICAgICAgICAgICAvLyBGaXJzdCBzdWJwYXR0ZXJuSWQncyBzdGFydCBp
cyBjb25maWd1cmVkIHRvIGBpbmRleGAgaWYgIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRT
aXplLgogICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkg
ewotICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAg
IHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICArK3N1YnBhdHRl
cm5JZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoOyBzdWJwYXR0ZXJuSWQgPCBt
X3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDE7ICsrc3VicGF0dGVybklkKQotICAgICAgICAg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0
ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hh
c0ZpeGVkU2l6ZSkKLSAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgIH0KIAogI2lm
IEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQpAQCAtNDI3Miw0NSArNDI0
MCw2MSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmIChtX3BhdHRlcm4u
bV9zYXZlSW5pdGlhbFN0YXJ0VmFsdWUpCi0gICAgICAgICAgICBtb3ZlKGluZGV4LCBpbml0aWFs
U3RhcnQpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1fcmVncy5pbml0
aWFsU3RhcnQpOwogCiAgICAgICAgIGdlbmVyYXRlKCk7CiAgICAgICAgIGlmIChtX2Rpc2Fzc2Vt
YmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkdlbmVyYXRlKGxhYmVs
KCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJhdGUobV9qaXQu
bGFiZWwoKSk7CiAgICAgICAgIGJhY2t0cmFjaygpOwogICAgICAgICBpZiAobV9kaXNhc3NlbWJs
ZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJhY2sobGFiZWwo
KSk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJhY2sobV9qaXQu
bGFiZWwoKSk7CisKKyAgICAgICAgcHRyZGlmZl90IGNvZGVTaXplID0gTWFjcm9Bc3NlbWJsZXI6
OmRpZmZlcmVuY2VCZXR3ZWVuKHN0YXJ0T2ZNYWluQ29kZSwgbV9qaXQubGFiZWwoKSk7CisgICAg
ICAgIGJvb2wgY2FuSW5saW5lID0gbV9jb21waWxlTW9kZSAhPSBKSVRDb21waWxlTW9kZTo6SW5j
bHVkZVN1YnBhdHRlcm5zCisgICAgICAgICAgICAmJiAhbV9wYXR0ZXJuLmdsb2JhbCgpICYmICFt
X3BhdHRlcm4uc3RpY2t5KCkgJiYgIW1fcGF0dGVybi51bmljb2RlKCkKKyAgICAgICAgICAgICYm
ICFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFtX3BhdHRlcm4ubV9jb250YWluc0JhY2tyZWZl
cmVuY2VzCisgICAgICAgICAgICAmJiAhbV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zOwogCiAg
ICAgICAgIGdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIoKTsKIAogICAgICAg
ICBnZW5lcmF0ZUpJVEZhaWxSZXR1cm4oKTsKIAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIp
Ci0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOworICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKIAot
ICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpZYXJySklULCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAg
ICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7Ci0gICAgICAgICAgICBjb2Rl
QmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbihKSVRGYWlsdXJlUmVhc29uOjpFeGVj
dXRhYmxlTWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhdXRvIGJhY2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFja2luZ1N0YXRlLmJhY2t0cmFj
a1JlY29yZHMoKTsKKyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNvcmRzLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6OmxpbmtCYWNrdHJhY2tSZWNv
cmRzKGxpbmtCdWZmZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFk
VW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4o
bV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKyAgICAgICAgICAgIG1faml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3Rl
ckVudHJ5KTsKIAotICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2Rl
Q2hhcmFjdGVyQ2FsbHMpCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRy
eVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8g
Y2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscykKKyAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsK
KyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKG1faml0LCBSRUdFWFBfQ09ERV9JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6WWFyckpJVCwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRv
QWxsb2NhdGUoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1
cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWls
dXJlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Rp
c2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIp
OwogCiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpNYXRjaE9u
bHkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkKKyAg
ICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkgewogICAgICAgICAg
ICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZU1hdGNoT25seShGSU5BTElaRV9SRUdFWFBfQ09E
RShsaW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgIk1hdGNoLW9ubHkgOC1iaXQg
cmVndWxhciBleHByZXNzaW9uIiksIFdURk1vdmUobV9ibU1hcHMpKTsKLSAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdElubGluZVN0YXRzKGNvZGVTaXpl
LCBjYWxsRnJhbWVTaXplSW5CeXRlcywgY2FuSW5saW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZU1hdGNoT25seShGSU5BTEla
RV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWcsICJNYXRj
aC1vbmx5IDE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSwgV1RGTW92ZShtX2JtTWFwcykpOwor
ICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQxNkJpdElubGluZVN0YXRzKGNvZGVTaXplLCBj
YWxsRnJhbWVTaXplSW5CeXRlcywgY2FuSW5saW5lKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkK
ICAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklOQUxJWkVfUkVHRVhQX0NP
REUobGlua0J1ZmZlciwgWWFycjhCaXRQdHJUYWcsICI4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24i
KSwgV1RGTW92ZShtX2JtTWFwcykpOwpAQCAtNDMyMSw2ICs0MzA1LDk3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKCptX2ZhaWx1
cmVSZWFzb24pOwogICAgIH0KIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJ
TkUpCisgICAgdm9pZCBjb21waWxlSW5saW5lKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3BhdHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzKTsKKworICAgICAgICAvLyBX
ZSBuZWVkIHRvIGNvbXBpbGUgYmVmb3JlIGdlbmVyYXRpbmcgY29kZSBzaW5jZSB3ZSBzZXQgZmxh
Z3MgYmFzZWQgb24gY29tcGlsYXRpb24gdGhhdAorICAgICAgICAvLyBhcmUgdXNlZCBkdXJpbmcg
Z2VuZXJhdGlvbi4KKyAgICAgICAgb3BDb21waWxlQm9keShtX3BhdHRlcm4ubV9ib2R5KTsKKwor
I2lmbmRlZiBKSVRfVU5JQ09ERV9FWFBSRVNTSU9OUworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9kZWNvZGVTdXJyb2dhdGVQYWlycyk7CisjZW5kaWYKKworI2lmIEVOQUJMRShZQVJSX0pJVF9B
TExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jb250YWlu
c05lc3RlZFN1YnBhdHRlcm5zKTsKKyNlbmRpZgorCisgICAgICAgIEFTU0VSVCghbV9mYWlsdXJl
UmVhc29uKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCkpKQorICAgICAgICAgICAgbV9k
aXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+KHRoaXMpOworCisgICAg
ICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRT
dGFydE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBoYXNJbnB1dCA9IGNoZWNrSW5wdXQoKTsKKyAgICAgICAgZ2VuZXJhdGVGYWlsUmV0dXJuKCk7
CisgICAgICAgIGhhc0lucHV0LmxpbmsoJm1faml0KTsKKworICAgICAgICB1bnNpZ25lZCBjYWxs
RnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1f
Ym9keS0+bV9jYWxsRnJhbWVTaXplKTsKKyAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJbkJ5dGVz
KSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgc3BhY2Ugb24gc3RhY2sgZm9yIG1hdGNoaW5nIGNv
bnRleHQgZGF0YS4KKyAgICAgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICAgICAgfQorCisjaWZkZWYgSklUX1VOSUNPREVfRVhQUkVTU0lPTlMKKyAgICAgICAgaWYgKG1f
ZGVjb2RlU3Vycm9nYXRlUGFpcnMpCisgICAgICAgICAgICBtX2ppdC5nZXRFZmZlY3RpdmVBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtX3JlZ3MubGVuZ3Ro
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCBtX3JlZ3MuZW5kT2ZTdHJpbmdBZGRyZXNzKTsK
KyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisg
ICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpCisgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF0Y2hMaW1pdCksIG1fcmVncy5y
ZW1haW5pbmdNYXRjaENvdW50KTsKKyNlbmRpZgorCisgICAgICAgIGlmIChtX2NvbXBpbGVNb2Rl
ID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDE7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoaSA8PCAx
KSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcGF0dGVybi5t
X2JvZHktPm1faGFzRml4ZWRTaXplKQorICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3Mu
aW5kZXgpOworCisgICAgICAgIGlmIChtX3BhdHRlcm4ubV9zYXZlSW5pdGlhbFN0YXJ0VmFsdWUp
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwgbV9yZWdzLmluaXRpYWxTdGFy
dCk7CisKKyAgICAgICAgZ2VuZXJhdGUoKTsKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQor
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJhdGUobV9qaXQubGFiZWwo
KSk7CisgICAgICAgIGJhY2t0cmFjaygpOworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJhY2sobV9qaXQubGFiZWwo
KSk7CisKKyAgICAgICAgZ2VuZXJhdGVUcnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcigpOwor
CisgICAgICAgIGdlbmVyYXRlSklURmFpbFJldHVybigpOworCisgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobV9qaXQu
bGFiZWwoKSk7CisKKyAgICAgICAgbV9pbmxpbmVkRmFpbGVkTWF0Y2gubGluaygmbV9qaXQpOwor
ICAgICAgICBtX2lubGluZWRNYXRjaGVkLmxpbmsoJm1faml0KTsKKworICAgICAgICBhdXRvIGJh
Y2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFja2luZ1N0YXRlLmJhY2t0cmFja1JlY29yZHMoKTsK
KyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNvcmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
bV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6OmxpbmtCYWNrdHJhY2tSZWNvcmRzKGxpbmtCdWZm
ZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90
cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKworICAgICAgICAgICAgICAgIGZvciAoYXV0
byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzKQorICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIGNvbnN0
IGNoYXIqIHZhcmlhbnQoKSBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUg
PT0gSklUQ29tcGlsZU1vZGU6Ok1hdGNoT25seSkgewpAQCAtNDUyNiwxMiArNDYwMSwxNSBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZNKiBtX3ZtOworICAgIE1hY3JvQXNzZW1i
bGVyJiBtX2ppdDsKKyAgICBjb25zdCBWTSogbV92bTsKKyAgICBZYXJyQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKKyAgICBjb25zdCBZYXJySklUUmVncyYgbV9yZWdzOwogCisgICAgU3RhY2tDaGVj
ayogbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciB7IG51bGxwdHIgfTsKICAgICBZYXJy
UGF0dGVybiYgbV9wYXR0ZXJuOwotICAgIFN0cmluZyYgbV9wYXR0ZXJuU3RyaW5nOworICAgIGNv
bnN0IFN0cmluZyYgbV9wYXR0ZXJuU3RyaW5nOwogCi0gICAgWWFyckNvZGVCbG9jayYgbV9jb2Rl
QmxvY2s7CiAgICAgQ2hhclNpemUgbV9jaGFyU2l6ZTsKICAgICBKSVRDb21waWxlTW9kZSBtX2Nv
bXBpbGVNb2RlOwogCkBAIC00NTQ2LDEwICs0NjI0LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnM7CiAgICAgUGFyZW5Db250ZXh0U2l6ZXMgbV9wYXJl
bkNvbnRleHRTaXplczsKICNlbmRpZgotICAgIEp1bXBMaXN0IG1fYWJvcnRFeGVjdXRpb247Ci0g
ICAgSnVtcExpc3QgbV9oaXRNYXRjaExpbWl0OwotICAgIFZlY3RvcjxDYWxsPiBtX3RyeVJlYWRV
bmljb2RlQ2hhcmFjdGVyQ2FsbHM7Ci0gICAgTGFiZWwgbV90cnlSZWFkVW5pY29kZUNoYXJhY3Rl
ckVudHJ5OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Fib3J0RXhlY3V0aW9uOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2hpdE1hdGNoTGltaXQ7CisgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyOjpDYWxsPiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHM7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2lubGluZWRNYXRjaGVkOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2lubGluZWRGYWlsZWRNYXRjaDsKIAogICAgIC8vIFRo
ZSByZWd1bGFyIGV4cHJlc3Npb24gZXhwcmVzc2VkIGFzIGEgbGluZWFyIHNlcXVlbmNlIG9mIG9w
ZXJhdGlvbnMuCiAgICAgVmVjdG9yPFlhcnJPcCwgMTI4PiBtX29wczsKQEAgLTQ2MDYsNyArNDY4
NywxMyBAQCBzdGF0aWMgdm9pZCBkdW1wQ29tcGlsZUZhaWx1cmUoSklURmFpbHVyCiAKIHZvaWQg
aml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBD
aGFyU2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEpJVENv
bXBpbGVNb2RlIG1vZGUpCiB7Ci0gICAgWWFyckdlbmVyYXRvcih2bSwgcGF0dGVybiwgcGF0dGVy
blN0cmluZywgY29kZUJsb2NrLCBjaGFyU2l6ZSwgbW9kZSkuY29tcGlsZSgpOworICAgIE1hY3Jv
QXNzZW1ibGVyIG1hc207CisKKyAgICBBU1NFUlQobW9kZSA9PSBKSVRDb21waWxlTW9kZTo6TWF0
Y2hPbmx5IHx8IG1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyk7CisK
KyAgICBZYXJySklURGVmYXVsdFJlZ2lzdGVycyBqaXRSZWdpc3RlcnM7CisgICAgWWFyckdlbmVy
YXRvcjxZYXJySklURGVmYXVsdFJlZ2lzdGVycz4obWFzbSwgdm0sICZjb2RlQmxvY2ssIGppdFJl
Z2lzdGVycywgcGF0dGVybiwgcGF0dGVyblN0cmluZywgY2hhclNpemUsIG1vZGUpLmNvbXBpbGUo
Y29kZUJsb2NrKTsKKwogICAgIGlmIChhdXRvIGZhaWx1cmVSZWFzb24gPSBjb2RlQmxvY2suZmFp
bHVyZVJlYXNvbigpKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wQ29tcGls
ZWRSZWdFeHBQYXR0ZXJucygpKSkgewogICAgICAgICAgICAgcGF0dGVybi5kdW1wUGF0dGVyblN0
cmluZyhXVEY6OmRhdGFGaWxlKCksIHBhdHRlcm5TdHJpbmcpOwpAQCAtNDYxNiw2ICs0NzAzLDE4
IEBAIHZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgU3QKICAgICB9CiB9CiAK
KyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQordm9pZCBqaXRDb21waWxl
SW5saW5lZFRlc3QoU3RhY2tDaGVjayogbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciwg
Y29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+IGZsYWdz
LCBDaGFyU2l6ZSBjaGFyU2l6ZSwgY29uc3QgVk0qIHZtLCBNYWNyb0Fzc2VtYmxlciYgaml0LCBZ
YXJySklUUmVnaXN0ZXJzJiBqaXRSZWdpc3RlcnMpCit7CisgICAgWWFycjo6RXJyb3JDb2RlIGVy
cm9yQ29kZTsKKyAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKHBhdHRlcm5TdHJpbmcsIGZs
YWdzLCBlcnJvckNvZGUpOworCisgICAgWWFyckdlbmVyYXRvcjxZYXJySklUUmVnaXN0ZXJzPiB5
YXJyR2VuZXJhdG9yKGppdCwgdm0sIGppdFJlZ2lzdGVycywgcGF0dGVybiwgcGF0dGVyblN0cmlu
ZywgY2hhclNpemUsIEpJVENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KTsKKyAgICB5YXJyR2VuZXJh
dG9yLnNldFN0YWNrQ2hlY2tlcihtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyKTsKKyAg
ICB5YXJyR2VuZXJhdG9yLmNvbXBpbGVJbmxpbmUoKTsKK30KKyNlbmRpZgorCiB9fQogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDI4Mjcz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIllhcnJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9TdGFja0NoZWNrLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjZGVmaW5lIFlB
UlJfQ0FMTApAQCAtNDMsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVk07CiBj
bGFzcyBFeGVjdXRhYmxlUG9vbDsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyOwogCiBuYW1lc3BhY2Ug
WWFyciB7CiAKQEAgLTIwMCw2ICsyMDIsMzUgQEAgZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb1lh
cnJKSVRBZnRlcih2bwogI2VuZGlmCiAKIGNsYXNzIFlhcnJDb2RlQmxvY2sgeworICAgIHN0cnVj
dCBJbmxpbmVTdGF0cyB7CisgICAgICAgIElubGluZVN0YXRzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGlu
c25Db3VudCwgdW5zaWduZWQgc3RhY2tTaXplLCBib29sIGNhbklubGluZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9pbnNuQ291bnQ9IGluc25Db3VudDsKKyAgICAgICAgICAgIG1fc3RhY2tT
aXplID0gc3RhY2tTaXplOworICAgICAgICAgICAgbV9jYW5JbmxpbmUgPSBjYW5JbmxpbmU7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9pbnNuQ291bnQgPSAwOworICAgICAgICAgICAgbV9zdGFja1NpemUgPSAwOworICAgICAgICAg
ICAgbV9jYW5JbmxpbmUgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGNv
ZGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnNuQ291bnQ7IH0KKyAgICAgICAgdW5zaWduZWQg
c3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKyAgICAgICAgYm9vbCBj
YW5JbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2NhbklubGluZTsgfQorCisgICAgICAgIHVuc2ln
bmVkIG1faW5zbkNvdW50OworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZSA6IDMxOworICAg
ICAgICBib29sIG1fY2FuSW5saW5lIDogMTsKKyAgICB9OworCiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWWFyckNvZGVCbG9jayk7CiAKQEAg
LTI1Myw2ICsyODQsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlc1BhdHRlcm5Db250ZXh0
QnVmZmVyKCkgeyBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlciA9IHRydWU7IH0KICNlbmRpZgog
CisgICAgdm9pZCBzZXQ4Qml0SW5saW5lU3RhdHModW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25l
ZCBzdGFja1NpemUsIGJvb2wgY2FuSW5saW5lKQorICAgIHsKKyAgICAgICAgbV9tYXRjaE9ubHk4
U3RhdHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUpOworICAgIH0KKworICAg
IHZvaWQgc2V0MTZCaXRJbmxpbmVTdGF0cyh1bnNpZ25lZCBpbnNuQ291bnQsIHVuc2lnbmVkIHN0
YWNrU2l6ZSwgYm9vbCBjYW5JbmxpbmUpCisgICAgeworICAgICAgICBtX21hdGNoT25seTE2U3Rh
dHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUpOworICAgIH0KKworICAgIElu
bGluZVN0YXRzJiBnZXQ4Qml0SW5saW5lU3RhdHMoKSB7IHJldHVybiBtX21hdGNoT25seThTdGF0
czsgfQorICAgIElubGluZVN0YXRzJiBnZXQxNkJpdElubGluZVN0YXRzKCkgeyByZXR1cm4gIG1f
bWF0Y2hPbmx5MTZTdGF0czsgfQorCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hh
ciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBN
YXRjaGluZ0NvbnRleHRIb2xkZXImIG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChoYXM4Qml0Q29kZSgpKTsKQEAgLTMzOCw2ICszODIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IG1fcmVmMTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjE2Qml0UHRyVGFnPigpOwogICAg
ICAgICBtX21hdGNoT25seTggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seThC
aXRQdHJUYWc+KCk7CiAgICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPigpOworICAgICAgICBtX21hdGNoT25seThTdGF0
cy5jbGVhcigpOworICAgICAgICBtX21hdGNoT25seTE2U3RhdHMuY2xlYXIoKTsKICAgICAgICAg
bV9tYXBzLmNsZWFyKCk7CiAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IHN0ZDo6bnVsbG9wdDsK
ICAgICB9CkBAIC0zNTYsMTcgKzQwMiwyNyBAQCBwcml2YXRlOgogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxZYXJyMTZCaXRQdHJUYWc+IG1fcmVmMTY7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPiBtX21hdGNoT25seTg7CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4gbV9tYXRjaE9ubHkxNjsKKyAg
ICBJbmxpbmVTdGF0cyBtX21hdGNoT25seThTdGF0czsKKyAgICBJbmxpbmVTdGF0cyBtX21hdGNo
T25seTE2U3RhdHM7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpNYXA+
PiBtX21hcHM7CisKICAgICBib29sIG1fdXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyIHsgZmFsc2Ug
fTsKICAgICBzdGQ6Om9wdGlvbmFsPEpJVEZhaWx1cmVSZWFzb24+IG1fZmFpbHVyZVJlYXNvbjsK
IH07CiAKIGVudW0gY2xhc3MgSklUQ29tcGlsZU1vZGUgOiB1aW50OF90IHsKICAgICBNYXRjaE9u
bHksCi0gICAgSW5jbHVkZVN1YnBhdHRlcm5zCisgICAgSW5jbHVkZVN1YnBhdHRlcm5zLAorICAg
IElubGluZVRlc3QKIH07CiB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBTdHJpbmcmIHBh
dHRlcm5TdHJpbmcsIENoYXJTaXplLCBWTSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgSklU
Q29tcGlsZU1vZGUpOwogCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkK
K2NsYXNzIFlhcnJKSVRSZWdpc3RlcnM7CisKK3ZvaWQgaml0Q29tcGlsZUlubGluZWRUZXN0KFN0
YWNrQ2hlY2sqLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+LCBDaGFyU2l6
ZSwgY29uc3QgVk0qLCBNYWNyb0Fzc2VtYmxlciYsIFlhcnJKSVRSZWdpc3RlcnMmKTsKKyNlbmRp
ZgorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3RlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklUUmVnaXN0ZXJzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lzdGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFlBUlJfSklUKQorCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2RlZmluZSBZQVJSX0NBTEwKKworbmFtZXNw
YWNlIEpTQyB7CisKK25hbWVzcGFjZSBZYXJyIHsKKworc3RydWN0IFlhcnJKSVREZWZhdWx0UmVn
aXN0ZXJzIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CitwdWJsaWM6CisjaWYgQ1BVKEFSTV9U
SFVNQjIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNUmVnaXN0
ZXJzOjpyMDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBBUk1SZWdp
c3RlcnM6OnIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBBUk1S
ZWdpc3RlcnM6OnIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBB
Uk1SZWdpc3RlcnM6OnIzOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1Qw
ID0gQVJNUmVnaXN0ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VDEgPSBBUk1SZWdpc3RlcnM6OnI1OworICAgIC8vIHI2IGlzIHJlc2VydmVkIGZvciBNYWNyb0Fz
c2VtYmxlckFSTXY3LAorICAgIC8vIHI3IGlzIGZwLgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMiA9IEFSTVJlZ2lzdGVyczo6cjg7CisgICAgLy8gcjkgaXMgc2IgaW4gRUFC
SS4KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNUmVn
aXN0ZXJzOjpyMTA7IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBhIHNwZWNpYWwgcmVnaXN0
ZXIuCisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBB
Uk1SZWdpc3RlcnM6OnIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlcjIgPSBBUk1SZWdpc3RlcnM6OnIxOworCisjZWxpZiBDUFUoQVJNNjQpCisgICAgLy8g
QXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0
ID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBp
bmRleCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgbGVuZ3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjp4NDsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUg
cHJvbG9ndWUuCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJl
Z2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxp
emF0aW9uLgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3OworICAgIHN0YXRpYyBj
b25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKKyAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3VudCA9IEFSTTY0UmVnaXN0
ZXJzOjp4OTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0
QW5kVHJhaWwgPSBBUk02NFJlZ2lzdGVyczo6eDEwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCB1bmljb2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdpc3RlcnM6OngxMTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBB
Uk02NFJlZ2lzdGVyczo6eDEyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZWFk
aW5nU3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6eDE0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgPSBB
Uk02NFJlZ2lzdGVyczo6eDE1OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJl
dHVyblJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZElt
bTMyKDB4ZmZmZmZjMDApOworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKKworICAgIC8v
IHQwIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCisgICAgLy8gdDEgaXMgcmVz
ZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp0MjsKKyAgICBzdGF0aWMgY29uc3RleHByIFJl
Z2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVyczo6dDU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJz
Ojp2MDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0g
TUlQU1JlZ2lzdGVyczo6djE7CisKKyNlbGlmIENQVShYODZfNjQpCisjaWYgIU9TKFdJTkRPV1Mp
CisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplZGk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lz
dGVyczo6cjg7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhl
IHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVS
ZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6
YXRpb24uCisjZWxzZQorICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgZG9lc24ndCBmaXQgaW4g
NjRiaXRzLCBpdHMgZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3ggYW5kIHRoZSBwYXJhbWV0
ZXJzIGFyZSBzaGlmdGVkLgorICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMv
bGlicmFyeS83NTcyenR6NC5hc3B4CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWF0Y2hSZXN1
bHQpID4gc2l6ZW9mKHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90IGZpdCBpbiA2NGJpdHMi
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6
OmVkeDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3Rl
cnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODZSZWdp
c3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZS
ZWdpc3RlcnM6OnIxMDsKKyNlbmRpZgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVheDsKKyNp
ZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBY
ODZSZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9
IFg4NlJlZ2lzdGVyczo6cjEwOworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgcmVnVDIgPSBYODZSZWdpc3RlcnM6OmVkaTsKKyNlbmRpZgorCisgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lzdGVyczo6ZWJ4OworI2lm
ICFPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdN
YXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjpyMTI7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjplc2k7Cisj
ZW5kaWYKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5k
VHJhaWwgPSBYODZSZWdpc3RlcnM6OnIxMzsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgdW5pY29kZVRlbXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0ZXJzOjpyMTU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBYODZSZWdpc3Rl
cnM6OmVheDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIy
ID0gWDg2UmVnaXN0ZXJzOjplZHg7CisKKyAgICBzdGF0aWMgY29uc3RleHByIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMHhkYzAwKTsKKyAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBz
dXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2VuZGlmCit9Owor
CisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKK2NsYXNzIFlhcnJKSVRS
ZWdpc3RlcnMgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICBZYXJySklU
UmVnaXN0ZXJzKCkKKyAgICB7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorICAgIC8vIEFyZ3Vt
ZW50IHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgaW5wdXQgeyBBUk02NFJlZ2lzdGVyczo6SW52
YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBBUk02NFJlZ2lzdGVyczo6SW52
YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgbGVuZ3RoIHsgQVJNNjRSZWdpc3RlcnM6Oklu
dmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIG91dHB1dCB7IEFSTTY0UmVnaXN0ZXJzOjpJ
bnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3Rl
ciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBmcmVl
bGlzdFNpemVSZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisKKyAg
ICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVnVDAgeyBBUk02NFJlZ2lz
dGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVnVDEgeyBBUk02NFJlZ2lz
dGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVnVDIgeyBBUk02NFJlZ2lz
dGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3Vu
dCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZWdV
bmljb2RlSW5wdXRBbmRUcmFpbCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07Cisg
ICAgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVn
IH07CisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxp
ZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzIHsgQVJNNjRSZWdp
c3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIg
bGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkODAw
KTsKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5nU3Vycm9n
YXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworCisgICAgUmVn
aXN0ZXJJRCByZXR1cm5SZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07
CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxp
ZEdQUlJlZyB9OworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1MpCisgICAgLy8gQXJn
dW1lbnQgcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJRCBpbnB1dCB7IFg4NlJlZ2lzdGVyczo6SW52
YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBYODZSZWdpc3RlcnM6OkludmFs
aWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGxlbmd0aCB7IFg4NlJlZ2lzdGVyczo6SW52YWxp
ZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgb3V0cHV0IHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlk
R1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgeyBYODZSZWdpc3RlcnM6
OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGZyZWVsaXN0UmVnaXN0ZXIgeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJl
Z2lzdGVyIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisKKyAgICAvLyBTY3JhdGNo
IHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVnVDAgeyBYODZSZWdpc3RlcnM6OkludmFsaWRH
UFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1QxIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BS
UmVnIH07CisgICAgUmVnaXN0ZXJJRCByZWdUMiB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJl
ZyB9OworCisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBYODZSZWdpc3RlcnM6OkludmFs
aWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgeyBYODZSZWdp
c3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1VuaWNvZGVJbnB1dEFu
ZFRyYWlsIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCB1
bmljb2RlVGVtcCB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVy
SUQgZW5kT2ZTdHJpbmdBZGRyZXNzIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisK
KyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BS
UmVnIH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBYODZSZWdpc3RlcnM6Oklu
dmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIg
c3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4
MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgbGVhZGluZ1N1
cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkODAwKTsKKyAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5nU3Vycm9nYXRlVGFnID0g
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworI2Vsc2UKKyNlcnJvciAiTm8g
c3VwcG9ydCBmb3IgaW5saW5lZCBKSVQnaW5nIG9mIFJlZ0V4cC50ZXN0IGZvciB0aGlzIENQVSAv
IE9TIGNvbWJpbmF0aW9uLiIKKyNlbmRpZgorfTsKKyNlbmRpZgorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6WWFycgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
clBhdHRlcm4uaAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGV0ZXIgVmFyZ2EgKHB2YXJnYUBp
bmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApJ
bmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDktMTkgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgSW5saW5lIFJlZ0V4cC50ZXN0IEpJVCBjb2RlIGlu
IERGRyBhbmQgRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzA0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBhIG5ldyBlbmFibGVtZW50OiBFTkFCTEVfWUFSUl9KSVRfQUxMX1BBUkVOU19F
WFBSRVNTSU9OUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5oOgorCiAyMDIxLTA5
LTE4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAg
W2lPUyBGYW1pbHldIERlbGV0ZSBsZXR0ZXJwcmVzcyBzdXBwb3J0CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtRW5hYmxlLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RW5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NCw2ICs3NDQsNyBAQAogLyogRW5hYmxlIEpJ
VCdpbmcgUmVndWxhciBFeHByZXNzaW9ucyB0aGF0IGhhdmUgbmVzdGVkIHBhcmVudGhlc2lzIC4g
Ki8KICNpZiBFTkFCTEUoWUFSUl9KSVQpICYmIChDUFUoQVJNNjQpIHx8IChDUFUoWDg2XzY0KSAm
JiAhT1MoV0lORE9XUykpKQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBS
RVNTSU9OUyAxCisjZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUgMQog
I2VuZGlmCiAKIC8qIEVuYWJsZSBKSVQnaW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgdGhhdCBoYXZl
IG5lc3RlZCBiYWNrIHJlZmVyZW5jZXMuICovCg==
</data>
<flag name="commit-queue"
          id="462085"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438693</attachid>
            <date>2021-09-20 10:39:04 -0700</date>
            <delta_ts>2021-09-25 22:01:59 -0700</delta_ts>
            <desc>Updated Patch with suggested changes and speculative fixes for EWS failures.</desc>
            <filename>230469-2.patch</filename>
            <type>text/plain</type>
            <size>254833</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODI3NDApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTA5LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG1pY3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTA5LTE3ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIGZhc3QgcHJvcGVydHkgZW51bWVyYXRp
b24gbW9kZSBmb3IgSlNPTi5zdHJpbmdpZnkKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3JlZ2V4cC10ZXN0LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvcmVnZXhwLXRlc3QtaW5saW5lZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAgQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2VyaWVzIDMi
CisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHN0cmluZ3MgPSBbICJ0aGVtIiwgInRoZXJlIiwgInRo
ZXkiLCAiYW50aGVtIiwgImFtcGhpdGhlYXRlciIsICJib3RoZXIiLCAiYW5vdGhlciIsICJicm90
aGVyIiwgImFwb3RoZWNhcnkiLCAiYW5hdGhlbWEiXTsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAg
ICBsZXQgbiA9IDEwMDAwMDAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKQorICAg
ICAgICByZXN1bHQgKz0gL3RoZS8udGVzdChzdHJpbmdzW2kgJSAxMF0pOworICAgIGlmIChyZXN1
bHQgIT0gbikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgyNzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDg2IEBACisyMDIxLTA5LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgor
CisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNDY5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzdHJ1Y3R1cmVk
IFlhcnJKSVQgZnJvbSBpbmhlcml0aW5nIGZyb20gTWFjcm9Bc3NlbWJsZXIgdG8gaGF2aW5nIGEg
TWFjcm9Bc3NlbWJsZXIKKyAgICAgICAgbWVtYmVyLiAgQWRkZWQgYSBuZXcgcGF0aCB0byBZYXJy
IEpJVCBjb2RlIHRvIGNvbXBpbGUgaW5saW5lIGNvZGUgYnkgY2hhbmdpbmcgaG93IHRoZQorICAg
ICAgICBjb2RlIGlzIGVudGVyZWQgYW5kIGV4aXRlZC4gIEFkZGVkIHN0YXRpc3RpYyB0byB0aGUg
bm9ybWFsIGNvbXBpbGF0aW9uIHBhdGggdG8gcmVjb3JkCisgICAgICAgIHRoZSBzaXplIG9mIHRo
ZSBtYXRjaGluZyBjb2RlIGdlbmVyYXRlZCwgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBuZWVk
ZWQsIGFuZCBpZgorICAgICAgICB0aGUgY29kZSBjYW4gYmUgaW5saW5lZC4gIFRoaXMgcGF0Y2gg
b25seSBpbmxpbmVzIDhiaXQgY29kZSwgYXMgdGhpcyBzZWVtcyB0byBjb3ZlcgorICAgICAgICB0
aGUgbW9zdCBjb21tb24gcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNhc2VzLiAgQWRkaW5nIDE2IGJp
dCwgbm9uLVVuaWNvZGUgaW5saW5pbmcKKyAgICAgICAgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJk
LiAgVGhlIGNvZGUgaXMgc3RydWN0dXJlZCB0byB0YWtlIHRoZSBpbmxpbmVkIHBhdGggZm9yIHRo
ZQorICAgICAgICBjYXNlIG9mIG5vbi1yb3BlIHN0cmluZyBhcmd1bWVudHMuICBGb3Igb3RoZXIg
Y2FzZXMsIHdlIGZhbGwgYmFjayB0byBjYWxsaW5nIG91dAorICAgICAgICB0byBDKysgcGF0aHMu
CisKKyAgICAgICAgSGVyZSBhcmUgdGhlIHBlcmYgcmVzdWx0cyBydW5uaW5nIHRoZSBuZXdseSBh
ZGRlZCByZWdleHAtdGVzdC1pbmxpbmVkIG1pY3JvCisgICAgICAgIGJlbmNobWFyayAodGltZSBp
biBtc2VjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lICAgICAgIFdpdGggdGhp
cyBwYXRjaCAgICAgUmVzdWx0CisgICAgICAgICAgICBBUk02NCAgIDEzOS41ODc1Ky0zLjcyNzQg
ICA2MS4zMTAxKy0wLjk2NzYgIDIuMjh4IGZhc3RlcgorICAgICAgICAgICAgWDg2LTY0ICAyMTku
NTgzMSstMjguMDkxICAxMDIuNjI2NSstMTguMDAyICAyLjE0eCBmYXN0ZXIKKworICAgICAgICBB
cyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBmb3VuZCB0aGF0IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24g
ZGlkbid0IHdvcmsgcHJvcGVybHkgZm9yIHRoZQorICAgICAgICBleGlzdGluZyBjYXNlcyBmb3Ig
UmVnRXhwRXhlYywgUmVnRXhwVGVzdCBhbmQgcmVsYXRlZCBzaW5jZSB3ZSBhZGRlZCB0aGF0IGNo
ZWNrcyBmb3IKKyAgICAgICAgb3ZlcnJpZGluZyB0aGUgUmVnRXhwIG9iamVjdC4gIENsb2JiZXJp
emUgZm9yIHRyeUdldEJ5SWQgd2FzIGNsb2JiZXIgdG9wLCBidXQgYWRkZWQKKyAgICAgICAgYW4g
ZXhjZXB0aW9uIGZvciBSZWdFeHAubGFzdEluZGV4LiAgVGhpcyBmaXggYWxsb3dlZCBtYW55IG9m
IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb25zCisgICAgICAgIGNhc2VzIHRvIHN0YXJ0IHdvcmtpbmcg
YWdhaW4sIG5hbWVseSB0aGUgY29zdGFudCBmb2xkaW5nIGNhc2VzLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dD
KToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGlj
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQ2VsbE9wZXJhbmQpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6aGFuZGxl
Tm9kZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6
CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwLmg6CisgICAgICAgICogcnVudGltZS9TdGFja0FsaWdubWVudC5oOgorICAgICAgICAoSlND
Ojphcmd1bWVudENvdW50Rm9yU3RhY2tTaXplKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
aml0Q29tcGlsZUlubGluZWRUZXN0KToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OklubGluZVN0YXRzKToK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OnNldCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpjbGVhcik6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpjb2RlU2l6ZSBj
b25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpz
dGFja1NpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxp
bmVTdGF0czo6Y2FuSW5saW5lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6c2V0OEJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6c2V0MTZCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OmdldDhCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OmdldDE2Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29k
ZUJsb2NrOjpjbGVhcik6CisgICAgICAgICogeWFyci9ZYXJySklUUmVnaXN0ZXJzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJySklUUmVnaXN0ZXJzOjpZYXJySklUUmVnaXN0ZXJz
KToKKyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmg6CisKIDIwMjEtMDktMTcgIE1pa2hhaWwg
Ui4gR2FkZWxoYSAgPG1pa2hhaWxAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggQ2VsbFRhZyBi
ZWluZyBzZXQgMzIgYml0cyBldmVuIGlmIHRoZSBiYXNlIGlzIG5vdCBhIGNlbGwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDcgQEAKIAkJODY3MDRCNDMxMkRCOEE4MTAwQTlG
RTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI0MTEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENo
ZWNrZXIuaCAqLzsgfTsKIAkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnBy
ZXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3
MDRCN0UxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjcwNEI4MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTY1M0JDNDNGMjZEMDEzQTYw
MEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJl
Z2lzdGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODMxMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZh
dGVOYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDI0NSw2ICs0MjQ2LDcgQEAKIAkJ
ODY3MDRCN0UxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySW50ZXJwcmV0ZXIuaDsgcGF0aCA9IHlhcnIvWWFy
ckludGVycHJldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjdGMTJE
QkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFlhcnJKSVQuY3BwOyBwYXRoID0geWFyci9ZYXJySklULmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCODAxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckpJVC5oOyBwYXRoID0geWFy
ci9ZYXJySklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1M0JDNDNFMjZEMDEz
QTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFlhcnJKSVRSZWdpc3RlcnMuaDsgcGF0aCA9IHlhcnIvWWFyckpJVFJlZ2lzdGVy
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJy
UGFyc2VyLmg7IHBhdGggPSB5YXJyL1lhcnJQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlhcnJQYXR0ZXJuLmNwcDsgcGF0aCA9
IHlhcnIvWWFyclBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Njcw
NEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gWWFyclBhdHRlcm4uaDsgcGF0aCA9IHlhcnIvWWFyclBhdHRlcm4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxNTEsNiArODE1Myw3IEBACiAJCQkJODY3
MDRCN0UxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oICovLAogCQkJCTg2NzA0
QjdGMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmNwcCAqLywKIAkJCQk4NjcwNEI4MDEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovLAorCQkJCTY1M0JDNDNFMjZEMDEzQTYwMEQ4QkUy
MCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi8sCiAJCQkJRTNGMEZDOTQyNkExMUI0QTAwOTlGRkEw
IC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCAqLywKIAkJCQk4NjcwNEI4MTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oICovLAogCQkJCTg2NzA0QjgyMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGF0dGVybi5jcHAgKi8sCkBAIC0xMDIyMCw2ICsxMDIyMyw4IEBACiAJCQkJQTM4
RDI1MEUyNTgwMEQ0NDAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2NzA0Qjg3
MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTNCQzQz
RjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzlERDdGNTIzQzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwOTI1LDcgKzEwOTMwLDYgQEAKIAkJCQlFMzI4
MkJCQjFGRTkzMEFGMDBFREFGNzEgLyogWWFyckVycm9yQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8qIFlhcnJGbGFncy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFCNEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdD
b250ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjY0Myw2ICsy
NjQzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxp
bmU6CiAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFz
IFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4
IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4cC4KICAgICAgICAgY2xvYmJlcldv
cmxkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NzMsMTQgKzY3MywyNiBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAgICAgCisKKyAgICBjYXNlIFRyeUdldEJ5SWQ6CisgICAgICAgIHJlYWQoV29y
bGQpOworI2RlZmluZSBBQlNUUkFDVF9IRUFQX05PVF9SZWdFeHBPYmplY3RfbGFzdEluZGV4KG5h
bWUpIGlmIChuYW1lICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYgXAorICAgIG5hbWUgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCAmJiBcCisgICAgbmFtZSAhPSBXb3JsZCAmJiBcCisgICAgbmFtZSAh
PSBTdGFjayAmJiBcCisgICAgbmFtZSAhPSBIZWFwICYmIFwKKyAgICBuYW1lICE9IFJlZ0V4cE9i
amVjdF9sYXN0SW5kZXgpIFwKKyAgICAgICAgd3JpdGUobmFtZSk7CisgICAgRk9SX0VBQ0hfQUJT
VFJBQ1RfSEVBUF9LSU5EKEFCU1RSQUNUX0hFQVBfTk9UX1JlZ0V4cE9iamVjdF9sYXN0SW5kZXgp
CisjdW5kZWYgQUJTVFJBQ1RfSEVBUF9OT1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleAorICAgICAg
ICByZXR1cm47CisKICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAg
ICAgY2FzZSBHZXRCeUlkV2l0aFRoaXM6CiAgICAgY2FzZSBHZXRCeUlkRGlyZWN0OgogICAgIGNh
c2UgR2V0QnlJZERpcmVjdEZsdXNoOgogICAgIGNhc2UgR2V0QnlWYWxXaXRoVGhpczoKLSAgICBj
YXNlIFRyeUdldEJ5SWQ6CiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0QnlJZFdpdGhU
aGlzOgogICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoKQEAgLTE3NTAsNiArMTc2Miw3IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgUmVnRXhw
RXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgog
ICAgICAgICAvLyBFdmVuIGlmIHdlJ3ZlIHByb3ZlbiBrbm93biBpbnB1dCB0eXBlcyBhcyBSZWdF
eHBPYmplY3QgYW5kIFN0cmluZywKICAgICAgICAgLy8gYWNjZXNzaW5nIGxhc3RJbmRleCBpcyBl
ZmZlY3RmdWwgaWYgaXQncyBhIGdsb2JhbCByZWdleHAuCiAgICAgICAgIGNsb2JiZXJUb3AoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDI4
MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM1LDYgKzMzNSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICBjYXNlIFJlZ0V4cE1hdGNo
RmFzdEdsb2JhbDoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5s
aW5lOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJldHVybjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjgyNzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE0NzIsNyArMTQ3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgICAgIGNhc2UgUmVnRXhw
VGVzdDogeworICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIGNhc2UgUmVnRXhwVGVz
dElubGluZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVSZWdFeHBPYmplY3QoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuY3BwCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIxLDYgKzMyMSwxNiBAQCB2b2lk
IE5vZGU6OmNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAgICAgbV9vcEluZm8gPSByZWdF
eHA7CiB9CiAKK3ZvaWQgTm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZShGcm96ZW5WYWx1
ZSogcmVnRXhwKQoreworICAgIEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9w
QW5kRGVmYXVsdEZsYWdzKFJlZ0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgp
ID0gRWRnZShjaGlsZHJlbi5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hp
bGRyZW4uY2hpbGQyKCkgPSBFZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2Jq
ZWN0VXNlKTsKKyAgICAvLyBXZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcElu
Zm8gPSByZWdFeHA7Cit9CisKIFN0cmluZyBOb2RlOjp0cnlHZXRTdHJpbmcoR3JhcGgmIGdyYXBo
KQogewogICAgIGlmIChoYXNDb25zdGFudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIzLDYgKzgyMyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY29udmVydFRvUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5V2l0aG91dENoZWNr
cyhGcm96ZW5WYWx1ZSogcmVnRXhwKTsKICAgICB2b2lkIGNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFz
dEdsb2JhbFdpdGhvdXRDaGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4cCk7CisgICAgdm9pZCBjb252
ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKEZyb3plblZhbHVlKiByZWdFeHApOwogCiAgICAgdm9pZCBj
b252ZXJ0VG9TZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoKQogICAgIHsKQEAgLTE4MDAsNiArMTgw
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJl
Z0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAg
ICAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0
OgogICAgICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6CkBAIC0xODk2LDYgKzE4OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRGly
ZWN0VGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9i
YWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CisgICAgICAg
IGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE5LDYg
KzMxOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhSZWdF
eHBFeGVjLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVn
RXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhSZWdF
eHBUZXN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmVn
RXhwVGVzdElubGluZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKFJlZ0V4cE1hdGNoRmFzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKFJlZ0V4cE1hdGNoRmFzdEdsb2JhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oU3RyaW5nUmVwbGFjZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODY4LDYgKzg2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhw
RXhlYzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6CiAgICAgICAg
IGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgICAg
ICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9i
YWw6CiAgICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU1NCw2ICs1NTQsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9y
U3RpY2t5OgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6
CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9i
YWw6CiAgICAgY2FzZSBDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI3MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI5NDEsNyArMjk0MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFJlZ0V4
cFRlc3Q6IHsKKyAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5l
OiB7CiAgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0KG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
Q2hhaW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVn
aXN0ZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjY5OSw2
ICsyNzAwLDE2OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kCiAg
ICAgfSB9CiB9CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSogbm9kZSkKK3sK
KyAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihub2RlLT5jZWxsT3BlcmFuZCgp
LT52YWx1ZSgpKTsKKworICAgIEFTU0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKTsKKwor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGdsb2JhbE9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGdsb2JhbE9iamVjdC5ncHIoKTsKKyAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50R1BSOworICAg
IEdQUlRlbXBvcmFyeSBzdHJpbmdJbXBsKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdHJpbmdE
YXRhKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdHJMZW5ndGgodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IG91dHB1dCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0Mih0aGlzKTsKKyAg
ICBHUFJUZW1wb3JhcnkgdGVtcDAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAxKHRoaXMp
OworICAgIEdQUlJlZyBzdHJpbmdJbXBsR1BSID0gc3RyaW5nSW1wbC5ncHIoKTsKKyAgICBHUFJS
ZWcgc3RyaW5nRGF0YUdQUiA9IHN0cmluZ0RhdGEuZ3ByKCk7CisgICAgR1BSUmVnIG91dHB1dEdQ
UiA9IG91dHB1dC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyTGVuZ3RoR1BSID0gc3RyTGVuZ3RoLmdw
cigpOworICAgIEdQUlJlZyByZXN1bHQyR1BSID0gcmVzdWx0Mi5ncHIoKTsKKyAgICBHUFJSZWcg
dGVtcDBHUFIgPSB0ZW1wMC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDFHUFIgPSB0ZW1wMS5ncHIo
KTsKKworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHN3YXBSZWcgPSBJbnZhbGlk
R1BSUmVnOworCisgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KG5vZGUtPmNoaWxkMigpLCBiYXNl
R1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKworICAgIGF1dG8gc3dhcFJlZ0lmTmVl
ZGVkID0gWyZdIHsKKyAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSByZXN1bHRHUFIpIHsK
KyAgICAgICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgbV9qaXQubW92
ZShnbG9iYWxPYmplY3RHUFIsIHN3YXBSZWcpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BS
ID0gc3dhcFJlZzsKKyAgICAgICAgfSBlbHNlIGlmIChiYXNlR1BSID09IHJlc3VsdEdQUikgewor
ICAgICAgICAgICAgc3dhcFJlZyA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGJhc2VHUFIsIHN3YXBSZWcpOworICAgICAgICAgICAgYmFzZUdQUiA9IHN3YXBSZWc7CisgICAg
ICAgIH0gZWxzZSBpZiAoYXJndW1lbnRHUFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBz
d2FwUmVnID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoYXJndW1lbnRHUFIs
IHN3YXBSZWcpOworICAgICAgICAgICAgYXJndW1lbnRHUFIgPSBzd2FwUmVnOworICAgICAgICB9
CisgICAgfTsKKworICAgIGF1dG8gcmVnRXhwVGVzdElubGluZUNhc2UgPSBbJl0geworICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0ltcGxHUFIsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0cmluZ0RhdGFHUFIpOworICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nSW1wbEdQUiwgU3RyaW5nSW1wbDo6
bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLCBzdHJMZW5ndGhHUFIpOworCisgICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IHN0cmluZ0ltcGxHUFI7CisKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoMCksIGluZGV4R1BSKTsKKworICAgICAgICBZYXJyOjpZYXJySklUUmVnaXN0ZXJzIHlhcnJS
ZWdpc3RlcnM7CisgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOwor
ICAgICAgICB5YXJyUmVnaXN0ZXJzLmluZGV4ID0gaW5kZXhHUFI7CisgICAgICAgIHlhcnJSZWdp
c3RlcnMubGVuZ3RoID0gc3RyTGVuZ3RoR1BSOworICAgICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1
dCA9IG91dHB1dEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5yZWdUMCA9IHRlbXAwR1BSOwor
ICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QxID0gdGVtcDFHUFI7CisgICAgICAgIHlhcnJSZWdp
c3RlcnMucmV0dXJuUmVnaXN0ZXIgPSByZXN1bHRHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMu
cmV0dXJuUmVnaXN0ZXIyID0gcmVzdWx0MkdQUjsKKyAgICAgICAgWWFycjo6aml0Q29tcGlsZUlu
bGluZWRUZXN0KCZtX2dyYXBoLm1fc3RhY2tDaGVja2VyLCByZWdFeHAtPnBhdHRlcm4oKSwgcmVn
RXhwLT5mbGFncygpLCBZYXJyOjpDaGFyU2l6ZTo6Q2hhcjgsICZ2bSgpLCBtX2ppdCwgeWFyclJl
Z2lzdGVycyk7CisKKyAgICAgICAgYXV0byBmYWlsZWRNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworCisg
ICAgICAgIC8vICBTYXZlZCBjYWNoZWQgcmVzdWx0CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQg
PSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNldCgpICsgUmVnRXhwR2xvYmFs
RGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsKKworICAgICAgICBtX2ppdC5zdG9yZVB0cihU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCByZWdFeHApLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zm
c2V0T2ZMYXN0UmVnRXhwKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJndW1lbnRHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2Fj
aGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RJbnB1dCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIo
cmVzdWx0R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCAr
IFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihN
YXRjaFJlc3VsdCwgc3RhcnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVzdWx0MkdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNo
ZWRSZXN1bHQ6Om9mZnNldE9mUmVzdWx0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQs
IGVuZCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6
Om9mZnNldE9mUmVpZmllZCgpKSk7CisKKyAgICAgICAgaWYgKHN3YXBSZWcgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIHVubG9jayhzd2FwUmVnKTsKKworICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKworICAgICAgICBmYWlsZWRNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgIH07CisKKyAgICBpZiAobm9kZS0+Y2hpbGQzKCkudXNlS2lu
ZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVu
dCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQu
Z3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDMoKSwgYXJndW1lbnRH
UFIpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgc3dhcFJlZ0lmTmVl
ZGVkKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhh
cmd1bWVudEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0cmluZ0ltcGxHUFIpOwor
ICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgcm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhl
IG9wZXJhdGlvbi4KKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
Um9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikpOworICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBT
dHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihTdHJp
bmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisKKyAgICAgICAgcmVnRXhwVGVzdElubGluZUNhc2Uo
KTsKKworICAgICAgICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25SZWdFeHBUZXN0U3RyaW5nLCByZXN1bHRHUFIsIGdsb2JhbE9i
amVjdEdQUiwgYmFzZUdQUiwgYXJndW1lbnRHUFIpOworCisgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIHVuYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwor
ICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygp
OworCisgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisKKyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZOb3RDZWxsKGFyZ3VtZW50R1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5nKGFyZ3VtZW50R1BSKSk7CisKKyAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RyaW5nSW1wbEdQUik7CisgICAgLy8gSWYgdGhlIHN0cmluZyBp
cyBhIHJvcGUgb3IgMTYgYml0LCB3ZSBjYWxsIHRoZSBvcGVyYXRpb24uCisgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikp
OworICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3Rl
ZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKworICAgIHJlZ0V4cFRlc3RJbmxp
bmVDYXNlKCk7CisKKyAgICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BS
LCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworfQorI2Vsc2UKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdF
eHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBjb21waWxlUmVnRXhwVGVzdChub2Rl
KTsKK30KKyNlbmRpZgorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMzgzMyw2ICszOTk3LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOiB7CisgICAgICAgIGNvbXBpbGVS
ZWdFeHBUZXN0SW5saW5lKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNl
IFJlZ0V4cE1hdGNoRmFzdDogewogICAgICAgICBjb21waWxlUmVnRXhwTWF0Y2hGYXN0KG5vZGUp
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OTksNiAr
MTQ5OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdEdsb2JhbChOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlUmVnRXhwVGVzdChOb2RlKik7CisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElu
bGluZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nUmVwbGFjZShOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlSXNPYmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVR5cGVPZklzT2Jq
ZWN0KE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjgyNzM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc5MSw2ICs3OTEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH07CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVH
RVhQX1RFU1RfSU5MSU5FKQorICAgICAgICAgICAgYXV0byBjb252ZXJ0VGVzdFRvVGVzdElubGlu
ZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBUZXN0
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBp
ZiAocmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGF1dG8gaml0Q29k
ZUJsb2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRDb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGlubGluZUNvZGVTdGF0czhCaXQgPSBqaXRDb2RlQmxvY2stPmdldDhCaXRJbmxpbmVT
dGF0cygpOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDb2RlU3RhdHM4Qml0LmNhbklu
bGluZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjb2RlU2l6ZSA9IGlubGluZUNvZGVTdGF0czhCaXQuY29kZVNpemUoKTsK
KworICAgICAgICAgICAgICAgIGlmIChjb2RlU2l6ZSA+IE9wdGlvbnM6Om1heGltdW1SZWdFeHBU
ZXN0SW5saW5lQ29kZXNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGlubGluZUNvZGVTdGF0czhCaXQu
c3RhY2tTaXplKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFsaWduZWRGcmFtZVNpemUpCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IHN0ZDo6bWF4KG1f
Z3JhcGgubV9wYXJhbWV0ZXJTbG90cywgYXJndW1lbnRDb3VudEZvclN0YWNrU2l6ZShhbGlnbmVk
RnJhbWVTaXplKSk7CisKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9k
ZS0+b3JpZ2luOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIG1fbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwg
bV9ub2RlLT5jaGlsZHJlbi5qdXN0Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIG1fbm9kZS0+
Y29udmVydFRvUmVnRXhwVGVzdElubGluZShtX2dyYXBoLmZyZWV6ZShyZWdFeHApKTsKKyAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfTsKKyNlbmRpZgorCiAgICAgICAgICAgICBhdXRvIGNvbnZlcnRUb1N0
YXRpYyA9IFsmXSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBF
eGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MDksNiArODQ1LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoZm9sZFRvQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUp
CisgICAgICAgICAgICBpZiAoY29udmVydFRlc3RUb1Rlc3RJbmxpbmUoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyNlbmRpZgorCiAgICAgICAgICAgICBpZiAoY29udmVydFRvU3RhdGljKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzNyw2ICszMzcsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3Rp
Y2t5OgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAg
ICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6
CiAgICAgY2FzZSBOZXdSZWdleHA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDcgQEAKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJUaHVua0dlbmVy
YXRvcnMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJZYXJySklU
UmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSA8YXRvbWljPgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNp
bmNsdWRlIDx3dGYvUmVjdXJzYWJsZUxhbWJkYS5oPgpAQCAtMTU3OSw2ICsxNTgwLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4
cFRlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlZ0V4cFRlc3RJbmxp
bmU6CisgICAgICAgICAgICBjb21waWxlUmVnRXhwVGVzdElubGluZSgpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICAgICAgY29tcGls
ZVJlZ0V4cE1hdGNoRmFzdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDI0OCw2ICsxNDI1
MiwxNTAgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwogICAgIH0KIAor
I2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxl
UmVnRXhwVGVzdElubGluZSgpCisgICAgeworICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2Fz
dDxSZWdFeHAqPihtX25vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOworCisgICAgICAgIEFT
U0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKTsKKworICAgICAgICBhdXRvIGppdENvZGVC
bG9jayA9IHJlZ0V4cC0+Z2V0UmVnRXhwSklUQ29kZUJsb2NrKCk7CisgICAgICAgIGF1dG8gaW5s
aW5lQ29kZVN0YXRzOEJpdCA9IGppdENvZGVCbG9jay0+Z2V0OEJpdElubGluZVN0YXRzKCk7CisK
KyAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGlubGluZUNvZGVTdGF0czhCaXQuc3RhY2tTaXpl
KCkpOworCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhhbGln
bmVkRnJhbWVTaXplKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVjazhCaXRTdHJpbmcgPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVDYXNlID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQ2FzZSA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKKworICAgICAg
ICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dSZWdFeHBPYmplY3QobV9ub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgIExWYWx1ZSBhcmd1bWVudCA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGF2ZVN0cmluZ0Fy
ZyA9IG1fbm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1VzZTsKKworICAgICAgICBp
ZiAoaGF2ZVN0cmluZ0FyZykKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQzKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmd1bWVudCA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgYXV0byB2bSA9ICZ0aGlzLT52bSgp
OworICAgICAgICBhdXRvIHN0YWNrQ2hlY2tlciA9ICZtX2dyYXBoLm1fc3RhY2tDaGVja2VyOwor
CisgICAgICAgIGlmICghaGF2ZVN0cmluZ0FyZykgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
aXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBp
c1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBtX291dC5icmFu
Y2goaXNDZWxsKGFyZ3VtZW50KSwgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5KG9wZXJhdGlv
bkNhc2UpKTsKKworICAgICAgICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxD
YXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGFy
Z3VtZW50KSwgdXN1YWxseShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUob3BlcmF0aW9uQ2FzZSkpOwor
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIGNoZWNrOEJpdFN0cmlu
Zyk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc1JvcGVTdHJpbmcoYXJndW1lbnQsIG1f
bm9kZS0+Y2hpbGQzKCkpLCB1bnN1cmUob3BlcmF0aW9uQ2FzZSksIHVuc3VyZShjaGVjazhCaXRT
dHJpbmcpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2s4Qml0U3RyaW5nLCBp
bmxpbmVDYXNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c1JvcGVTdHJpbmcoYXJndW1lbnQsIG1fbm9kZS0+Y2hpbGQzKCkpLCB1bnN1cmUob3BlcmF0aW9u
Q2FzZSksIHVuc3VyZShjaGVjazhCaXRTdHJpbmcpKTsKKworICAgICAgICAgICAgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhjaGVjazhCaXRTdHJpbmcsIGlubGluZUNhc2UpOworICAgICAgICB9
CisKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGFyZ3VtZW50LCBt
X2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgbV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJp
bmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAg
ICAgdW5zdXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUoaW5saW5lQ2FzZSkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGlubGluZUNhc2UsIG9wZXJhdGlvbkNhc2UpOworICAgICAgICBMVmFs
dWUgc3RyaW5nTGVuZ3RoID0gbV9vdXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5n
SW1wbF9sZW5ndGgpOworICAgICAgICBMVmFsdWUgc3RyaW5nRGF0YSA9IG1fb3V0LmxvYWRQdHIo
c3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2RhdGEpOworCisgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50MzIpOworICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShzdHJpbmdEYXRhLCBWYWx1ZVJlcDo6
U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShtX291dC56ZXJvRXh0KHN0cmluZ0xlbmd0aCwgSW50NjQpLCBWYWx1ZVJlcDo6U29t
ZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShnbG9iYWxPYmplY3QsIFZhbHVlUmVwOjpTb21lTGF0ZVJlZ2lzdGVyKSk7CisgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZ3VtZW50LCBWYWx1ZVJlcDo6
U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMgPSA1OworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
KyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgR1BSUmVn
IHJldHVybkdQUiA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3Ry
aW5nRGF0YUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3Ry
aW5nTGVuZ3RoR1BSID0gcGFyYW1zWzJdLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSBwYXJhbXNbM10uZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVn
IHN0cmluZ0dQUiA9IHBhcmFtc1s0XS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgaW5k
ZXhHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAgIEdQUlJlZyByZXR1
cm4yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgb3V0
cHV0R1BSID0gcGFyYW1zLmdwU2NyYXRjaCgyKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdGVt
cDBHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDMpOworICAgICAgICAgICAgICAgIEdQUlJlZyB0ZW1w
MUdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goNCk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgaW5kZXhHUFIpOworCisgICAgICAgICAgICAg
ICAgWWFycjo6WWFyckpJVFJlZ2lzdGVycyB5YXJyUmVnaXN0ZXJzOworCisgICAgICAgICAgICAg
ICAgeWFyclJlZ2lzdGVycy5pbnB1dCA9IHN0cmluZ0RhdGFHUFI7CisgICAgICAgICAgICAgICAg
eWFyclJlZ2lzdGVycy5pbmRleCA9IGluZGV4R1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdp
c3RlcnMubGVuZ3RoID0gc3RyaW5nTGVuZ3RoR1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdp
c3RlcnMub3V0cHV0ID0gb3V0cHV0R1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMu
cmVnVDAgPSB0ZW1wMEdQUjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QxID0g
dGVtcDFHUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlciA9
IHJldHVybkdQUjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJldHVyblJlZ2lzdGVy
MiA9IHJldHVybjJHUFI7CisgICAgICAgICAgICAgICAgWWFycjo6aml0Q29tcGlsZUlubGluZWRU
ZXN0KHN0YWNrQ2hlY2tlciwgcmVnRXhwLT5wYXR0ZXJuKCksIHJlZ0V4cC0+ZmxhZ3MoKSwgWWFy
cjo6Q2hhclNpemU6OkNoYXI4LCB2bSwgaml0LCB5YXJyUmVnaXN0ZXJzKTsKKworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAgIGF1
dG8gZmFpbGVkTWF0Y2ggPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgcmV0
dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBTYXZlZCBjYWNoZWQgcmVzdWx0LgorICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZz
ZXQgPSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNldCgpICsgUmVnRXhwR2xv
YmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsKKworICAgICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVnRXhwKSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0Ojpv
ZmZzZXRPZkxhc3RSZWdFeHAoKSkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzdHJp
bmdHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJl
Z0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0SW5wdXQoKSkpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZlJlc3VsdCgpICsgT0JK
RUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBzdGFydCkpKTsKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmUzMihyZXR1cm4yR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVzdWx0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIGVuZCkpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU4
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZ2xv
YmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVpZmll
ZCgpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigxKSwgcmV0dXJuR1BSKTsKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVt
cCgpKTsKKworICAgICAgICAgICAgICAgIGZhaWxlZE1hdGNoLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIHJldHVybkdQ
Uik7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgaW5saW5lcmVzdWx0ID0gbV9vdXQuYW5jaG9yKHBhdGNocG9pbnQpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8ob3BlcmF0aW9uQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
b3BlcmF0aW9uUmVzdWx0OworCisgICAgICAgIGlmIChoYXZlU3RyaW5nQXJnKQorICAgICAgICAg
ICAgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9u
UmVnRXhwVGVzdFN0cmluZywgZ2xvYmFsT2JqZWN0LCBiYXNlLCBhcmd1bWVudCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxs
KEludDMyLCBvcGVyYXRpb25SZWdFeHBUZXN0LCBnbG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50
KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5waGkoSW50MzIsIGlubGluZXJlc3VsdCwgb3BlcmF0aW9uUmVzdWx0KSk7CisgICAgfQorI2Vs
c2UKKyAgICBOT19SRVRVUk4gdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZSgpCisgICAgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyNlbmRpZgorCiAg
ICAgdm9pZCBjb21waWxlUmVnRXhwTWF0Y2hGYXN0KCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBn
bG9iYWxPYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODI3MzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODcsNiArMjg3LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnko
KTsKICAgICBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENhc2VM
ZW5ndGgsIDUwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtQmlu
YXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgsIDIwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoVW5zaWduZWQsIG1heGltdW1SZWdFeHBUZXN0SW5saW5lQ29kZXNpemUsIDUwMCwgTm9ybWFs
LCAiTWF4aW11bSBjb2RlIHNpemUgaW4gYnl0ZXMgZm9yIGlubGluZWQgUmVnRXhwLnRlc3QgSklU
IGNvZGUuIikgXAogICAgIFwKICAgICB2KERvdWJsZSwgaml0UG9saWN5U2NhbGUsIDEuMCwgTm9y
bWFsLCAic2NhbGUgSklUIHRocmVzaG9sZHMgdG8gdGhpcyBzcGVjaWZpZWQgcmF0aW8gYmV0d2Vl
biAwLjAgKGNvbXBpbGUgQVNBUCkgYW5kIDEuMCAoY29tcGlsZSBsaWtlIG5vcm1hbCkuIikgXAog
ICAgIHYoQm9vbCwgZm9yY2VFYWdlckNvbXBpbGF0aW9uLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24g
MjgyNzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSw2ICsxNDEsMTMgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHRvU291
cmNlU3RyaW5nKCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCisgICAgWWFycjo6WWFy
ckNvZGVCbG9jayogZ2V0UmVnRXhwSklUQ29kZUJsb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3JlZ0V4cEpJVENvZGUuZ2V0KCk7CisgICAgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFJlZ0V4cENhY2hlOwogICAgIFJlZ0V4cChWTSYsIGNvbnN0IFN0cmluZyYs
IE9wdGlvblNldDxZYXJyOjpGbGFncz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCShyZXZpc2lvbiAyODI3MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzLDYgKzUzLDE2IEBAIGlubGluZSB1bnNpZ25lZCByb3VuZExvY2FsUmVnaXN0ZXJDb3Vu
dEYKICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCksIGxvY2FsUmVnaXN0ZXJDb3VudCArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVycykgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CiB9CiAKK2lubGlu
ZSB1bnNpZ25lZCBhcmd1bWVudENvdW50Rm9yU3RhY2tTaXplKHVuc2lnbmVkIHNpemVJbkJ5dGVz
KQoreworICAgIHVuc2lnbmVkIHNpemVJblJlZ2lzdGVycyA9IHNpemVJbkJ5dGVzIC8gc2l6ZW9m
KHZvaWQqKTsKKworICAgIGlmIChzaXplSW5SZWdpc3RlcnMgPD0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHNpemVJblJl
Z2lzdGVycyAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOworfQorCiBpbmxpbmUg
dW5zaWduZWQgbG9nU3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKQogewogICAgIHJldHVybiBXVEY6
OmZhc3RMb2cyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJDYW5vbmljYWxpemUuaCIKICNp
bmNsdWRlICJZYXJyRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiWWFyckpJVFJlZ2lzdGVycy5o
IgogI2luY2x1ZGUgIllhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCIKICNpbmNsdWRlIDx3dGYv
QVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KQEAgLTE4MiwxMTUgKzE4
MywxMSBAQCBzdGQ6OnR1cGxlPEJveWVyTW9vcmVCaXRtYXA6Ok1hcCwgQm95ZXJNCiAgICAgcmV0
dXJuIHN0ZDo6dHVwbGUgeyBXVEZNb3ZlKG1hcCksIFdURk1vdmUoY2hhcmFjdGVyc0Zhc3RQYXRo
KSB9OwogfQogCi1jbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKSVRJbmZv
LCBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKK3RlbXBsYXRlPGNsYXNzIFlhcnJKSVRSZWdzID0g
WWFyckpJVERlZmF1bHRSZWdpc3RlcnM+CitjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKSVRJbmZvIHsKIAotI2lmIENQVShBUk1fVEhVTUIyKQotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IEFSTVJlZ2lzdGVyczo6cjA7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gQVJNUmVnaXN0ZXJzOjpyMTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNUmVnaXN0ZXJzOjpyMjsKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgb3V0cHV0ID0gQVJNUmVnaXN0ZXJzOjpyMzsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IEFSTVJlZ2lzdGVyczo6cjQ7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpyNTsK
LSAgICAvLyByNiBpcyByZXNlcnZlZCBmb3IgTWFjcm9Bc3NlbWJsZXJBUk12NywKLSAgICAvLyBy
NyBpcyBmcC4KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIgPSBBUk1SZWdp
c3RlcnM6OnI4OwotICAgIC8vIHI5IGlzIHNiIGluIEVBQkkuCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIGluaXRpYWxTdGFydCA9IEFSTVJlZ2lzdGVyczo6cjEwOyAvLyByMTAgaXMg
U0wsIGJ1dCBubyBsb25nZXIgYSBzcGVjaWFsIHJlZ2lzdGVyLgotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyMDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gQVJNUmVnaXN0ZXJz
OjpyMTsKLQotI2VsaWYgQ1BVKEFSTTY0KQotICAgIC8vIEFyZ3VtZW50IHJlZ2lzdGVycwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MDsK
LSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBBUk02NFJlZ2lzdGVyczo6
eDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IEFSTTY0UmVnaXN0
ZXJzOjp4MjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgb3V0cHV0ID0gQVJNNjRS
ZWdpc3RlcnM6OngzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBtYXRjaGluZ0Nv
bnRleHQgPSBBUk02NFJlZ2lzdGVyczo6eDQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIGZyZWVsaXN0UmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDQ7IC8vIExvYWRlZCBmcm9t
IHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgotICAgIHN0YXRpYyBj
b25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJz
Ojp4NTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLQotICAgIC8vIFNjcmF0
Y2ggcmVnaXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QwID0gQVJN
NjRSZWdpc3RlcnM6Ong2OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9
IEFSTTY0UmVnaXN0ZXJzOjp4NzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VDIgPSBBUk02NFJlZ2lzdGVyczo6eDg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IHJlbWFpbmluZ01hdGNoQ291bnQgPSBBUk02NFJlZ2lzdGVyczo6eDk7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsID0gQVJNNjRSZWdpc3Rl
cnM6OngxMDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdW5pY29kZVRlbXAgPSBB
Uk02NFJlZ2lzdGVyczo6eDU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluaXRp
YWxTdGFydCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlID0gQVJNNjRSZWdpc3RlcnM6OngxMjsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IEFSTTY0
UmVnaXN0ZXJzOjp4MTM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHRyYWlsaW5n
U3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6OngxNDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzID0gQVJNNjRSZWdpc3RlcnM6OngxNTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IEFSTTY0UmVn
aXN0ZXJzOjp4MDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0
ZXIyID0gQVJNNjRSZWdpc3RlcnM6OngxOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVk
SW1tMzIgc3Vycm9nYXRlVGFnTWFzayA9IFRydXN0ZWRJbW0zMigweGZmZmZmYzAwKTsKLSNlbGlm
IENQVShNSVBTKQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IE1JUFNS
ZWdpc3RlcnM6OmEwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IE1J
UFNSZWdpc3RlcnM6OmExOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGgg
PSBNSVBTUmVnaXN0ZXJzOjphMjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgb3V0
cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTM7Ci0KLSAgICAvLyB0MCBpcyByZXNlcnZlZCBmb3IgTWFj
cm9Bc3NlbWJsZXJNSVBTLgotICAgIC8vIHQxIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxl
ck1JUFMuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QwID0gTUlQU1JlZ2lz
dGVyczo6dDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gTUlQU1Jl
Z2lzdGVyczo6dDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gTUlQ
U1JlZ2lzdGVyczo6dDQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluaXRpYWxT
dGFydCA9IE1JUFNSZWdpc3RlcnM6OnQ1OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IE1JUFNSZWdpc3RlcnM6OnYxOwotCi0j
ZWxpZiBDUFUoWDg2XzY0KQotI2lmICFPUyhXSU5ET1dTKQotICAgIC8vIEFyZ3VtZW50IHJlZ2lz
dGVycwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVy
czo6ZWRpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lz
dGVyczo6ZXNpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODZS
ZWdpc3RlcnM6OmVkeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgb3V0cHV0ID0g
WDg2UmVnaXN0ZXJzOjplY3g7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG1hdGNo
aW5nQ29udGV4dCA9IFg4NlJlZ2lzdGVyczo6cjg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGZyZWVsaXN0UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnI4OyAvLyBMb2FkZWQgZnJv
bSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGluIHRoZSBwcm9sb2d1ZS4KLSAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6
OnI5OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotI2Vsc2UKLSAgICAvLyBJ
ZiB0aGUgcmV0dXJuIHZhbHVlIGRvZXNuJ3QgZml0IGluIDY0Yml0cywgaXRzIGRlc3RpbmF0aW9u
IGlzIHBvaW50ZWQgYnkgcmN4IGFuZCB0aGUgcGFyYW1ldGVycyBhcmUgc2hpZnRlZC4KLSAgICAv
LyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvNzU3Mnp0ejQuYXNweAot
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE1hdGNoUmVzdWx0KSA+IHNpemVvZih2b2lkKiksICJN
YXRjaFJlc3VsdCBkb2VzIG5vdCBmaXQgaW4gNjRiaXRzIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplZHg7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjpyODsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjpyOTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgb3V0cHV0ID0gWDg2UmVnaXN0ZXJzOjpyMTA7Ci0jZW5kaWYK
LQotICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJlZ1QwID0gWDg2UmVnaXN0ZXJzOjplYXg7Ci0jaWYgIU9TKFdJTkRPV1MpCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gWDg2UmVnaXN0ZXJzOjpyOTsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIgPSBYODZSZWdpc3RlcnM6OnIxMDsKLSNl
bHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gWDg2UmVnaXN0ZXJz
OjplY3g7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gWDg2UmVnaXN0
ZXJzOjplZGk7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0
aWFsU3RhcnQgPSBYODZSZWdpc3RlcnM6OmVieDsKLSNpZiAhT1MoV0lORE9XUykKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3VudCA9IFg4NlJlZ2lzdGVy
czo6cjEyOwotI2Vsc2UKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVtYWluaW5n
TWF0Y2hDb3VudCA9IFg4NlJlZ2lzdGVyczo6ZXNpOwotI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsID0gWDg2UmVnaXN0ZXJzOjpy
MTM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHVuaWNvZGVUZW1wID0gWDg2UmVn
aXN0ZXJzOjpyMTQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGVuZE9mU3RyaW5n
QWRkcmVzcyA9IFg4NlJlZ2lzdGVyczo6cjE1OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIHJldHVyblJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IFg4NlJlZ2lzdGVyczo6ZWR4Owot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jh
c2UgPSBUcnVzdGVkSW1tMzIoMHgxMDAwMCk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVk
SW1tMzIgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IFRydXN0ZWRJbW0zMigweGQ4MDApOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIHRyYWlsaW5nU3Vycm9nYXRlVGFnID0gVHJ1c3Rl
ZEltbTMyKDB4ZGMwMCk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVkSW1tMzIgc3Vycm9n
YXRlVGFnTWFzayA9IFRydXN0ZWRJbW0zMigweGZmZmZmYzAwKTsKKyNpZmRlZiAgSklUX1VOSUNP
REVfRVhQUkVTU0lPTlMKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHN1
cnJvZ2F0ZVRhZ01hc2sgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDAp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykK
QEAgLTM2MCw4ICsyNTcsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAKICAgICB2b2lkIGluaXRQYXJlbkNvbnRleHRGcmVlTGlzdCgpCiAgICAgewotICAgICAg
ICBSZWdpc3RlcklEIHBhcmVuQ29udGV4dFBvaW50ZXIgPSByZWdUMDsKLSAgICAgICAgUmVnaXN0
ZXJJRCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciA9IHJlZ1QyOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRQb2ludGVyID0gbV9yZWdzLnJlZ1QwOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciA9
IG1fcmVncy5yZWdUMjsKIAogICAgICAgICBzaXplX3QgcGFyZW5Db250ZXh0U2l6ZSA9IFBhcmVu
Q29udGV4dDo6c2l6ZUZvcihtX3BhcmVuQ29udGV4dFNpemVzKTsKIApAQCAtMzcyLDk0ICsyNjks
OTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWF0Y2hpbmdD
b250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZm
ZXJTaXplKCkpLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0Nv
bnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkpLCBtX3JlZ3Mu
ZnJlZWxpc3RTaXplUmVnaXN0ZXIpOwogICAgICAgICAvLyBOb3RlIHRoYXQgbWF0Y2hpbmdDb250
ZXh0IGFuZCBmcmVlbGlzdFJlZ2lzdGVyIGFyZSBsaWtlbHkgdGhlIHNhbWUgcmVnaXN0ZXIuCi0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhv
bGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlcigpKSwgZnJlZWxpc3RSZWdpc3Rlcik7
Ci0gICAgICAgIEp1bXAgZW1wdHlGcmVlTGlzdCA9IGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxp
c3RSZWdpc3Rlcik7Ci0gICAgICAgIG1vdmUoZnJlZWxpc3RSZWdpc3RlciwgcGFyZW5Db250ZXh0
UG9pbnRlcik7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSks
IGZyZWVsaXN0UmVnaXN0ZXIsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKLSAgICAgICAgYWRk
UHRyKGZyZWVsaXN0UmVnaXN0ZXIsIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgc3Vi
UHRyKFRydXN0ZWRJbW0zMihwYXJlbkNvbnRleHRTaXplKSwgZnJlZWxpc3RTaXplUmVnaXN0ZXIp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5t
YXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29u
dGV4dEJ1ZmZlcigpKSwgbV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBlbXB0eUZyZWVMaXN0ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5t
b3ZlKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAg
ICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0
U2l6ZSksIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7
CisgICAgICAgIG1faml0LmFkZFB0cihtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgbV9yZWdzLmZy
ZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIG1fcmVncy5mcmVlbGlzdFNpemVSZWdp
c3Rlcik7CiAKLSAgICAgICAgTGFiZWwgbG9vcFRvcCh0aGlzKTsKLSAgICAgICAgSnVtcCBpbml0
RG9uZSA9IGJyYW5jaFB0cihBYm92ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIGZyZWVsaXN0
U2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgc3RvcmVQdHIobmV4dFBhcmVuQ29udGV4dFBvaW50ZXIs
IEFkZHJlc3MocGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkp
KTsKLSAgICAgICAgbW92ZShuZXh0UGFyZW5Db250ZXh0UG9pbnRlciwgcGFyZW5Db250ZXh0UG9p
bnRlcik7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBh
cmVuQ29udGV4dFBvaW50ZXIsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKLSAgICAgICAganVt
cChsb29wVG9wKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3BUb3AoJm1faml0
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5pdERvbmUgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciwgbV9yZWdz
LmZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIobmV4dFBhcmVu
Q29udGV4dFBvaW50ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50
ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSk7CisgICAgICAgIG1faml0Lm1vdmUobmV4
dFBhcmVuQ29udGV4dFBvaW50ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2pp
dC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihwYXJlbkNvbnRleHRTaXplKSwg
cGFyZW5Db250ZXh0UG9pbnRlciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBt
X2ppdC5qdW1wKGxvb3BUb3ApOwogCi0gICAgICAgIGluaXREb25lLmxpbmsodGhpcyk7Ci0gICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocGFyZW5Db250ZXh0
UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKLSAgICAgICAgZW1wdHlGcmVl
TGlzdC5saW5rKHRoaXMpOworICAgICAgICBpbml0RG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6
Om5leHRPZmZzZXQoKSkpOworICAgICAgICBlbXB0eUZyZWVMaXN0LmxpbmsoJm1faml0KTsKICAg
ICB9CiAKLSAgICB2b2lkIGFsbG9jYXRlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgcmVzdWx0KQor
ICAgIHZvaWQgYWxsb2NhdGVQYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
cmVzdWx0KQogICAgIHsKLSAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoVGVz
dFB0cihaZXJvLCBmcmVlbGlzdFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVtYWluaW5nTWF0Y2hDb3VudCk7Ci0gICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBl
bmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZW1haW5pbmdNYXRjaENvdW50KSk7Ci0gICAgICAgIG1v
dmUoZnJlZWxpc3RSZWdpc3RlciwgcmVzdWx0KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZy
ZWVsaXN0UmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgZnJlZWxpc3RSZWdp
c3Rlcik7CisgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyKSk7CisgICAg
ICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5y
ZW1haW5pbmdNYXRjaENvdW50KTsKKyAgICAgICAgbV9oaXRNYXRjaExpbWl0LmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBtX3JlZ3MucmVtYWluaW5nTWF0
Y2hDb3VudCkpOworICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBy
ZXN1bHQpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG1fcmVn
cy5mcmVlbGlzdFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICB2b2lkIGZyZWVQYXJlbkNvbnRleHQo
UmVnaXN0ZXJJRCBoZWFkUHRyUmVnaXN0ZXIsIFJlZ2lzdGVySUQgbmV3SGVhZFB0clJlZ2lzdGVy
KQorICAgIHZvaWQgZnJlZVBhcmVuQ29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBo
ZWFkUHRyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdp
c3RlcikKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBh
cmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgbmV3SGVhZFB0clJlZ2lzdGVyKTsKLSAgICAgICAg
c3RvcmVQdHIoZnJlZWxpc3RSZWdpc3RlciwgQWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVu
Q29udGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIG1vdmUoaGVhZFB0clJlZ2lzdGVyLCBm
cmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgbmV3
SGVhZFB0clJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIobV9yZWdzLmZyZWVsaXN0
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGhlYWRQdHJSZWdpc3RlciwgUGFyZW5D
b250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQubW92ZShoZWFkUHRyUmVnaXN0
ZXIsIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKICAgICB9CiAKLQotICAgIHZvaWQgc3RvcmVC
ZWdpbkFuZE1hdGNoQW1vdW50VG9QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBiZWdpbkdQUiwgUmVn
aXN0ZXJJRCBtYXRjaEFtb3VudEdQUiwgUmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCisgICAg
dm9pZCBzdG9yZUJlZ2luQW5kTWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBiZWdpbkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hB
bW91bnRHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVuQ29udGV4dEdQUikKICAg
ICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpICsg
NCA9PSBQYXJlbkNvbnRleHQ6Om1hdGNoQW1vdW50T2Zmc2V0KCkpOwotICAgICAgICBzdG9yZVBh
aXIzMihiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIsIHBhcmVuQ29udGV4dEdQUiwgVHJ1c3RlZElt
bTMyKFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5zdG9yZVBh
aXIzMihiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIsIHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6OmJlZ2luT2Zmc2V0KCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChSZWdp
c3RlcklEIHBhcmVuQ29udGV4dEdQUiwgUmVnaXN0ZXJJRCBiZWdpbkdQUiwgUmVnaXN0ZXJJRCBt
YXRjaEFtb3VudEdQUikKKyAgICB2b2lkIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVu
Q29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGJlZ2luR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBtYXRjaEFtb3VudEdQUikKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoUGFyZW5Db250
ZXh0OjpiZWdpbk9mZnNldCgpICsgNCA9PSBQYXJlbkNvbnRleHQ6Om1hdGNoQW1vdW50T2Zmc2V0
KCkpOwotICAgICAgICBsb2FkUGFpcjMyKHBhcmVuQ29udGV4dEdQUiwgVHJ1c3RlZEltbTMyKFBh
cmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSksIGJlZ2luR1BSLCBtYXRjaEFtb3VudEdQUik7Cisg
ICAgICAgIG1faml0LmxvYWRQYWlyMzIocGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSksIGJlZ2luR1BSLCBtYXRj
aEFtb3VudEdQUik7CiAgICAgfQogCi0gICAgdm9pZCBzYXZlUGFyZW5Db250ZXh0KFJlZ2lzdGVy
SUQgcGFyZW5Db250ZXh0UmVnLCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3Vi
cGF0dGVybiwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNl
RnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHNhdmVQYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0
ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJu
LCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewogICAgICAgICBs
b2FkRnJvbUZyYW1lKHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVC
ZWdpbkFuZE1hdGNoQW1vdW50VG9QYXJlbkNvbnRleHQoaW5kZXgsIHRlbXBSZWcsIHBhcmVuQ29u
dGV4dFJlZyk7CisgICAgICAgIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3VudFRvUGFyZW5Db250ZXh0
KG1fcmVncy5pbmRleCwgdGVtcFJlZywgcGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgbG9hZEZy
b21GcmFtZShzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXM6OnJldHVybkFkZHJlc3NJbmRleCgpLCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVQdHIo
dGVtcFJlZywgQWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRk
cmVzc09mZnNldCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHRlbXBSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpyZXR1cm5BZGRy
ZXNzT2Zmc2V0KCkpKTsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1v
ZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJw
YXR0ZXJuID0gZmlyc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBz
dWJwYXR0ZXJuKyspIHsKICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXQoKSk7
Ci0gICAgICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAx
KSAqIHNpemVvZih1bnNpZ25lZCkpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICBzdG9yZTY0
KHRlbXBSZWcsIEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRl
cm5PZmZzZXQoc3VicGF0dGVybikpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBz
aXplb2YodW5zaWduZWQpKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2
NCh0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVu
Q29udGV4dDo6c3VicGF0dGVybk9mZnNldChzdWJwYXR0ZXJuKSkpOwogICAgICAgICAgICAgICAg
IGNsZWFyU3VicGF0dGVyblN0YXJ0KHN1YnBhdHRlcm4pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3RhY2tTcGFj
ZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBmcmFt
ZUxvY2F0aW9uID0gc3VicGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uOyBmcmFtZUxvY2F0aW9uIDwg
bV9wYXJlbkNvbnRleHRTaXplcy5mcmFtZVNsb3RzKCk7IGZyYW1lTG9jYXRpb24rKykgewogICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShmcmFtZUxvY2F0aW9uLCB0ZW1wUmVnKTsKLSAgICAgICAg
ICAgIHN0b3JlUHRyKHRlbXBSZWcsIEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRl
eHQ6OnNhdmVkRnJhbWVPZmZzZXQobV9wYXJlbkNvbnRleHRTaXplcykgKyBmcmFtZUxvY2F0aW9u
ICogc2l6ZW9mKHVpbnRwdHJfdCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHRlbXBS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0
OjpzYXZlZEZyYW1lT2Zmc2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAq
IHNpemVvZih1aW50cHRyX3QpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHJlc3Rv
cmVQYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRSZWcsIFJlZ2lzdGVySUQgdGVt
cFJlZywgdW5zaWduZWQgZmlyc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwg
dW5zaWduZWQgc3VicGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uKQorICAgIHZvaWQgcmVzdG9yZVBh
cmVuQ29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3VicGF0dGVy
biwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNlRnJhbWVM
b2NhdGlvbikKICAgICB7Ci0gICAgICAgIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVu
Q29udGV4dChwYXJlbkNvbnRleHRSZWcsIGluZGV4LCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVU
b0ZyYW1lKGluZGV4LCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgIGxvYWRCZWdpbkFuZE1hdGNoQW1v
dW50RnJvbVBhcmVuQ29udGV4dChwYXJlbkNvbnRleHRSZWcsIG1fcmVncy5pbmRleCwgdGVtcFJl
Zyk7CisgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHN1YnBhdHRlcm5CYXNlRnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKICAg
ICAgICAgc3RvcmVUb0ZyYW1lKHRlbXBSZWcsIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpyZXR1cm5BZGRy
ZXNzT2Zmc2V0KCkpLCB0ZW1wUmVnKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVz
c09mZnNldCgpKSwgdGVtcFJlZyk7CiAgICAgICAgIHN0b3JlVG9GcmFtZSh0ZW1wUmVnLCBzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnJldHVy
bkFkZHJlc3NJbmRleCgpKTsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGls
ZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBz
dWJwYXR0ZXJuID0gZmlyc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJu
OyBzdWJwYXR0ZXJuKyspIHsKICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXQo
KSk7Ci0gICAgICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJl
bkNvbnRleHQ6OnN1YnBhdHRlcm5PZmZzZXQoc3VicGF0dGVybikpLCB0ZW1wUmVnKTsKLSAgICAg
ICAgICAgICAgICBzdG9yZTY0KHRlbXBSZWcsIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8
PCAxKSAqIHNpemVvZih1bnNpZ25lZCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1
YnBhdHRlcm5PZmZzZXQoc3VicGF0dGVybikpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRw
dXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKHVuc2lnbmVkKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArPSBZYXJy
U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlczsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBmcmFtZUxvY2F0aW9uID0gc3VicGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uOyBmcmFtZUxv
Y2F0aW9uIDwgbV9wYXJlbkNvbnRleHRTaXplcy5mcmFtZVNsb3RzKCk7IGZyYW1lTG9jYXRpb24r
KykgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5D
b250ZXh0OjpzYXZlZEZyYW1lT2Zmc2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2Nh
dGlvbiAqIHNpemVvZih1aW50cHRyX3QpKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250
ZXh0OjpzYXZlZEZyYW1lT2Zmc2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlv
biAqIHNpemVvZih1aW50cHRyX3QpKSwgdGVtcFJlZyk7CiAgICAgICAgICAgICBzdG9yZVRvRnJh
bWUodGVtcFJlZywgZnJhbWVMb2NhdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC00ODcsNyAr
MzgzLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgdm9pZCBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoUmVnaXN0ZXJJ
RCBjaGFyYWN0ZXIsIEp1bXBMaXN0JiBmYWlsdXJlcywgSnVtcExpc3QmIG1hdGNoRGVzdCwgY29u
c3QgQ2hhcmFjdGVyUmFuZ2UqIHJhbmdlcywgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkKiBtYXRj
aEluZGV4LCBjb25zdCBVQ2hhcjMyKiBtYXRjaGVzLCB1bnNpZ25lZCBtYXRjaENvdW50KQorICAg
IHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlcywgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdlKiByYW5nZXMs
IHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNoYXIzMiogbWF0
Y2hlcywgdW5zaWduZWQgbWF0Y2hDb3VudCkKICAgICB7CiAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgIC8vIHBpY2sgd2hpY2ggcmFuZ2Ugd2UncmUgZ29pbmcgdG8gZ2VuZXJhdGUKQEAgLTQ5OCwz
MyArMzk0LDMzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcmFuZ2VzIG9yIG1hdGNoZXMgYmVs
b3cgbG8uICBJZiBub3QsIGp1c3QgamwgdG8gZmFpbHVyZSAtCiAgICAgICAgICAgICAvLyBpZiB0
aGVyZSBpcyBhbnl0aGluZyBlbHNlIHRvIGNoZWNrLCBjaGVjayB0aGF0IGZpcnN0LCBpZiBpdCBm
YWxscyB0aHJvdWdoIGptcCB0byBmYWlsdXJlLgogICAgICAgICAgICAgaWYgKCgqbWF0Y2hJbmRl
eCA8IG1hdGNoQ291bnQpICYmIChtYXRjaGVzWyptYXRjaEluZGV4XSA8IGxvKSkgewotICAgICAg
ICAgICAgICAgIEp1bXAgbG9PckFib3ZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGxvT3JBYm92ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KCh1bnNpZ25lZCBzaG9ydClsbykpOwogCiAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgY29k
ZSBmb3IgYWxsIHJhbmdlcyBiZWZvcmUgdGhpcyBvbmUKICAgICAgICAgICAgICAgICBpZiAod2hp
Y2gpCiAgICAgICAgICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0
ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgsIG1hdGNo
ZXMsIG1hdGNoQ291bnQpOwogCiAgICAgICAgICAgICAgICAgd2hpbGUgKCgqbWF0Y2hJbmRleCA8
IG1hdGNoQ291bnQpICYmIChtYXRjaGVzWyptYXRjaEluZGV4XSA8IGxvKSkgewotICAgICAgICAg
ICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIElt
bTMyKCh1bnNpZ25lZCBzaG9ydCltYXRjaGVzWyptYXRjaEluZGV4XSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydClt
YXRjaGVzWyptYXRjaEluZGV4XSkpKTsKICAgICAgICAgICAgICAgICAgICAgKysqbWF0Y2hJbmRl
eDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAK
LSAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBs
b09yQWJvdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfSBlbHNlIGlmICh3aGljaCkgewot
ICAgICAgICAgICAgICAgIEp1bXAgbG9PckFib3ZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxvT3JBYm92ZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKCh1bnNpZ25lZCBzaG9ydClsbykpOwogCiAgICAgICAgICAgICAgICAgbWF0Y2hDaGFy
YWN0ZXJDbGFzc1JhbmdlKGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgcmFuZ2VzLCB3
aGljaCwgbWF0Y2hJbmRleCwgbWF0Y2hlcywgbWF0Y2hDb3VudCk7Ci0gICAgICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuLCBj
aGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydClsbykpKTsKKyAgICAgICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbG8pKSk7CiAK
ICAgICAgICAgICAgIHdoaWxlICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAobWF0Y2hl
c1sqbWF0Y2hJbmRleF0gPD0gaGkpKQogICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAK
LSAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydCloaSkpKTsKKyAgICAgICAgICAgIG1hdGNo
RGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVh
bCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWhpKSkp
OwogICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoIHRvIGhlcmUsIHRoZSB2YWx1ZSBpcyBhYm92
ZSBoaS4KIAogICAgICAgICAgICAgLy8gc2h1ZmZsZSBhbG9uZyAmIGxvb3AgYXJvdW5kIGlmIHRo
ZXJlIGFyZSBhbnkgbW9yZSBtYXRjaGVzIHRvIGhhbmRsZS4KQEAgLTUzNCwyNCArNDMwLDI0IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfSB3aGls
ZSAoY291bnQpOwogICAgIH0KIAotICAgIHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhSZWdpc3Rl
cklEIGNoYXJhY3RlciwgSnVtcExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVyQ2xhc3Mq
IGNoYXJDbGFzcykKKyAgICB2b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoRGVz
dCwgY29uc3QgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJDbGFzcykKICAgICB7CiAgICAgICAgIGlmIChj
aGFyQ2xhc3MtPm1fdGFibGUgJiYgIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAg
ICAgIEV4dGVuZGVkQWRkcmVzcyB0YWJsZUVudHJ5KGNoYXJhY3RlciwgcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oY2hhckNsYXNzLT5tX3RhYmxlKSk7Ci0gICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKGJyYW5jaFRlc3Q4KGNoYXJDbGFzcy0+bV90YWJsZUludmVydGVkID8gWmVybyA6IE5v
blplcm8sIHRhYmxlRW50cnkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRl
ZEFkZHJlc3MgdGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGNoYXJDbGFzcy0+bV90YWJsZSkpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0OChjaGFyQ2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IE1hY3JvQXNzZW1ibGVy
OjpaZXJvIDogTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRhYmxlRW50cnkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIEp1bXBMaXN0IHVuaWNvZGVGYWlsOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgdW5pY29kZUZhaWw7CiAgICAgICAgIGlm
IChjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJDbGFzcy0+bV9yYW5n
ZXNVbmljb2RlLnNpemUoKSkgewotICAgICAgICAgICAgSnVtcExpc3QgaXNBc2NpaTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBpc0FzY2lpOwogICAgICAgICAgICAgaWYg
KGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUo
KSkKLSAgICAgICAgICAgICAgICBpc0FzY2lpLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTMyKDB4N2YpKSk7CisgICAgICAgICAgICAgICAgaXNB
c2NpaS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVh
bCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4N2YpKSk7CiAKICAg
ICAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJDbGFzcy0+bV9tYXRjaGVz
VW5pY29kZS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNoID0g
Y2hhckNsYXNzLT5tX21hdGNoZXNVbmljb2RlW2ldOwotICAgICAgICAgICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoKSkpOworICAg
ICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2gpKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01NjAsMjUgKzQ1NiwyNSBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAg
ICAgIFVDaGFyMzIgbG8gPSBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5iZWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgVUNoYXIzMiBoaSA9IGNoYXJDbGFzcy0+bV9yYW5nZXNVbmljb2Rl
W2ldLmVuZDsKIAotICAgICAgICAgICAgICAgICAgICBKdW1wIGJlbG93ID0gYnJhbmNoMzIoTGVz
c1RoYW4sIGNoYXJhY3RlciwgSW1tMzIobG8pKTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoaGkp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJlbG93LmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJlbG93ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihsbykp
OworICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKGhpKSkpOworICAgICAgICAgICAgICAgICAgICBiZWxvdy5saW5rKCZtX2ppdCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY2hhckNs
YXNzLT5tX21hdGNoZXMuc2l6ZSgpIHx8IGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgIHVuaWNvZGVGYWlsID0ganVtcCgpOwotICAgICAgICAgICAgaXNBc2NpaS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIHVuaWNvZGVGYWlsID0gbV9qaXQuanVtcCgpOwor
ICAgICAgICAgICAgaXNBc2NpaS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1h
dGNoSW5kZXggPSAwOwotICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICBtYXRjaENo
YXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xh
c3MtPm1fcmFuZ2VzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJ
bmRleCwgY2hhckNsYXNzLT5tX21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX21hdGNoZXMu
c2l6ZSgpKTsKICAgICAgICAgICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21h
dGNoZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIo
RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRj
aGVzW21hdGNoSW5kZXgrK10pKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaElu
ZGV4KytdKSkpOwogCi0gICAgICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAg
ICAgZmFpbHVyZXMubGluaygmbV9qaXQpOwogICAgICAgICB9IGVsc2UgaWYgKGNoYXJDbGFzcy0+
bV9tYXRjaGVzLnNpemUoKSkgewogICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uOiBnYXRoZXIg
J2EnLCdBJyBldGMgYmFjayB0b2dldGhlciwgY2FuIG1hc2sgJiB0ZXN0IG9uY2UuCiAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gbWF0Y2hlc0FaYXo7CkBAIC01OTMsNzggKzQ4OSw4MyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAg
IGlmIChpc0FTQ0lJVXBwZXIoY2gpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOworICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hv
cnQpY2gpKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1bnNpZ25lZCBjb3Vu
dEFaYXogPSBtYXRjaGVzQVphei5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBvcjMyKFRydXN0
ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnRBWmF6OyArK2kpCi0gICAgICAgICAgICAg
ICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgVHJ1c3Rl
ZEltbTMyKG1hdGNoZXNBWmF6W2ldKSkpOworICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVyLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1hdGNoZXNBWmF6W2ldKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzVW5pY29k
ZS5zaXplKCkgfHwgY2hhckNsYXNzLT5tX3Jhbmdlc1VuaWNvZGUuc2l6ZSgpKQotICAgICAgICAg
ICAgdW5pY29kZUZhaWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxpbmso
Jm1faml0KTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9O
UykKLSAgICB2b2lkIGFkdmFuY2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJtTWF0Y2goY29u
c3QgUGF0dGVyblRlcm0qIHRlcm0sIEp1bXBMaXN0JiBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5n
SW5kZXgsIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyKQorICAgIHZvaWQgYWR2YW5jZUluZGV4
QWZ0ZXJDaGFyYWN0ZXJDbGFzc1Rlcm1NYXRjaChjb25zdCBQYXR0ZXJuVGVybSogdGVybSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5nSW5kZXgsIGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlcikKICAgICB7CiAgICAgICAg
IEFTU0VSVCh0ZXJtLT50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlOjpDaGFyYWN0ZXJDbGFzcyk7
CiAKICAgICAgICAgaWYgKHRlcm0tPmlzRml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJN
UENoYXJhY3RlcnMoKSA/IDIgOiAxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9u
Qk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAg
SnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAg
ICAgICBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5nSW5kZXguYXBwZW5kKGF0RW5kT2ZJbnB1dCgp
KTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAg
ICAgaXNCTVBDaGFyLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgaXNC
TVBDaGFyLmxpbmsoJm1faml0KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8g
SnVtcHMgaWYgaW5wdXQgbm90IGF2YWlsYWJsZTsgd2lsbCBoYXZlIChpbmNvcnJlY3RseSkgaW5j
cmVtZW50ZWQgYWxyZWFkeSEKLSAgICBKdW1wIGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQodW5zaWdu
ZWQgY291bnRUb0NoZWNrID0gMCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb0F2
YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9IDApCiAgICAgewogICAgICAgICBp
ZiAoY291bnRUb0NoZWNrKQotICAgICAgICAgICAgYWRkMzIoSW1tMzIoY291bnRUb0NoZWNrKSwg
aW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmUsIGluZGV4LCBsZW5ndGgpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvdW50VG9DaGVj
ayksIG1fcmVncy5pbmRleCk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmUsIG1fcmVncy5pbmRleCwgbV9yZWdzLmxlbmd0aCk7CisgICAgfQorCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcElmQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291
bnRUb0NoZWNrKQorICAgIHsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKGNvdW50VG9DaGVjayksIG1fcmVncy5pbmRleCk7CisgICAgICAgIHJldHVybiBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVn
cy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAganVtcElmQXZhaWxhYmxlSW5wdXQodW5zaWdu
ZWQgY291bnRUb0NoZWNrKQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrTm90RW5vdWdo
SW5wdXQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYWRkaXRpb25hbEFtb3VudCkKICAgICB7
Ci0gICAgICAgIGFkZDMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgaW5kZXgsIGxlbmd0aCk7CisgICAgICAgIG1faml0
LmFkZDMyKG1fcmVncy5pbmRleCwgYWRkaXRpb25hbEFtb3VudCk7CisgICAgICAgIHJldHVybiBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIG1f
cmVncy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgY2hlY2tOb3RFbm91Z2hJbnB1dChSZWdp
c3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2tJ
bnB1dCgpCiAgICAgewotICAgICAgICBhZGQzMihpbmRleCwgYWRkaXRpb25hbEFtb3VudCk7Ci0g
ICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgYWRkaXRpb25hbEFtb3VudCwgbGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1
YWwsIG1fcmVncy5pbmRleCwgbV9yZWdzLmxlbmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBjaGVj
a0lucHV0KCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhdEVuZE9mSW5wdXQoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgaW5kZXgsIGxlbmd0aCk7Cisg
ICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVn
cy5pbmRleCwgbV9yZWdzLmxlbmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBhdEVuZE9mSW5wdXQo
KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1
cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MuaW5kZXgs
IG1fcmVncy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgbm90QXRFbmRPZklucHV0KCkKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mo
Q2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIHRlbXBSZWcpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90
RXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbmVnYXRpdmVPZmZzZXRJbmRl
eGVkQWRkcmVzcyhuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgdGVtcFJlZywgbV9yZWdzLmluZGV4
KTsKICAgICB9CiAKLSAgICBCYXNlSW5kZXggbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhD
aGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgUmVnaXN0ZXJJRCB0ZW1w
UmVnLCBSZWdpc3RlcklEIGluZGV4UmVnID0gaW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+IG5l
Z2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1wUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFJlZykKICAgICB7Ci0gICAgICAgIFJl
Z2lzdGVySUQgYmFzZSA9IGlucHV0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBiYXNlID0gbV9yZWdzLmlucHV0OwogCi0gICAgICAgIC8vIEJhc2VJbmRleCgpIGFkZHJlc3Np
bmcgY2FuIHRha2UgYSBpbnQzMl90IG9mZnNldC4gR2l2ZW4gdGhhdCB3ZSBjYW4gaGF2ZSBhIHJl
Z3VsYXIKLSAgICAgICAgLy8gZXhwcmVzc2lvbiB0aGF0IGhhcyB1bnNpZ25lZCBjaGFyYWN0ZXIg
b2Zmc2V0cywgQmFzZUluZGV4J3Mgc2lnbmVkIG9mZnNldCBpcyBpbnN1ZmZpY2llbnQKKyAgICAg
ICAgLy8gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgpIGFkZHJlc3NpbmcgY2FuIHRha2UgYSBp
bnQzMl90IG9mZnNldC4gR2l2ZW4gdGhhdCB3ZSBjYW4gaGF2ZSBhIHJlZ3VsYXIKKyAgICAgICAg
Ly8gZXhwcmVzc2lvbiB0aGF0IGhhcyB1bnNpZ25lZCBjaGFyYWN0ZXIgb2Zmc2V0cywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCdzIHNpZ25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CiAgICAg
ICAgIC8vIGZvciBhZGRyZXNzaW5nIGluIGV4dHJlbWUgY2FzZXMgd2hlcmUgd2UgbWlnaHQgdW5k
ZXJmbG93LiBUaGVyZWZvcmUgd2UgY2hlY2sgdG8gc2VlIGlmCiAgICAgICAgIC8vIG5lZ2F0aXZl
Q2hhcmFjdGVyT2Zmc2V0IHdpbGwgdW5kZXJmbG93IGRpcmVjdGx5IG9yIGFmdGVyIGNvbnZlcnRp
bmcgZm9yIDE2IGJpdCBjaGFyYWN0ZXJzLgogICAgICAgICAvLyBJZiBzbywgd2UgZG8gb3VyIG93
biBhZGRyZXNzIGNhbGN1bGF0aW5nIGJ5IGFkanVzdGluZyB0aGUgYmFzZSwgdXNpbmcgdGhlIHJl
c3VsdCByZWdpc3RlcgpAQCAtNjczLDExICs1NzQsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB1bnNpZ25lZCBvZmZzZXRBZGp1c3RBbW91bnQg
PSAweDQwMDAwMDAwOwogICAgICAgICBpZiAobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgPiBtYXhp
bXVtTmVnYXRpdmVPZmZzZXRGb3JDaGFyYWN0ZXJTaXplKSB7CiAgICAgICAgICAgICBiYXNlID0g
dGVtcFJlZzsKLSAgICAgICAgICAgIG1vdmUoaW5wdXQsIGJhc2UpOworICAgICAgICAgICAgbV9q
aXQubW92ZShtX3JlZ3MuaW5wdXQsIGJhc2UpOwogICAgICAgICAgICAgd2hpbGUgKG5lZ2F0aXZl
Q2hhcmFjdGVyT2Zmc2V0ID4gbWF4aW11bU5lZ2F0aXZlT2Zmc2V0Rm9yQ2hhcmFjdGVyU2l6ZSkg
ewotICAgICAgICAgICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50
KSwgYmFzZSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwgYmFzZSk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fY2hhclNpemUgIT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgICAgICAgICBz
dWJQdHIoVHJ1c3RlZEltbTMyKG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihvZmZz
ZXRBZGp1c3RBbW91bnQpLCBiYXNlKTsKICAgICAgICAgICAgICAgICBuZWdhdGl2ZUNoYXJhY3Rl
ck9mZnNldCAtPSBvZmZzZXRBZGp1c3RBbW91bnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTY4NSw2NyArNTg2LDcyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgQ2hlY2tlZDxpbnQzMl90PiBjaGFyYWN0ZXJPZmZzZXQoLXN0YXRpY19j
YXN0PGludDMyX3Q+KG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0KSk7CiAKICAgICAgICAgaWYgKG1f
Y2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRl
eChpbnB1dCwgaW5kZXhSZWcsIFRpbWVzT25lLCBjaGFyYWN0ZXJPZmZzZXQgKiBzdGF0aWNfY2Fz
dDxpbnQzMl90PihzaXplb2YoY2hhcikpKTsKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KG1fcmVncy5pbnB1dCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc09uZSwgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGNo
YXIpKSk7CiAKLSAgICAgICAgcmV0dXJuIEJhc2VJbmRleChpbnB1dCwgaW5kZXhSZWcsIFRpbWVz
VHdvLCBjaGFyYWN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoVUNoYXIp
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5pbnB1
dCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgY2hhcmFjdGVyT2Zmc2V0ICog
c3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKFVDaGFyKSkpOwogICAgIH0KIAogI2lmIEVOQUJM
RShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQotICAgIHZvaWQgdHJ5UmVhZFVuaWNvZGVD
aGFySW1wbChSZWdpc3RlcklEIHJlc3VsdFJlZykKKyAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hh
ckltcGwoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXIxNik7CiAKLSAgICAgICAgSnVt
cExpc3Qgbm90VW5pY29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vdFVu
aWNvZGU7CiAKLSAgICAgICAgbG9hZDE2VW5hbGlnbmVkKHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWls
LCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQobV9yZWdzLnJlZ1Vu
aWNvZGVJbnB1dEFuZFRyYWlsLCByZXN1bHRSZWcpOwogCiAgICAgICAgIC8vIElzIHRoZSBjaGFy
YWN0ZXIgYSBsZWFkaW5nIHN1cnJvZ2F0ZT8KLSAgICAgICAgYW5kMzIoc3Vycm9nYXRlVGFnTWFz
aywgcmVzdWx0UmVnLCB1bmljb2RlVGVtcCk7Ci0gICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCB1bmljb2RlVGVtcCwgbGVhZGluZ1N1cnJvZ2F0ZVRhZykpOworICAg
ICAgICBtX2ppdC5hbmQzMihZYXJySklURGVmYXVsdFJlZ2lzdGVyczo6c3Vycm9nYXRlVGFnTWFz
aywgcmVzdWx0UmVnLCBtX3JlZ3MudW5pY29kZVRlbXApOworICAgICAgICBub3RVbmljb2RlLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy51bmlj
b2RlVGVtcCwgbV9yZWdzLmxlYWRpbmdTdXJyb2dhdGVUYWcpKTsKIAogICAgICAgICAvLyBJcyB0
aGUgaW5wdXQgbG9uZyBlbm91Z2ggdG8gcmVhZCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZT8KLSAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigyKSwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwotICAg
ICAgICBub3RVbmljb2RlLmFwcGVuZChicmFuY2hQdHIoQWJvdmVPckVxdWFsLCByZWdVbmljb2Rl
SW5wdXRBbmRUcmFpbCwgZW5kT2ZTdHJpbmdBZGRyZXNzKSk7CisgICAgICAgIG1faml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDIpLCBtX3JlZ3MucmVnVW5pY29kZUlucHV0
QW5kVHJhaWwpOworICAgICAgICBub3RVbmljb2RlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWls
LCBtX3JlZ3MuZW5kT2ZTdHJpbmdBZGRyZXNzKSk7CiAKICAgICAgICAgLy8gSXMgdGhlIGNoYXJh
Y3RlciBhIHRyYWlsaW5nIHN1cnJvZ2F0ZT8KLSAgICAgICAgbG9hZDE2VW5hbGlnbmVkKEFkZHJl
c3MocmVnVW5pY29kZUlucHV0QW5kVHJhaWwpLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7Ci0g
ICAgICAgIGFuZDMyKHN1cnJvZ2F0ZVRhZ01hc2ssIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCB1
bmljb2RlVGVtcCk7Ci0gICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCB1bmljb2RlVGVtcCwgdHJhaWxpbmdTdXJyb2dhdGVUYWcpKTsKKyAgICAgICAgbV9qaXQubG9h
ZDE2VW5hbGlnbmVkKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5yZWdVbmljb2RlSW5w
dXRBbmRUcmFpbCksIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG1f
aml0LmFuZDMyKFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzOjpzdXJyb2dhdGVUYWdNYXNrLCBtX3Jl
Z3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIG1fcmVncy51bmljb2RlVGVtcCk7CisgICAgICAg
IG5vdFVuaWNvZGUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgbV9yZWdzLnVuaWNvZGVUZW1wLCBtX3JlZ3MudHJhaWxpbmdTdXJyb2dhdGVUYWcpKTsKIAog
ICAgICAgICAvLyBDb21iaW5lIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHN1cnJvZ2F0ZXMgdG8gcHJv
ZHVjZSBhIGNvZGUgcG9pbnQuCi0gICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMigxMCksIHJl
c3VsdFJlZyk7Ci0gICAgICAgIGdldEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KHJlc3VsdFJl
ZywgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIFRpbWVzT25lLCAtVTE2X1NVUlJPR0FURV9PRkZT
RVQpLCByZXN1bHRSZWcpOwotICAgICAgICBub3RVbmljb2RlLmxpbmsodGhpcyk7CisgICAgICAg
IG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTApLCByZXN1bHRS
ZWcpOworICAgICAgICBtX2ppdC5nZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgocmVzdWx0UmVnLCBtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc09uZSwgLVUxNl9TVVJST0dBVEVfT0ZGU0VUKSwgcmVzdWx0UmVnKTsK
KyAgICAgICAgbm90VW5pY29kZS5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCB0cnlS
ZWFkVW5pY29kZUNoYXIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0UmVnKQor
ICAgIHZvaWQgdHJ5UmVhZFVuaWNvZGVDaGFyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYWRk
cmVzcywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXIxNik7CiAKLSAgICAgICAgZ2V0
RWZmZWN0aXZlQWRkcmVzcyhhZGRyZXNzLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAg
ICAgIG1faml0LmdldEVmZmVjdGl2ZUFkZHJlc3MoYWRkcmVzcywgbV9yZWdzLnJlZ1VuaWNvZGVJ
bnB1dEFuZFRyYWlsKTsKIAotICAgICAgICBpZiAocmVzdWx0UmVnID09IHJlZ1QwKQotICAgICAg
ICAgICAgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzLmFwcGVuZChuZWFyQ2FsbCgpKTsK
KyAgICAgICAgaWYgKHJlc3VsdFJlZyA9PSBtX3JlZ3MucmVnVDApCisgICAgICAgICAgICBtX3Ry
eVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuYXBwZW5kKG1faml0Lm5lYXJDYWxsKCkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKHJlc3VsdFJlZyk7
CiAgICAgfQogI2VuZGlmCiAgICAgCi0gICAgdm9pZCByZWFkQ2hhcmFjdGVyKENoZWNrZWQ8dW5z
aWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBSZWdpc3RlcklEIHJlc3VsdFJlZywgUmVn
aXN0ZXJJRCBpbmRleFJlZyA9IGluZGV4KQorICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2Vk
PHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmVzdWx0UmVnKQogICAgIHsKLSAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBuZWdh
dGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRS
ZWcsIGluZGV4UmVnKTsKKyAgICAgICAgcmVhZENoYXJhY3RlcihuZWdhdGl2ZUNoYXJhY3Rlck9m
ZnNldCwgcmVzdWx0UmVnLCBtX3JlZ3MuaW5kZXgpOworICAgIH0KKworICAgIHZvaWQgcmVhZENo
YXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBpbmRleFJlZykKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYWRk
cmVzcyA9IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRpdmVDaGFyYWN0ZXJPZmZz
ZXQsIHJlc3VsdFJlZywgaW5kZXhSZWcpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENo
YXJTaXplOjpDaGFyOCkKLSAgICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIHJlc3VsdFJlZyk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkOChhZGRyZXNzLCByZXN1bHRSZWcpOwogI2lmIEVOQUJMRShZ
QVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBlbHNlIGlmIChtX2RlY29kZVN1
cnJvZ2F0ZVBhaXJzKQogICAgICAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFyKGFkZHJlc3MsIHJl
c3VsdFJlZyk7CiAjZW5kaWYKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDE2VW5hbGln
bmVkKGFkZHJlc3MsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMTZVbmFsaWdu
ZWQoYWRkcmVzcywgcmVzdWx0UmVnKTsKICAgICB9CiAKLSAgICBKdW1wIGp1bXBJZkNoYXJOb3RF
cXVhbHMoVUNoYXIzMiBjaCwgQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZz
ZXQsIFJlZ2lzdGVySUQgY2hhcmFjdGVyKQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBJ
ZkNoYXJOb3RFcXVhbHMoVUNoYXIzMiBjaCwgQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFy
YWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlcikKICAgICB7
CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rl
cik7CiAKQEAgLTc1Myw0MyArNjU5LDQzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgLy8gdXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9u
cyBhcmUgY29udmVydGVkIHRvIGEgY2hhcmFjdGVyIGNsYXNzLgogICAgICAgICBBU1NFUlQoIW1f
cGF0dGVybi5pZ25vcmVDYXNlKCkgfHwgaXNBU0NJSUFscGhhKGNoKSB8fCBpc0Nhbm9uaWNhbGx5
VW5pcXVlKGNoLCBtX2Nhbm9uaWNhbE1vZGUpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25v
cmVDYXNlKCkgJiYgaXNBU0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAgb3IzMihUcnVzdGVk
SW1tMzIoMHgyMCksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgyMCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjaCB8
PSAweDIwOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKGNoKSk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNo
KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFJlZ2lzdGVySUQgcmVnLCB1
bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQorICAgIHZvaWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAg
ICAgIHBva2UocmVnLCBmcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgbV9qaXQucG9rZShyZWcsIGZy
YW1lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0z
MiBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisgICAgdm9pZCBzdG9yZVRvRnJhbWUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAg
ICAgewotICAgICAgICBwb2tlKGltbSwgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0LnBv
a2UoaW1tLCBmcmFtZUxvY2F0aW9uKTsKICAgICB9CiAKICNpZiBDUFUoQVJNNjQpIHx8IENQVShY
ODZfNjQpCi0gICAgdm9pZCBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbVB0ciBpbW0sIHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24pCisgICAgdm9pZCBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIgaW1tLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAg
cG9rZShpbW0sIGZyYW1lTG9jYXRpb24pOworICAgICAgICBtX2ppdC5wb2tlKGltbSwgZnJhbWVM
b2NhdGlvbik7CiAgICAgfQogI2VuZGlmCiAKLSAgICBEYXRhTGFiZWxQdHIgc3RvcmVUb0ZyYW1l
V2l0aFBhdGNoKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbFB0ciBzdG9yZVRvRnJhbWVXaXRoUGF0Y2godW5zaWduZWQgZnJhbWVMb2NhdGlvbikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6
ZW9mKHZvaWQqKSkpOworICAgICAgICByZXR1cm4gbV9qaXQuc3RvcmVQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAq
IHNpemVvZih2b2lkKikpKTsKICAgICB9CiAKLSAgICB2b2lkIGxvYWRGcm9tRnJhbWUodW5zaWdu
ZWQgZnJhbWVMb2NhdGlvbiwgUmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBsb2FkRnJvbUZyYW1l
KHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZykK
ICAgICB7Ci0gICAgICAgIHBlZWsocmVnLCBmcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgbV9qaXQu
cGVlayhyZWcsIGZyYW1lTG9jYXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgbG9hZEZyb21GcmFt
ZUFuZEp1bXAodW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIGZhckp1bXAo
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lk
KikpLCBZYXJyQmFja3RyYWNrUHRyVGFnKTsKKyAgICAgICAgbV9qaXQuZmFySnVtcChNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZy
YW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSwgWWFyckJhY2t0cmFja1B0clRhZyk7CiAgICAg
fQogCiAgICAgdW5zaWduZWQgYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyh1bnNpZ25lZCBjYWxs
RnJhbWVTaXplKQpAQCAtODA3LDEzICs3MTMsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgIHsKICAgICAgICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUlu
Qnl0ZXMgPSBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2Fs
bEZyYW1lU2l6ZSk7CiAgICAgICAgIGlmIChjYWxsRnJhbWVTaXplSW5CeXRlcykKLSAgICAgICAg
ICAgIGFkZFB0cihJbW0zMihjYWxsRnJhbWVTaXplSW5CeXRlcyksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2Fs
bEZyYW1lU2l6ZUluQnl0ZXMpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVGYWlsUmV0dXJuKCkKICAgICB7Ci0gICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopV1RGOjpub3RGb3VuZCksIHJldHVyblJlZ2lzdGVy
KTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKVdURjo6
bm90Rm91bmQpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOwor
CisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKyAgICAgICAgaWYgKG1f
Y29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OklubGluZVRlc3QpIHsKKyAgICAgICAgICAg
IG1faW5saW5lZEZhaWxlZE1hdGNoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBnZW5lcmF0ZVJldHVybigpOwog
ICAgIH0KIApAQCAtODIyLDQ4ICs3MzYsNDIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICBpZiAobV9hYm9ydEV4ZWN1dGlvbi5lbXB0eSgpICYmIG1f
aGl0TWF0Y2hMaW1pdC5lbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEp1
bXBMaXN0IGZpbmlzaEV4aXRpbmc7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
aW5pc2hFeGl0aW5nOwogICAgICAgICBpZiAoIW1fYWJvcnRFeGVjdXRpb24uZW1wdHkoKSkgewot
ICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5saW5rKHRoaXMpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSksIHJldHVyblJl
Z2lzdGVyKTsKLSAgICAgICAgICAgIGZpbmlzaEV4aXRpbmcuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNp
emVfdD4oLTIpKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZpbmlzaEV4
aXRpbmcuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1f
aGl0TWF0Y2hMaW1pdC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2hpdE1hdGNoTGltaXQubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nh
c3Q8c2l6ZV90PigtMSkpLCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBtX2hpdE1hdGNo
TGltaXQubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpLCBtX3JlZ3Mu
cmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgZmluaXNoRXhpdGluZy5saW5r
KHRoaXMpOworICAgICAgICBmaW5pc2hFeGl0aW5nLmxpbmsoJm1faml0KTsKICAgICAgICAgcmVt
b3ZlQ2FsbEZyYW1lKCk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdp
c3RlcjIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCksIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOwogICAgICAgICBnZW5lcmF0ZVJldHVybigpOwog
ICAgIH0KIAogICAgIC8vIFVzZWQgdG8gcmVjb3JkIHN1YnBhdHRlcm5zLCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgaWYgbV9jb21waWxlTW9kZSBpcyBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBh
dHRlcm5zLgotICAgIHZvaWQgc2V0U3VicGF0dGVyblN0YXJ0KFJlZ2lzdGVySUQgcmVnLCB1bnNp
Z25lZCBzdWJwYXR0ZXJuKQorICAgIHZvaWQgc2V0U3VicGF0dGVyblN0YXJ0KE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVybikKICAgICB7CiAgICAgICAg
IEFTU0VSVChzdWJwYXR0ZXJuKTsKICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhYmxlIHRv
IEFTU0VSVChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVy
bnMpLCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgTk9SRVRVUk4uIDot
KAotICAgICAgICBzdG9yZTMyKHJlZywgQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEp
ICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihyZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKGlu
dCkpKTsKICAgICB9Ci0gICAgdm9pZCBzZXRTdWJwYXR0ZXJuRW5kKFJlZ2lzdGVySUQgcmVnLCB1
bnNpZ25lZCBzdWJwYXR0ZXJuKQorICAgIHZvaWQgc2V0U3VicGF0dGVybkVuZChNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCiAgICAgewogICAgICAg
ICBBU1NFUlQoc3VicGF0dGVybik7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0
byBBU1NFUlQobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRl
cm5zKSwgYnV0IHRoZW4gdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IE5PUkVUVVJOLiA6
LSgKLSAgICAgICAgc3RvcmUzMihyZWcsIEFkZHJlc3Mob3V0cHV0LCAoKHN1YnBhdHRlcm4gPDwg
MSkgKyAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoKHN1YnBhdHRlcm4gPDwgMSkgKyAx
KSAqIHNpemVvZihpbnQpKSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJTdWJwYXR0ZXJuU3RhcnQo
dW5zaWduZWQgc3VicGF0dGVybikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJuKTsK
ICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVNb2Rl
ID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlzIGZ1
bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVv
ZihpbnQpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhck1hdGNoZXModW5zaWduZWQgc3VicGF0
dGVybiwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4pCi0gICAgewotICAgICAgICBmb3IgKDsgc3Vi
cGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKQotICAgICAgICAgICAgY2xl
YXJTdWJwYXR0ZXJuU3RhcnQoc3VicGF0dGVybik7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
cmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9CiAK
ICAgICAvLyBXZSB1c2Ugb25lIG9mIHRocmVlIGRpZmZlcmVudCBzdHJhdGVnaWVzIHRvIHRyYWNr
IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBtYXRjaCwKQEAgLTg3MSwyNSArNzc5LDI1IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyAxKSBJZiB0aGUg
cGF0dGVybiBoYXMgYSBmaXhlZCBzaXplLCBkbyBub3RoaW5nISAtIHdlIGNhbGN1bGF0ZSB0aGUg
dmFsdWUgbGF6aWx5CiAgICAgLy8gICAgYXQgdGhlIGVuZCBvZiBtYXRjaGluZy4gVGhpcyBpcyBp
cnJlc3BlY3RpdmUgb2YgbV9jb21waWxlTW9kZSwgYW5kIGluIHRoaXMgY2FzZQogICAgIC8vICAg
IHRoZXNlIG1ldGhvZHMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4KLSAgICAvLyAyKSBJZiB3ZSdy
ZSBjb21waWxpbmcgSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucywgJ291dHB1dCcg
Y29udGFpbnMgYSBwb2ludGVyIHRvIGFuIG91dHB1dAorICAgIC8vIDIpIElmIHdlJ3JlIGNvbXBp
bGluZyBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zLCAnbV9yZWdzLm91dHB1dCcg
Y29udGFpbnMgYSBwb2ludGVyIHRvIGFuIG91dHB1dAogICAgIC8vICAgIHZlY3Rvciwgc3RvcmUg
dGhlIG1hdGNoIHN0YXJ0IGluIHRoZSBvdXRwdXQgdmVjdG9yLgotICAgIC8vIDMpIElmIHdlJ3Jl
IGNvbXBpbGluZyBNYXRjaE9ubHksICdvdXRwdXQnIGlzIHVudXNlZCwgc3RvcmUgdGhlIG1hdGNo
IHN0YXJ0IGRpcmVjdGx5CisgICAgLy8gMykgSWYgd2UncmUgY29tcGlsaW5nIE1hdGNoT25seSBv
ciBJbmxpbmVkVGVzdCwgJ21fcmVncy5vdXRwdXQnIGlzIHVudXNlZCwgc3RvcmUgdGhlIG1hdGNo
IHN0YXJ0IGRpcmVjdGx5CiAgICAgLy8gICAgaW4gdGhpcyByZWdpc3Rlci4KLSAgICB2b2lkIHNl
dE1hdGNoU3RhcnQoUmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBzZXRNYXRjaFN0YXJ0KE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0
ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9
PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgc3RvcmUz
MihyZWcsIG91dHB1dCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlZywgbV9yZWdzLm91
dHB1dCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1vdmUocmVnLCBvdXRwdXQpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgIH0KLSAgICB2b2lk
IGdldE1hdGNoU3RhcnQoUmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBnZXRNYXRjaFN0YXJ0KE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9w
YXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9k
ZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9h
ZDMyKG91dHB1dCwgcmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihtX3JlZ3Mub3V0cHV0
LCByZWcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtb3ZlKG91dHB1dCwgcmVnKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLm91dHB1dCwgcmVnKTsKICAgICB9CiAKICAgICBl
bnVtIGNsYXNzIFlhcnJPcENvZGUgOiB1aW50OF90IHsKQEAgLTk2NSwxMiArODczLDEyIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgLy8gdXNlZCBm
b3IganVtcHMgb3V0IHRvIGJhY2t0cmFja2luZyBjb2RlLCBhbmQgYSBzaW5nbGUgcmVlbnRyeSBi
YWNrCiAgICAgICAgIC8vIGludG8gdGhlIGNvZGUgZm9yIGEgbm9kZSAobGlrZWx5IHdoZXJlIGEg
YmFja3RyYWNrIHdpbGwgdHJpZ2dlcgogICAgICAgICAvLyByZW1hdGNoaW5nKS4KLSAgICAgICAg
TGFiZWwgbV9yZWVudHJ5OwotICAgICAgICBKdW1wTGlzdCBtX2p1bXBzOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9yZWVudHJ5OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgbV9qdW1wczsKIAogICAgICAgICAvLyBVc2VkIGZvciBiYWNrdHJhY2tpbmcgd2hlbiB0
aGUgcHJpb3IgYWx0ZXJuYXRpdmUgZGlkIG5vdCBjb25zdW1lIGFueQogICAgICAgICAvLyBjaGFy
YWN0ZXJzIGJ1dCBtYXRjaGVkLgotICAgICAgICBKdW1wIG1femVyb0xlbmd0aE1hdGNoOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKIAogICAgICAgICAv
LyBUaGlzIGZsYWcgaXMgdXNlZCB0byBudWxsIG91dCB0aGUgc2Vjb25kIHBhdHRlcm4gY2hhcmFj
dGVyLCB3aGVuCiAgICAgICAgIC8vIHR3byBhcmUgZnVzZWQgdG8gbWF0Y2ggYSBwYWlyIHRvZ2V0
aGVyLgpAQCAtOTg0LDcgKzg5Miw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgLy8gVXNlZCBieSBZYXJyT3BDb2RlOjpOZXN0ZWRBbHRlcm5hdGl2
ZU5leHQvRW5kIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlCiAgICAgICAgIC8vIHZhbHVlIHRo
YXQgd2lsbCBiZSBwdXNoZWQgaW50byB0aGUgcGF0dGVybidzIGZyYW1lIHRvIHJldHVybiB0bywK
ICAgICAgICAgLy8gdXBvbiBiYWNrdHJhY2tpbmcgYmFjayBpbnRvIHRoZSBkaXNqdW5jdGlvbi4K
LSAgICAgICAgRGF0YUxhYmVsUHRyIG1fcmV0dXJuQWRkcmVzczsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkRhdGFMYWJlbFB0ciBtX3JldHVybkFkZHJlc3M7CiAKICAgICAgICAgQm95ZXJNb29y
ZUluZm8qIG1fYm1JbmZvIHsgbnVsbHB0ciB9OwogICAgIH07CkBAIC0xMDA2LDcgKzkxNCwyMSBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgLy8gIC0gQSBm
bGFnIGluZGljYXRpbmcgdGhhdCB0aGUgY3VycmVudCBzZXF1ZW5jZSBvZiBnZW5lcmF0ZWQgY29k
ZSB1cCB0bwogICAgIC8vICAgIHRoaXMgcG9pbnQgcmVxdWlyZXMgYmFja3RyYWNraW5nLgogICAg
IGNsYXNzIEJhY2t0cmFja2luZ1N0YXRlIHsKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3Qg
UmV0dXJuQWRkcmVzc1JlY29yZCB7CisgICAgICAgICAgICBSZXR1cm5BZGRyZXNzUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgZGF0YUxhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgYmFja3RyYWNrTG9jYXRpb24pCisgICAgICAgICAgICAgICAgOiBtX2RhdGFMYWJlbChkYXRh
TGFiZWwpCisgICAgICAgICAgICAgICAgLCBtX2JhY2t0cmFja0xvY2F0aW9uKGJhY2t0cmFja0xv
Y2F0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fYmFja3RyYWNrTG9jYXRpb247CisgICAgICAgIH07CisKICAgICBw
dWJsaWM6CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPFJldHVybkFkZHJlc3NSZWNvcmQsIDQ+IEJh
Y2t0cmFja1JlY29yZHM7CisKICAgICAgICAgQmFja3RyYWNraW5nU3RhdGUoKQogICAgICAgICAg
ICAgOiBtX3BlbmRpbmdGYWxsdGhyb3VnaChmYWxzZSkKICAgICAgICAgewpAQCAtMTAxNCwxNSAr
OTM2LDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAg
ICAgICAvLyBBZGQgYSBqdW1wIG9yIGp1bXBzLCBhIHJldHVybiBhZGRyZXNzLCBvciBzZXQgdGhl
IGZsYWcgaW5kaWNhdGluZwogICAgICAgICAvLyB0aGF0IHRoZSBjdXJyZW50ICdmYWxsdGhyb3Vn
aCcgY29udHJvbCBmbG93IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KLSAgICAgICAgdm9pZCBhcHBl
bmQoY29uc3QgSnVtcCYganVtcCkKKyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAmIGp1bXApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJl
cy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBhcHBlbmQoSnVtcExpc3Qm
IGp1bXBMaXN0KQorICAgICAgICB2b2lkIGFwcGVuZChNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IGp1bXBMaXN0KQogICAgICAgICB7CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5k
KGp1bXBMaXN0KTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBEYXRhTGFi
ZWxQdHImIHJldHVybkFkZHJlc3MpCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxQdHImIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1fcGVuZGluZ1JldHVybnMuYXBwZW5kKHJldHVybkFkZHJlc3MpOwogICAgICAgICB9CkBA
IC0xMDM5LDcgKzk2MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgdm9pZCBsaW5rKE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgewotICAgICAgICAg
ICAgICAgIExhYmVsIGhlcmUoYXNzZW1ibGVyKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgaGVyZShhc3NlbWJsZXIpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3BlbmRpbmdSZXR1cm5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKFJldHVybkFkZHJlc3NSZWNvcmQobV9w
ZW5kaW5nUmV0dXJuc1tpXSwgaGVyZSkpOwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVy
bnMuY2xlYXIoKTsKQEAgLTEwNDgsNyArOTcwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmNsZWFyKCk7CiAg
ICAgICAgICAgICBtX3BlbmRpbmdGYWxsdGhyb3VnaCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAg
ICAgIHZvaWQgbGlua1RvKExhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQor
ICAgICAgICB2b2lkIGxpbmtUbyhNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIE1hY3JvQXNz
ZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdS
ZXR1cm5zLnNpemUoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3BlbmRpbmdSZXR1cm5zLnNpemUoKTsgKytpKQpAQCAtMTA2MSwxMCArOTgzLDEwIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIG1fbGF0
ZXJGYWlsdXJlcy5jbGVhcigpOwogICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSBm
YWxzZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChK
dW1wTGlzdCYganVtcExpc3QsIE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCisgICAgICAgIHZv
aWQgdGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cExpc3QsIE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgewotICAgICAgICAgICAgICAgIExhYmVsIGhl
cmUoYXNzZW1ibGVyKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaGVy
ZShhc3NlbWJsZXIpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3BlbmRpbmdSZXR1cm5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0
cmFja1JlY29yZHMuYXBwZW5kKFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tp
XSwgaGVyZSkpOwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVybnMuY2xlYXIoKTsKQEAg
LTEwODIsNiArMTAwNCwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICByZXR1cm4gbV9sYXRlckZhaWx1cmVzLmVtcHR5KCkgJiYgbV9wZW5k
aW5nUmV0dXJucy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ0ZhbGx0aHJvdWdoOwogICAgICAgICB9
CiAKKyAgICAgICAgQmFja3RyYWNrUmVjb3JkcyYgYmFja3RyYWNrUmVjb3JkcygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2t0cmFja1JlY29yZHM7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgdm9pZCBsaW5rQmFja3RyYWNrUmVjb3JkcyhMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBjb25zdCBCYWNrdHJhY2tSZWNvcmRzJiBiYWNrdHJhY2tSZWNvcmRzKQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFja3RyYWNrUmVjb3Jk
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGJhY2t0cmFj
a1JlY29yZHNbaV0ubV9kYXRhTGFiZWwsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxZYXJyQmFja3Ry
YWNrUHRyVGFnPihiYWNrdHJhY2tSZWNvcmRzW2ldLm1fYmFja3RyYWNrTG9jYXRpb24pKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGNvZGUgZ2VuZXJhdGlv
biB0byBsaW5rIGFsbCByZXR1cm4gYWRkcmVzc2VzLgogICAgICAgICB2b2lkIGxpbmtEYXRhTGFi
ZWxzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgICAgIHsKQEAgLTEwOTEsMjAgKzEwMjQs
OSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0K
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0cnVjdCBSZXR1cm5BZGRyZXNzUmVjb3JkIHsKLSAg
ICAgICAgICAgIFJldHVybkFkZHJlc3NSZWNvcmQoRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCwgTGFi
ZWwgYmFja3RyYWNrTG9jYXRpb24pCi0gICAgICAgICAgICAgICAgOiBtX2RhdGFMYWJlbChkYXRh
TGFiZWwpCi0gICAgICAgICAgICAgICAgLCBtX2JhY2t0cmFja0xvY2F0aW9uKGJhY2t0cmFja0xv
Y2F0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEYXRh
TGFiZWxQdHIgbV9kYXRhTGFiZWw7Ci0gICAgICAgICAgICBMYWJlbCBtX2JhY2t0cmFja0xvY2F0
aW9uOwotICAgICAgICB9OwotCi0gICAgICAgIEp1bXBMaXN0IG1fbGF0ZXJGYWlsdXJlczsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fbGF0ZXJGYWlsdXJlczsKICAgICAgICAg
Ym9vbCBtX3BlbmRpbmdGYWxsdGhyb3VnaDsKLSAgICAgICAgVmVjdG9yPERhdGFMYWJlbFB0ciwg
ND4gbV9wZW5kaW5nUmV0dXJuczsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVybnM7CiAgICAgICAgIFZlY3RvcjxSZXR1cm5BZGRy
ZXNzUmVjb3JkLCA0PiBtX2JhY2t0cmFja1JlY29yZHM7CiAgICAgfTsKIApAQCAtMTEyNywyMyAr
MTA0OSwyMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgIGlmIChtX3BhdHRl
cm4ubXVsdGlsaW5lKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVy
ID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
aGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVz
dDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAg
ICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZE9mZnNldCkp
KTsKKyAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9j
aGVja2VkT2Zmc2V0KSkpOwogCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9m
ZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAg
bWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xp
bmVDaGFyYWN0ZXJDbGFzcygpKTsKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAg
ICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5saW5r
KCZtX2ppdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBz
aG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAg
ICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOwor
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9j
aGVja2VkT2Zmc2V0KSkpOwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQXNz
ZXJ0aW9uQk9MKHNpemVfdCBvcEluZGV4KQpAQCAtMTE1NywyMyArMTA3OSwyMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0
ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgIGlmIChtX3BhdHRlcm4ubXVsdGlsaW5lKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3Mu
cmVnVDA7CiAKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgICAgICBpZiAodGVybS0+
aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWRPZmZzZXQpCiAgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIo
bV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVy
bi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
IAotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaERl
c3QubGluaygmbV9qaXQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHRlcm0t
PmlucHV0UG9zaXRpb24gPT0gbV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG5vdEF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgICAgIC8vIEVyaywgcmVh
bGx5IHNob3VsZCBwb2lzb24gb3V0IHRoZXNlIGFsdGVybmF0aXZlcyBlYXJseS4gOi0vCiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQXNzZXJ0aW9uRU9MKHNpemVfdCBvcEluZGV4
KQpAQCAtMTE4MiwxMiArMTEwNCwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgfQogCiAgICAgLy8gQWxzbyBmYWxscyB0aG91Z2ggb24gbmV4dElzTm90
V29yZENoYXIuCi0gICAgdm9pZCBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHNpemVfdCBvcEluZGV4
LCBKdW1wTGlzdCYgbmV4dElzV29yZENoYXIsIEp1bXBMaXN0JiBuZXh0SXNOb3RXb3JkQ2hhcikK
KyAgICB2b2lkIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIoc2l6ZV90IG9wSW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgbmV4dElzV29yZENoYXIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgbmV4dElzTm90V29yZENoYXIpCiAgICAgewogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNb
b3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAogICAg
ICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWRPZmZzZXQpCiAgICAgICAg
ICAgICBuZXh0SXNOb3RXb3JkQ2hhci5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwpAQCAtMTIwOSwx
MiArMTEzMSwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0q
IHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSByZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gbV9yZWdzLnJlZ1QwOwogCi0gICAgICAgIEp1bXAgYXRCZWdpbjsKLSAgICAgICAgSnVt
cExpc3QgbWF0Y2hEZXN0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhdEJlZ2luOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICBpZiAo
IXRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICBhdEJlZ2luID0gYnJhbmNoMzIoRXF1
YWwsIGluZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQpKTsKKyAgICAgICAgICAgIGF0QmVnaW4g
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpOwogICAgICAgICByZWFkQ2hhcmFj
dGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIp
OwogCiAgICAgICAgIENoYXJhY3RlckNsYXNzKiB3b3JkY2hhckNoYXJhY3RlckNsYXNzOwpAQCAt
MTIyNiwyNyArMTE0OCwyNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwg
d29yZGNoYXJDaGFyYWN0ZXJDbGFzcyk7CiAgICAgICAgIGlmICghdGVybS0+aW5wdXRQb3NpdGlv
bikKLSAgICAgICAgICAgIGF0QmVnaW4ubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF0QmVnaW4u
bGluaygmbV9qaXQpOwogCiAgICAgICAgIC8vIFdlIGZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHRo
ZSBsYXN0IGNoYXJhY3RlciB3YXMgbm90IGEgd29yZGNoYXIuCi0gICAgICAgIEp1bXBMaXN0IG5v
bldvcmRDaGFyVGhlbldvcmRDaGFyOwotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5O
b25Xb3JkQ2hhcjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFy
VGhlbldvcmRDaGFyOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uV29yZENo
YXJUaGVuTm9uV29yZENoYXI7CiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgewogICAgICAg
ICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihvcEluZGV4LCBub25Xb3JkQ2hhclRoZW5Ob25X
b3JkQ2hhciwgbm9uV29yZENoYXJUaGVuV29yZENoYXIpOwotICAgICAgICAgICAgbm9uV29yZENo
YXJUaGVuV29yZENoYXIuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBub25Xb3JkQ2hhclRo
ZW5Xb3JkQ2hhci5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIob3BJbmRleCwgbm9uV29yZENoYXJUaGVuV29y
ZENoYXIsIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRD
aGFyVGhlbk5vbldvcmRDaGFyLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbm9uV29yZENo
YXJUaGVuTm9uV29yZENoYXIuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQobm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogCiAgICAg
ICAgIC8vIFdlIGp1bXAgaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIGEgd29yZGNoYXIu
Ci0gICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCB3b3JkQ2hh
clRoZW5Xb3JkQ2hhcjsKLSAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuTm9uV29yZENoYXI7
CisgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyOwogICAgICAgICBpZiAodGVybS0+aW52
ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIob3BJbmRleCwgd29y
ZENoYXJUaGVuTm9uV29yZENoYXIsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKLSAgICAgICAgICAg
IHdvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgd29yZENo
YXJUaGVuV29yZENoYXIuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbldv
cmRDaGFyLCB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcik7CiAgICAgICAgICAgICAvLyBUaGlzIGNh
biBmYWxsLXRob3VnaCEKQEAgLTEyNTQsOCArMTE3Niw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZCh3b3JkQ2hh
clRoZW5Xb3JkQ2hhcik7CiAKLSAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIubGluayh0
aGlzKTsKLSAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIubGluayh0aGlzKTsKKyAgICAg
ICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIubGluaygmbV9qaXQpOworICAgICAgICB3b3JkQ2hh
clRoZW5Ob25Xb3JkQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNr
QXNzZXJ0aW9uV29yZEJvdW5kYXJ5KHNpemVfdCBvcEluZGV4KQogICAgIHsKQEAgLTEyNjMsNDAg
KzExODUsNDAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
IH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVF9CQUNLUkVGRVJFTkNFUykKLSAgICB2b2lkIG1hdGNo
QmFja3JlZmVyZW5jZShzaXplX3Qgb3BJbmRleCwgSnVtcExpc3QmIGNoYXJhY3Rlck1hdGNoRmFp
bHMsIFJlZ2lzdGVySUQgY2hhcmFjdGVyLCBSZWdpc3RlcklEIHBhdHRlcm5JbmRleCwgUmVnaXN0
ZXJJRCBwYXR0ZXJuQ2hhcmFjdGVyKQorICAgIHZvaWQgbWF0Y2hCYWNrcmVmZXJlbmNlKHNpemVf
dCBvcEluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGNoYXJhY3Rlck1hdGNoRmFpbHMs
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgcGF0dGVybkluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJu
Q2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwog
ICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgdW5zaWduZWQg
c3VicGF0dGVybklkID0gdGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKIAotICAgICAg
ICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgm
bV9qaXQpOwogCiAgICAgICAgIHJlYWRDaGFyYWN0ZXIoMCwgcGF0dGVybkNoYXJhY3RlciwgcGF0
dGVybkluZGV4KTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJt
LT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpOwogICAgIAogICAgICAgICBpZiAoIW1fcGF0dGVy
bi5pZ25vcmVDYXNlKCkpCi0gICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7CisgICAgICAg
ICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgcGF0dGVybkNoYXJhY3RlcikpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEp1bXAgY2hhcmFjdGVyc01hdGNoID0gYnJhbmNoMzIoRXF1YWws
IGNoYXJhY3RlciwgcGF0dGVybkNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJl
c3MgY2hhcmFjdGVyVGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KCZjYW5vbmljYWxUYWJsZUxDaGFyKSk7Ci0gICAgICAgICAgICBsb2FkMTYoY2hhcmFjdGVy
VGFibGVFbnRyeSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVzcyBwYXR0
ZXJuVGFibGVFbnRyeShwYXR0ZXJuQ2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90
PigmY2Fub25pY2FsVGFibGVMQ2hhcikpOwotICAgICAgICAgICAgbG9hZDE2KHBhdHRlcm5UYWJs
ZUVudHJ5LCBwYXR0ZXJuQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGNoYXJhY3Rlck1hdGNoRmFp
bHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIp
KTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnNNYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hhcmFjdGVyc01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVkQWRkcmVzcyBjaGFyYWN0ZXJUYWJsZUVudHJ5
KGNoYXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENo
YXIpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQxNihjaGFyYWN0ZXJUYWJsZUVudHJ5LCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVkQWRkcmVzcyBwYXR0
ZXJuVGFibGVFbnRyeShwYXR0ZXJuQ2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90
PigmY2Fub25pY2FsVGFibGVMQ2hhcikpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2KHBhdHRl
cm5UYWJsZUVudHJ5LCBwYXR0ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNoYXJhY3Rlck1h
dGNoRmFpbHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
Y2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzTWF0
Y2gubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4
KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dh
dGVQYWlycykgewotICAgICAgICAgICAgSnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhh
biwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Ci0gICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgcGF0dGVybkluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAg
ICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAotICAgICAgICBicmFuY2gz
MihOb3RFcXVhbCwgcGF0dGVybkluZGV4LCBBZGRyZXNzKG91dHB1dCwgKChzdWJwYXR0ZXJuSWQg
PDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKChzdWJwYXR0ZXJuSWQgPDwgMSkg
KyAxKSAqIHNpemVvZihpbnQpKSkubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgfQogCiAgICAg
dm9pZCBnZW5lcmF0ZUJhY2tSZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgpCkBAIC0xMzEyLDExNiAr
MTIzNCwxMTYgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
ICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSB0ZXJtLT5iYWNrUmVmZXJlbmNlU3VicGF0dGVy
bklkOwogICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5m
cmFtZUxvY2F0aW9uOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1w
ID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gcmVnVDE7
Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgcGF0dGVyblRlbXAgPSByZWdUMjsKKyAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1wID0gbV9yZWdz
LnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJu
SW5kZXggPSBtX3JlZ3MucmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBhdHRlcm5UZW1wID0gbV9yZWdzLnJlZ1QyOwogCi0gICAgICAgIHN0b3JlVG9GcmFt
ZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZl
cmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpi
ZWdpbkluZGV4KCkpOwogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZp
ZXJUeXBlOjpGaXhlZENvdW50IHx8IHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gMSkKLSAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwor
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCks
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpt
YXRjaEFtb3VudEluZGV4KCkpOwogCi0gICAgICAgIEp1bXBMaXN0IG1hdGNoZXM7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaGVzOwogCiAgICAgICAgIGlmICh0ZXJtLT5x
dWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAg
bG9hZFN1YlBhdHRlcm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVy
blRlbXApOworICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0
dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKIAogICAgICAgICAgICAgLy8gQW4g
ZW1wdHkgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhl
ZENvdW50IHx8IHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gMSkgewotICAgICAgICAgICAgICAg
IG1hdGNoZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJu
SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwg
cGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCkpOworICAgICAgICAgICAgICAgIG1hdGNo
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBKdW1wIHplcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEp
LCBwYXR0ZXJuSW5kZXgpOwotICAgICAgICAgICAgICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0g
YnJhbmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAg
ICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMpOwotICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShUcnVzdGVkSW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Tm9uWmVyb01h
dGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgemVy
b0xlbmd0aE1hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnlOb25aZXJvTWF0Y2ggPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwor
ICAgICAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFt
b3VudEluZGV4KCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBl
KSB7CiAgICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6IHsKLSAgICAgICAg
ICAgIExhYmVsIG91dGVyTG9vcCh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBvdXRlckxvb3AoJm1faml0KTsKIAogICAgICAgICAgICAgLy8gUGF0dGVyblRlbXAgc2hv
dWxkIGNvbnRhaW4gcGF0dGVybiBlbmQgaW5kZXggYXQgdGhpcyBwb2ludAotICAgICAgICAgICAg
c3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBtX2ppdC5zdWIz
MihwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKGNoZWNrTm90RW5vdWdoSW5wdXQocGF0dGVyblRlbXApKTsKIAogICAgICAgICAgICAgbWF0
Y2hCYWNrcmVmZXJlbmNlKG9wSW5kZXgsIG9wLm1fanVtcHMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0
dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eU1heENvdW50ICE9IDEpIHsKICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3Vu
dEluZGV4KCksIGNoYXJhY3Rlck9yVGVtcCk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBjaGFyYWN0ZXJPclRlbXApOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGNoYXJhY3Rlck9yVGVtcCwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgo
KSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMy
KHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAg
ICAgICBsb2FkU3ViUGF0dGVybihvdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7Ci0gICAgICAgICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAg
ICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBjaGFyYWN0
ZXJPclRlbXApKTsKKyAgICAgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0
LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAg
ICAgIG1faml0Lmp1bXAob3V0ZXJMb29wKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1h
dGNoZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hdGNoZXMubGluaygmbV9qaXQpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBl
OjpHcmVlZHk6IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOwogCi0g
ICAgICAgICAgICBMYWJlbCBvdXRlckxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgb3V0ZXJMb29wKCZtX2ppdCk7CiAKICAgICAgICAgICAgIC8vIFBhdHRlcm5U
ZW1wIHNob3VsZCBjb250YWluIHBhdHRlcm4gZW5kIGluZGV4IGF0IHRoaXMgcG9pbnQKLSAgICAg
ICAgICAgIHN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9q
aXQuc3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVz
LmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KHBhdHRlcm5UZW1wKSk7CiAKICAgICAgICAgICAg
IG1hdGNoQmFja3JlZmVyZW5jZShvcEluZGV4LCBpbmNvbXBsZXRlTWF0Y2hlcywgY2hhcmFjdGVy
T3JUZW1wLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKIAogICAgICAgICAgICAgbG9hZEZy
b21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVy
ZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFyYWN0ZXJPclRlbXApOwotICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXJPclRlbXApOworICAgICAgICAgICAgbV9q
aXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1w
KTsKICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjaGFyYWN0ZXJPclRlbXAsIHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudElu
ZGV4KCkpOwogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRp
ZnlJbmZpbml0ZSkKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCksIGNoYXJhY3Rlck9yVGVtcCkpOwotICAg
ICAgICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRl
eCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0t
PnF1YW50aXR5TWF4Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKKyAgICAgICAgICAgIGxvYWRT
dWJQYXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0
ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgaW5kZXggaW4gZnJhbWUg
Zm9yIHJlc3RvcmluZyBhZnRlciBhIHBhcnRpYWwgbWF0Y2gKLSAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tS
ZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSk7Ci0gICAgICAgICAgICBqdW1wKG91dGVyTG9vcCk7Cisg
ICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAg
ICAgICAgIG1faml0Lmp1bXAob3V0ZXJMb29wKTsKIAotICAgICAgICAgICAgaW5jb21wbGV0ZU1h
dGNoZXMubGluayh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNG
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwg
aW5kZXgpOworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0gICAg
ICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBs
YWJlbCgpOworICAgICAgICAgICAgbWF0Y2hlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBv
cC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHk6IHsKLSAgICAgICAg
ICAgIEp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOwogCi0gICAgICAgICAgICBtYXRjaGVzLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
IAotICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIG9wLm1f
cmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91
dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAg
ICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1
Y2Nlc3NmdWwgd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwotICAgICAgICAgICAgSnVtcCB6
ZXJvTGVuZ3RoTWF0Y2ggPSBicmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVy
bkluZGV4KTsKLSAgICAgICAgICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJhbmNoMzIoTm90
RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgemVyb0xlbmd0
aE1hdGNoLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMy
KDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5j
ZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgICAgICB0cnlOb25aZXJvTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBh
dHRlcm5JbmRleCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnlOb25aZXJv
TWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5J
bmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVy
ZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICB0cnlOb25aZXJvTWF0Y2gubGluaygmbV9qaXQpOwog
CiAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGlucHV0IHJlbWFpbmluZyB0byBtYXRj
aAotICAgICAgICAgICAgc3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAg
ICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKICAgICAgICAgICAg
IG1hdGNoZXMuYXBwZW5kKGNoZWNrTm90RW5vdWdoSW5wdXQocGF0dGVyblRlbXApKTsKIAotICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIHN0
b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOwogCiAgICAgICAgICAgICBtYXRj
aEJhY2tyZWZlcmVuY2Uob3BJbmRleCwgaW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVt
cCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAKLSAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
Ci0gICAgICAgICAgICBpbmNvbXBsZXRlTWF0Y2hlcy5saW5rKHRoaXMpOwotICAgICAgICAgICAg
bG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFj
a1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICBpbmNvbXBsZXRl
TWF0Y2hlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4
KCksIG1fcmVncy5pbmRleCk7CiAKLSAgICAgICAgICAgIG1hdGNoZXMubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1hdGNoZXMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTQzMyw0OSArMTM1NSw0OSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklk
ID0gdGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKIAotICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAg
ICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG9wLm1fanVt
cHMubGluaygmbV9qaXQpOwogCi0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZXM7CiAKICAgICAgICAgdW5zaWduZWQgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKICAgICAgICAgc3dp
dGNoICh0ZXJtLT5xdWFudGl0eVR5cGUpIHsKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6
Rml4ZWRDb3VudDoKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgp
OworICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5
OiB7Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7Ci0g
ICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIHBhdHRlcm5TdGFydEluZGV4ID0gcmVnVDE7Ci0g
ICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIHBhdHRlcm5FbmRJbmRleE9yTGVuID0gcmVnVDI7
CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3Vu
dCA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBhdHRlcm5TdGFydEluZGV4ID0gbV9yZWdzLnJlZ1QxOworICAgICAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkVuZEluZGV4T3JMZW4gPSBtX3Jl
Z3MucmVnVDI7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwg
bWF0Y2hBbW91bnQpOwotICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRlc3QzMiha
ZXJvLCBtYXRjaEFtb3VudCkpOworICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbWF0Y2hBbW91bnQpKTsKIAotICAgICAg
ICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5TdGFydElu
ZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7Ci0gICAgICAgICAgICBzdWIzMihwYXR0ZXJuU3Rh
cnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOwotICAgICAgICAgICAgc3ViMzIocGF0dGVy
bkVuZEluZGV4T3JMZW4sIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVn
cy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRl
eE9yTGVuKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHBhdHRlcm5TdGFydEluZGV4LCBwYXR0
ZXJuRW5kSW5kZXhPckxlbik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuRW5kSW5k
ZXhPckxlbiwgbV9yZWdzLmluZGV4KTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBtYXRjaEFtb3VudCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJh
bWUobWF0Y2hBbW91bnQsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9C
YWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5t
X3JlZW50cnkpOworICAgICAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBlOjpO
b25HcmVlZHk6IHsKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSBy
ZWdUMDsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNo
QW1vdW50ID0gbV9yZWdzLnJlZ1QwOwogCiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRF
bmRPZklucHV0KCkpOwogICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgp
LCBtYXRjaEFtb3VudCk7CiAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAh
PSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBtYXRjaEFt
b3VudCkpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7
CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0
eU1heENvdW50KSwgbWF0Y2hBbW91bnQpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1hdGNoQW1vdW50KTsKICAgICAgICAgICAgIHN0
b3JlVG9GcmFtZShtYXRjaEFtb3VudCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgICAgICBq
dW1wKG9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZhaWx1
cmVzLmxpbmsodGhpcyk7CisgICAgICAgIGZhaWx1cmVzLmxpbmsoJm1faml0KTsKICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgIH0KICNlbmRpZgpAQCAtMTQ5
NywxMSArMTQxOSwxMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
CiAKICAgICAgICAgaWYgKCFpc0xhdGluMShjaCkgJiYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6
OkNoYXI4KSkgewogICAgICAgICAgICAgLy8gSGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3Rl
ciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQgY2lyY3VpdAotICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25z
dCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKEFSTTY0KQogICAgICAgICB1bnNpZ25lZCBtYXhDaGFyYWN0ZXJzQXRPbmNlID0g
bV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjggPyA4IDogNDsKICNlbHNlCkBAIC0xNTUyLDcg
KzE0NzQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAg
ICAgICAgICAgIGlmICghaXNMYXRpbjEoY3VycmVudENoYXJhY3RlcikgJiYgKG1fY2hhclNpemUg
PT0gQ2hhclNpemU6OkNoYXI4KSkgewogICAgICAgICAgICAgICAgIC8vIEhhdmUgYSAxNiBiaXQg
cGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQKLSAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCkBAIC0xNTc1LDI5ICsxNDk3LDI5IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAg
IGF1dG8gY2hlY2syID0gWyZdIChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVpbnQxNl90IGNo
YXJhY3RlcnMsIHVpbnQxNl90IG1hc2spIHsKLSAgICAgICAgICAgICAgICBsb2FkMTZVbmFsaWdu
ZWQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zm
c2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAg
ICAgICAgICAgIGlmIChtYXNrKQotICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2sp
LCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtYXNrKSwgY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAg
YXV0byBjaGVjazQgPSBbJl0gKENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdW5zaWduZWQgY2hh
cmFjdGVycywgdW5zaWduZWQgbWFzaykgewogICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobmVnYXRpdmVP
ZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobmVnYXRp
dmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Iz
MihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2hhcmFjdGVycyB8
IG1hc2spKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1i
bGVyOjpJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFy
YWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1
YWwsIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBUcnVz
dGVkSW1tMzIoY2hhcmFjdGVycykpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzKSkpOwogICAgICAgICAgICAg
fTsKIAogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKICAgICAgICAgICAgIGF1dG8gY2hl
Y2s4ID0gWyZdIChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVpbnQ2NF90IGNoYXJhY3RlcnMs
IHVpbnQ2NF90IG1hc2spIHsKLSAgICAgICAgICAgICAgICBsb2FkNjQobmVnYXRpdmVPZmZzZXRJ
bmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDY0KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBj
aGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrKQotICAgICAg
ICAgICAgICAgICAgICBvcjY0KFRydXN0ZWRJbW02NChtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2g2NChOb3RFcXVhbCwgY2hhcmFjdGVy
LCBUcnVzdGVkSW1tNjQoY2hhcmFjdGVycyB8IG1hc2spKSk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0Lm9yNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChtYXNrKSwgY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChjaGFyYWN0ZXJzIHwgbWFzaykpKTsKICAgICAgICAgICAgIH07CiAjZW5kaWYKIApAQCAt
MTY0OSwyMSArMTU3MSwyMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAKICAgICAgICAgICAgIGF1dG8gY2hlY2syID0gWyZdIChDaGVja2VkPHVuc2lnbmVkPiBv
ZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlcnMsIHVuc2lnbmVkIG1hc2spIHsKICAgICAgICAgICAg
ICAgICBpZiAobWFzaykgewotICAgICAgICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVk
SGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIp
LCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzJXaXRoVW5hbGln
bmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0
ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2hhcmFjdGVy
cyB8IG1hc2spKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzJXaXRoVW5hbGln
bmVkSGFsZldvcmRzKE5vdEVxdWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNl
dCwgY2hhcmFjdGVyKSwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CisgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRz
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhv
ZmZzZXQsIGNoYXJhY3RlciksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2hhcmFjdGVy
cykpKTsKICAgICAgICAgICAgIH07CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCiAg
ICAgICAgICAgICBhdXRvIGNoZWNrNCA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1
aW50NjRfdCBjaGFyYWN0ZXJzLCB1aW50NjRfdCBtYXNrKSB7Ci0gICAgICAgICAgICAgICAgbG9h
ZDY0KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChuZWdhdGl2ZU9mZnNldEluZGV4
ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAg
ICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQobWFzayks
IGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoNjQo
Tm90RXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTY0KGNoYXJhY3RlcnMgfCBtYXNrKSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQo
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAg
ICB9OwogI2VuZGlmCiAKQEAgLTE2OTgsMzQgKzE2MjAsMzQgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1f
dGVybTsKICAgICAgICAgVUNoYXIzMiBjaCA9IHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7CiAKLSAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdU
MTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CiAKICAgICAgICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gc2NhbGVkTWF4Q291bnQgPSB0ZXJtLT5xdWFudGl0eU1heENvdW50Owog
ICAgICAgICBzY2FsZWRNYXhDb3VudCAqPSBVX0lTX0JNUChjaCkgPyAxIDogMjsKLSAgICAgICAg
c3ViMzIoaW5kZXgsIEltbTMyKHNjYWxlZE1heENvdW50KSwgY291bnRSZWdpc3Rlcik7CisgICAg
ICAgIG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHNjYWxl
ZE1heENvdW50KSwgY291bnRSZWdpc3Rlcik7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAgICAgICAgcmVh
ZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gc2NhbGVk
TWF4Q291bnQsIGNoYXJhY3RlciwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIC8vIEZvciBjYXNl
LWluc2VzaXRpdmUgY29tcGFyZXMsIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBkaWZm
ZXJlbnQKICAgICAgICAgLy8gdXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUg
Y29udmVydGVkIHRvIGEgY2hhcmFjdGVyIGNsYXNzLgogICAgICAgICBBU1NFUlQoIW1fcGF0dGVy
bi5pZ25vcmVDYXNlKCkgfHwgaXNBU0NJSUFscGhhKGNoKSB8fCBpc0Nhbm9uaWNhbGx5VW5pcXVl
KGNoLCBtX2Nhbm9uaWNhbE1vZGUpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25vcmVDYXNl
KCkgJiYgaXNBU0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIo
MHgyMCksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMHgyMCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjaCB8PSAweDIw
OwogICAgICAgICB9CiAKLSAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIGNoYXJhY3RlciwgSW1tMzIoY2gpKSk7CisgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoY2gpKSk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVT
U0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lTX0JNUChj
aCkpCi0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigyKSwg
Y291bnRSZWdpc3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1
YWwsIGNvdW50UmVnaXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
b3VudFJlZ2lzdGVyLCBtX3JlZ3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0K
ICAgICB2b2lkIGJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJGaXhlZChzaXplX3Qgb3BJbmRleCkK
ICAgICB7CkBAIC0xNzM4LDM4ICsxNjYwLDM4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAg
ICAgICAgIFVDaGFyMzIgY2ggPSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNv
bnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwog
CiAgICAgICAgIC8vIFVubGVzcyBoYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVyIGFuZCBh
biA4IGJpdCBzdHJpbmcgLSBzaG9ydCBjaXJjdWl0CiAgICAgICAgIGlmICghKCFpc0xhdGluMShj
aCkgJiYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KSkpIHsKLSAgICAgICAgICAgIEp1
bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQoYXRFbmRPZklucHV0KCkpOwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNo
YXJOb3RFcXVhbHMoY2gsIG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNo
YXJhY3RlcikpOwogCi0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IG1fcmVncy5pbmRleCk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMp
CiAgICAgICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gp
KSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBzdXJyb2dhdGVQYWlyT2sgPSBub3RBdEVuZE9mSW5w
dXQoKTsKLSAgICAgICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAg
ICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICBz
dXJyb2dhdGVQYWlyT2subGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dXJyb2dhdGVQYWlyT2sgPSBub3RBdEVuZE9mSW5wdXQoKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgICAgIHN1cnJvZ2F0ZVBhaXJPay5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9q
aXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsK
ICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlNYXhDb3VudCA9PSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAg
IGp1bXAobG9vcCk7CisgICAgICAgICAgICAgICAgbV9qaXQuanVtcChsb29wKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3Rl
ciwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNv
dW50UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50
KSkubGlua1RvKGxvb3AsICZtX2ppdCk7CiAKLSAgICAgICAgICAgIGZhaWx1cmVzLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBmYWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KLSAgICAg
ICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQu
bGFiZWwoKTsKIAogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudElu
ZGV4KCkpOwogICAgIH0KQEAgLTE3NzgsMTggKzE3MDAsMTggQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRl
eF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNv
bnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0g
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNoQW1vdW50
SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRS
ZWdpc3RlcikpOworICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgaWYgKCFtX2RlY29kZVN1cnJvZ2F0ZVBh
aXJzIHx8IFVfSVNfQk1QKHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXIpKQotICAgICAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMiksIGluZGV4KTsKLSAgICAgICAganVt
cChvcC5tX3JlZW50cnkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigyKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuanVtcChvcC5t
X3JlZW50cnkpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyTm9u
R3JlZWR5KHNpemVfdCBvcEluZGV4KQpAQCAtMTc5NywxMCArMTcxOSwxMCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29w
c1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVn
VDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwotICAg
ICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBvcC5tX3Jl
ZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3Rl
ciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjpt
YXRjaEFtb3VudEluZGV4KCkpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja1BhdHRlcm5DaGFy
YWN0ZXJOb25HcmVlZHkoc2l6ZV90IG9wSW5kZXgpCkBAIC0xODA5LDQzICsxNzMxLDQzIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgUGF0dGVyblRl
cm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyMzIgY2ggPSB0ZXJtLT5wYXR0ZXJu
Q2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7
Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVn
VDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVnaXN0
ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRo
aXMpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAgICAg
ICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGF0dGVy
bkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAg
ICAvLyBVbmxlc3MgaGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQg
c3RyaW5nIC0gc2hvcnQgY2lyY3VpdAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmICht
X2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBu
b25HcmVlZHlGYWlsdXJlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBu
b25HcmVlZHlGYWlsdXJlczsKICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChh
dEVuZE9mSW5wdXQoKSk7CiAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAh
PSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFw
cGVuZChicmFuY2gzMihFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlN
YXhDb3VudCkpKTsKKyAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKICAgICAgICAgICAgIG5v
bkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBtX2NoZWNrZWRP
ZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogI2lmIEVOQUJM
RShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYgKG1fZGVjb2Rl
U3Vycm9nYXRlUGFpcnMgJiYgIVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAgICAgIEp1bXAg
c3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFp
bHVyZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0g
bm90QXRFbmRPZklucHV0KCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBu
b25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBz
dXJyb2dhdGVQYWlyT2subGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRS
ZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAotICAgICAgICAgICAganVtcChvcC5tX3JlZW50
cnkpOwotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1
cmVzLmxpbmsoJm1faml0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJv
Z2F0ZVBhaXJzICYmICFVX0lTX0JNUChjaCkpIHsKICAgICAgICAgICAgIC8vIHN1YnRyYWN0IGNv
dW50UmVnaXN0ZXIqMiBmb3Igbm9uLUJNUCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICBsc2hpZnQz
MihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubHNo
aWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7CisgICAgICAg
IG1faml0LnN1YjMyKGNvdW50UmVnaXN0ZXIsIG1fcmVncy5pbmRleCk7CiAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKICAgICB9CiAKQEAgLTE4NTQsMTQgKzE3NzYs
MTQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZ
YXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0g
b3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7
CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1f
cmVncy5yZWdUMDsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAg
ICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dCgpKTsKLSAg
ICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShtX3JlZ3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
Q2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBKdW1w
TGlzdCBtYXRjaERlc3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERl
c3Q7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQ
b3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAi
YW55IGNoYXJhY3RlciIgYnVpbHRpbiBjbGFzcyB3ZSBvbmx5IG5lZWQgdG8gcmVhZCB0aGUKICAg
ICAgICAgLy8gY2hhcmFjdGVyIGFuZCBkb24ndCBuZWVkIHRvIG1hdGNoIGFzIGl0IHdpbGwgYWx3
YXlzIHN1Y2NlZWQuCkBAIC0xODcxLDE2ICsxNzkzLDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKICAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtYXRjaERlc3QpOwogICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5r
KCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNpZiBFTkFCTEUoWUFSUl9KSVRf
VU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMg
JiYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzT25lQ2hhcmFjdGVyU2l6ZSgpIHx8IHRlcm0t
PmludmVydCgpKSkgewotICAgICAgICAgICAgSnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNz
VGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9yZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNl
KTsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBD
aGFyLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgaXNCTVBDaGFyLmxp
bmsoJm1faml0KTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtMTg5MSw4ICsxODEzLDgg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAg
WWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRl
cm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0
aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRG
cm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFz
czo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTE5MDQsOCArMTgy
Niw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAg
WWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9
IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1Qw
OwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJl
Z1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lz
dGVyID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJz
KQogICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dCgp
KTsKQEAgLTE5MTUsMTAgKzE4MzcsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiB0ZXJtLT5j
aGFyYWN0ZXJDbGFzcy0+aGFzT25seU5vbkJNUENoYXJhY3RlcnMoKSAmJiAhdGVybS0+aW52ZXJ0
KCkpCiAgICAgICAgICAgICBzY2FsZWRNYXhDb3VudCAqPSAyOwogI2VuZGlmCi0gICAgICAgIHN1
YjMyKGluZGV4LCBJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAg
ICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRN
YXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOwogCi0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7Ci0g
ICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGxvb3AoJm1faml0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVz
dDsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBv
c2l0aW9uIC0gc2NhbGVkTWF4Q291bnQsIGNoYXJhY3RlciwgY291bnRSZWdpc3Rlcik7CiAgICAg
ICAgIC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xh
c3Mgd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3RlciBhbmQgZG9u
J3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMTkyOCwyNyAr
MTg1MCwyNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQobWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0Lmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAg
ICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICh0ZXJt
LT5pc0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8g
MiA6IDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBD
aGFyYWN0ZXJzKCkgPyAyIDogMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICBKdW1wIGlzQk1QQ2hhciA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFy
YWN0ZXIsIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9yZWdzLnN1cHBsZW1l
bnRhcnlQbGFuZXNCYXNlKTsKICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChhdEVu
ZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3Vu
dFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4
KTsKLSAgICAgICAgICAgICAgICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgIGlzQk1QQ2hhci5saW5r
KCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBicmFu
Y2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhsb29wLCB0aGlzKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIG1fcmVncy5pbmRleCkubGlua1RvKGxvb3AsICZtX2pp
dCk7CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NGaXhlZChzaXplX3Qg
b3BJbmRleCkKICAgICB7CkBAIC0xOTYwLDE5ICsxODgyLDE5IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5k
ZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBj
b25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCiAg
ICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFjdGVyQ2xh
c3MtPmhhc09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpCi0gICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
Q2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5k
ZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigwKSwgY291bnRSZWdpc3Rlcik7CiAKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0g
ICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzRGVjcmVtZW50SW5kZXg7Ci0gICAgICAgIExhYmVsIGxv
b3AodGhpcyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlczsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVzRGVjcmVtZW50SW5kZXg7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAjaWYgRU5BQkxFKFlB
UlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmICh0ZXJtLT5pc0ZpeGVkV2lk
dGhDaGFyYWN0ZXJDbGFzcygpICYmIHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFy
YWN0ZXJzKCkpIHsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXIp
OworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGNoZWNrTm90RW5vdWdo
SW5wdXQoY2hhcmFjdGVyKSk7CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCkBAIC0xOTgyLDE1ICsx
OTA0LDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlv
biwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVy
LCBmYWlsdXJlcywgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2Vk
T2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIC8v
IElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3MgZm9y
IG5vbi11bmljb2RlIHBhdHRlcm5zLAogICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHJl
YWQgdGhlIGNoYXJhY3RlciBhbmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5
cyBzdWNjZWVkLgogICAgICAgICAgICAgaWYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+bV9hbnlD
aGFyYWN0ZXIpIHsKICAgICAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3Rl
ciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7Ci0gICAgICAgICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaERlc3QubGluayh0
aGlzKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAog
I2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQpAQCAtMTk5OCwyMiArMTky
MCwyMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
ICAgICBhZHZhbmNlSW5kZXhBZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIGZhaWx1
cmVzRGVjcmVtZW50SW5kZXgsIGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBt
X2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVy
KTsKIAogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmlu
aXRlKSB7Ci0gICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1t
MzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAganVtcChsb29wKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAobG9vcCk7CiAK
ICAgICAgICAgaWYgKCFmYWlsdXJlc0RlY3JlbWVudEluZGV4LmVtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgubGluayh0aGlzKTsKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgZmFpbHVyZXNEZWNyZW1lbnRJ
bmRleC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAg
ZmFpbHVyZXMubGluayh0aGlzKTsKLSAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAg
ICAgICAgZmFpbHVyZXMubGluaygmbV9qaXQpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2pp
dC5sYWJlbCgpOwogCiAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudElu
ZGV4KCkpOwogICAgIH0KQEAgLTIwMjIsNDUgKzE5NDQsNDUgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRl
eF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNv
bnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0g
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudElu
ZGV4KCksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVu
ZChicmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRl
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVn
aXN0ZXIpKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVy
LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRj
aEFtb3VudEluZGV4KCkpOwogCiAgICAgICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycykK
LSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4
KTsKICAgICAgICAgZWxzZSBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3MoKSkK
LSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFz
Tm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5z
dWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5o
YXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAyIDogMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgLy8gUmVtYXRjaCBvbmUgbGVzcwotICAgICAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAotICAgICAgICAg
ICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJh
Y3RlckNsYXNzOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJh
bWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVn
aW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0gICAgICAgICAgICBMYWJlbCByZW1hdGNoTG9v
cCh0aGlzKTsKLSAgICAgICAgICAgIEp1bXAgZG9uZVJlbWF0Y2hpbmcgPSBicmFuY2hUZXN0MzIo
WmVybywgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
cmVtYXRjaExvb3AoJm1faml0KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmVSZW1hdGNoaW5nID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBj
b3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZz
ZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpOwogCi0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKLSAgICAgICAgICAgIEp1
bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFy
eVBsYW5lc0Jhc2UpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7
Ci0gICAgICAgICAgICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzQk1QQ2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbiwgY2hhcmFjdGVyLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9y
ZWdzLmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAjZW5kaWYK
IAotICAgICAgICAgICAganVtcChyZW1hdGNoTG9vcCk7Ci0gICAgICAgICAgICBkb25lUmVtYXRj
aGluZy5saW5rKHRoaXMpOworICAgICAgICAgICAgbV9qaXQuanVtcChyZW1hdGNoTG9vcCk7Cisg
ICAgICAgICAgICBkb25lUmVtYXRjaGluZy5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIGxv
YWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJD
bGFzczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgfQotICAg
ICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5
KTsKICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkoc2l6
ZV90IG9wSW5kZXgpCkBAIC0yMDY4LDE1ICsxOTkwLDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhd
OwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25z
dCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIG9wLm1f
cmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigwKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1f
aml0LmxhYmVsKCk7CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykK
ICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICgh
dGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZl
cnQoKSkKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CisgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAg
fQogI2VuZGlmCiAKQEAgLTIwODgsMjcgKzIwMTAsMjcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07
CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
Y291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAg
ICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7Ci0gICAgICAgIEp1bXBMaXN0IG5vbkdyZWVk
eUZhaWx1cmVzRGVjcmVtZW50SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBub25HcmVlZHlGYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5v
bkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXg7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKHRoaXMpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0
KTsKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBp
ZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAgICAgICAgaWYgKCF0ZXJtLT5jaGFy
YWN0ZXJDbGFzcy0+aGFzT25lQ2hhcmFjdGVyU2l6ZSgpIHx8IHRlcm0tPmludmVydCgpKQotICAg
ICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICAg
ICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJh
Y3RlckNsYXNzOjpiZWdpbkluZGV4KCksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIH0KICNlbmRp
ZgogCiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsK
IAogICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAg
ICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0
ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgIG5vbkdyZWVkeUZh
aWx1cmVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNvdW50
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkp
OwogCi0gICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZz
ZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBh
cmUgbWF0Y2hpbmcgdGhlICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5p
Y29kZSBwYXR0ZXJucywKICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlIGNoYXJh
Y3RlciBhbmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpA
QCAtMjExOCw4ICsyMDQwLDggQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQogICAgICAgICAgICAgICAgIG5v
bkdyZWVkeUZhaWx1cmVzLmFwcGVuZChtYXRjaERlc3QpOwogICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
ICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5
RmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yMTI4LDE3ICsy
MDUwLDE3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgIGFkdmFuY2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJtTWF0Y2godGVybSwgbm9u
R3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleCwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQog
I2VuZGlmCi0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7
CisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNv
dW50UmVnaXN0ZXIpOwogCi0gICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgbV9q
aXQuanVtcChvcC5tX3JlZW50cnkpOwogCiAgICAgICAgIGlmICghbm9uR3JlZWR5RmFpbHVyZXNE
ZWNyZW1lbnRJbmRleC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlc0Rl
Y3JlbWVudEluZGV4LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAg
ICAgICAgICBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4LmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgfQotICAgICAgICBub25HcmVl
ZHlGYWlsdXJlcy5saW5rKHRoaXMpOwotICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRl
eCk7CisgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9q
aXQuc3ViMzIoY291bnRSZWdpc3RlciwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgIH0KIApAQCAtMjE0Nyw2MiArMjA2OSw2MiBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJP
cCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5t
X3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBtYXRjaFBvcyA9IHJlZ1QxOwotICAgICAgICBKdW1wTGlz
dCBmb3VuZEJlZ2lubmluZ05ld0xpbmU7Ci0gICAgICAgIEp1bXBMaXN0IHNhdmVTdGFydEluZGV4
OwotICAgICAgICBKdW1wTGlzdCBmb3VuZEVuZGluZ05ld0xpbmU7CisgICAgICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hQb3MgPSBtX3JlZ3MucmVn
VDE7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmb3VuZEJlZ2lubmluZ05ld0xp
bmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZvdW5kRW5kaW5nTmV3TGluZTsKIAogICAg
ICAgICBpZiAobV9wYXR0ZXJuLmRvdEFsbCgpKSB7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgbWF0Y2hQb3MpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDApLCBtYXRjaFBvcyk7CiAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0
KG1hdGNoUG9zKTsKLSAgICAgICAgICAgIG1vdmUobGVuZ3RoLCBpbmRleCk7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKG1fcmVncy5sZW5ndGgsIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1f
aGFzRml4ZWRTaXplKTsKICAgICAgICAgZ2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7CiAKLSAgICAg
ICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5kKGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgbWF0Y2hQb3Ms
IGluaXRpYWxTdGFydCkpOwotICAgICAgICBMYWJlbCBmaW5kQk9MTG9vcCh0aGlzKTsKLSAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7CisgICAgICAgIHNhdmVTdGFydElu
ZGV4LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBt
YXRjaFBvcywgbV9yZWdzLmluaXRpYWxTdGFydCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgZmluZEJPTExvb3AoJm1faml0KTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwogICAgICAgICBpZiAobV9jaGFyU2l6
ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpCi0gICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoaW5wdXQs
IG1hdGNoUG9zLCBUaW1lc09uZSwgMCksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5pbnB1dCwgbWF0Y2hQb3MsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgMCksIGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc1R3bywgMCks
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28s
IDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3Rlciwg
Zm91bmRCZWdpbm5pbmdOZXdMaW5lLCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkp
OwogCi0gICAgICAgIGJyYW5jaDMyKEFib3ZlLCBtYXRjaFBvcywgaW5pdGlhbFN0YXJ0KS5saW5r
VG8oZmluZEJPTExvb3AsIHRoaXMpOwotICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBtYXRj
aFBvcywgbV9yZWdzLmluaXRpYWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCAmbV9qaXQpOwor
ICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICBm
b3VuZEJlZ2lubmluZ05ld0xpbmUubGluayh0aGlzKTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBtYXRjaFBvcyk7IC8vIEFkdmFuY2UgcGFzdCBuZXdsaW5lCi0gICAgICAgIHNhdmVT
dGFydEluZGV4LmxpbmsodGhpcyk7CisgICAgICAgIGZvdW5kQmVnaW5uaW5nTmV3TGluZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIG1hdGNoUG9zKTsgLy8gQWR2YW5jZSBwYXN0IG5ld2xpbmUKKyAgICAgICAgc2F2ZVN0
YXJ0SW5kZXgubGluaygmbV9qaXQpOwogCiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm11bHRpbGlu
ZSgpICYmIHRlcm0tPmFuY2hvcnMuYm9sQW5jaG9yKQotICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIG1hdGNoUG9zKSk7CisgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IG1hdGNoUG9zKSk7CiAKICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0Zp
eGVkU2l6ZSk7CiAgICAgICAgIHNldE1hdGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIG1v
dmUoaW5kZXgsIG1hdGNoUG9zKTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1h
dGNoUG9zKTsKIAotICAgICAgICBMYWJlbCBmaW5kRU9MTG9vcCh0aGlzKTsgICAgICAgIAotICAg
ICAgICBmb3VuZEVuZGluZ05ld0xpbmUuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBtYXRjaFBvcywg
bGVuZ3RoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaW5kRU9MTG9vcCgmbV9q
aXQpOworICAgICAgICBmb3VuZEVuZGluZ05ld0xpbmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgbWF0Y2hQb3MsIG1fcmVncy5sZW5ndGgpKTsKICAgICAgICAg
aWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgbG9hZDgoQmFz
ZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQs
IG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywg
VGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFz
cyhjaGFyYWN0ZXIsIGZvdW5kRW5kaW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0
ZXJDbGFzcygpKTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7Ci0g
ICAgICAgIGp1bXAoZmluZEVPTExvb3ApOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7CisgICAgICAgIG1faml0Lmp1bXAoZmlu
ZEVPTExvb3ApOwogCi0gICAgICAgIGZvdW5kRW5kaW5nTmV3TGluZS5saW5rKHRoaXMpOworICAg
ICAgICBmb3VuZEVuZGluZ05ld0xpbmUubGluaygmbV9qaXQpOwogCiAgICAgICAgIGlmICghbV9w
YXR0ZXJuLm11bHRpbGluZSgpICYmIHRlcm0tPmFuY2hvcnMuZW9sQW5jaG9yKQotICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIG1hdGNoUG9zLCBsZW5ndGgp
KTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgbWF0Y2hQb3MsIG1fcmVncy5sZW5ndGgpKTsKIAotICAgICAgICBt
b3ZlKG1hdGNoUG9zLCBpbmRleCk7CisgICAgICAgIG1faml0Lm1vdmUobWF0Y2hQb3MsIG1fcmVn
cy5pbmRleCk7CiAgICAgfQogCiAgICAgdm9pZCBiYWNrdHJhY2tEb3RTdGFyRW5jbG9zdXJlKHNp
emVfdCBvcEluZGV4KQpAQCAtMjM2Nyw3ICsyMjg5LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmIChtX2Rp
c2Fzc2VtYmxlcikKLSAgICAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yR2VuZXJh
dGUob3BJbmRleCwgbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEZvckdlbmVyYXRlKG9wSW5kZXgsIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAgICAgICBZYXJy
T3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsK
QEAgLTI0MDgsNyArMjMzMCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKIAogICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgcmVlbnRlciBhZnRlciB0aGUgY2hl
Y2ssIGFuZCBhc3N1bWUgdGhlIGlucHV0IHBvc2l0aW9uIHRvIGhhdmUgYmVlbgogICAgICAgICAg
ICAgICAgIC8vIHNldCBhcyBhcHByb3ByaWF0ZSB0byB0aGlzIGFsdGVybmF0aXZlLgotICAgICAg
ICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9y
ZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIEVtaXQgZmFzdCBz
a2lwIHBhdGggd2l0aCBzdHJpZGUgaWYgd2UgaGF2ZSBCb3llck1vb3JlSW5mby4KICAgICAgICAg
ICAgICAgICBpZiAob3AubV9ibUluZm8pIHsKQEAgLTI0MjAsOCArMjM0Miw4IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gW21hcCwgY2hhcmFjdGVyc0Zhc3RQYXRoXSA9IG9wLm1fYm1JbmZvLT5jcmVhdGVDYW5k
aWRhdGVCaXRtYXAoYmVnaW5JbmRleCwgZW5kSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbWFwQ291bnQgPSBtYXAuY291bnQoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGNhbmRpYXRlIGNoYXJhY3RlcnMgYXJlIDw9IDIsIGNoZWNraW5nIGVhY2ggaXMg
YmV0dGVyIHRoYW4gdXNpbmcgdmVjdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExp
c3Qgb3V0T2ZMZW5ndGhGYWlsdXJlOwotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3Qg
bWF0Y2hlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBvdXRPZkxlbmd0aEZhaWx1cmU7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgbWF0Y2hlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKFlhcnJKSVRJbnRlcm5hbDo6dmVyYm9zZSwgIkJNIEJpdG1hcCBpcyAiLCBtYXApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUGF0dGVybnMgbGlrZSAvW10vIGhhdmUgemVybyBjYW5k
aWRhdGVzLiBTaW5jZSBpdCBpcyByYXJlLCB3ZSBkbyBub3QgZG8gbm90aGluZyBmb3Igbm93Lgog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXBDb3VudCkKQEAgLTI0MzAsNzUgKzIzNTIs
NzUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoQm95ZXJNb29yZUZhc3RDYW5kaWRhdGVz
OjptYXhTaXplID09IDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VSZWdFeHBDb21waWxhdGlvbigpLCAiRm91bmQgY2hhcmFjdGVycyBm
YXN0cGF0aCBsb29rYWhlYWQgIiwgY2hhcmFjdGVyc0Zhc3RQYXRoLCAiIHJhbmdlOlsiLCBiZWdp
bkluZGV4LCAiLCAiLCBlbmRJbmRleCwgIikiKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbG9vcEhlYWQgPSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gZW5kSW5kZXggKyAxLCByZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoY2hhcmFjdGVyc0Zhc3RQYXRoLmF0KDApKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9vcEhlYWQgPSBtX2ppdC5sYWJlbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0g
ZW5kSW5kZXggKyAxLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9y
ZWdzLnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0
aC5hdCgwKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyc0Zh
c3RQYXRoLnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZWQuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNG
YXN0UGF0aC5hdCgxKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ZC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MucmVn
VDAsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2hhcmFjdGVyc0Zhc3RQYXRoLmF0KDEp
KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBl
bmQoanVtcElmTm9BdmFpbGFibGVJbnB1dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BIZWFkLCAm
bV9qaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvKiBwb2ludGVyID0gZ2V0Qm95ZXJNb29yZUJpdG1hcCht
YXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VSZWdFeHBDb21waWxhdGlvbigpLCAiRm91bmQgYml0bWFwIGxvb2thaGVhZCBjb3VudDoo
IiwgbWFwQ291bnQsICIpLHJhbmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBlbmRJbmRleCwgIiki
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwb2lu
dGVyKSwgcmVnVDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9vcEhlYWQg
PSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9j
aGVja2VkT2Zmc2V0IC0gZW5kSW5kZXggKyAxLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVy
KSwgbV9yZWdzLnJlZ1QxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BI
ZWFkID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hh
cmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgbV9yZWdzLnJlZ1QwKTsKICNp
ZiBDUFUoQVJNNjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6ZW9mKHVpbnQ2NF90
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDYgPT0g
NjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAoNiAr
IDEpID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHRyYWN0VW5zaWduZWRCaXRmaWVsZDMyKHJlZ1QwLCBUcnVzdGVkSW1tMzIo
NiksIFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOyAvLyBFeHRyYWN0IDEgYml0IGZvciBpbmRleC4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdU
MiwgVGltZXNFaWdodCksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cnNo
aWZ0NjQocmVnVDAsIHJlZ1QyKTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5
IGxvd2VyIDZiaXRzIGFyZSBlZmZlY3RpdmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlZC5hcHBlbmQoYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
MSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5leHRyYWN0VW5zaWduZWRC
aXRmaWVsZDMyKG1fcmVncy5yZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLnJlZ1QyKTsgLy8gRXh0cmFj
dCAxIGJpdCBmb3IgaW5kZXguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC51cnNoaWZ0NjQobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVn
VDIpOyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNmJpdHMgYXJl
IGVmZmVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1fcmVncy5yZWdUMiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSkpOwogI2VsaWYgQ1BVKFg4Nl82NCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihCb3llck1vb3Jl
Qml0bWFwOjpNYXA6OldvcmRUeXBlKSA9PSBzaXplb2YodWludDY0X3QpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgNiA9PSA2NCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8ICg2ICsgMSkgPT0gQm95ZXJNb29y
ZUJpdG1hcDo6TWFwOjpzaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cnNoaWZ0MzIoVHJ1
c3RlZEltbTMyKDYpLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVzRWlnaHQpLCByZWdUMik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoVGVzdEJpdDY0KE5vblpl
cm8sIHJlZ1QyLCByZWdUMCkpOyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgc2luY2UgbW9k
dWxvLTY0IGlzIHBlcmZvcm1lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC51cnNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgbV9y
ZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hbmQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1f
cmVncy5yZWdUMSwgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIG1f
cmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdEJpdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVn
VDIsIG1fcmVncy5yZWdUMCkpOyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgc2luY2UgbW9k
dWxvLTY0IGlzIHBlcmZvcm1lZC4KICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0g
c2l6ZW9mKHVpbnQzMl90KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fz
c2VydCgxIDw8IDUgPT0gMzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoMSA8PCAoNSArIDIpID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMig1KSwgcmVnVDIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigwYjExKSwgcmVnVDIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDEsIHJl
Z1QyLCBUaW1lc0ZvdXIpLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJz
aGlmdDMyKHJlZ1QwLCByZWdUMik7IC8vIFdlIGNhbiBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25s
eSBsb3dlciA1Yml0cyBhcmUgZWZmZWN0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZWQuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMy
KDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVn
VDAsIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJz
aGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNSksIG1fcmVncy5yZWdUMik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigwYjExKSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEs
IG1fcmVncy5yZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIG1fcmVncy5yZWdUMik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKG1fcmVncy5yZWdU
MCwgbV9yZWdzLnJlZ1QyKTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5IGxv
d2VyIDViaXRzIGFyZSBlZmZlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBt
X3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSkpKTsKICNlbmRpZgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVt
cElmTm9BdmFpbGFibGVJbnB1dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BIZWFkLCAmbV9qaXQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0aGUgc3RhcnQg
aW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIG1hdGNoLXN0YXJ0IHdoZW4gd2UgZmFpbGVkIHRvIGZp
bmQgdGhlIHN0YXJ0IHdpdGggQm95ZXJNb29yZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0T2ZMZW5ndGhGYWlsdXJlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0T2ZMZW5ndGhGYWlsdXJlLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFs
dGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldE1hdGNoU3RhcnQoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQo
b3V0T2ZMZW5ndGhGYWlsdXJlKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5saW5rKCZtX2ppdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBm
aXhlZCwgdGhlbiBzdG9yZSB0aGUgc3RhcnQgaW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIG1hdGNo
LXN0YXJ0IHdoZW4gd2Ugc3RhcnQgcGF0dGVybiBtYXRjaGluZyB3aXRoIHRoZSB1cGRhdGVkIGlu
ZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBCb3llck1vb3JlIHNlYXJjaC4KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNp
emUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgs
IEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0y
NTE3LDIxICsyNDM5LDIwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgICAgICAvLyBMb2FkIGFwcHJvcHJpYXRlIHZhbHVlcyBpbnRvIHRoZSBy
ZXR1cm4gcmVnaXN0ZXIgYW5kIHRoZSBmaXJzdCBvdXRwdXQKICAgICAgICAgICAgICAgICAvLyBz
bG90LCBhbmQgcmV0dXJuLiBJbiB0aGUgY2FzZSBvZiBwYXR0ZXJuIHdpdGggYSBmaXhlZCBzaXpl
LCB3ZSB3aWxsCiAgICAgICAgICAgICAgICAgLy8gbm90IGhhdmUgeWV0IHNldCB0aGUgdmFsdWUg
aW4gdGhlIGZpcnN0IAotICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSByZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fcmVncy5pbmRleCAhPSBtX3JlZ3MucmV0
dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hh
c0ZpeGVkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JBbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0z
MihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgcmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZXR1
cm5SZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1vdmUoaW5kZXgsIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5j
bHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVQYWlyMzIocmV0
dXJuUmVnaXN0ZXIsIGluZGV4LCBvdXRwdXQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZVBhaXIzMihtX3JlZ3MucmV0dXJuUmVnaXN0ZXIsIG1f
cmVncy5pbmRleCwgbV9yZWdzLm91dHB1dCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TWF0
Y2hTdGFydChyZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGdldE1hdGNoU3Rh
cnQobV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29t
cGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCA0KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgNCkpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBtb3ZlKGluZGV4LCByZXR1cm5SZWdpc3RlcjIpOwotCisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOwog
ICAgICAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CiAKICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBkaXZpZGUgYmV0d2VlbiB0aGUgdGFpbCBvZiB0aGUgcHJpb3IgYWx0ZXJuYXRp
dmUsIGFib3ZlLCBhbmQKQEAgLTI1NDIsMTcgKzI0NjMsMTcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGp1bXBz
IGhlcmUgdG8gZG8gc28gd2l0aCB0aGUgaW5wdXQgcG9zaXRpb24gbWF0Y2hpbmcgdGhhdCBvZiB0
aGUKICAgICAgICAgICAgICAgICAgICAgLy8gUFJJT1IgYWx0ZXJhbmF0aXZlLCBhbmQgd2Ugd2ls
bCBvbmx5IGNoZWNrIGlucHV0IGF2YWlsYWJpbGl0eSBpZiB3ZQogICAgICAgICAgICAgICAgICAg
ICAvLyBuZWVkIHRvIHByb2dyZXNzIGl0IGZvcndhcmRzLgotICAgICAgICAgICAgICAgICAgICBv
cC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkg
PSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgPiBwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAt
IHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUgLSBwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdz
LmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJ
Zk5vQXZhaWxhYmxlSW5wdXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJp
b3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA+IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
KQotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSAtIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHBy
aW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6
ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5tX25leHRP
cCA9PSBub3RGb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWVu
dHJ5IHBvaW50IGZvciB0aGUgRW5kIG9mICdvbmNlIHRocm91Z2gnIGFsdGVybmF0aXZlcywKICAg
ICAgICAgICAgICAgICAgICAgLy8ganVtcGVkIHRvIHdoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUg
ZmFpbHMgdG8gbWF0Y2guCi0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVs
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9
IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmlu
ZGV4KTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAob3AubV9vcCA9
PSBZYXJyT3BDb2RlOjpCb2R5QWx0ZXJuYXRpdmVOZXh0KQpAQCAtMjYwOCw3ICsyNTI5LDcgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAg
IGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYg
IW1fb3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgbWF0Y2hl
ZCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzIHRoZW4KICAgICAgICAgICAgICAgICAgICAg
Ly8gYmFja3RyYWNrIHRvIHRyeSB0byBtYXRjaCB3aGlsZSBjb25zdW1taW5nIHNvbWUgaW5wdXQu
Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1femVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1
YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0
aW9uICogc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3plcm9MZW5n
dGhNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2ggaGVyZSB0aGVuIHRo
ZSBsYXN0IGFsdGVybmF0aXZlIGhhcyBtYXRjaGVkIC0ganVtcCB0byB0aGUKQEAgLTI2MjUsMTAg
KzI1NDYsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
ICAgICAgICAgICAgICAgICBlbmRPcCA9ICZtX29wc1tlbmRPcC0+bV9uZXh0T3BdOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoZW5kT3AtPm1fb3AgPT0gWWFyck9w
Q29kZTo6U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVFbmQgfHwgZW5kT3AtPm1fb3AgPT0gWWFyck9w
Q29kZTo6TmVzdGVkQWx0ZXJuYXRpdmVFbmQpOwotICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1
bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkg
cG9pbnQgZm9yIHRoZSBuZXh0IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgbXVjaCBpbnB1dCB3ZSBu
ZWVkIHRvIGNoZWNrIGZvciwgYW5kIGlmIG5vbi16ZXJvIGNoZWNrLgogICAgICAgICAgICAgICAg
IG9wLm1fY2hlY2tBZGp1c3QgPSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKQEAgLTI2NTUs
MTMgKzI1NzYsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6
OkZpeGVkQ291bnQgJiYgIW1fb3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgYWx0
ZXJuYXRpdmUgbWF0Y2hlZCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzIHRoZW4KICAgICAg
ICAgICAgICAgICAgICAgLy8gYmFja3RyYWNrIHRvIHRyeSB0byBtYXRjaCB3aGlsZSBjb25zdW1t
aW5nIHNvbWUgaW5wdXQuCi0gICAgICAgICAgICAgICAgICAgIG9wLm1femVyb0xlbmd0aE1hdGNo
ID0gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0
ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICAgICAgICAgICAg
ICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9p
ZCopKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBz
ZXQgb2YgYWx0ZXJuYXRpdmVzIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsCiAg
ICAgICAgICAgICAgICAgLy8gdGhlbiB0aGUgTmV4dCBub2RlcyB3aWxsIGhhdmUgcGxhbnRlZCBq
dW1wcyB0byB0aGUgRW5kLCBhbmQgYWRkZWQKICAgICAgICAgICAgICAgICAvLyB0aGVtIHRvIHRo
aXMgbm9kZSdzIG1fanVtcHMgbGlzdC4KLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmso
dGhpcyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAg
ICAgICAgICAgb3AubV9qdW1wcy5jbGVhcigpOwogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBs
YXN0T3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwpAQCAtMjY3Niw3ICsyNTk3LDcgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgY2FzZSBZ
YXJyT3BDb2RlOjpQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW46IHsKICAgICAgICAgICAg
ICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAg
ICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAg
ICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBv
cmFyeSA9IG1fcmVncy5yZWdUMDsKICAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRp
dHlNYXhDb3VudCA9PSAxKTsKIAogICAgICAgICAgICAgICAgIC8vIFVwb24gZW50cnkgdG8gYSBH
cmVlZHkgcXVhbnRpZmllZCBzZXQgb2YgcGFyZW50aGVzZSBzdG9yZSB0aGUgaW5kZXguCkBAIC0y
Njk0LDEyICsyNjE1LDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3IgY2Fw
dHVyaW5nIHBhcmVucywgY291bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBhcnJheT8K
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBl
OjpHcmVlZHkpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5J
bmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6
YmVnaW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgICAgICBz
dG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsg
QmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
b3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1l
KGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXNPbmNlOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJlIGNhcHR1
cmluZywgc3RvcmUgdGhlIHN0YXJ0aW5nIGluZGV4IHZhbHVlIHRvIHRoZQpAQCAtMjcxMywyMyAr
MjYzNCwyMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6
OkZpeGVkQ291bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dE9mZnNldCArPSB0ZXJt
LT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlucHV0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihp
bmRleCwgSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0z
MihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHNldFN1YnBhdHRlcm5TdGFydChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3Vi
cGF0dGVybklkKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBh
dHRlcm5JZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQobV9y
ZWdzLmluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZDogewogICAgICAg
ICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwotICAgICAgICAgICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVn
cy5yZWdUMDsKICAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlNYXhDb3VudCA9
PSAxKTsKIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXN0ZWQgYWx0ZXJuYXRpdmUgbWF0
Y2hlZCB3aXRob3V0IGNvbnN1bWluZyBhbnkgY2hhcmFjdGVycywgcHVudCB0aGlzIGJhY2sgdG8g
dGhlIGludGVycHJldGVyLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4gQWRkIGFiaWxpdHkgZm9yIHRoZSBZ
QVJSIEpJVCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBuZXN0ZWQgZXhw
cmVzc2lvbnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAg
ICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZp
eGVkQ291bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXpl
KQotICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChicmFuY2gzMihF
cXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhl
Y3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVn
cy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKIAog
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3Jl
IHRoZSBlbmRpbmcgaW5kZXggdmFsdWUgdG8gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2FwdHVy
ZXMgYXJyYXksIG9mZnNldHRpbmcgYXMgbmVjZXNzYXJ5LgpAQCAtMjc0MCwyMCArMjY2MSwyMCBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAg
ICAgaWYgKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2Rl
OjpJbmNsdWRlU3VicGF0dGVybnMpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5w
dXRPZmZzZXQgPSBtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1YjMyKGluZGV4LCBJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJs
ZXI6OkltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0U3VicGF0dGVybkVuZChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVz
ZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKGluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5z
dWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZCht
X3JlZ3MuaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2VzIGFyZSBxdWFu
dGlmaWVkIEdyZWVkeSB0aGVuIGFkZCBhIGxhYmVsIHRvIGp1bXAgYmFjawogICAgICAgICAgICAg
ICAgIC8vIHRvIGlmIHdlIGdldCBhIGZhaWxlZCBtYXRjaCBmcm9tIGFmdGVyIHRoZSBwYXJlbnRo
ZXNlcy4gRm9yIE5vbkdyZWVkeQogICAgICAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzLCBsaW5r
IHRoZSBqdW1wIGZyb20gYmVmb3JlIHRoZSBzdWJwYXR0ZXJuIHRvIGhlcmUuCiAgICAgICAgICAg
ICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQot
ICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7
CiAgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlv
dXNPcF07Ci0gICAgICAgICAgICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI3
NjYsMTEgKzI2ODcsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICAgICAgICAgIEFTU0VSVCghdGVybS0+Y2FwdHVyZSgpKTsKIAogICAgICAgICAg
ICAgICAgIC8vIFVwb24gZW50cnkgc2V0IGEgbGFiZWwgdG8gbG9vcCBiYWNrIHRvLgotICAgICAg
ICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9y
ZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBz
dGFydCBpbmRleCBvZiB0aGUgY3VycmVudCBtYXRjaDsgd2UgbmVlZCB0byByZWplY3QgemVybwog
ICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBtYXRjaGVzLgotICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShpbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlc1Rlcm1pbmFsOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShtX3JlZ3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXNUZXJtaW5hbDo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJw
YXR0ZXJuVGVybWluYWxFbmQ6IHsKQEAgLTI3ODEsMTUgKzI3MDIsMTUgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4gQWRkIGFiaWxp
dHkgZm9yIHRoZSBZQVJSIEpJVCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAgIC8vIGhhbmRs
ZSBuZXN0ZWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25zdW1pbmcgY2hh
cmFjdGVycwogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRp
ZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5t
X21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVu
ZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRl
cm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZv
aWQqKSkpKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgbWF0Y2ggaXMg
bm9uLXplcm8sIHdlIGNhbiBhY2NlcHQgaXQgYW5kCiAgICAgICAgICAgICAgICAgLy8gbG9vcCBi
YWNrIHVwIHRvIHRoZSBoZWFkIG9mIHRoZSBzdWJwYXR0ZXJuLgotICAgICAgICAgICAgICAgIGp1
bXAoYmVnaW5PcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5P
cC5tX3JlZW50cnkpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9p
bnQgdG8ganVtcCB0byB3aGVuIHdlIHN0b3AgbWF0Y2hpbmcgLSB3ZSB3aWxsCiAgICAgICAgICAg
ICAgICAgLy8gZG8gc28gb25jZSB0aGUgc3VicGF0dGVybiBjYW5ub3QgbWF0Y2ggYW55IG1vcmUu
Ci0gICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAg
ICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0yODE2LDI0ICsyNzM3LDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBmb3IgY2FwdHVyaW5nIHBhcmVucywgY291bGQgdXNlIHRoZSBpbmRleCBp
biB0aGUgY2FwdHVyZSBhcnJheT8KICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlU
eXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkgfHwgdGVybS0+cXVhbnRpdHlUeXBlID09IFF1
YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKFRydXN0ZWRJbW0zMigwKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgo
KSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRI
ZWFkSW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlw
ZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbklu
ZGV4KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0UmVnID0gcmVnVDA7Ci0gICAgICAgICAg
ICAgICAgICAgIFJlZ2lzdGVySUQgbmV3UGFyZW5Db250ZXh0UmVnID0gcmVnVDE7CisgICAgICAg
ICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSBt
X3JlZ3MucmVnVDA7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAg
ICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCksIGN1cnJQYXJlbkNvbnRleHRS
ZWcpOwogICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNv
bnRleHRSZWcpOwotICAgICAgICAgICAgICAgICAgICBzdG9yZVB0cihjdXJyUGFyZW5Db250ZXh0
UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihjdXJyUGFyZW5Db250ZXh0UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAg
ICAgICAgICAgICBzdG9yZVRvRnJhbWUobmV3UGFyZW5Db250ZXh0UmVnLCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJ
bmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2F2ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNv
bnRleHRSZWcsIHJlZ1QyLCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBh
cmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOworICAgICAg
ICAgICAgICAgICAgICBzYXZlUGFyZW5Db250ZXh0KG5ld1BhcmVuQ29udGV4dFJlZywgbV9yZWdz
LnJlZ1QyLCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2Vz
Lmxhc3RTdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2Fw
dHVyaW5nLCBzdG9yZSB0aGUgc3RhcnRpbmcgaW5kZXggdmFsdWUgdG8gdGhlCkBAIC0yODQzLDE1
ICsyNzY0LDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAvLyBvZmZzZXRzIG9ubHkgYWZ0ZXJ3YXJkcywgYXQgdGhlIHBvaW50IHRo
ZSByZXN1bHRzIGFycmF5IGlzCiAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYWNjZXNzZWQuCiAg
ICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJ
VENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1f
cmVncy5yZWdUMDsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRPZmZzZXQgPSBt
X2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50KQog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRPZmZzZXQgKz0gdGVybS0+cGFyZW50aGVzZXMu
ZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1
dE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlu
cHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQp
LCBpbmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJu
U3RhcnQoaW5kZXhUZW1wb3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3Vi
cGF0dGVyblN0YXJ0KGluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KG1fcmVncy5pbmRleCwgdGVy
bS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAjZWxzZSAv
LyAhWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUwogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yODY3LDEzICsyNzg4LDEzIEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBh
YmlsaXR5IGZvciB0aGUgWUFSUiBKSVQgdG8gcHJvcGVybHkKICAgICAgICAgICAgICAgICAvLyBo
YW5kbGUgbmVzdGVkIGV4cHJlc3Npb25zIHRoYXQgY2FuIG1hdGNoIHdpdGhvdXQgY29uc3VtaW5n
IGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1
YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICF0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlv
bi0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5h
cHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAg
ICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKiBzaXplb2Yodm9pZCopKSkpOwogCi0gICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJ
RCBjb3VudFRlbXBvcmFyeSA9IHJlZ1QxOworICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QxOwogCiAgICAg
ICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKICAg
ICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFy
eSk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFRlbXBvcmFy
eSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgY291bnRUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShj
b3VudFRlbXBvcmFyeSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1Bh
cmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHBhcmVudGhlc2UgYXJlIGNhcHR1cmluZywgc3RvcmUgdGhlIGVuZGluZyBpbmRleCB2YWx1
ZSB0byB0aGUKQEAgLTI4ODMsMTQgKzI4MDQsMTQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndh
cmRzLCBhdCB0aGUgcG9pbnQgdGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAv
LyBiZWluZyBhY2Nlc3NlZC4KICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYm
IG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVn
VDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGluZGV4VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNrZWRPZmZzZXQg
LSB0ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZz
ZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihpbnB1dE9m
ZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGlucHV0T2Zmc2V0KSwgaW5k
ZXhUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChp
bmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJu
RW5kKGluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChtX3JlZ3MuaW5kZXgsIHRlcm0tPnBhcmVudGhl
c2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIHBhcmVudGhlc2VzIGFyZSBxdWFudGlmaWVkIEdyZWVkeSB0aGVuIGFkZCBhIGxh
YmVsIHRvIGp1bXAgYmFjawpAQCAtMjg5OCwxNSArMjgxOSwxNSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gcGFyZW50aGVzZXMs
IGxpbmsgdGhlIGp1bXAgZnJvbSBiZWZvcmUgdGhlIHN1YnBhdHRlcm4gdG8gaGVyZS4KICAgICAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVl
ZHkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0g
cXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDMyKEJlbG93
LCBjb3VudFRlbXBvcmFyeSwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhi
ZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGNvdW50VGVtcG9yYXJ5LCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhiZWdpbk9wLm1fcmVl
bnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAganVtcChiZWdpbk9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5qdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAg
ICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkg
ewogICAgICAgICAgICAgICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZp
b3VzT3BdOwotICAgICAgICAgICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluayh0aGlzKTsK
LSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYmVnaW5PcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICB9CiAjZWxz
ZSAvLyAhWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUwogICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTIxLDEyICsyODQyLDEyIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBT
dG9yZSB0aGUgY3VycmVudCBpbmRleCAtIGFzc2VydGlvbnMgc2hvdWxkIG5vdCB1cGRhdGUgaW5k
ZXgsIHNvCiAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHJlc3RvcmUgaXQgdXBv
biBhIHN1Y2Nlc3NmdWwgbWF0Y2guCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBz
dG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOjpiZWdpbkluZGV4KCkpOwogCiAgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgCiAgICAgICAgICAgICAgICAgb3AubV9jaGVja0FkanVzdCA9
IG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAg
aWYgKG9wLm1fY2hlY2tBZGp1c3QpCi0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9w
Lm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMy
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsK
IAogICAgICAgICAgICAgICAgIG1fY2hlY2tlZE9mZnNldCAtPSBvcC5tX2NoZWNrQWRqdXN0Owog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjkzNiwxMyArMjg1NywxMyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBSZXN0
b3JlIHRoZSBpbnB1dCBpbmRleCB2YWx1ZS4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAg
ICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5m
b1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsK
IAogICAgICAgICAgICAgICAgIC8vIElmIGludmVydGVkLCBhIHN1Y2Nlc3NmdWwgbWF0Y2ggb2Yg
dGhlIGFzc2VydGlvbiBtdXN0IGJlIHRyZWF0ZWQKICAgICAgICAgICAgICAgICAvLyBhcyBhIGZh
aWx1cmUsIHNvIGp1bXAgdG8gYmFja3RyYWNraW5nLgogICAgICAgICAgICAgICAgIGlmICh0ZXJt
LT5pbnZlcnQoKSkgewotICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91
c09wXTsKQEAgLTI5NzAsNyArMjg5MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgIC0tb3BJbmRleDsKIAogICAgICAgICAgICAgaWYgKG1f
ZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCYWNr
dHJhY2sob3BJbmRleCwgbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldEZvckJhY2t0cmFjayhvcEluZGV4LCBtX2ppdC5sYWJlbCgpKTsKIAogICAgICAgICAgICAg
WWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChvcC5tX29w
KSB7CkBAIC0zMDE1LDcgKzI5MzYsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyB0aGUgbGFzdCBhbHRlcm5hdGl2
ZT8gSWYgbm90LCB0aGVuIGlmIHdlIGJhY2t0cmFjayB0byB0aGlzIHBvaW50IHdlIGp1c3QKICAg
ICAgICAgICAgICAgICAvLyBuZWVkIHRvIGp1bXAgdG8gdHJ5IHRvIG1hdGNoIHRoZSBuZXh0IGFs
dGVybmF0aXZlLgogICAgICAgICAgICAgICAgIGlmIChtX29wc1tvcC5tX25leHRPcF0ubV9vcCAh
PSBZYXJyT3BDb2RlOjpCb2R5QWx0ZXJuYXRpdmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8obV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSwg
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKG1f
b3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9w
ID0gbV9vcHNbb3AubV9uZXh0T3BdOwpAQCAtMzAyOSwxNyArMjk1MCwxNyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICBib29sIG9u
Y2VUaHJvdWdoID0gZW5kT3AubV9uZXh0T3AgPT0gbm90Rm91bmQ7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgSnVtcExpc3QgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXM7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxhc3RTdGlja3lBbHRl
cm5hdGl2ZUZhaWx1cmVzOwogCiAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGdlbmVyYXRlIGNv
ZGUgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGJhY2t0cmFjayBvdXQgb2YgYW4gYXR0ZW1wdGVk
IG1hdGNoCiAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuIElmIHRo
aXMgaXMgYSAnb25jZSB0aHJvdWdoJyBzZXQgb2YgYWx0ZXJuYXRpdmVzIHRoZW4gd2UKICAgICAg
ICAgICAgICAgICAvLyBoYXZlIG5vdGhpbmcgdG8gZG8gLSBsaW5rIHRoaXMgc3RyYWlnaHQgdGhy
b3VnaCB0byB0aGUgRW5kLgogICAgICAgICAgICAgICAgIGlmIChvbmNlVGhyb3VnaCkKLSAgICAg
ICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8o
ZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9wYXR0ZXJuLnN0aWNreSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJdCBpcyBhIHN0aWNreSBwYXR0ZXJuIGFuZCB0aGUgbGFzdCBhbHRlcm5hdGl2
ZSBmYWlsZWQsIGp1bXAgdG8gdGhlIGVuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KGxhc3RTdGlja3lBbHRlcm5h
dGl2ZUZhaWx1cmVzLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZh
aWx1cmVzLCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcGF0dGVy
bi5tX2JvZHktPm1faGFzRml4ZWRTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPiBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplIC0gYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSAxKSkgewpA
QCAtMzA0NywxMSArMjk2OCwxMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB3ZSBvbWl0
IHRoZSBzdG9yZSBvZiB0aGUgc3RhcnQgaW5kZXggdW50aWwgdGhlIHBhdHRlcm4gaGFzIG1hdGNo
ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiBqdXN0IGxpbmsgdGhl
IGJhY2t0cmFjayBvdXQgb2YgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgc3RyYWlnaHQgdG8gdGhlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWFkIG9mIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGJlZ2lu
T3AtPm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IGdlbmVyYXRlIGEgdHJhbXBvbGluZSBvZiBjb2RlIHRvIGV4ZWN1dGUgYmVmb3JlIGxvb3Bpbmcg
YmFjawogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJvdW5kIHRvIHRoZSBmaXJzdCBhbHRl
cm5hdGl2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
aygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGFkdmFu
Y2UgYW5kIHJldHJ5IGZvciBhIHN0aWNreSBwYXR0ZXJuLiBBbmQgaXQgaXMgYWxyZWFkeSBoYW5k
bGVkIGJlZm9yZSB0aGlzIGJyYW5jaC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bV9wYXR0ZXJuLnN0aWNreSgpKTsKQEAgLTMwNTksMTMgKzI5ODAsMTMgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHBhdHRlcm4gc2l6ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGlu
ZGV4IGZvciB1c2UgaWYgd2UgbWF0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
cGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IDEpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6
ZSAtIDEpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSAtIDEpLCBtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4LCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldE1hdGNoU3RhcnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4LCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0zMDc3LDE2ICsyOTk4LDE2
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWx0YSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1T
aXplIC0gYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChkZWx0YSAhPSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIz
MihJbW0zMihkZWx0YSAtIDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
anVtcChiZWdpbk9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEgLSAxKSwgbV9yZWdzLmlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AtPm1f
cmVlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBoYXMgbWluaW11bSBz
aXplIDB4RkZGRkZGRkZ1LCB0aGVuIHRoZXJlIGNhbm5vdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJlIHN1ZmZpY2VudCBpbnB1dCBhdmFpbGFibGUgdG8gaGFuZGxlIHRoaXMsIHNv
IGp1c3QgZmFsbCB0aHJvdWdoLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGRlbHRhID0gYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0
YSAhPSAweEZGRkZGRkZGdSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIGlucHV0IGJlY2F1c2Ugd2UgYXJlIGluY3JlbWVudGluZyB0aGUgaW5w
dXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGRlbHRhICsg
MSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1dCgp
LmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEgKyAxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1
dCgpLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0zMDk5LDcgKzMwMjAsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gICAgZm9sbG93aW5nIGEgZmFpbGVkIGlu
cHV0IGNoZWNrLgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gRWl0aGVy
IHdheSwgd2UgaGF2ZSBqdXN0IGZhaWxlZCB0aGUgaW5wdXQgY2hlY2sgZm9yIHRoZSBmaXJzdCBh
bHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICBMYWJlbCBmaXJzdElucHV0Q2hlY2tGYWlsZWQo
dGhpcyk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpcnN0SW5wdXRD
aGVja0ZhaWxlZCgmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgY29kZSB0
byBoYW5kbGUgaW5wdXQgY2hlY2sgZmFpbHVyZXMgZnJvbSBhbHRlcm5hdGl2ZXMgZXhjZXB0IHRo
ZSBsYXN0LgogICAgICAgICAgICAgICAgIC8vIHByZXZPcCBpcyB0aGUgYWx0ZXJuYXRpdmUgd2Un
cmUgaGFuZGxpbmcgYSBiYWlsIG91dCBmcm9tIChpbml0aWFsbHkgQmVnaW4pLCBhbmQKQEAgLTMx
MTAsNyArMzAzMSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICBZYXJyT3AqIHByZXZPcCA9IGJlZ2luT3A7CiAgICAgICAgICAgICAg
ICAgWWFyck9wKiBuZXh0T3AgPSAmbV9vcHNbYmVnaW5PcC0+bV9uZXh0T3BdOwogICAgICAgICAg
ICAgICAgIHdoaWxlIChuZXh0T3AtPm1fb3AgIT0gWWFyck9wQ29kZTo6Qm9keUFsdGVybmF0aXZl
RW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZPcC0+bV9qdW1wcy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBwcmV2T3AtPm1fanVtcHMubGluaygmbV9qaXQpOwogCiAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgZ2V0IGhlcmUgaWYgYW4gaW5wdXQgY2hlY2sgZmFp
bHMsIGl0IGlzIG9ubHkgd29ydGggY2hlY2tpbmcgYWdhaW4KICAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgdGhlIG5leHQgYWx0ZXJuYXRpdmUgaGFzIGEgbWluaW11bSBzaXplIGxlc3MgdGhhbiB0
aGUgbGFzdC4KQEAgLTMxMTksMTMgKzMwNDAsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VidHJhY3QgZGVs
dGEgYmFjayBvdXQsIGFuZCByZWR1Y2UgdGhpcyBjb2RlLiBTaG91bGQgcGVyZm9ybWFuY2UgdGVz
dAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJlbmVmaXQgb2YgdGhpcy4KICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbHRhID0gcHJldk9wLT5tX2FsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplIC0gbmV4dE9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoZGVsdGEpLCBpbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihkZWx0YSksIGluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGp1bXAobmV4dE9wLT5tX3JlZW50cnkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZmFpbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGRlbHRhKSwgbV9yZWdzLmluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwgPSBqdW1w
SWZOb0F2YWlsYWJsZUlucHV0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuanVtcChuZXh0T3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmYWlsLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPCBuZXh0T3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGQz
MihJbW0zMihuZXh0T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobmV4dE9wLT5tX2FsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplIC0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
KSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgcHJldk9wID0gbmV4dE9wOwog
ICAgICAgICAgICAgICAgICAgICBuZXh0T3AgPSAmbV9vcHNbbmV4dE9wLT5tX25leHRPcF07CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzEzNSwxNCArMzA1NiwxNCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMg
aW5zdWZmaWNpZW50IGlucHV0IHRvIHJ1biB0aGUgbGFzdCBhbHRlcm5hdGl2ZSwgdGhlbiBmb3Ig
J29uY2UgdGhyb3VnaCcKICAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgd2UgYXJlIGRv
bmUgLSBqdXN0IGp1bXAgYmFjayB1cCBpbnRvIHRoZSBmb3J3YXJkcyBtYXRjaGluZyBwYXRoIGF0
IHRoZSBFbmQuCiAgICAgICAgICAgICAgICAgaWYgKG9uY2VUaHJvdWdoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMubGlua1RvKGVuZE9wLm1fcmVlbnRyeSwgdGhpcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGp1bXAoZW5kT3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOworICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5qdW1wKGVuZE9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIEZvciBy
ZXBlYXRpbmcgYWx0ZXJuYXRpdmVzLCBsaW5rIGFueSBpbnB1dCBjaGVjayBmYWlsdXJlIGZyb20g
dGhlIGxhc3QgYWx0ZXJuYXRpdmUgdG8KICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50Lgot
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNUb1Vw
ZGF0ZU1hdGNoU3RhcnQgPSAhbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemU7CiAKQEAg
LTMxNTEsNyArMzA3Miw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgICAgICAvLyBkaXNqdW5jdGlvbiBpcyAwLCBlLmcuIC9hKnxiLykuCiAg
ICAgICAgICAgICAgICAgaWYgKG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ICYmIGFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXggaXMg
YWxyZWFkeSBpbmNyZW1lbnRlZCBieSAxLCBzbyBqdXN0IHN0b3JlIGl0IG5vdyEKLSAgICAgICAg
ICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHNl
dE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgbmVlZHNUb1Vw
ZGF0ZU1hdGNoU3RhcnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTMxNjQsMjIg
KzMwODUsMjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
ICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gbV9wYXR0
ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgaGFkIHRoZSBzYW1lIG1pbmltdW0gc2l6ZSBhcyB0aGUg
ZGlzanVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHNpbXBseSBpbmNy
ZW1lbnQgaW5wdXQgcG9zIGJ5IDEsIG5vIGFkanVzdG1lbnQgYmFzZWQgb24gbWluaW11bSBzaXpl
LgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1pbnVtdW0gZm9yIHRoZSBsYXN0
IGFsdGVybmF0aXZlIHdhcyBvbmUgZ3JlYXRlciB0aGFuIHRoYW4gdGhhdAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZm9yIHRoZSBkaXNqdW5jdGlvbiwgd2UncmUgYWxyZWFkeSBwcm9ncmVz
c2VkIGJ5IDEsIG5vdGhpbmcgdG8gZG8hCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBkZWx0YSA9IChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIG1fcGF0dGVybi5tX2JvZHkt
Pm1fbWluaW11bVNpemUpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIEp1bXAgbWF0Y2hGYWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0
KCk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1hdGNoRmFpbGVk
ID0ganVtcElmTm9BdmFpbGFibGVJbnB1dCgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChu
ZWVkc1RvVXBkYXRlTWF0Y2hTdGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihtX3BhdHRl
cm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldE1hdGNoU3RhcnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fcGF0dGVy
bi5tX2JvZHktPm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0zMTg3LDIyICszMTA4LDIy
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
ICAgICAgICAgLy8gZm9yIHRoZSBib2R5IGFzIGEgd2hvbGUuIElmIG5vIG1vcmUgaXMgbmVlZGVk
IHRoZW4gd2UgZG9udCBuZWVkIGFuIGFkZGl0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgLy8g
aW5wdXQgY2hlY2sgaGVyZSAtIGp1bXAgc3RyYWlnaHQgYmFjayB1cCB0byB0aGUgc3RhcnQgb2Yg
dGhlIGZpcnN0IGFsdGVybmF0aXZlLgogICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5PcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSBtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmlt
dW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAganVtcChiZWdpbk9wLT5tX3JlZW50cnkp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChiZWdpbk9wLT5tX3JlZW50cnkp
OwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID4gbV9wYXR0ZXJuLm1fYm9k
eS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0z
MihiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9k
eS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSAtIG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpLCBtX3JlZ3Mu
aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YjMyKEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgLSBi
ZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksIHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICAgICAganVtcChmaXJzdElucHV0Q2hlY2tGYWlsZWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVy
OjpJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+bV9hbHRl
cm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoZmlyc3RJbnB1dENoZWNrRmFpbGVk
KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGp1
bXAgdG8gaGVyZSBpZiB3ZSBpdGVyYXRlIHRvIHRoZSBwb2ludCB0aGF0IHRoZXJlIGlzIGluc3Vm
ZmljaWVudCBpbnB1dCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBydW4gYW55IG1hdGNoZXMs
IGFuZCBuZWVkIHRvIHJldHVybiBhIGZhaWx1cmUgc3RhdGUgZnJvbSBKSVQgY29kZS4KLSAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hGYWlsZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hGYWlsZWQubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICAgICAgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXMubGluaygmbV9qaXQpOwog
ICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIGdlbmVy
YXRlRmFpbFJldHVybigpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzI2MiwxNCArMzE4
MywxNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
ICAgICAgICAgLy8gbGluayB0aGUgYmFja3RyYWNrcyBkaXJlY3RseSB0byB0aGVpciBkZXN0aW5h
dGlvbi4KICAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gbGluayB0aGUg
YmFja3RyYWNrcyBoZXJlLgotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRl
LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tB
ZGp1c3QpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIob3AubV9jaGVja0FkanVzdCksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNMYXN0QWx0ZXJuYXRpdmUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFuIGFsdGVybmF0aXZlIHRoYXQgaXMgbm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRv
IGl0cyBzdWNjZXNzb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG5leHRPcC5tX3Jl
ZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChuZXh0T3AubV9yZWVu
dHJ5KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgewogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2
ZXMgbXVzdCBqdW1wIGJhY2sgdG8gdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHRPcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbmV4dE9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHNpbmdsZSBhbHRlcm5h
dGl2ZSBvbiBpdHMgb3duIGNhbiBmYWxsIHRocm91Z2guCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zMjc4LDEwICszMTk5LDEw
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlcyB3aGVyZSB3ZSBjYW4gbGluayB0aGUgYmFja3Ry
YWNrcyBkaXJlY3RseSB0byB0aGVpciBkZXN0aW5hdGlvbnMuCiAgICAgICAgICAgICAgICAgICAg
IGlmICghaXNMYXN0QWx0ZXJuYXRpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFu
IGFsdGVybmF0aXZlIHRoYXQgaXMgbm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRvIGl0cyBzdWNj
ZXNzb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtU
byhuZXh0T3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUubGlua1RvKG5leHRPcC5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzQmVnaW4pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSBsYXN0IG9mIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmVzIG11c3QganVtcCBi
YWNrIHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChuZXh0T3AubV9qdW1wcywgdGhpcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNrdHJh
Y2tzVG9KdW1wTGlzdChuZXh0T3AubV9qdW1wcywgJm1faml0KTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSBhbHRl
cm5hdGl2ZSBvbiBpdHMgb3duIGRvIG5vdGhpbmcgLSBpdCBjYW4gZmFsbCB0aHJvdWdoLgogICAg
ICAgICAgICAgICAgIH0KQEAgLTMzMzEsNyArMzI1Miw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBlbmQgb2Yg
YSBub24tc2ltcGxlIHNldCBvZiBhbHRlcm50aXZlcyB3ZSBuZWVkIHRvIGp1bXAKICAgICAgICAg
ICAgICAgICAvLyB0byB0aGUgYmFja3RyYWNraW5nIHJldHVybiBhZGRyZXNzIHNldCB1cCBkdXJp
bmcgZ2VuZXJhdGlvbi4KICAgICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBZYXJyT3BDb2Rl
OjpOZXN0ZWRBbHRlcm5hdGl2ZUVuZCkgewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5n
U3RhdGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIFBsYW50IGEganVt
cCB0byB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CkBAIC0zMzY4LDcg
KzMyODksNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAg
ICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQg
aWYgY2FwdHVyaW5nIG9yIGdyZWVkeS4KICAgICAgICAgICAgICAgICBpZiAoKHRlcm0tPmNhcHR1
cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVy
bnMpIHx8IHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgY2FwdHVyaW5nLCBjbGVhciB0aGUgY2FwdHVyZSAod2Ugb25s
eSBuZWVkIHRvIHJlc2V0IHN0YXJ0KS4KICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNh
cHR1cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0
dGVybnMpCkBAIC0zMzc4LDEyICszMjk5LDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlw
ZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDbGVhciB0aGUgZmxhZyBpbiB0aGUgc3RhY2tmcmFtZSBpbmRpY2F0aW5nIHdlIHJhbiB0aHJv
dWdoIHRoZSBzdWJwYXR0ZXJuLgogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSnVtcCB0byBhZnRlciB0aGUgcGFyZW50aGVzZXMsIHNraXBwaW5nIHRoZSBzdWJwYXR0ZXJu
LgotICAgICAgICAgICAgICAgICAgICAgICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVu
dHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0
T3BdLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2t0cmFjayBm
cm9tIGFmdGVyIHRoZSBwYXJlbnRoZXNlcywgd2hlbiBza2lwcGluZyB0aGUgc3VicGF0dGVybiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwganVtcCBiYWNrIHRvIGhlcmUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2go
KTsKQEAgLTMzOTQsMTMgKzMzMTUsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJt
OwogCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVy
VHlwZTo6Rml4ZWRDb3VudCkgewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ug
c2hvdWxkIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIHBhcmVudGhlc2VzLCBvciBpZiB3ZQogICAg
ICAgICAgICAgICAgICAgICAvLyBhcmUgY3VycmVudGx5IGluIGEgc3RhdGUgd2hlcmUgd2UgaGFk
IHNraXBwZWQgb3ZlciB0aGUgc3VicGF0dGVybgogICAgICAgICAgICAgICAgICAgICAvLyAoaW4g
d2hpY2ggY2FzZSB0aGUgZmxhZyB2YWx1ZSBvbiB0aGUgc3RhY2sgd2lsbCBiZSAtMSkuCiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0t
PmZyYW1lTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBlZCA9IGJy
YW5jaDMyKEVxdWFsLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNG
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgp
KSAqIHNpemVvZih2b2lkKikpLCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkU2tpcHBlZCA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lkKikpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSk7CiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3IgR3JlZWR5IHBhcmVudGhlc2VzLCB3ZSBza2lwIGFm
dGVyIGhhdmluZyBhbHJlYWR5IHRyaWVkIGdvaW5nCkBAIC0zNDE0LDcgKzMzMzUsNyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtYXRjaGluZyBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRl
cm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhiZWdpbk9wLm1fcmVl
bnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhi
ZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTM0
MzUsNyArMzM1Niw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAvLyBxdWFudGlmaWVkIHdpdGggYSBtaW5pbXVtIG9mIHplcm8pIGp1
bXAgYmFjayB0byB0aGUgZm9yd2FyZHMgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAvLyBwYXRo
IGF0IHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1f
bmV4dE9wXTsKLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRP
cC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGlua1RvKGVuZE9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNT
dWJwYXR0ZXJuVGVybWluYWxFbmQ6CkBAIC0zNDY1LDQwICszMzg2LDQwIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwogCiAgICAgICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRD
b3VudCkgewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQp
OwogCi0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgY3VyclBhcmVuQ29udGV4dFJlZyA9
IHJlZ1QwOwotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4dFJl
ZyA9IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjdXJyUGFyZW5Db250ZXh0UmVnID0gbV9yZWdzLnJlZ1QwOworICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3Mu
cmVnVDE7CiAKICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJ
bmRleCgpLCBjdXJyUGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3RvcmVQYXJlbkNvbnRleHQoY3VyclBhcmVuQ29udGV4dFJlZywg
cmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVzZXMu
bGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdG9yZVBhcmVuQ29udGV4dChjdXJyUGFyZW5Db250ZXh0UmVnLCBtX3JlZ3Mu
cmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVzZXMu
bGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGZyZWVQYXJlbkNvbnRleHQoY3VyclBhcmVu
Q29udGV4dFJlZywgbmV3UGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgc3Rv
cmVUb0ZyYW1lKG5ld1BhcmVuQ29udGV4dFJlZywgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsg
QmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9IHJlZ1Qw
OworICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
b3VudFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMDsKICAgICAgICAgICAgICAgICAgICAgbG9hZEZy
b21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXM6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAg
ICAgICBKdW1wIHplcm9MZW5ndGhNYXRjaCA9IGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFRlbXBv
cmFyeSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5n
dGhNYXRjaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRU
ZW1wb3JhcnkpOwogCi0gICAgICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
Y291bnRUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFRlbXBvcmFyeSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkpOwogCi0g
ICAgICAgICAgICAgICAgICAgIGp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRy
eSk7CiAKLSAgICAgICAgICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CiAKICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGZsYWcgaW4gdGhlIHN0YWNrZnJhbWUgaW5kaWNh
dGluZyB3ZSBkaWRuJ3QgcnVuIHRocm91Z2ggdGhlIHN1YnBhdHRlcm4uCi0gICAgICAgICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0x
KSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpi
ZWdpbkluZGV4KCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1
bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5qdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIEdyZWVkeSwganVtcCB0byB0aGUgZW5kLgogICAgICAgICAgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgYmFja3RyYWNrIGZyb20gYWZ0ZXIgdGhlIHBh
cmVudGhlc2VzLCB3aGVuIHNraXBwaW5nIHRoZSBzdWJwYXR0ZXJuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2lsbCBqdW1wIGJhY2sgdG8gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpAQCAtMzUxMyw3ICsz
NDM0LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRl
cm0tPmZyYW1lTG9jYXRpb247CiAKQEAgLTM1MjEsNyArMzQ0Miw3IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIHBhcmVudGhlc2Vz
LCBvciBpZiB3ZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGN1cnJlbnRseSBpbiBh
IHN0YXRlIHdoZXJlIHdlIGhhZCBza2lwcGVkIG92ZXIgdGhlIHN1YnBhdHRlcm4KICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIChpbiB3aGljaCBjYXNlIHRoZSBmbGFnIHZhbHVlIG9uIHRoZSBz
dGFjayB3aWxsIGJlIC0xKS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBl
ZCA9IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRl
eCgpKSAqIHNpemVvZih2b2lkKikpLCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhhZFNraXBwZWQgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAg
KyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSkgKiBzaXplb2Yodm9pZCop
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSkpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgR3JlZWR5IHBhcmVudGhlc2VzLCB3ZSBza2lwIGFmdGVyIGhhdmluZyBh
bHJlYWR5IHRyaWVkIGdvaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIHRo
ZSBzdWJwYXR0ZXJuLCBzbyBpZiB3ZSBnZXQgaGVyZSB3ZSdyZSBkb25lLgpAQCAtMzUzNCwyNCAr
MzQ1NSwyNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaGluZyBwYXRoLgogICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3Jl
ZWR5KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBiZWdpblRl
bXBvcmFyeSA9IHJlZ1QwOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJ
RCBjb3VudFRlbXBvcmFyeSA9IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmVnaW5UZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjb3VudFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSwgYmVnaW5UZW1wb3JhcnkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIoRXF1YWwsIGJlZ2luVGVtcG9yYXJ5LCBU
cnVzdGVkSW1tMzIoLTEpKS5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnksIHRoaXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBi
ZWdpblRlbXBvcmFyeSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhi
ZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgSnVt
cExpc3QgZXhjZWVkZWRNYXRjaExpbWl0OworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGV4Y2VlZGVkTWF0Y2hMaW1pdDsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNG
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4
KCksIGNvdW50VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRl
ZE1hdGNoTGltaXQuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgY291bnRUZW1wb3Jhcnks
IEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZWVkZWRNYXRjaExpbWl0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBjb3VudFRlbXBvcmFyeSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgYmVnaW5UZW1w
b3JhcnkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIG1fcmVncy5pbmRl
eCwgYmVnaW5UZW1wb3JhcnkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWVkZWRNYXRjaExpbWl0LmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQubGluaygmbV9qaXQpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpAQCAtMzU3MywxNyArMzQ5NCwxNyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gb2YgYSBw
YXJlbnRoZXRpY2FsIGFzc2VydGlvbiBpZiBlaXRoZXIgd2UgbmVlZCB0byBjb3JyZWN0CiAgICAg
ICAgICAgICAgICAgLy8gdGhlIGlucHV0IGluZGV4LCBvciB0aGUgYXNzZXJ0aW9uIHdhcyBpbnZl
cnRlZC4KICAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCB8fCB0ZXJtLT5pbnZl
cnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0
KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
b3AubV9jaGVja0FkanVzdCksIG1fcmVncy5pbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAg
Ly8gSW4gYW4gaW52ZXJ0ZWQgYXNzZXJ0aW9uIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHN1YnBhdHRl
cm4KICAgICAgICAgICAgICAgICAgICAgLy8gaXMgdHJlYXRlZCBhcyBhIHN1Y2Nlc3NmdWwgbWF0
Y2ggLSBqdW1wIHRvIHRoZSBlbmQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnBh
dHRlcm4uIFdlIGFscmVhZHkgaGF2ZSBhZGp1c3RlZCB0aGUgaW5wdXQgcG9zaXRpb24KICAgICAg
ICAgICAgICAgICAgICAgLy8gYmFjayB0byB0aGF0IGJlZm9yZSB0aGUgYXNzZXJ0aW9uLCB3aGlj
aCBpcyBjb3JyZWN0LgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGVuZE9wLm1fcmVlbnRyeSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5qdW1wKGVuZE9wLm1fcmVlbnRyeSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTM2MDIsNyArMzUyMyw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyB0aGlzIGJ1ZyB0b28gKHByZXN1bWFibHkg
YmVjYXVzZSB0aGV5IHVzZSBZQVJSISkKIAogICAgICAgICAgICAgICAgIC8vIE5ldmVyIGJhY2t0
cmFjayBpbnRvIGFuIGFzc2VydGlvbjsgbGF0ZXIgZmFpbHVyZXMgYmFpbCB0byBiZWZvcmUgdGhl
IGJlZ2luLgotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFj
a3NUb0p1bXBMaXN0KG9wLm1fanVtcHMsIHRoaXMpOworICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG9wLm1fanVtcHMsICZtX2ppdCk7
CiAKICAgICAgICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNP
cF07CiAgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0IC09IGxhc3RPcC5tX2NoZWNrQWRq
dXN0OwpAQCAtMzYzNyw3ICszNTU4LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICBZYXJyT3BDb2RlIGFsdGVybmF0aXZlTmV4dE9wQ29kZSA9IFlh
cnJPcENvZGU6OlNpbXBsZU5lc3RlZEFsdGVybmF0aXZlTmV4dDsKICAgICAgICAgWWFyck9wQ29k
ZSBhbHRlcm5hdGl2ZUVuZE9wQ29kZSA9IFlhcnJPcENvZGU6OlNpbXBsZU5lc3RlZEFsdGVybmF0
aXZlRW5kOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkp
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWSghaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAg
ICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRGYWlsdXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3Rl
ZFRvb0RlZXA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM3NDgsNyArMzY2
OSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyBv
bmNlLCBhbmQgd2lsbCBuZXZlciBiYWNrdHJhY2sgYmFjayBpbnRvIHRoZSBhc3NlcnRpb24uCiAg
ICAgdm9pZCBvcENvbXBpbGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKFBhdHRlcm5UZXJtKiB0ZXJt
KQogICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAgICAgICAg
ICAgIG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhlc2lzTmVzdGVk
VG9vRGVlcDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzgzMyw3ICszNzU0
LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIC8vIHRv
IHJldHVybiB0aGUgZmFpbGluZyByZXN1bHQuCiAgICAgdm9pZCBvcENvbXBpbGVCb2R5KFBhdHRl
cm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFko
IW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2Fm
ZVRvUmVjdXJzZSgpKSkgewogICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVy
ZVJlYXNvbjo6UGFyZW50aGVzaXNOZXN0ZWRUb29EZWVwOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0zODg3LDcgKzM4MDgsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIC8vIGl0IGZhaWxzIHdoZW4gdGhlIGJvZHkgYWx0ZXJu
YXRpdmVzIGZhaWwgdG8gbWF0Y2ggd2l0aCB0aGUgY3VycmVudCBvZmZzZXQuCiAgICAgICAgIC8v
IEZJWE1FOiBTdXBwb3J0IHVuaWNvZGUgZmxhZy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODYxMQotICAgICAgICBpZiAoZGlzanVuY3Rpb24t
Pm1fbWluaW11bVNpemUgJiYgIW1fcGF0dGVybi5zdGlja3koKSAmJiAhbV9wYXR0ZXJuLnVuaWNv
ZGUoKSkgeworICAgICAgICBpZiAoZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUgJiYgIW1fcGF0
dGVybi5zdGlja3koKSAmJiAhbV9wYXR0ZXJuLnVuaWNvZGUoKSAmJiBtX2NvbXBpbGVNb2RlICE9
IEpJVENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KSB7CiAgICAgICAgICAgICBhdXRvIGJtSW5mbyA9
IEJveWVyTW9vcmVJbmZvOjpjcmVhdGUobV9jaGFyU2l6ZSwgc3RkOjptaW48dW5zaWduZWQ+KGRp
c2p1bmN0aW9uLT5tX21pbmltdW1TaXplLCBCb3llck1vb3JlSW5mbzo6bWF4TGVuZ3RoKSk7CiAg
ICAgICAgICAgICBpZiAoY29sbGVjdEJveWVyTW9vcmVJbmZvKGRpc2p1bmN0aW9uLCBjdXJyZW50
QWx0ZXJuYXRpdmVJbmRleCwgYm1JbmZvLmdldCgpKSkgewogICAgICAgICAgICAgICAgIG1fb3Bz
Lmxhc3QoKS5tX2JtSW5mbyA9IGJtSW5mby5wdHIoKTsKQEAgLTQwMDgsOCArMzkyOSwxMCBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICBjb25zdCBCb3ll
ck1vb3JlQml0bWFwOjpNYXA6OldvcmRUeXBlKiBnZXRCb3llck1vb3JlQml0bWFwKGNvbnN0IEJv
eWVyTW9vcmVCaXRtYXA6Ok1hcCYgbWFwKQogICAgIHsKLSAgICAgICAgaWYgKGNvbnN0IGF1dG8q
IGV4aXN0aW5nUG9pbnRlciA9IG1fY29kZUJsb2NrLnRyeVJldXNlQm95ZXJNb29yZUJpdG1hcCht
YXApKQotICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQb2ludGVyOworICAgICAgICBpZiAobV9j
b2RlQmxvY2spIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBhdXRvKiBleGlzdGluZ1BvaW50ZXIg
PSBtX2NvZGVCbG9jay0+dHJ5UmV1c2VCb3llck1vb3JlQml0bWFwKG1hcCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4aXN0aW5nUG9pbnRlcjsKKyAgICAgICAgfQogICAgICAgICBhdXRvIGhl
YXBNYXAgPSBtYWtlVW5pcXVlUmVmPEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4obWFwKTsKICAgICAg
ICAgY29uc3QgYXV0byogcG9pbnRlciA9IGhlYXBNYXAtPnN0b3JhZ2UoKTsKICAgICAgICAgbV9i
bU1hcHMuYXBwZW5kKFdURk1vdmUoaGVhcE1hcCkpOwpAQCAtNDAyNCw2NCArMzk0Nyw2NCBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgQVNTRVJU
KG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpOwogCi0gICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFy
YWN0ZXJFbnRyeSA9IGxhYmVsKCk7CisgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJF
bnRyeSA9IG1faml0LmxhYmVsKCk7CiAKLSAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
ICAgICBtX2ppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICAgICAgdHJ5UmVhZFVuaWNvZGVD
aGFySW1wbChyZWdUMCk7CisgICAgICAgIHRyeVJlYWRVbmljb2RlQ2hhckltcGwobV9yZWdzLnJl
Z1QwKTsKIAotICAgICAgICByZXQoKTsKKyAgICAgICAgbV9qaXQucmV0KCk7CiAjZW5kaWYKICAg
ICB9CiAKICAgICB2b2lkIGdlbmVyYXRlRW50ZXIoKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KQot
ICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSAgICAgICAgbW92ZShzdGFja1BvaW50
ZXJSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplYnApOworICAgICAgICBtX2ppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWJwKTsKIAogICAgICAgICBpZiAobV9wYXR0
ZXJuLm1fc2F2ZUluaXRpYWxTdGFydFZhbHVlKQotICAgICAgICAgICAgcHVzaChYODZSZWdpc3Rl
cnM6OmVieCk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKIAog
I2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplZGkpOworICAgICAg
ICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWRpKTsKICNlbmRpZgogI2lmIEVOQUJMRShZQVJS
X0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3Rl
ZFN1YnBhdHRlcm5zKSB7CiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAgICAgIHB1c2goWDg2UmVn
aXN0ZXJzOjplc2kpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVzaSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTIpOworICAgICAgICAg
ICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OnIxMik7CiAgICAgICAgIH0KICNlbmRpZgogCiAg
ICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBwdXNoKFg4
NlJlZ2lzdGVyczo6cjEzKTsKLSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTQpOwot
ICAgICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OnIxNSk7CisgICAgICAgICAgICBtX2ppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0
ZXJzOjpyMTQpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OnIxNSk7CiAg
ICAgICAgIH0KICNpZiBPUyhXSU5ET1dTKQogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBK
SVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJwLCA2ICogc2l6ZW9mKHZvaWQqKSksIG91dHB1dCk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lz
dGVyczo6ZWJwLCA2ICogc2l6ZW9mKHZvaWQqKSksIG1fcmVncy5vdXRwdXQpOwogICAgICAgICAv
LyByY3ggaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBzcGFjZSBmb3IgcmVzdWx0IGlu
IHg2NCBXaW5kb3dzLgotICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICAgICAg
bV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVjeCk7CiAjZW5kaWYKICNlbGlmIENQVShBUk02NCkK
ICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgICAgICAgICBtX2ppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAg
ICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIU9wdGlv
bnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4
MTAwMDApLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigweGQ4MDApLCBsZWFkaW5nU3Vycm9nYXRlVGFnKTsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDB4ZGMwMCksIHRyYWlsaW5nU3Vycm9nYXRlVGFnKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5wdXNoUGFpcihNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApLCBtX3JlZ3Muc3VwcGxlbWVudGFy
eVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDB4ZDgwMCksIG1fcmVncy5sZWFkaW5nU3Vycm9nYXRlVGFnKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApLCBtX3Jl
Z3MudHJhaWxpbmdTdXJyb2dhdGVUYWcpOwogICAgICAgICB9CiAjZWxpZiBDUFUoQVJNX1RIVU1C
MikKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI0KTsKLSAgICAgICAgcHVzaChBUk1SZWdp
c3RlcnM6OnI1KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKLSAgICAgICAgcHVz
aChBUk1SZWdpc3RlcnM6OnI4KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnIxMCk7Cisg
ICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyNCk7CisgICAgICAgIG1faml0LnB1c2go
QVJNUmVnaXN0ZXJzOjpyNSk7CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyNik7
CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyOCk7CisgICAgICAgIG1faml0LnB1
c2goQVJNUmVnaXN0ZXJzOjpyMTApOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5v
dGhpbmcuCiAjZW5kaWYKQEAgLTQwODksNzAgKzQwMTIsOTggQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgdm9pZCBnZW5lcmF0ZVJldHVybigpCiAgICAg
eworI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgIGlmICht
X2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KSB7CisgICAgICAgICAg
ICBtX2lubGluZWRNYXRjaGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjZW5kaWYKKwogI2lmIENQVShYODZfNjQpCiAjaWYgT1MoV0lORE9X
UykKICAgICAgICAgLy8gU3RvcmUgdGhlIHJldHVybiB2YWx1ZSBpbiB0aGUgYWxsb2NhdGVkIHNw
YWNlIHBvaW50ZWQgYnkgcmN4LgotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplY3gpOwotICAg
ICAgICBzdG9yZTY0KHJldHVyblJlZ2lzdGVyLCBBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWN4KSk7
Ci0gICAgICAgIHN0b3JlNjQocmV0dXJuUmVnaXN0ZXIyLCBBZGRyZXNzKFg4NlJlZ2lzdGVyczo6
ZWN4LCBzaXplb2Yodm9pZCopKSk7Ci0gICAgICAgIG1vdmUoWDg2UmVnaXN0ZXJzOjplY3gsIHJl
dHVyblJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAg
ICAgICAgc3RvcmU2NChtX3JlZ3MucmV0dXJuUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6ZWN4KSk7CisgICAgICAgIHN0b3JlNjQobV9yZWdzLnJldHVyblJl
Z2lzdGVyMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplY3gsIHNpemVv
Zih2b2lkKikpKTsKKyAgICAgICAgbV9qaXQubW92ZShYODZSZWdpc3RlcnM6OmVjeCwgbV9yZWdz
LnJldHVyblJlZ2lzdGVyKTsKICNlbmRpZgogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQ
YWlycykgewotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjE1KTsKLSAgICAgICAgICAg
IHBvcChYODZSZWdpc3RlcnM6OnIxNCk7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpy
MTMpOworICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjE1KTsKKyAgICAgICAg
ICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OnIxNCk7CisgICAgICAgICAgICBtX2ppdC5wb3Ao
WDg2UmVnaXN0ZXJzOjpyMTMpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxM
X1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0
ZXJucykgewotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICAgICAgICAg
IG1faml0LnBvcChYODZSZWdpc3RlcnM6OnIxMik7CiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAg
ICAgIHBvcChYODZSZWdpc3RlcnM6OmVzaSk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVn
aXN0ZXJzOjplc2kpOwogI2VuZGlmCiAgICAgICAgIH0KICNlbmRpZgogI2lmIE9TKFdJTkRPV1Mp
Ci0gICAgICAgIHBvcChYODZSZWdpc3RlcnM6OmVkaSk7CisgICAgICAgIG1faml0LnBvcChYODZS
ZWdpc3RlcnM6OmVkaSk7CiAjZW5kaWYKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUlu
aXRpYWxTdGFydFZhbHVlKQotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKLSAg
ICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZS
ZWdpc3RlcnM6OmVieCk7CisgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OmVicCk7CiAj
ZWxpZiBDUFUoQVJNNjQpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7CiAg
ICAgICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgICAgICBw
b3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIG1faml0LnBvcFBhaXIoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBN
YWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKICAgICAgICAgfQogI2VsaWYgQ1BVKEFSTV9U
SFVNQjIpCi0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnIxMCk7Ci0gICAgICAgIHBvcChBUk1S
ZWdpc3RlcnM6OnI4KTsKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwotICAgICAgICBw
b3AoQVJNUmVnaXN0ZXJzOjpyNSk7Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyAg
ICAgICAgbV9qaXQucG9wKEFSTVJlZ2lzdGVyczo6cjEwKTsKKyAgICAgICAgbV9qaXQucG9wKEFS
TVJlZ2lzdGVyczo6cjgpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyNik7Cisg
ICAgICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnI1KTsKKyAgICAgICAgbV9qaXQucG9wKEFS
TVJlZ2lzdGVyczo6cjQpOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcK
ICNlbmRpZgogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdl
KCkpCi0gICAgICAgICAgICBmYXJKdW1wKFRydXN0ZWRJbW1QdHIocmV0YWdDb2RlUHRyPHZvaWQq
LCBDRnVuY3Rpb25QdHJUYWcsIE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlUb1lhcnJKSVRBZnRl
cikpLCBPcGVyYXRpb25QdHJUYWcpOworICAgICAgICAgICAgbV9qaXQuZmFySnVtcChNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRh
ZywgT3BlcmF0aW9uUHRyVGFnPigmdm1FbnRyeVRvWWFyckpJVEFmdGVyKSksIE9wZXJhdGlvblB0
clRhZyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldCgpOworICAgICAgICAgICAgbV9q
aXQucmV0KCk7CiAjZWxzZQotICAgICAgICByZXQoKTsKKyAgICAgICAgbV9qaXQucmV0KCk7CiAj
ZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIGxvYWRTdWJQYXR0ZXJuKFJlZ2lzdGVySUQgb3V0cHV0
R1BSLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIFJlZ2lzdGVySUQgc3RhcnRJbmRleEdQUiwgUmVn
aXN0ZXJJRCBlbmRJbmRleE9yTGVuR1BSKQorICAgIHZvaWQgbG9hZFN1YlBhdHRlcm4oTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgb3V0cHV0R1BSLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHN0YXJ0SW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGVuZEluZGV4T3JMZW5HUFIpCiAgICAgewotICAgICAgICBsb2FkUGFpcjMyKG91
dHB1dEdQUiwgVHJ1c3RlZEltbTMyKChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSks
IHN0YXJ0SW5kZXhHUFIsIGVuZEluZGV4T3JMZW5HUFIpOworICAgICAgICBtX2ppdC5sb2FkUGFp
cjMyKG91dHB1dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigoc3VicGF0dGVybklk
IDw8IDEpICogc2l6ZW9mKGludCkpLCBzdGFydEluZGV4R1BSLCBlbmRJbmRleE9yTGVuR1BSKTsK
ICAgICB9CiAKIHB1YmxpYzoKLSAgICBZYXJyR2VuZXJhdG9yKFZNKiB2bSwgWWFyclBhdHRlcm4m
IHBhdHRlcm4sIFN0cmluZyYgcGF0dGVyblN0cmluZywgWWFyckNvZGVCbG9jayYgY29kZUJsb2Nr
LCBDaGFyU2l6ZSBjaGFyU2l6ZSwgSklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUpCi0gICAgICAg
IDogbV92bSh2bSkKKyAgICBZYXJyR2VuZXJhdG9yKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNvbnN0
IFZNKiB2bSwgWWFyckNvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBZYXJySklUUmVncyYgcmVn
cywgWWFyclBhdHRlcm4mIHBhdHRlcm4sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hh
clNpemUgY2hhclNpemUsIEpJVENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlKQorICAgICAgICA6IG1f
aml0KGppdCkKKyAgICAgICAgLCBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKKyAgICAgICAgLCBtX3JlZ3MocmVncykKKyAgICAgICAgLCBtX3BhdHRlcm4ocGF0dGVy
bikKKyAgICAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0cmluZykKKyAgICAgICAgLCBt
X2NoYXJTaXplKGNoYXJTaXplKQorICAgICAgICAsIG1fY29tcGlsZU1vZGUoY29tcGlsZU1vZGUp
CisgICAgICAgICwgbV9kZWNvZGVTdXJyb2dhdGVQYWlycyhtX2NoYXJTaXplID09IENoYXJTaXpl
OjpDaGFyMTYgJiYgbV9wYXR0ZXJuLnVuaWNvZGUoKSkKKyAgICAgICAgLCBtX3VuaWNvZGVJZ25v
cmVDYXNlKG1fcGF0dGVybi51bmljb2RlKCkgJiYgbV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSkKKyAg
ICAgICAgLCBtX2Nhbm9uaWNhbE1vZGUobV9wYXR0ZXJuLnVuaWNvZGUoKSA/IENhbm9uaWNhbE1v
ZGU6OlVuaWNvZGUgOiBDYW5vbmljYWxNb2RlOjpVQ1MyKQorI2lmIEVOQUJMRShZQVJSX0pJVF9B
TExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgICAgICAsIG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0
ZXJucyhmYWxzZSkKKyAgICAgICAgLCBtX3BhcmVuQ29udGV4dFNpemVzKGNvbXBpbGVNb2RlID09
IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMgPyBtX3BhdHRlcm4ubV9udW1TdWJw
YXR0ZXJucyA6IDAsIG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKKyNlbmRpZgor
ICAgIHsKKyAgICB9CisKKyAgICBZYXJyR2VuZXJhdG9yKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNv
bnN0IFZNKiB2bSwgY29uc3QgWWFyckpJVFJlZ3MmIHJlZ3MsIFlhcnJQYXR0ZXJuJiBwYXR0ZXJu
LCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplIGNoYXJTaXplLCBKSVRDb21w
aWxlTW9kZSBjb21waWxlTW9kZSkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV92
bSh2bSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhudWxscHRyKQorICAgICAgICAsIG1fcmVncyhy
ZWdzKQogICAgICAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQogICAgICAgICAsIG1fcGF0dGVyblN0
cmluZyhwYXR0ZXJuU3RyaW5nKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAg
ICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQogICAgICAgICAsIG1fY29tcGlsZU1vZGUoY29t
cGlsZU1vZGUpCiAgICAgICAgICwgbV9kZWNvZGVTdXJyb2dhdGVQYWlycyhtX2NoYXJTaXplID09
IENoYXJTaXplOjpDaGFyMTYgJiYgbV9wYXR0ZXJuLnVuaWNvZGUoKSkKQEAgLTQxNjUsOSArNDEx
NiwyMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZSgpCisgICAg
Ym9vbCBpc1NhZmVUb1JlY3Vyc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY29tcGls
YXRpb25UaHJlYWRTdGFja0NoZWNrZXIpCisgICAgICAgICAgICByZXR1cm4gbV9jb21waWxhdGlv
blRocmVhZFN0YWNrQ2hlY2tlci0+aXNTYWZlVG9SZWN1cnNlKCk7CisKKyAgICAgICAgcmV0dXJu
IG1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhY2tDaGVj
a2VyKFN0YWNrQ2hlY2sqIHN0YWNrQ2hlY2tlcikKKyAgICB7CisgICAgICAgIG1fY29tcGlsYXRp
b25UaHJlYWRTdGFja0NoZWNrZXIgPSBzdGFja0NoZWNrZXI7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlKFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jaykKICAgICB7Ci0gICAgICAgIFlhcnJDb2Rl
QmxvY2smIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgc3RhcnRPZk1haW5Db2RlOwogCiAjaWYgIUVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VY
UFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewpAQCAtNDE5
OCw3ICs0MTYyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtl
VW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+KHRoaXMpOwogCiAgICAgICAgIGlmIChtX2Rpc2Fzc2Vt
YmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbCgp
KTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShtX2ppdC5sYWJl
bCgpKTsKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAg
ICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKQpAQCAtNDIwNyw0MiArNDE3MSw0
NiBAQCBwdWJsaWM6CiAKICAgICAgICAgZ2VuZXJhdGVFbnRlcigpOwogCi0gICAgICAgIEp1bXAg
aGFzSW5wdXQgPSBjaGVja0lucHV0KCk7CisgICAgICAgIHN0YXJ0T2ZNYWluQ29kZSA9IG1faml0
LmxhYmVsKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFzSW5wdXQgPSBjaGVj
a0lucHV0KCk7CiAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwotICAgICAgICBoYXNJbnB1
dC5saW5rKHRoaXMpOworICAgICAgICBoYXNJbnB1dC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAg
dW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5dGVz
KG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAgICAgIGlmIChjYWxsRnJh
bWVTaXplSW5CeXRlcykgewogICAgICAgICAgICAgLy8gQ2hlY2sgc3RhY2sgc2l6ZQotICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtY2FsbEZyYW1lU2l6ZUluQnl0ZXMpLCBzdGFja1Bv
aW50ZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX3JlZ3MucmVnVDApOwogI2lmIENQVShYODZfNjQp
ICYmIE9TKFdJTkRPV1MpCiAgICAgICAgICAgICAvLyBtYXRjaGluZ0NvbnRleHQgaXMgdGhlIDV0
aCBhcmd1bWVudCwgaXQgaXMgZm91bmQgb24gdGhlIHN0YWNrLgotICAgICAgICAgICAgUmVnaXN0
ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBtYXRjaGluZ0NvbnRleHQp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0
ID0gbV9yZWdzLnJlZ1QxOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBtYXRjaGlu
Z0NvbnRleHQpOwogI2VsaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShNSVBTKQogICAgICAgICAg
ICAgLy8gbWF0Y2hpbmdDb250ZXh0IGlzIHRoZSA1dGggYXJndW1lbnQsIGl0IGlzIGZvdW5kIG9u
IHRoZSBzdGFjay4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gcmVn
VDE7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDQg
KiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5yZWdUMTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQqKSksIG1hdGNoaW5nQ29u
dGV4dCk7CisjZWxzZQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0
Y2hpbmdDb250ZXh0ID0gbV9yZWdzLm1hdGNoaW5nQ29udGV4dDsKICNlbmRpZgotICAgICAgICAg
ICAgSnVtcCBzdGFja09rID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhtYXRjaGlu
Z0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdGFja09rID0gbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlN0
YWNrTGltaXQoKSksIG1fcmVncy5yZWdUMCk7CiAKICAgICAgICAgICAgIC8vIEV4Y2VlZGVkIHN0
YWNrIGxpbWl0LCBwdW50IHRvIHRoZSBpbnRlcnByZXRlci4KLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1JlZ0V4cFJlc3VsdDo6SklU
Q29kZUZhaWx1cmUpKSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KEpTUmVn
RXhwUmVzdWx0OjpKSVRDb2RlRmFpbHVyZSkpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBtX3Jl
Z3MucmV0dXJuUmVnaXN0ZXIyKTsKICAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CiAKLSAg
ICAgICAgICAgIHN0YWNrT2subGluayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUocmVnVDAsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHN0YWNrT2subGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklD
T0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKLSAg
ICAgICAgICAgIGdldEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KGlucHV0LCBsZW5ndGgsIFRp
bWVzVHdvKSwgZW5kT2ZTdHJpbmdBZGRyZXNzKTsKKyAgICAgICAgICAgIG1faml0LmdldEVmZmVj
dGl2ZUFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIG1fcmVn
cy5sZW5ndGgsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIG1fcmVncy5lbmRPZlN0cmluZ0Fk
ZHJlc3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNT
SU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKG1hdGNoTGltaXQpLCByZW1haW5pbmdNYXRjaENvdW50KTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtYXRj
aExpbWl0KSwgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpOwogI2VuZGlmCiAKICAgICAgICAg
Ly8gSW5pdGlhbGl6ZSBzdWJwYXR0ZXJucycgc3RhcnRzLiBBbmQgaW5pdGlhbGl6ZSBtYXRjaFN0
YXJ0IGlmIGAhbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemVgLgpAQCAtNDI1MSwxNCAr
NDIxOSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSAw
OwogICAgICAgICAgICAgLy8gRmlyc3Qgc3VicGF0dGVybklkJ3Mgc3RhcnQgaXMgY29uZmlndXJl
ZCB0byBgaW5kZXhgIGlmICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZS4KICAgICAg
ICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKLSAgICAgICAg
ICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICBzZXRNYXRjaFN0
YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgKytzdWJwYXR0ZXJuSWQ7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKDsgc3VicGF0dGVybklkIDwgbV9wYXR0ZXJuLm1f
bnVtU3VicGF0dGVybnMgKyAxOyArK3N1YnBhdHRlcm5JZCkKLSAgICAgICAgICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybklkIDw8IDEp
ICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mu
b3V0cHV0LCAoc3VicGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUp
Ci0gICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAg
c2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFS
Ul9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKQEAgLTQyNzIsNDUgKzQyNDAsNjMgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUluaXRp
YWxTdGFydFZhbHVlKQotICAgICAgICAgICAgbW92ZShpbmRleCwgaW5pdGlhbFN0YXJ0KTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtX3JlZ3MuaW5pdGlhbFN0YXJ0KTsK
IAogICAgICAgICBnZW5lcmF0ZSgpOwogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAg
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZHZW5lcmF0ZShsYWJlbCgpKTsKKyAgICAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkdlbmVyYXRlKG1faml0LmxhYmVsKCkpOwog
ICAgICAgICBiYWNrdHJhY2soKTsKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3RyYWNrKGxhYmVsKCkpOworICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3RyYWNrKG1faml0LmxhYmVsKCkpOwor
CisgICAgICAgIHB0cmRpZmZfdCBjb2RlU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNl
QmV0d2VlbihzdGFydE9mTWFpbkNvZGUsIG1faml0LmxhYmVsKCkpOworICAgICAgICBib29sIGNh
bklubGluZSA9IG1fY29tcGlsZU1vZGUgIT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0
ZXJucworICAgICAgICAgICAgJiYgIW1fcGF0dGVybi5nbG9iYWwoKSAmJiAhbV9wYXR0ZXJuLnN0
aWNreSgpICYmICFtX3BhdHRlcm4udW5pY29kZSgpCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9Q
QVJFTlNfRVhQUkVTU0lPTlMpCisgICAgICAgICAgICAmJiAhbV9jb250YWluc05lc3RlZFN1YnBh
dHRlcm5zCisjZW5kaWYKKyAgICAgICAgICAgICYmICFtX3BhdHRlcm4ubV9jb250YWluc0JhY2ty
ZWZlcmVuY2VzOwogCiAgICAgICAgIGdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxw
ZXIoKTsKIAogICAgICAgICBnZW5lcmF0ZUpJVEZhaWxSZXR1cm4oKTsKIAogICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2Rl
KGxhYmVsKCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShtX2pp
dC5sYWJlbCgpKTsKIAotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJFR0VY
UF9DT0RFX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpZYXJySklULCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwotICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7Ci0g
ICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbihKSVRGYWls
dXJlUmVhc29uOjpFeGVjdXRhYmxlTWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUpOwotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIGJhY2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFja2lu
Z1N0YXRlLmJhY2t0cmFja1JlY29yZHMoKTsKKyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNvcmRz
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6Omxp
bmtCYWNrdHJhY2tSZWNvcmRzKGxpbmtCdWZmZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFy
YWN0ZXJDYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5v
UHRyVGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKyAgICAgICAg
ICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5pY29kZUNo
YXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90cnlSZWFk
VW5pY29kZUNoYXJhY3RlckVudHJ5KTsKIAotICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBt
X3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMpCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8gY2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscykKKyAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hh
cmFjdGVySGVscGVyKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKKyAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKG1faml0LCBSRUdFWFBfQ09ERV9JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6WWFyckpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKGxpbmtC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLnNldEZh
bGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJsZU1lbW9y
eUFsbG9jYXRpb25GYWlsdXJlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5k
dW1wKGxpbmtCdWZmZXIpOwogCiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBp
bGVNb2RlOjpNYXRjaE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkKKyAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFy
OCkgewogICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZU1hdGNoT25seShGSU5B
TElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywgIk1h
dGNoLW9ubHkgOC1iaXQgcmVndWxhciBleHByZXNzaW9uIiksIFdURk1vdmUobV9ibU1hcHMpKTsK
LSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdElubGlu
ZVN0YXRzKGNvZGVTaXplLCBjYWxsRnJhbWVTaXplSW5CeXRlcywgY2FuSW5saW5lKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZU1h
dGNoT25seShGSU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5MTZC
aXRQdHJUYWcsICJNYXRjaC1vbmx5IDE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSwgV1RGTW92
ZShtX2JtTWFwcykpOworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQxNkJpdElubGluZVN0
YXRzKGNvZGVTaXplLCBjYWxsRnJhbWVTaXplSW5CeXRlcywgY2FuSW5saW5lKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENo
YXJTaXplOjpDaGFyOCkKICAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklO
QUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlciwgWWFycjhCaXRQdHJUYWcsICI4LWJpdCByZWd1
bGFyIGV4cHJlc3Npb24iKSwgV1RGTW92ZShtX2JtTWFwcykpOwpAQCAtNDMyMSw2ICs0MzA3LDk3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJl
UmVhc29uKCptX2ZhaWx1cmVSZWFzb24pOwogICAgIH0KIAorI2lmIEVOQUJMRShZQVJSX0pJVF9S
RUdFWFBfVEVTVF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxlSW5saW5lKCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BhdHRlcm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzKTsK
KworICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgYmVmb3JlIGdlbmVyYXRpbmcgY29kZSBz
aW5jZSB3ZSBzZXQgZmxhZ3MgYmFzZWQgb24gY29tcGlsYXRpb24gdGhhdAorICAgICAgICAvLyBh
cmUgdXNlZCBkdXJpbmcgZ2VuZXJhdGlvbi4KKyAgICAgICAgb3BDb21waWxlQm9keShtX3BhdHRl
cm4ubV9ib2R5KTsKKworI2lmbmRlZiBKSVRfVU5JQ09ERV9FWFBSRVNTSU9OUworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9kZWNvZGVTdXJyb2dhdGVQYWlycyk7CisjZW5kaWYKKworI2lmIEVO
QUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKTsKKyNlbmRpZgorCisgICAgICAgIEFT
U0VSVCghbV9mYWlsdXJlUmVhc29uKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCkpKQor
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+
KHRoaXMpOworCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBoYXNJbnB1dCA9IGNoZWNrSW5wdXQoKTsKKyAgICAgICAgZ2VuZXJh
dGVGYWlsUmV0dXJuKCk7CisgICAgICAgIGhhc0lucHV0LmxpbmsoJm1faml0KTsKKworICAgICAg
ICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0
ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKKyAgICAgICAgaWYgKGNhbGxG
cmFtZVNpemVJbkJ5dGVzKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgc3BhY2Ugb24gc3RhY2sg
Zm9yIG1hdGNoaW5nIGNvbnRleHQgZGF0YS4KKyAgICAgICAgICAgIG1faml0LmFkZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisjaWZkZWYgSklUX1VOSUNPREVfRVhQUkVTU0lPTlMK
KyAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCisgICAgICAgICAgICBtX2ppdC5n
ZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0
LCBtX3JlZ3MubGVuZ3RoLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCBtX3JlZ3MuZW5kT2ZT
dHJpbmdBZGRyZXNzKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNf
RVhQUkVTU0lPTlMpCisgICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpCisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF0Y2hM
aW1pdCksIG1fcmVncy5yZW1haW5pbmdNYXRjaENvdW50KTsKKyNlbmRpZgorCisgICAgICAgIGlm
IChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhdHRlcm4ubV9udW1TdWJw
YXR0ZXJucyArIDE7ICsraSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mu
b3V0cHV0LCAoaSA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQorICAgICAgICAgICAgc2V0TWF0
Y2hTdGFydChtX3JlZ3MuaW5kZXgpOworCisgICAgICAgIGlmIChtX3BhdHRlcm4ubV9zYXZlSW5p
dGlhbFN0YXJ0VmFsdWUpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwgbV9y
ZWdzLmluaXRpYWxTdGFydCk7CisKKyAgICAgICAgZ2VuZXJhdGUoKTsKKyAgICAgICAgaWYgKG1f
ZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJh
dGUobV9qaXQubGFiZWwoKSk7CisgICAgICAgIGJhY2t0cmFjaygpOworICAgICAgICBpZiAobV9k
aXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJh
Y2sobV9qaXQubGFiZWwoKSk7CisKKyAgICAgICAgZ2VuZXJhdGVUcnlSZWFkVW5pY29kZUNoYXJh
Y3RlckhlbHBlcigpOworCisgICAgICAgIGdlbmVyYXRlSklURmFpbFJldHVybigpOworCisgICAg
ICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZkNvZGUobV9qaXQubGFiZWwoKSk7CisKKyAgICAgICAgbV9pbmxpbmVkRmFpbGVkTWF0Y2gu
bGluaygmbV9qaXQpOworICAgICAgICBtX2lubGluZWRNYXRjaGVkLmxpbmsoJm1faml0KTsKKwor
ICAgICAgICBhdXRvIGJhY2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFja2luZ1N0YXRlLmJhY2t0
cmFja1JlY29yZHMoKTsKKyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNvcmRzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6OmxpbmtCYWNrdHJhY2tS
ZWNvcmRzKGxpbmtCdWZmZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRy
VGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKworICAgICAgICAg
ICAgICAgIGZvciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzKQor
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJIZWxwZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKKwogICAgIGNvbnN0IGNoYXIqIHZhcmlhbnQoKSBmaW5hbAogICAgIHsKICAgICAgICAgaWYg
KG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6Ok1hdGNoT25seSkgewpAQCAtNDUyNiwx
MiArNDYwMywxNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZNKiBtX3ZtOwor
ICAgIE1hY3JvQXNzZW1ibGVyJiBtX2ppdDsKKyAgICBjb25zdCBWTSogbV92bTsKKyAgICBZYXJy
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBjb25zdCBZYXJySklUUmVncyYgbV9yZWdzOwog
CisgICAgU3RhY2tDaGVjayogbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciB7IG51bGxw
dHIgfTsKICAgICBZYXJyUGF0dGVybiYgbV9wYXR0ZXJuOwotICAgIFN0cmluZyYgbV9wYXR0ZXJu
U3RyaW5nOworICAgIGNvbnN0IFN0cmluZyYgbV9wYXR0ZXJuU3RyaW5nOwogCi0gICAgWWFyckNv
ZGVCbG9jayYgbV9jb2RlQmxvY2s7CiAgICAgQ2hhclNpemUgbV9jaGFyU2l6ZTsKICAgICBKSVRD
b21waWxlTW9kZSBtX2NvbXBpbGVNb2RlOwogCkBAIC00NTQ2LDEwICs0NjI2LDEzIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnM7CiAgICAgUGFyZW5Db250
ZXh0U2l6ZXMgbV9wYXJlbkNvbnRleHRTaXplczsKICNlbmRpZgotICAgIEp1bXBMaXN0IG1fYWJv
cnRFeGVjdXRpb247Ci0gICAgSnVtcExpc3QgbV9oaXRNYXRjaExpbWl0OwotICAgIFZlY3RvcjxD
YWxsPiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHM7Ci0gICAgTGFiZWwgbV90cnlSZWFk
VW5pY29kZUNoYXJhY3RlckVudHJ5OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Fi
b3J0RXhlY3V0aW9uOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2hpdE1hdGNoTGlt
aXQ7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpDYWxsPiBtX3RyeVJlYWRVbmljb2RlQ2hh
cmFjdGVyQ2FsbHM7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJFbnRyeTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2lubGluZWRN
YXRjaGVkOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2lubGluZWRGYWlsZWRNYXRj
aDsKIAogICAgIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZXhwcmVzc2VkIGFzIGEgbGluZWFy
IHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMuCiAgICAgVmVjdG9yPFlhcnJPcCwgMTI4PiBtX29wczsK
QEAgLTQ2MDYsNyArNDY4OSwxMyBAQCBzdGF0aWMgdm9pZCBkdW1wQ29tcGlsZUZhaWx1cmUoSklU
RmFpbHVyCiAKIHZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgU3RyaW5nJiBw
YXR0ZXJuU3RyaW5nLCBDaGFyU2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJyQ29kZUJsb2NrJiBj
b2RlQmxvY2ssIEpJVENvbXBpbGVNb2RlIG1vZGUpCiB7Ci0gICAgWWFyckdlbmVyYXRvcih2bSwg
cGF0dGVybiwgcGF0dGVyblN0cmluZywgY29kZUJsb2NrLCBjaGFyU2l6ZSwgbW9kZSkuY29tcGls
ZSgpOworICAgIE1hY3JvQXNzZW1ibGVyIG1hc207CisKKyAgICBBU1NFUlQobW9kZSA9PSBKSVRD
b21waWxlTW9kZTo6TWF0Y2hPbmx5IHx8IG1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVT
dWJwYXR0ZXJucyk7CisKKyAgICBZYXJySklURGVmYXVsdFJlZ2lzdGVycyBqaXRSZWdpc3RlcnM7
CisgICAgWWFyckdlbmVyYXRvcjxZYXJySklURGVmYXVsdFJlZ2lzdGVycz4obWFzbSwgdm0sICZj
b2RlQmxvY2ssIGppdFJlZ2lzdGVycywgcGF0dGVybiwgcGF0dGVyblN0cmluZywgY2hhclNpemUs
IG1vZGUpLmNvbXBpbGUoY29kZUJsb2NrKTsKKwogICAgIGlmIChhdXRvIGZhaWx1cmVSZWFzb24g
PSBjb2RlQmxvY2suZmFpbHVyZVJlYXNvbigpKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wQ29tcGlsZWRSZWdFeHBQYXR0ZXJucygpKSkgewogICAgICAgICAgICAgcGF0dGVy
bi5kdW1wUGF0dGVyblN0cmluZyhXVEY6OmRhdGFGaWxlKCksIHBhdHRlcm5TdHJpbmcpOwpAQCAt
NDYxNiw2ICs0NzA1LDE4IEBAIHZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwg
U3QKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQor
dm9pZCBqaXRDb21waWxlSW5saW5lZFRlc3QoU3RhY2tDaGVjayogbV9jb21waWxhdGlvblRocmVh
ZFN0YWNrQ2hlY2tlciwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBPcHRpb25TZXQ8WWFy
cjo6RmxhZ3M+IGZsYWdzLCBDaGFyU2l6ZSBjaGFyU2l6ZSwgY29uc3QgVk0qIHZtLCBNYWNyb0Fz
c2VtYmxlciYgaml0LCBZYXJySklUUmVnaXN0ZXJzJiBqaXRSZWdpc3RlcnMpCit7CisgICAgWWFy
cjo6RXJyb3JDb2RlIGVycm9yQ29kZTsKKyAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKHBh
dHRlcm5TdHJpbmcsIGZsYWdzLCBlcnJvckNvZGUpOworCisgICAgWWFyckdlbmVyYXRvcjxZYXJy
SklUUmVnaXN0ZXJzPiB5YXJyR2VuZXJhdG9yKGppdCwgdm0sIGppdFJlZ2lzdGVycywgcGF0dGVy
biwgcGF0dGVyblN0cmluZywgY2hhclNpemUsIEpJVENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KTsK
KyAgICB5YXJyR2VuZXJhdG9yLnNldFN0YWNrQ2hlY2tlcihtX2NvbXBpbGF0aW9uVGhyZWFkU3Rh
Y2tDaGVja2VyKTsKKyAgICB5YXJyR2VuZXJhdG9yLmNvbXBpbGVJbmxpbmUoKTsKK30KKyNlbmRp
ZgorCiB9fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJ
KHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIllhcnJQYXR0ZXJu
LmgiCiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi9TdGFja0NoZWNrLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgogCiAjZGVmaW5lIFlBUlJfQ0FMTApAQCAtNDMsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgVk07CiBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKK2NsYXNzIE1hY3JvQXNzZW1ibGVy
OwogCiBuYW1lc3BhY2UgWWFyciB7CiAKQEAgLTIwMCw2ICsyMDIsMzUgQEAgZXh0ZXJuICJDIiB2
b2lkIHZtRW50cnlUb1lhcnJKSVRBZnRlcih2bwogI2VuZGlmCiAKIGNsYXNzIFlhcnJDb2RlQmxv
Y2sgeworICAgIHN0cnVjdCBJbmxpbmVTdGF0cyB7CisgICAgICAgIElubGluZVN0YXRzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluc25Db3VudCwgdW5zaWduZWQgc3RhY2tTaXplLCBib29sIGNhbklubGlu
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbnNuQ291bnQ9IGluc25Db3VudDsKKyAgICAg
ICAgICAgIG1fc3RhY2tTaXplID0gc3RhY2tTaXplOworICAgICAgICAgICAgbV9jYW5JbmxpbmUg
PSBjYW5JbmxpbmU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9pbnNuQ291bnQgPSAwOworICAgICAgICAgICAgbV9zdGFja1NpemUg
PSAwOworICAgICAgICAgICAgbV9jYW5JbmxpbmUgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIGNvZGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnNuQ291bnQ7IH0KKyAg
ICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0K
KyAgICAgICAgYm9vbCBjYW5JbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2NhbklubGluZTsgfQor
CisgICAgICAgIHVuc2lnbmVkIG1faW5zbkNvdW50OworICAgICAgICB1bnNpZ25lZCBtX3N0YWNr
U2l6ZSA6IDMxOworICAgICAgICBib29sIG1fY2FuSW5saW5lIDogMTsKKyAgICB9OworCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWWFyckNv
ZGVCbG9jayk7CiAKQEAgLTI1Myw2ICsyODQsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNl
c1BhdHRlcm5Db250ZXh0QnVmZmVyKCkgeyBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlciA9IHRy
dWU7IH0KICNlbmRpZgogCisgICAgdm9pZCBzZXQ4Qml0SW5saW5lU3RhdHModW5zaWduZWQgaW5z
bkNvdW50LCB1bnNpZ25lZCBzdGFja1NpemUsIGJvb2wgY2FuSW5saW5lKQorICAgIHsKKyAgICAg
ICAgbV9tYXRjaE9ubHk4U3RhdHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUp
OworICAgIH0KKworICAgIHZvaWQgc2V0MTZCaXRJbmxpbmVTdGF0cyh1bnNpZ25lZCBpbnNuQ291
bnQsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgYm9vbCBjYW5JbmxpbmUpCisgICAgeworICAgICAgICBt
X21hdGNoT25seTE2U3RhdHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUpOwor
ICAgIH0KKworICAgIElubGluZVN0YXRzJiBnZXQ4Qml0SW5saW5lU3RhdHMoKSB7IHJldHVybiBt
X21hdGNoT25seThTdGF0czsgfQorICAgIElubGluZVN0YXRzJiBnZXQxNkJpdElubGluZVN0YXRz
KCkgeyByZXR1cm4gIG1fbWF0Y2hPbmx5MTZTdGF0czsgfQorCiAgICAgTWF0Y2hSZXN1bHQgZXhl
Y3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXImIG1hdGNoaW5nQ29udGV4dCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKQEAgLTMzOCw2ICszODIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIG1fcmVmMTYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFycjE2Qml0
UHRyVGFnPigpOwogICAgICAgICBtX21hdGNoT25seTggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
WWFyck1hdGNoT25seThCaXRQdHJUYWc+KCk7CiAgICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPigpOworICAgICAgICBt
X21hdGNoT25seThTdGF0cy5jbGVhcigpOworICAgICAgICBtX21hdGNoT25seTE2U3RhdHMuY2xl
YXIoKTsKICAgICAgICAgbV9tYXBzLmNsZWFyKCk7CiAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9
IHN0ZDo6bnVsbG9wdDsKICAgICB9CkBAIC0zNTYsMTcgKzQwMiwyNyBAQCBwcml2YXRlOgogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQdHJUYWc+IG1fcmVmMTY7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPiBtX21hdGNoT25seTg7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4gbV9t
YXRjaE9ubHkxNjsKKyAgICBJbmxpbmVTdGF0cyBtX21hdGNoT25seThTdGF0czsKKyAgICBJbmxp
bmVTdGF0cyBtX21hdGNoT25seTE2U3RhdHM7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1v
b3JlQml0bWFwOjpNYXA+PiBtX21hcHM7CisKICAgICBib29sIG1fdXNlc1BhdHRlcm5Db250ZXh0
QnVmZmVyIHsgZmFsc2UgfTsKICAgICBzdGQ6Om9wdGlvbmFsPEpJVEZhaWx1cmVSZWFzb24+IG1f
ZmFpbHVyZVJlYXNvbjsKIH07CiAKIGVudW0gY2xhc3MgSklUQ29tcGlsZU1vZGUgOiB1aW50OF90
IHsKICAgICBNYXRjaE9ubHksCi0gICAgSW5jbHVkZVN1YnBhdHRlcm5zCisgICAgSW5jbHVkZVN1
YnBhdHRlcm5zLAorICAgIElubGluZVRlc3QKIH07CiB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRl
cm4mLCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplLCBWTSosIFlhcnJDb2RlQmxvY2sm
IGppdE9iamVjdCwgSklUQ29tcGlsZU1vZGUpOwogCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VY
UF9URVNUX0lOTElORSkKK2NsYXNzIFlhcnJKSVRSZWdpc3RlcnM7CisKK3ZvaWQgaml0Q29tcGls
ZUlubGluZWRUZXN0KFN0YWNrQ2hlY2sqLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6
RmxhZ3M+LCBDaGFyU2l6ZSwgY29uc3QgVk0qLCBNYWNyb0Fzc2VtYmxlciYsIFlhcnJKSVRSZWdp
c3RlcnMmKTsKKyNlbmRpZgorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklUUmVnaXN0ZXJzLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lz
dGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFlBUlJfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2RlZmluZSBZQVJS
X0NBTEwKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBZYXJyIHsKKworc3RydWN0IFlh
cnJKSVREZWZhdWx0UmVnaXN0ZXJzIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CitwdWJsaWM6
CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlu
cHV0ID0gQVJNUmVnaXN0ZXJzOjpyMDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
aW5kZXggPSBBUk1SZWdpc3RlcnM6OnIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBsZW5ndGggPSBBUk1SZWdpc3RlcnM6OnIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBvdXRwdXQgPSBBUk1SZWdpc3RlcnM6OnIzOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIHJlZ1QwID0gQVJNUmVnaXN0ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI1OworICAgIC8vIHI2IGlzIHJlc2Vy
dmVkIGZvciBNYWNyb0Fzc2VtYmxlckFSTXY3LAorICAgIC8vIHI3IGlzIGZwLgorICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTVJlZ2lzdGVyczo6cjg7CisgICAgLy8g
cjkgaXMgc2IgaW4gRUFCSS4KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlh
bFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBh
IHNwZWNpYWwgcmVnaXN0ZXIuCisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0
dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBBUk1SZWdpc3RlcnM6OnIxOworCisjZWxpZiBDUFUo
QVJNNjQpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIGlucHV0ID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0
ZXJzOjp4NDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3Rl
ciA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4
dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQg
ZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJz
Ojp4ODsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3Vu
dCA9IEFSTTY0UmVnaXN0ZXJzOjp4OTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBBUk02NFJlZ2lzdGVyczo6eDEwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdp
c3RlcnM6OngxMTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFy
eVBsYW5lc0Jhc2UgPSBBUk02NFJlZ2lzdGVyczo6eDEyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCBsZWFkaW5nU3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02
NFJlZ2lzdGVyczo6eDE0OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0
cmluZ0FkZHJlc3MgPSBBUk02NFJlZ2lzdGVyczo6eDE1OworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVy
czo6eDE7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdN
YXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJz
OjphMzsKKworICAgIC8vIHQwIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCisg
ICAgLy8gdDEgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp0MjsKKyAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVy
czo6dDU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIg
PSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0
dXJuUmVnaXN0ZXIyID0gTUlQU1JlZ2lzdGVyczo6djE7CisKKyNlbGlmIENQVShYODZfNjQpCisj
aWYgIU9TKFdJTkRPV1MpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplZGk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OworICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVn
aXN0ZXJzOjpyODsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdp
c3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRl
eHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBk
dXJpbmcgaW5pdGlhbGl6YXRpb24uCisjZWxzZQorICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUg
ZG9lc24ndCBmaXQgaW4gNjRiaXRzLCBpdHMgZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3gg
YW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBzaGlmdGVkLgorICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS83NTcyenR6NC5hc3B4CisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoTWF0Y2hSZXN1bHQpID4gc2l6ZW9mKHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90
IGZpdCBpbiA2NGJpdHMiKTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQg
PSBYODZSZWdpc3RlcnM6OmVkeDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5k
ZXggPSBYODZSZWdpc3RlcnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBs
ZW5ndGggPSBYODZSZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OnIxMDsKKyNlbmRpZgorCisgICAgLy8gU2NyYXRjaCBy
ZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdp
c3RlcnM6OmVheDsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVyczo6cjEwOworI2Vsc2UKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIgPSBYODZSZWdpc3RlcnM6OmVkaTsKKyNlbmRpZgor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lz
dGVyczo6ZWJ4OworI2lmICFPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjpyMTI7CisjZWxzZQorICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVn
aXN0ZXJzOjplc2k7CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VW5pY29kZUlucHV0QW5kVHJhaWwgPSBYODZSZWdpc3RlcnM6OnIxMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgdW5pY29kZVRlbXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0
ZXJzOjpyMTU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0
ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmV0dXJuUmVnaXN0ZXIyID0gWDg2UmVnaXN0ZXJzOjplZHg7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2Ug
PSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIHN0YXRpYyBjb25z
dGV4cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0g
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIHN0YXRpYyBjb25zdGV4
cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkYzAwKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDAp
OworI2VuZGlmCit9OworCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkK
K2NsYXNzIFlhcnJKSVRSZWdpc3RlcnMgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKK3B1Ymxp
YzoKKyAgICBZYXJySklUUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0
KQorICAgIC8vIEFyZ3VtZW50IHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgaW5wdXQgeyBBUk02
NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBBUk02
NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgbGVuZ3RoIHsgQVJN
NjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIG91dHB1dCB7IEFS
TTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0Nv
bnRleHQgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQg
ZnJlZWxpc3RSZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAg
UmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlk
R1BSUmVnIH07CisKKyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVn
VDAgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVn
VDEgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVn
VDIgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVt
YWluaW5nTWF0Y2hDb3VudCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAg
UmVnaXN0ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZh
bGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCB7IEFSTTY0UmVnaXN0ZXJz
OjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRy
ZXNzIHsgQVJNNjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMHhkODAwKTsKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
IHRyYWlsaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRj
MDApOworCisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJ
bnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRP
V1MpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJRCBpbnB1dCB7IFg4
NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGxlbmd0aCB7IFg4NlJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgb3V0cHV0IHsgWDg2UmVn
aXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQg
eyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGZyZWVsaXN0
UmVnaXN0ZXIgeyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklE
IGZyZWVsaXN0U2l6ZVJlZ2lzdGVyIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisK
KyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVnVDAgeyBYODZSZWdp
c3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1QxIHsgWDg2UmVnaXN0
ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZWdUMiB7IFg4NlJlZ2lzdGVy
czo6SW52YWxpZEdQUlJlZyB9OworCisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNo
Q291bnQgeyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJl
Z1VuaWNvZGVJbnB1dEFuZFRyYWlsIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07Cisg
ICAgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9
OworICAgIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzIHsgWDg2UmVnaXN0ZXJzOjpJbnZh
bGlkR1BSUmVnIH07CisKKyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyIHsgWDg2UmVnaXN0
ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBY
ODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MHhkODAwKTsKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5n
U3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworI2Vs
c2UKKyNlcnJvciAiTm8gc3VwcG9ydCBmb3IgaW5saW5lZCBKSVQnaW5nIG9mIFJlZ0V4cC50ZXN0
IGZvciB0aGlzIENQVSAvIE9TIGNvbWJpbmF0aW9uLiIKKyNlbmRpZgorfTsKKyNlbmRpZgorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjgyNzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGV0ZXIg
VmFyZ2EgKHB2YXJnYUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDktMTkgIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgSW5saW5lIFJlZ0V4cC50
ZXN0IEpJVCBjb2RlIGluIERGRyBhbmQgRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBlbmFibGVtZW50OiBFTkFCTEVfWUFSUl9K
SVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJs
ZS5oOgorCiAyMDIxLTA5LTE4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5j
b20+CiAKICAgICAgICAgW2lPUyBGYW1pbHldIERlbGV0ZSBsZXR0ZXJwcmVzcyBzdXBwb3J0Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHJldmlzaW9uIDI4MjczNykKKysrIFNvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NCw2ICs3NDQsNyBA
QAogLyogRW5hYmxlIEpJVCdpbmcgUmVndWxhciBFeHByZXNzaW9ucyB0aGF0IGhhdmUgbmVzdGVk
IHBhcmVudGhlc2lzIC4gKi8KICNpZiBFTkFCTEUoWUFSUl9KSVQpICYmIChDUFUoQVJNNjQpIHx8
IChDUFUoWDg2XzY0KSAmJiAhT1MoV0lORE9XUykpKQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVRf
QUxMX1BBUkVOU19FWFBSRVNTSU9OUyAxCisjZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVF9SRUdFWFBf
VEVTVF9JTkxJTkUgMQogI2VuZGlmCiAKIC8qIEVuYWJsZSBKSVQnaW5nIFJlZ3VsYXIgRXhwcmVz
c2lvbnMgdGhhdCBoYXZlIG5lc3RlZCBiYWNrIHJlZmVyZW5jZXMuICovCg==
</data>
<flag name="commit-queue"
          id="462167"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439286</attachid>
            <date>2021-09-25 22:01:59 -0700</date>
            <delta_ts>2021-10-04 14:11:49 -0700</delta_ts>
            <desc>Updated patch adding Boyer-Moore searching and test fixes</desc>
            <filename>230469-3.patch</filename>
            <type>text/plain</type>
            <size>261131</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMwODUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTA5LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG1pY3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTA5LTI0IFJpY2sgV2FsZHJvbiA8d2FsZHJvbi5y
aWNrQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBBZGQgY2hlY2tTY3JpcHRTeW50YXggZnVu
Y3Rpb24gdG8ganNjIGhvc3QgZW52aXJvbm1lbnQKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL3JlZ2V4cC10ZXN0LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvcmVnZXhwLXRlc3QtaW5saW5lZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2VyaWVz
IDMiCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHN0cmluZ3MgPSBbICJ0aGVtIiwgInRoZXJlIiwg
InRoZXkiLCAiYW50aGVtIiwgImFtcGhpdGhlYXRlciIsICJib3RoZXIiLCAiYW5vdGhlciIsICJi
cm90aGVyIiwgImFwb3RoZWNhcnkiLCAiYW5hdGhlbWEiXTsKKyAgICBsZXQgcmVzdWx0ID0gMDsK
KyAgICBsZXQgbiA9IDEwMDAwMDAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKQor
ICAgICAgICByZXN1bHQgKz0gL3RoZS8udGVzdChzdHJpbmdzW2kgJSAxMF0pOworICAgIGlmIChy
ZXN1bHQgIT0gbikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk2IEBACisyMDIxLTA5LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNDY5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzdHJ1Y3R1
cmVkIFlhcnJKSVQgZnJvbSBpbmhlcml0aW5nIGZyb20gTWFjcm9Bc3NlbWJsZXIgdG8gaGF2aW5n
IGEgTWFjcm9Bc3NlbWJsZXIKKyAgICAgICAgbWVtYmVyLiAgQWRkZWQgYSBuZXcgcGF0aCB0byBZ
YXJyIEpJVCBjb2RlIHRvIGNvbXBpbGUgaW5saW5lIGNvZGUgYnkgY2hhbmdpbmcgaG93IHRoZQor
ICAgICAgICBjb2RlIGlzIGVudGVyZWQgYW5kIGV4aXRlZC4gIEFkZGVkIHN0YXRpc3RpYyB0byB0
aGUgbm9ybWFsIGNvbXBpbGF0aW9uIHBhdGggdG8gcmVjb3JkCisgICAgICAgIHRoZSBzaXplIG9m
IHRoZSBtYXRjaGluZyBjb2RlIGdlbmVyYXRlZCwgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBu
ZWVkZWQsIGFuZCBpZgorICAgICAgICB0aGUgY29kZSBjYW4gYmUgaW5saW5lZC4gIFRoaXMgcGF0
Y2ggb25seSBpbmxpbmVzIDhiaXQgY29kZSwgYXMgdGhpcyBzZWVtcyB0byBjb3ZlcgorICAgICAg
ICB0aGUgbW9zdCBjb21tb24gcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNhc2VzLiAgQWRkaW5nIDE2
IGJpdCwgbm9uLVVuaWNvZGUgaW5saW5pbmcKKyAgICAgICAgd291bGQgYmUgc3RyYWlnaHRmb3J3
YXJkLiAgVGhlIGNvZGUgaXMgc3RydWN0dXJlZCB0byB0YWtlIHRoZSBpbmxpbmVkIHBhdGggZm9y
IHRoZQorICAgICAgICBjYXNlIG9mIG5vbi1yb3BlIHN0cmluZyBhcmd1bWVudHMuICBGb3Igb3Ro
ZXIgY2FzZXMsIHdlIGZhbGwgYmFjayB0byBjYWxsaW5nIG91dAorICAgICAgICB0byBDKysgcGF0
aHMuCisKKyAgICAgICAgSGVyZSBhcmUgdGhlIHBlcmYgcmVzdWx0cyBydW5uaW5nIHRoZSBuZXds
eSBhZGRlZCByZWdleHAtdGVzdC1pbmxpbmVkIG1pY3JvCisgICAgICAgIGJlbmNobWFyayAodGlt
ZSBpbiBtc2VjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lICAgICAgIFdpdGgg
dGhpcyBwYXRjaCAgICAgUmVzdWx0CisgICAgICAgICAgICBBUk02NCAgIDEzNy4zODQ5Ky0zLjA3
NDAgICA2NC45MjgyKy0wLjczNDggIDIuMTJ4IGZhc3RlcgorICAgICAgICAgICAgWDg2LTY0ICAy
MjAuMjYxNistMTkuMjgxNCAxMDUuMjAzNCstNi44NzIyICAyLjA5eCBmYXN0ZXIKKworICAgICAg
ICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBmb3VuZCB0aGF0IHRoZSBzdHJlbmd0aCByZWR1Y3Rp
b24gZGlkbid0IHdvcmsgcHJvcGVybHkgZm9yIHRoZQorICAgICAgICBleGlzdGluZyBjYXNlcyBm
b3IgUmVnRXhwRXhlYywgUmVnRXhwVGVzdCBhbmQgcmVsYXRlZCBzaW5jZSB3ZSBhZGRlZCB0aGF0
IGNoZWNrcyBmb3IKKyAgICAgICAgb3ZlcnJpZGluZyB0aGUgUmVnRXhwIG9iamVjdC4gIENsb2Ji
ZXJpemUgZm9yIHRyeUdldEJ5SWQgd2FzIGNsb2JiZXIgdG9wLCBidXQgYWRkZWQKKyAgICAgICAg
YW4gZXhjZXB0aW9uIGZvciBSZWdFeHAubGFzdEluZGV4LiAgVGhpcyBmaXggYWxsb3dlZCBtYW55
IG9mIHRoZSBzdHJlbmd0aCByZWR1Y3Rpb25zCisgICAgICAgIGNhc2VzIHRvIHN0YXJ0IHdvcmtp
bmcgYWdhaW4sIG5hbWVseSB0aGUgY29zdGFudCBmb2xkaW5nIGNhc2VzLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6
ZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHRG9l
c0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpoYXNDZWxsT3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6
CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwVGVzdElu
bGluZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50
aW1lL1N0YWNrQWxpZ25tZW50Lmg6CisgICAgICAgIChKU0M6OmFyZ3VtZW50Q291bnRGb3JTdGFj
a1NpemUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OmppdENvbXBpbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlSW5saW5lZFRlc3Qp
OgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQm95
ZXJNb3llckRhdGE6OnNhdmVNYXBzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckJveWVyTW95
ZXJEYXRhOjpjbGVhck1hcHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQm95ZXJNb3llckRh
dGE6OnRyeVJldXNlQm95ZXJNb29yZUJpdG1hcCBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpzZXQpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6Y29kZVNpemUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6c3RhY2tTaXplIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OmNhbklu
bGluZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0
YXRzOjpuZWVkc1RlbXAyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9j
azo6c2V0OEJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQx
NkJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQ4Qml0Q29k
ZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2Qml0
Q29kZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhC
aXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2
Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpnZXQ4
Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpnZXQx
NkJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjp0cnlSZXVzZUJveWVyTW9v
cmVCaXRtYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyckpJVFJlZ2lzdGVy
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckpJVFJlZ2lzdGVyczo6WWFyckpJ
VFJlZ2lzdGVycyk6CisgICAgICAgICogeWFyci9ZYXJyUGF0dGVybi5oOgorCiAyMDIxLTA5LTI1
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGFuIHVu
bGlua2VkIGJhc2VsaW5lIEpJVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjczLDYgKzEyNzMs
NyBAQAogCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjQxMTJE
QjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQk4NjcwNEI4NTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgwMTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJySklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1M0JDNDNF
MjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCOEExMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njg5
MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQ
cml2YXRlTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00MjQ4LDYgKzQyNDksNyBAQAogCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyckludGVycHJldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJJ
bnRlcnByZXRlci5oOyBwYXRoID0geWFyci9ZYXJySW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyckpJVC5jcHA7IHBhdGgg
PSB5YXJyL1lhcnJKSVQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4
MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBZYXJySklULmg7IHBhdGggPSB5YXJyL1lhcnJKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3Rl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckpJVFJlZ2lzdGVycy5o
OyBwYXRoID0geWFyci9ZYXJySklUUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXJzZXIuaDsgcGF0aCA9IHlhcnIvWWFyclBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MjEyREJBMzM3MDBB
OUZFN0IgLyogWWFyclBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gWWFyclBhdHRlcm4uY3BwOyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJy
UGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyUGF0dGVybi5o
OyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODE1Niw2ICs4MTU4LDcgQEAKIAkJCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi8sCiAJCQkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJK
SVQuY3BwICovLAogCQkJCTg2NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8s
CisJCQkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLywK
IAkJCQlFM0YwRkM5NDI2QTExQjRBMDA5OUZGQTAgLyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRl
ci5oICovLAogCQkJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8s
CiAJCQkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLywKQEAg
LTEwMjI2LDYgKzEwMjI5LDggQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklU
UmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEg
LyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUw
MDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRF
MURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTA5MzEsNyArMTA5MzYsNiBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJy
RXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIg
LyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjcwNEI4NzEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNGMEZDOTUyNkEx
MUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjgzMDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjQzLDYgKzI2NDMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBU
ZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2
ZSBwcm92ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAg
ICAgICAgIC8vIGFjY2Vzc2luZyBsYXN0SW5kZXggaXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9i
YWwgcmVnZXhwLgogICAgICAgICBjbG9iYmVyV29ybGQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyODMwODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
MywxNCArNjczLDI2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2Ug
VHJ5R2V0QnlJZDoKKyAgICAgICAgcmVhZChXb3JsZCk7CisjZGVmaW5lIEFCU1RSQUNUX0hFQVBf
Tk9UX1JlZ0V4cE9iamVjdF9sYXN0SW5kZXgobmFtZSkgaWYgKG5hbWUgIT0gSW52YWxpZEFic3Ry
YWN0SGVhcCAmJiBcCisgICAgbmFtZSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIFwKKyAgICBu
YW1lICE9IFdvcmxkICYmIFwKKyAgICBuYW1lICE9IFN0YWNrICYmIFwKKyAgICBuYW1lICE9IEhl
YXAgJiYgXAorICAgIG5hbWUgIT0gUmVnRXhwT2JqZWN0X2xhc3RJbmRleCkgXAorICAgICAgICB3
cml0ZShuYW1lKTsKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1RfSEVB
UF9OT1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleCkKKyN1bmRlZiBBQlNUUkFDVF9IRUFQX05PVF9S
ZWdFeHBPYmplY3RfbGFzdEluZGV4CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJ
ZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRXaXRoVGhpczoKICAg
ICBjYXNlIEdldEJ5SWREaXJlY3Q6CiAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1c2g6CiAgICAg
Y2FzZSBHZXRCeVZhbFdpdGhUaGlzOgotICAgIGNhc2UgVHJ5R2V0QnlJZDoKICAgICBjYXNlIFB1
dEJ5SWQ6CiAgICAgY2FzZSBQdXRCeUlkV2l0aFRoaXM6CiAgICAgY2FzZSBQdXRCeVZhbFdpdGhU
aGlzOgpAQCAtMTc1MCw2ICsxNzYyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoK
KyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJv
dmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAg
ICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJl
Z2V4cC4KICAgICAgICAgY2xvYmJlclRvcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgorI2luY2x1ZGUgIllh
cnJKSVQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAKQEAgLTEyMiw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29yZGVkU3RhdHVz
ZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBtX2p1bXBS
ZXBsYWNlbWVudHM7CisgICAgWWFycjo6WWFyckJveWVyTW95ZXJEYXRhIG1fYm95ZXJNb29yZURh
dGE7CiAgICAgCiAgICAgU2NyYXRjaEJ1ZmZlciogY2F0Y2hPU1JFbnRyeUJ1ZmZlcjsKICAgICBS
ZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDI4MzA4NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1
LDYgKzMzNSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgIGNhc2Ug
UmVzb2x2ZVNjb3BlOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbElu
RXZhbDoKICAgICBjYXNlIFJldHVybjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjgzMDg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NzIsNyAr
MTQ3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIGNhc2UgUmVnRXhwVGVzdElubGluZTogewogICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVSZWdF
eHBPYmplY3QoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShy
ZXZpc2lvbiAyODMwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIxLDYgKzMyMSwxNiBAQCB2b2lkIE5vZGU6OmNvbnZlcnRU
b1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAgICAgbV9vcEluZm8gPSByZWdFeHA7CiB9CiAKK3ZvaWQg
Tm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZShGcm96ZW5WYWx1ZSogcmVnRXhwKQorewor
ICAgIEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9wQW5kRGVmYXVsdEZsYWdz
KFJlZ0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShjaGlsZHJl
bi5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hpbGRyZW4uY2hpbGQyKCkg
PSBFZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2JqZWN0VXNlKTsKKyAgICAv
LyBXZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcEluZm8gPSByZWdFeHA7Cit9
CisKIFN0cmluZyBOb2RlOjp0cnlHZXRTdHJpbmcoR3JhcGgmIGdyYXBoKQogewogICAgIGlmICho
YXNDb25zdGFudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODIzLDYgKzgyMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udmVy
dFRvUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5V2l0aG91dENoZWNrcyhGcm96ZW5WYWx1ZSog
cmVnRXhwKTsKICAgICB2b2lkIGNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhbFdpdGhvdXRD
aGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4cCk7CisgICAgdm9pZCBjb252ZXJ0VG9SZWdFeHBUZXN0
SW5saW5lKEZyb3plblZhbHVlKiByZWdFeHApOwogCiAgICAgdm9pZCBjb252ZXJ0VG9TZXRSZWdF
eHBPYmplY3RMYXN0SW5kZXgoKQogICAgIHsKQEAgLTE4MDAsNiArMTgwMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9i
YWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBjYXNlIFJlZ0V4
cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICBjYXNl
IFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkBAIC0x
ODk2LDYgKzE4OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRGlyZWN0VGFpbENhbGxJbmxp
bmVkQ2FsbGVyOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAg
ICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CisgICAgICAgIGNhc2UgUmVnRXhwVGVz
dElubGluZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMjgzMDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE5LDYgKzMxOSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhSZWdFeHBFeGVjLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwRXhlY05vbkdsb2Jh
bE9yU3RpY2t5LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhSZWdFeHBUZXN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmVnRXhwVGVzdElubGluZSwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJlZ0V4cE1hdGNo
RmFzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJlZ0V4
cE1hdGNoRmFzdEdsb2JhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU3RyaW5nUmVwbGFj
ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODY4
LDYgKzg2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICAgICAg
Y2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6CiAgICAgICAgIGNhc2UgUmVnRXhwVGVz
dDoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgICAgICBjYXNlIFJlZ0V4cE1h
dGNoRmFzdDoKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgICAgIGNh
c2UgU3RyaW5nUmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyODMwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1NCw2ICs1NTQs
NyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBS
ZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAgIGNh
c2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgY2FzZSBSZWdF
eHBNYXRjaEZhc3Q6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBD
YWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5NDIsNyAr
Mjk0Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICBj
YXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOiB7CiAgICAgICAgIGNv
bXBpbGVSZWdFeHBUZXN0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
U3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNs
dWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVnaXN0ZXJzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjY5NCw2ICsyNjk1LDE5NSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kCiAgICAgfSB9CiB9CiAKKyNp
ZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSogbm9kZSkKK3sKKyAgICBSZWdFeHAqIHJl
Z0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKKwor
ICAgIEFTU0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKTsKKworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGdsb2JhbE9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IGdsb2JhbE9iamVjdC5ncHIoKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50R1BSOworICAgIEdQUkZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgIEdQUlRlbXBvcmFyeSBzdHJpbmdJbXBsKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBz
dHJpbmdEYXRhKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdHJMZW5ndGgodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IG91dHB1dCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0Mih0aGlz
KTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAx
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wMjsKKyAgICBHUFJSZWcgc3RyaW5nSW1wbEdQ
UiA9IHN0cmluZ0ltcGwuZ3ByKCk7CisgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBzdHJpbmdE
YXRhLmdwcigpOworICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBvdXRwdXQuZ3ByKCk7CisgICAgR1BS
UmVnIHN0ckxlbmd0aEdQUiA9IHN0ckxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0MkdQ
UiA9IHJlc3VsdDIuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXAwR1BSID0gdGVtcDAuZ3ByKCk7Cisg
ICAgR1BSUmVnIHRlbXAxR1BSID0gdGVtcDEuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXAyR1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgc3dhcFJlZyA9IEludmFsaWRHUFJSZWc7CisKKyAg
ICBhdXRvIGppdENvZGVCbG9jayA9IHJlZ0V4cC0+Z2V0UmVnRXhwSklUQ29kZUJsb2NrKCk7Cisg
ICAgYXV0byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5nZXQ4Qml0SW5saW5l
U3RhdHMoKTsKKworI2lmICFDUFUoWDg2XzY0KQorICAgIGlmIChpbmxpbmVDb2RlU3RhdHM4Qml0
Lm5lZWRzVGVtcDIoKSkgeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXAyKHRoaXMpOwor
ICAgICAgICB0ZW1wMi5hZG9wdChyZWFsVGVtcDIpOworICAgICAgICB0ZW1wMkdQUiA9IHRlbXAy
LmdwcigpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChu
b2RlLT5jaGlsZDIoKSwgYmFzZUdQUik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZG9uZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisKKyAg
ICBhdXRvIHN3YXBSZWdJZk5lZWRlZCA9IFsmXSB7CisgICAgICAgIGlmIChnbG9iYWxPYmplY3RH
UFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBzd2FwUmVnID0gYWxsb2NhdGUoKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCBzd2FwUmVnKTsKKyAgICAgICAg
ICAgIGdsb2JhbE9iamVjdEdQUiA9IHN3YXBSZWc7CisgICAgICAgIH0gZWxzZSBpZiAoYmFzZUdQ
UiA9PSByZXN1bHRHUFIpIHsKKyAgICAgICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShiYXNlR1BSLCBzd2FwUmVnKTsKKyAgICAgICAgICAgIGJhc2VH
UFIgPSBzd2FwUmVnOworICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50R1BSID09IHJlc3VsdEdQ
UikgeworICAgICAgICAgICAgc3dhcFJlZyA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKGFyZ3VtZW50R1BSLCBzd2FwUmVnKTsKKyAgICAgICAgICAgIGFyZ3VtZW50R1BSID0g
c3dhcFJlZzsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRvIHJlZ0V4cFRlc3RJbmxpbmVD
YXNlID0gWyZdIHsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdHJpbmdEYXRhR1BS
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0lt
cGxHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgc3RyTGVuZ3RoR1BSKTsK
KworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBzdHJpbmdJbXBsR1BSOworCisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBpbmRleEdQUik7CisKKyAgICAgICAgWWFycjo6WWFy
ckpJVFJlZ2lzdGVycyB5YXJyUmVnaXN0ZXJzOworICAgICAgICB5YXJyUmVnaXN0ZXJzLmlucHV0
ID0gc3RyaW5nRGF0YUdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5pbmRleCA9IGluZGV4R1BS
OworICAgICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0ckxlbmd0aEdQUjsKKyAgICAgICAg
eWFyclJlZ2lzdGVycy5vdXRwdXQgPSBvdXRwdXRHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMu
cmVnVDAgPSB0ZW1wMEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5yZWdUMSA9IHRlbXAxR1BS
OworI2lmIENQVShYODZfNjQpCisgICAgICAgIHRlbXAyR1BSID0gZ2xvYmFsT2JqZWN0R1BSOwor
I2VuZGlmCisgICAgICAgIGlmIChpbmxpbmVDb2RlU3RhdHM4Qml0Lm5lZWRzVGVtcDIoKSkKKyAg
ICAgICAgICAgIHlhcnJSZWdpc3RlcnMucmVnVDIgPSB0ZW1wMkdQUjsKKworICAgICAgICB5YXJy
UmVnaXN0ZXJzLnJldHVyblJlZ2lzdGVyID0gcmVzdWx0R1BSOworICAgICAgICB5YXJyUmVnaXN0
ZXJzLnJldHVyblJlZ2lzdGVyMiA9IHJlc3VsdDJHUFI7CisKKyAgICAgICAgYXV0byBjb21tb25E
YXRhID0gbV9qaXQuaml0Q29kZSgpLT5kZmdDb21tb24oKTsKKyAgICAgICAgWWFycjo6aml0Q29t
cGlsZUlubGluZWRUZXN0KCZtX2dyYXBoLm1fc3RhY2tDaGVja2VyLCByZWdFeHAtPnBhdHRlcm4o
KSwgcmVnRXhwLT5mbGFncygpLCBZYXJyOjpDaGFyU2l6ZTo6Q2hhcjgsICZ2bSgpLCBjb21tb25E
YXRhLT5tX2JveWVyTW9vcmVEYXRhLCBtX2ppdCwgeWFyclJlZ2lzdGVycyk7CisKKyAgICAgICAg
YXV0byBmYWlsZWRNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworCisgICAgICAgIC8vICBTYXZlZCBjYWNo
ZWQgcmVzdWx0CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaWYgKGlubGluZUNvZGVTdGF0czhC
aXQubmVlZHNUZW1wMigpKSB7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0UHRyID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdFB0ciksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIH0KKyNlbmRpZgor
CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFs
RGF0YU9mZnNldCgpICsgUmVnRXhwR2xvYmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsK
KworICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCByZWdFeHApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNl
dCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0UmVnRXhwKCkpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoYXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RJbnB1dCgp
KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVzdWx0R1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZS
ZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgc3RhcnQpKSk7CisgICAgICAg
IG1faml0LnN0b3JlMzIocmVzdWx0MkdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVzdWx0KCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIGVuZCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU4
KFRydXN0ZWRJbW0zMigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBv
ZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVpZmllZCgpKSk7CisKKyAgICAg
ICAgaWYgKHN3YXBSZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHVubG9jayhzd2Fw
UmVnKTsKKworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBmYWlsZWRNYXRj
aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIH07CisKKyAg
ICBpZiAobm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAg
ICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZVN0cmlu
Zyhub2RlLT5jaGlsZDMoKSwgYXJndW1lbnRHUFIpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICAgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudEdQUiwgSlNTdHJpbmc6Om9mZnNldE9m
VmFsdWUoKSksIHN0cmluZ0ltcGxHUFIpOworICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEg
cm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAgICAgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikp
OworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisKKyAg
ICAgICAgcmVnRXhwVGVzdElubGluZUNhc2UoKTsKKworICAgICAgICBvcGVyYXRpb25DYXNlcy5s
aW5rKCZtX2ppdCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWdFeHBUZXN0
U3RyaW5nLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgYXJndW1lbnRHUFIp
OworCisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1l
bnQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3By
KCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisK
KyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGFyZ3VtZW50
R1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5n
KGFyZ3VtZW50R1BSKSk7CisKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RyaW5nSW1wbEdQ
Uik7CisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIHJvcGUgb3IgMTYgYml0LCB3ZSBjYWxsIHRo
ZSBvcGVyYXRpb24uCisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9w
ZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikpOworICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFn
c09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQo
KSkpKTsKKworICAgIHJlZ0V4cFRlc3RJbmxpbmVDYXNlKCk7CisKKyAgICBvcGVyYXRpb25DYXNl
cy5saW5rKCZtX2ppdCk7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3Qs
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisKKyAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorI2Vsc2UKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBjb21waWxlUmVnRXhwVGVzdChub2RlKTsKK30KKyNlbmRpZgorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5v
cCgpOwpAQCAtMzgyOCw2ICs0MDE4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBSZWdFeHBUZXN0
SW5saW5lOiB7CisgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDogewogICAgICAgICBj
b21waWxlUmVnRXhwTWF0Y2hGYXN0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI4
MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE0OTksNiArMTQ5OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVSZWdFeHBNYXRjaEZhc3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1hdGNo
RmFzdEdsb2JhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdChOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
U3RyaW5nUmVwbGFjZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNPYmplY3QoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVR5cGVPZklzT2JqZWN0KE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMjgzMDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5MSw2ICs3OTEsNDIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH07
CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorICAgICAgICAgICAg
YXV0byBjb252ZXJ0VGVzdFRvVGVzdElubGluZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBUZXN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAocmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAo
cmVnRXhwLT51bmljb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIGF1dG8gaml0Q29kZUJsb2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRD
b2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUNvZGVTdGF0czhCaXQgPSBq
aXRDb2RlQmxvY2stPmdldDhCaXRJbmxpbmVTdGF0cygpOworCisgICAgICAgICAgICAgICAgaWYg
KCFpbmxpbmVDb2RlU3RhdHM4Qml0LmNhbklubGluZSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2RlU2l6ZSA9IGlubGlu
ZUNvZGVTdGF0czhCaXQuY29kZVNpemUoKTsKKworICAgICAgICAgICAgICAgIGlmIChjb2RlU2l6
ZSA+IE9wdGlvbnM6Om1heGltdW1SZWdFeHBUZXN0SW5saW5lQ29kZXNpemUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxp
Z25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIGlubGluZUNvZGVTdGF0czhCaXQuc3RhY2tTaXplKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKGFsaWduZWRGcmFtZVNpemUpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9w
YXJhbWV0ZXJTbG90cyA9IHN0ZDo6bWF4KG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cywgYXJndW1l
bnRDb3VudEZvclN0YWNrU2l6ZShhbGlnbmVkRnJhbWVTaXplKSk7CisKKyAgICAgICAgICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgbV9ub2RlLT5jaGlsZHJlbi5qdXN0Q2hlY2tzKCkp
OworICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRvUmVnRXhwVGVzdElubGluZShtX2dy
YXBoLmZyZWV6ZShyZWdFeHApKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyNlbmRpZgorCiAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRUb1N0YXRpYyA9IFsmXSB7CiAgICAgICAgICAgICAgICAg
aWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBFeGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC04MDksNiArODQ1LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
Zm9sZFRvQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmIEVOQUJMRShZ
QVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgICAgICBpZiAoY29udmVydFRlc3RU
b1Rlc3RJbmxpbmUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCiAgICAgICAg
ICAgICBpZiAoY29udmVydFRvU3RhdGljKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzNyw2ICszMzcsNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNh
c2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAg
ICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAg
Y2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBOZXdSZWdleHA6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyODMwODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJTdXBlclNhbXBs
ZXIuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSA8YXRvbWlj
PgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3dGYvUmVjdXJzYWJsZUxhbWJkYS5o
PgpAQCAtMTU4MCw2ICsxNTgxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0
OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4cFRlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CisgICAgICAgICAgICBjb21waWxlUmVnRXhw
VGVzdElubGluZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0
Y2hGYXN0OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdCgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xNDI2Nyw2ICsxNDI3MSwxNTggQEAgcHJpdmF0ZToKICAgICAgICAgc2V0
Qm9vbGVhbihyZXN1bHQpOwogICAgIH0KIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVT
VF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZSgpCisgICAgeworICAg
ICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihtX25vZGUtPmNlbGxPcGVyYW5k
KCktPnZhbHVlKCkpOworCisgICAgICAgIEFTU0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgp
KTsKKworICAgICAgICBhdXRvIGppdENvZGVCbG9jayA9IHJlZ0V4cC0+Z2V0UmVnRXhwSklUQ29k
ZUJsb2NrKCk7CisgICAgICAgIGF1dG8gaW5saW5lQ29kZVN0YXRzOEJpdCA9IGppdENvZGVCbG9j
ay0+Z2V0OEJpdElubGluZVN0YXRzKCk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdFB0ciA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBpbmxpbmVDb2RlU3RhdHM4Qml0
LnN0YWNrU2l6ZSgpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUlu
Qnl0ZXMoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2s4Qml0
U3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlvbkNhc2Ug
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7
CisKKyAgICAgICAgTFZhbHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93UmVnRXhwT2JqZWN0KG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBudWxscHRyOworICAgICAgICBib29sIGhh
dmVTdHJpbmdBcmcgPSBtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2U7CisK
KyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcpCisgICAgICAgICAgICBhcmd1bWVudCA9IGxvd1N0
cmluZyhtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJndW1l
bnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIGF1dG8gdm0gPSAm
dGhpcy0+dm0oKTsKKyAgICAgICAgYXV0byBzdGFja0NoZWNrZXIgPSAmbV9ncmFwaC5tX3N0YWNr
Q2hlY2tlcjsKKworICAgICAgICBpZiAoIWhhdmVTdHJpbmdBcmcpIHsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGlzQ2VsbChhcmd1bWVudCksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVs
eShvcGVyYXRpb25DYXNlKSk7CisKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhhcmd1bWVudCksIHVzdWFsbHkoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKG9wZXJhdGlv
bkNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjaGVj
azhCaXRTdHJpbmcpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNSb3BlU3RyaW5nKGFy
Z3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5zdXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUo
Y2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrOEJp
dFN0cmluZywgaW5saW5lQ2FzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX291
dC5icmFuY2goaXNSb3BlU3RyaW5nKGFyZ3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5zdXJl
KG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUoY2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAgICAg
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2s4Qml0U3RyaW5nLCBpbmxpbmVDYXNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihh
cmd1bWVudCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291dC5s
b2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwK
KyAgICAgICAgICAgIHVuc3VyZShvcGVyYXRpb25DYXNlKSwgdW5zdXJlKGlubGluZUNhc2UpKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVDYXNlLCBvcGVyYXRpb25DYXNlKTsKKyAg
ICAgICAgTFZhbHVlIHN0cmluZ0xlbmd0aCA9IG1fb3V0Lnplcm9FeHQobV9vdXQubG9hZDMyKHN0
cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9sZW5ndGgpLCBJbnQ2NCk7CisgICAgICAgIExW
YWx1ZSBzdHJpbmdEYXRhID0gbV9vdXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmlu
Z0ltcGxfZGF0YSk7CisKKyAgICAgICAgYXV0byBjb21tb25EYXRhID0gbV9mdGxTdGF0ZS5qaXRD
b2RlLT5kZmdDb21tb24oKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX291dC5wYXRjaHBvaW50KEludDMyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUoc3RyaW5nRGF0YSwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc3RyaW5nTGVuZ3Ro
LCBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShhcmd1bWVudCwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gaW5saW5lQ29k
ZVN0YXRzOEJpdC5uZWVkc1RlbXAyKCkgPyA2IDogNTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKwor
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXR1cm5HUFIgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0xlbmd0aEdQUiA9IHBhcmFtc1syXS5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc3RyaW5nR1BSID0gcGFyYW1zWzNdLmdwcigpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHJldHVybjJHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyB0ZW1wMEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMyk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHRlbXAxR1BSID0gcGFyYW1zLmdwU2NyYXRjaCg0KTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgdGVtcDJHUFIgPSBpbmxpbmVDb2RlU3RhdHM4Qml0Lm5lZWRzVGVtcDIo
KSA/IHBhcmFtcy5ncFNjcmF0Y2goNSkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIGluZGV4R1BSKTsKKwor
ICAgICAgICAgICAgICAgIFlhcnI6OllhcnJKSVRSZWdpc3RlcnMgeWFyclJlZ2lzdGVyczsKKwor
ICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOworICAg
ICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXggPSBpbmRleEdQUjsKKyAgICAgICAgICAg
ICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0cmluZ0xlbmd0aEdQUjsKKyAgICAgICAgICAg
ICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1dCA9IG91dHB1dEdQUjsKKyAgICAgICAgICAgICAgICB5
YXJyUmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lz
dGVycy5yZWdUMSA9IHRlbXAxR1BSOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDb2RlU3Rh
dHM4Qml0Lm5lZWRzVGVtcDIoKSkKKyAgICAgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5y
ZWdUMiA9IHRlbXAyR1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMucmV0dXJuUmVn
aXN0ZXIgPSByZXR1cm5HUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5S
ZWdpc3RlcjIgPSByZXR1cm4yR1BSOworCisgICAgICAgICAgICAgICAgWWFycjo6aml0Q29tcGls
ZUlubGluZWRUZXN0KHN0YWNrQ2hlY2tlciwgcmVnRXhwLT5wYXR0ZXJuKCksIHJlZ0V4cC0+Zmxh
Z3MoKSwgWWFycjo6Q2hhclNpemU6OkNoYXI4LCB2bSwgY29tbW9uRGF0YS0+bV9ib3llck1vb3Jl
RGF0YSwgaml0LCB5YXJyUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAgIGF1dG8gZmFpbGVkTWF0Y2ggPSBq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgcmV0dXJuR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlZCBjYWNoZWQg
cmVzdWx0LgorICAgICAgICAgICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSB0ZW1wMEdQ
UjsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0UHRyKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gSlNHbG9iYWxPYmplY3Q6OnJlZ0V4cEdsb2JhbERhdGFPZmZzZXQoKSAr
IFJlZ0V4cEdsb2JhbERhdGE6Om9mZnNldE9mQ2FjaGVkUmVzdWx0KCk7CisKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlZ0V4cCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hl
ZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0UmVnRXhwKCkpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc3RyaW5nR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBv
ZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mTGFzdElucHV0KCkpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmUzMihyZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1
bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgc3RhcnQpKSk7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIocmV0dXJuMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZlJlc3VsdCgp
ICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBlbmQpKSk7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZz
ZXRPZlJlaWZpZWQoKSkpOworCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIHJldHVybkdQUik7CisgICAgICAgICAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBmYWlsZWRNYXRjaC5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
LCByZXR1cm5HUFIpOworICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAg
ICAgICAgfSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlubGluZXJlc3VsdCA9IG1fb3V0LmFuY2hvcihwYXRj
aHBvaW50KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG9wZXJhdGlvbkNhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG9wZXJhdGlvblJlc3VsdDsKKworICAgICAgICBpZiAoaGF2ZVN0cmluZ0FyZykK
KyAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50MzIs
IG9wZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcsIGdsb2JhbE9iamVjdCwgYmFzZSwgYXJndW1lbnQp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uUmVnRXhwVGVzdCwgZ2xvYmFsT2JqZWN0LCBiYXNl
LCBhcmd1bWVudCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJv
b2xlYW4obV9vdXQucGhpKEludDMyLCBpbmxpbmVyZXN1bHQsIG9wZXJhdGlvblJlc3VsdCkpOwor
ICAgIH0KKyNlbHNlCisgICAgTk9fUkVUVVJOIHZvaWQgY29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdCgpCiAgICAgewogICAgICAg
ICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24g
MjgzMDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCk7CiAgICAgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1CaW5hcnlTdHJpbmdT
d2l0Y2hDYXNlTGVuZ3RoLCA1MCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwg
bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoLCAyMDAwLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KFVuc2lnbmVkLCBtYXhpbXVtUmVnRXhwVGVzdElubGluZUNvZGVzaXplLCA1
MDAsIE5vcm1hbCwgIk1heGltdW0gY29kZSBzaXplIGluIGJ5dGVzIGZvciBpbmxpbmVkIFJlZ0V4
cC50ZXN0IEpJVCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihEb3VibGUsIGppdFBvbGljeVNjYWxl
LCAxLjAsIE5vcm1hbCwgInNjYWxlIEpJVCB0aHJlc2hvbGRzIHRvIHRoaXMgc3BlY2lmaWVkIHJh
dGlvIGJldHdlZW4gMC4wIChjb21waWxlIEFTQVApIGFuZCAxLjAgKGNvbXBpbGUgbGlrZSBub3Jt
YWwpLiIpIFwKICAgICB2KEJvb2wsIGZvcmNlRWFnZXJDb21waWxhdGlvbiwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJ
KHJldmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDEzIEBAIHB1YmxpYzoKIAogICAgIFN0
cmluZyB0b1NvdXJjZVN0cmluZygpIGNvbnN0OwogCisjaWYgRU5BQkxFKFlBUlJfSklUKQorICAg
IFlhcnI6OllhcnJDb2RlQmxvY2sqIGdldFJlZ0V4cEpJVENvZGVCbG9jaygpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9yZWdFeHBKSVRDb2RlLmdldCgpOworICAgIH0KKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNoZTsKICAgICBSZWdFeHAoVk0mLCBjb25z
dCBTdHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAkocmV2aXNpb24gMjgzMDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Myw2ICs1MywxNiBAQCBpbmxpbmUgdW5zaWduZWQgcm91bmRMb2NhbFJl
Z2lzdGVyQ291bnRGCiAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpLCBsb2NhbFJlZ2lzdGVyQ291bnQgKyBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnMpIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwog
fQogCitpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDb3VudEZvclN0YWNrU2l6ZSh1bnNpZ25lZCBz
aXplSW5CeXRlcykKK3sKKyAgICB1bnNpZ25lZCBzaXplSW5SZWdpc3RlcnMgPSBzaXplSW5CeXRl
cyAvIHNpemVvZih2b2lkKik7CisKKyAgICBpZiAoc2l6ZUluUmVnaXN0ZXJzIDw9IENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBzaXplSW5SZWdpc3RlcnMgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKK30K
KwogaW5saW5lIHVuc2lnbmVkIGxvZ1N0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkKIHsKICAgICBy
ZXR1cm4gV1RGOjpmYXN0TG9nMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyODMwODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyQ2Fub25pY2Fs
aXplLmgiCiAjaW5jbHVkZSAiWWFyckRpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIllhcnJKSVRS
ZWdpc3RlcnMuaCIKICNpbmNsdWRlICJZYXJyTWF0Y2hpbmdDb250ZXh0SG9sZGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0x
ODIsMTE1ICsxODMsMTEgQEAgc3RkOjp0dXBsZTxCb3llck1vb3JlQml0bWFwOjpNYXAsIEJveWVy
TQogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgV1RGTW92ZShtYXApLCBXVEZNb3ZlKGNoYXJhY3Rl
cnNGYXN0UGF0aCkgfTsKIH0KIAotY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySklUSW5mbywgcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7Cit0ZW1wbGF0ZTxjbGFzcyBZYXJy
SklUUmVncyA9IFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzPgorY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbyB7CiAKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTVJlZ2lzdGVyczo6cjE7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IEFSTVJlZ2lzdGVyczo6cjI7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IEFSTVJlZ2lzdGVyczo6
cjM7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBBUk1SZWdpc3Rl
cnM6OnI0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IEFSTVJlZ2lz
dGVyczo6cjU7Ci0gICAgLy8gcjYgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyQVJNdjcs
Ci0gICAgLy8gcjcgaXMgZnAuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1Qy
ID0gQVJNUmVnaXN0ZXJzOjpyODsKLSAgICAvLyByOSBpcyBzYiBpbiBFQUJJLgotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgPSBBUk1SZWdpc3RlcnM6OnIxMDsg
Ly8gcjEwIGlzIFNMLCBidXQgbm8gbG9uZ2VyIGEgc3BlY2lhbCByZWdpc3Rlci4KLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6
cjA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IEFS
TVJlZ2lzdGVyczo6cjE7Ci0KLSNlbGlmIENQVShBUk02NCkKLSAgICAvLyBBcmd1bWVudCByZWdp
c3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBBUk02NFJlZ2lz
dGVyczo6eDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gQVJNNjRS
ZWdpc3RlcnM6OngxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBB
Uk02NFJlZ2lzdGVyczo6eDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1
dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
bWF0Y2hpbmdDb250ZXh0ID0gQVJNNjRSZWdpc3RlcnM6Ong0OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OyAvLyBM
b2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGluIHRoZSBwcm9sb2d1ZS4KLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgPSBBUk02
NFJlZ2lzdGVyczo6eDU7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0KLSAg
ICAvLyBTY3JhdGNoIHJlZ2lzdGVycwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZWdUMCA9IEFSTTY0UmVnaXN0ZXJzOjp4NjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgcmVnVDEgPSBBUk02NFJlZ2lzdGVyczo6eDc7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIHJlZ1QyID0gQVJNNjRSZWdpc3RlcnM6Ong4OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gQVJNNjRSZWdpc3RlcnM6Ong5OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCA9IEFS
TTY0UmVnaXN0ZXJzOjp4MTA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHVuaWNv
ZGVUZW1wID0gQVJNNjRSZWdpc3RlcnM6Ong1OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBpbml0aWFsU3RhcnQgPSBBUk02NFJlZ2lzdGVyczo6eDExOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSA9IEFSTTY0UmVnaXN0ZXJz
Ojp4MTI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlYWRpbmdTdXJyb2dhdGVU
YWcgPSBBUk02NFJlZ2lzdGVyczo6eDEzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IEFSTTY0UmVnaXN0ZXJzOjp4MTQ7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBSZWdpc3RlcklEIGVuZE9mU3RyaW5nQWRkcmVzcyA9IEFSTTY0UmVnaXN0ZXJz
Ojp4MTU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIg
PSBBUk02NFJlZ2lzdGVyczo6eDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJl
dHVyblJlZ2lzdGVyMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgVHJ1c3RlZEltbTMyIHN1cnJvZ2F0ZVRhZ01hc2sgPSBUcnVzdGVkSW1tMzIoMHhmZmZmZmMw
MCk7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5w
dXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
aW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgbGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6YTI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIG91dHB1dCA9IE1JUFNSZWdpc3RlcnM6OmEzOwotCi0gICAgLy8gdDAgaXMgcmVzZXJ2
ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KLSAgICAvLyB0MSBpcyByZXNlcnZlZCBmb3IgTWFj
cm9Bc3NlbWJsZXJNSVBTLgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9
IE1JUFNSZWdpc3RlcnM6OnQyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdU
MSA9IE1JUFNSZWdpc3RlcnM6OnQzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBpbml0aWFsU3RhcnQgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBNSVBTUmVnaXN0ZXJz
Ojp2MTsKLQotI2VsaWYgQ1BVKFg4Nl82NCkKLSNpZiAhT1MoV0lORE9XUykKLSAgICAvLyBBcmd1
bWVudCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBY
ODZSZWdpc3RlcnM6OmVkaTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXgg
PSBYODZSZWdpc3RlcnM6OmVzaTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVu
Z3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6ZWN4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBYODZSZWdpc3RlcnM6OnI4OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyODsgLy8g
TG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjpyOTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSNlbHNl
Ci0gICAgLy8gSWYgdGhlIHJldHVybiB2YWx1ZSBkb2Vzbid0IGZpdCBpbiA2NGJpdHMsIGl0cyBk
ZXN0aW5hdGlvbiBpcyBwb2ludGVkIGJ5IHJjeCBhbmQgdGhlIHBhcmFtZXRlcnMgYXJlIHNoaWZ0
ZWQuCi0gICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5Lzc1NzJ6
dHo0LmFzcHgKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihNYXRjaFJlc3VsdCkgPiBzaXplb2Yo
dm9pZCopLCAiTWF0Y2hSZXN1bHQgZG9lcyBub3QgZml0IGluIDY0Yml0cyIpOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6cjg7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6cjk7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6cjEw
OwotI2VuZGlmCi0KLSAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycwotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZWdUMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwotI2lmICFPUyhXSU5ET1dT
KQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IFg4NlJlZ2lzdGVyczo6
cjk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gWDg2UmVnaXN0ZXJz
OjpyMTA7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IFg4
NlJlZ2lzdGVyczo6ZWN4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9
IFg4NlJlZ2lzdGVyczo6ZWRpOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgaW5pdGlhbFN0YXJ0ID0gWDg2UmVnaXN0ZXJzOjplYng7Ci0jaWYgIU9TKFdJTkRPV1Mp
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgPSBY
ODZSZWdpc3RlcnM6OnIxMjsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IHJlbWFpbmluZ01hdGNoQ291bnQgPSBYODZSZWdpc3RlcnM6OmVzaTsKLSNlbmRpZgotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCA9IFg4NlJl
Z2lzdGVyczo6cjEzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmljb2RlVGVt
cCA9IFg4NlJlZ2lzdGVyczo6cjE0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBl
bmRPZlN0cmluZ0FkZHJlc3MgPSBYODZSZWdpc3RlcnM6OnIxNTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZWF4OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBYODZSZWdpc3Rl
cnM6OmVkeDsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIHN1cHBsZW1lbnRh
cnlQbGFuZXNCYXNlID0gVHJ1c3RlZEltbTMyKDB4MTAwMDApOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgVHJ1c3RlZEltbTMyIGxlYWRpbmdTdXJyb2dhdGVUYWcgPSBUcnVzdGVkSW1tMzIoMHhkODAw
KTsKLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRh
ZyA9IFRydXN0ZWRJbW0zMigweGRjMDApOwotICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZElt
bTMyIHN1cnJvZ2F0ZVRhZ01hc2sgPSBUcnVzdGVkSW1tMzIoMHhmZmZmZmMwMCk7CisjaWZkZWYg
IEpJVF9VTklDT0RFX0VYUFJFU1NJT05TCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
eGZmZmZmYzAwKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQ
UkVTU0lPTlMpCkBAIC0zNjAsOCArMjU3LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKIAogICAgIHZvaWQgaW5pdFBhcmVuQ29udGV4dEZyZWVMaXN0KCkKICAg
ICB7Ci0gICAgICAgIFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UG9pbnRlciA9IHJlZ1QwOwotICAg
ICAgICBSZWdpc3RlcklEIG5leHRQYXJlbkNvbnRleHRQb2ludGVyID0gcmVnVDI7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVuQ29udGV4dFBvaW50ZXIgPSBtX3JlZ3Mu
cmVnVDA7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5leHRQYXJlbkNvbnRl
eHRQb2ludGVyID0gbV9yZWdzLnJlZ1QyOworCisgICAgICAgIG1fdXNlc1QyID0gdHJ1ZTsKIAog
ICAgICAgICBzaXplX3QgcGFyZW5Db250ZXh0U2l6ZSA9IFBhcmVuQ29udGV4dDo6c2l6ZUZvciht
X3BhcmVuQ29udGV4dFNpemVzKTsKIApAQCAtMzcyLDk0ICsyNzEsOTMgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0Nv
bnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkpLCBmcmVlbGlz
dFNpemVSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNl
dE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkpLCBtX3JlZ3MuZnJlZWxpc3RTaXplUmVnaXN0
ZXIpOwogICAgICAgICAvLyBOb3RlIHRoYXQgbWF0Y2hpbmdDb250ZXh0IGFuZCBmcmVlbGlzdFJl
Z2lzdGVyIGFyZSBsaWtlbHkgdGhlIHNhbWUgcmVnaXN0ZXIuCi0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0
ZXJuQ29udGV4dEJ1ZmZlcigpKSwgZnJlZWxpc3RSZWdpc3Rlcik7Ci0gICAgICAgIEp1bXAgZW1w
dHlGcmVlTGlzdCA9IGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxpc3RSZWdpc3Rlcik7Ci0gICAg
ICAgIG1vdmUoZnJlZWxpc3RSZWdpc3RlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIGZyZWVsaXN0UmVnaXN0ZXIs
IG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKLSAgICAgICAgYWRkUHRyKGZyZWVsaXN0UmVnaXN0
ZXIsIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihw
YXJlbkNvbnRleHRTaXplKSwgZnJlZWxpc3RTaXplUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5tYXRjaGluZ0NvbnRleHQsIE1h
dGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlcigpKSwgbV9y
ZWdzLmZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBlbXB0
eUZyZWVMaXN0ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbV9y
ZWdzLmZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5mcmVlbGlz
dFJlZ2lzdGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIG1fcmVncy5mcmVl
bGlzdFJlZ2lzdGVyLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7CisgICAgICAgIG1faml0LmFk
ZFB0cihtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lzdGVy
KTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFy
ZW5Db250ZXh0U2l6ZSksIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rlcik7CiAKLSAgICAgICAg
TGFiZWwgbG9vcFRvcCh0aGlzKTsKLSAgICAgICAgSnVtcCBpbml0RG9uZSA9IGJyYW5jaFB0cihB
Ym92ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKLSAg
ICAgICAgc3RvcmVQdHIobmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIEFkZHJlc3MocGFyZW5Db250
ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKLSAgICAgICAgbW92ZShu
ZXh0UGFyZW5Db250ZXh0UG9pbnRlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBhcmVuQ29udGV4dFBvaW50ZXIs
IG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKLSAgICAgICAganVtcChsb29wVG9wKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3BUb3AoJm1faml0KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaW5pdERvbmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lz
dGVyKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIobmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50ZXIsIFBhcmVuQ29udGV4dDo6
bmV4dE9mZnNldCgpKSk7CisgICAgICAgIG1faml0Lm1vdmUobmV4dFBhcmVuQ29udGV4dFBvaW50
ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihwYXJlbkNvbnRleHRTaXplKSwgcGFyZW5Db250ZXh0UG9pbnRl
ciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5qdW1wKGxvb3BUb3Ap
OwogCi0gICAgICAgIGluaXREb25lLmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250
ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKLSAgICAgICAgZW1wdHlGcmVlTGlzdC5saW5rKHRoaXMpOwor
ICAgICAgICBpbml0RG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSkpOwor
ICAgICAgICBlbXB0eUZyZWVMaXN0LmxpbmsoJm1faml0KTsKICAgICB9CiAKLSAgICB2b2lkIGFs
bG9jYXRlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHZvaWQgYWxsb2NhdGVQ
YXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAg
ICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBmcmVlbGlz
dFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVtYWluaW5nTWF0
Y2hDb3VudCk7Ci0gICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZW1haW5pbmdNYXRjaENvdW50KSk7Ci0gICAgICAgIG1vdmUoZnJlZWxpc3RSZWdpc3Rl
ciwgcmVzdWx0KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyZWVsaXN0UmVnaXN0ZXIsIFBh
cmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgZnJlZWxpc3RSZWdpc3Rlcik7CisgICAgICAgIG1f
YWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyKSk7CisgICAgICAgIG1faml0LnN1YjMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5yZW1haW5pbmdNYXRjaENvdW50
KTsKKyAgICAgICAgbV9oaXRNYXRjaExpbWl0LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3VudCkpOworICAgICAg
ICBtX2ppdC5tb3ZlKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCByZXN1bHQpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5mcmVlbGlzdFJlZ2lz
dGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVy
KTsKICAgICB9CiAKLSAgICB2b2lkIGZyZWVQYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBoZWFkUHRy
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgbmV3SGVhZFB0clJlZ2lzdGVyKQorICAgIHZvaWQgZnJlZVBh
cmVuQ29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBoZWFkUHRyUmVnaXN0ZXIsIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdpc3RlcikKICAgICB7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9m
ZnNldCgpKSwgbmV3SGVhZFB0clJlZ2lzdGVyKTsKLSAgICAgICAgc3RvcmVQdHIoZnJlZWxpc3RS
ZWdpc3RlciwgQWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNl
dCgpKSk7Ci0gICAgICAgIG1vdmUoaGVhZFB0clJlZ2lzdGVyLCBmcmVlbGlzdFJlZ2lzdGVyKTsK
KyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhoZWFkUHRyUmVn
aXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgbmV3SGVhZFB0clJlZ2lzdGVyKTsK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIobV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGhlYWRQdHJSZWdpc3RlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0
KCkpKTsKKyAgICAgICAgbV9qaXQubW92ZShoZWFkUHRyUmVnaXN0ZXIsIG1fcmVncy5mcmVlbGlz
dFJlZ2lzdGVyKTsKICAgICB9CiAKLQotICAgIHZvaWQgc3RvcmVCZWdpbkFuZE1hdGNoQW1vdW50
VG9QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBiZWdpbkdQUiwgUmVnaXN0ZXJJRCBtYXRjaEFtb3Vu
dEdQUiwgUmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCisgICAgdm9pZCBzdG9yZUJlZ2luQW5k
TWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiZWdp
bkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVuQ29udGV4dEdQUikKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpICsgNCA9PSBQYXJlbkNvbnRleHQ6
Om1hdGNoQW1vdW50T2Zmc2V0KCkpOwotICAgICAgICBzdG9yZVBhaXIzMihiZWdpbkdQUiwgbWF0
Y2hBbW91bnRHUFIsIHBhcmVuQ29udGV4dEdQUiwgVHJ1c3RlZEltbTMyKFBhcmVuQ29udGV4dDo6
YmVnaW5PZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5zdG9yZVBhaXIzMihiZWdpbkdQUiwgbWF0
Y2hBbW91bnRHUFIsIHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihQYXJlbkNvbnRleHQ6OmJlZ2luT2Zmc2V0KCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGxvYWRC
ZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHBhcmVuQ29udGV4
dEdQUiwgUmVnaXN0ZXJJRCBiZWdpbkdQUiwgUmVnaXN0ZXJJRCBtYXRjaEFtb3VudEdQUikKKyAg
ICB2b2lkIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGJlZ2luR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudEdQUikK
ICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgp
ICsgNCA9PSBQYXJlbkNvbnRleHQ6Om1hdGNoQW1vdW50T2Zmc2V0KCkpOwotICAgICAgICBsb2Fk
UGFpcjMyKHBhcmVuQ29udGV4dEdQUiwgVHJ1c3RlZEltbTMyKFBhcmVuQ29udGV4dDo6YmVnaW5P
ZmZzZXQoKSksIGJlZ2luR1BSLCBtYXRjaEFtb3VudEdQUik7CisgICAgICAgIG1faml0LmxvYWRQ
YWlyMzIocGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFBhcmVu
Q29udGV4dDo6YmVnaW5PZmZzZXQoKSksIGJlZ2luR1BSLCBtYXRjaEFtb3VudEdQUik7CiAgICAg
fQogCi0gICAgdm9pZCBzYXZlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVn
LCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3VicGF0dGVybiwgdW5zaWduZWQg
bGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbikKKyAg
ICB2b2lkIHNhdmVQYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5D
b250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBm
aXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0
ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewogICAgICAgICBsb2FkRnJvbUZyYW1lKHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hB
bW91bnRJbmRleCgpLCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVCZWdpbkFuZE1hdGNoQW1vdW50
VG9QYXJlbkNvbnRleHQoaW5kZXgsIHRlbXBSZWcsIHBhcmVuQ29udGV4dFJlZyk7CisgICAgICAg
IHN0b3JlQmVnaW5BbmRNYXRjaEFtb3VudFRvUGFyZW5Db250ZXh0KG1fcmVncy5pbmRleCwgdGVt
cFJlZywgcGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgbG9hZEZyb21GcmFtZShzdWJwYXR0ZXJu
QmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnJldHVybkFkZHJl
c3NJbmRleCgpLCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVQdHIodGVtcFJlZywgQWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSk7Cisg
ICAgICAgIG1faml0LnN0b3JlUHRyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBh
cmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpyZXR1cm5BZGRyZXNzT2Zmc2V0KCkpKTsKICAg
ICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0
ZXJucykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJwYXR0ZXJuID0gZmlyc3RTdWJw
YXR0ZXJuOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuKyspIHsKICAg
ICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXQoKSk7Ci0gICAgICAgICAgICAgICAg
bG9hZDY0KEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZih1bnNpZ25l
ZCkpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICBzdG9yZTY0KHRlbXBSZWcsIEFkZHJlc3Mo
cGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRlcm5PZmZzZXQoc3VicGF0dGVy
bikpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWduZWQpKSwg
dGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0ZW1wUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c3VicGF0dGVy
bk9mZnNldChzdWJwYXR0ZXJuKSkpOwogICAgICAgICAgICAgICAgIGNsZWFyU3VicGF0dGVyblN0
YXJ0KHN1YnBhdHRlcm4pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uID0gc3VicGF0
dGVybkJhc2VGcmFtZUxvY2F0aW9uOyBmcmFtZUxvY2F0aW9uIDwgbV9wYXJlbkNvbnRleHRTaXpl
cy5mcmFtZVNsb3RzKCk7IGZyYW1lTG9jYXRpb24rKykgewogICAgICAgICAgICAgbG9hZEZyb21G
cmFtZShmcmFtZUxvY2F0aW9uLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHRlbXBS
ZWcsIEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnNhdmVkRnJhbWVPZmZz
ZXQobV9wYXJlbkNvbnRleHRTaXplcykgKyBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHVpbnRwdHJf
dCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zmc2V0
KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRyX3Qp
KSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHJlc3RvcmVQYXJlbkNvbnRleHQoUmVn
aXN0ZXJJRCBwYXJlbkNvbnRleHRSZWcsIFJlZ2lzdGVySUQgdGVtcFJlZywgdW5zaWduZWQgZmly
c3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwgdW5zaWduZWQgc3VicGF0dGVy
bkJhc2VGcmFtZUxvY2F0aW9uKQorICAgIHZvaWQgcmVzdG9yZVBhcmVuQ29udGV4dChNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3VicGF0dGVybiwgdW5zaWduZWQgbGFzdFN1
YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbikKICAgICB7Ci0g
ICAgICAgIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChwYXJlbkNvbnRl
eHRSZWcsIGluZGV4LCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2lu
SW5kZXgoKSk7CisgICAgICAgIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4
dChwYXJlbkNvbnRleHRSZWcsIG1fcmVncy5pbmRleCwgdGVtcFJlZyk7CisgICAgICAgIHN0b3Jl
VG9GcmFtZShtX3JlZ3MuaW5kZXgsIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgc3RvcmVUb0ZyYW1l
KHRlbXBSZWcsIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHBh
cmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpyZXR1cm5BZGRyZXNzT2Zmc2V0KCkpLCB0ZW1w
UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJl
bkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwgdGVtcFJl
Zyk7CiAgICAgICAgIHN0b3JlVG9GcmFtZSh0ZW1wUmVnLCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnJldHVybkFkZHJlc3NJbmRleCgpKTsK
ICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJw
YXR0ZXJucykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJwYXR0ZXJuID0gZmlyc3RT
dWJwYXR0ZXJuOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuKyspIHsK
ICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXQoKSk7Ci0gICAgICAgICAgICAg
ICAgbG9hZDY0KEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRl
cm5PZmZzZXQoc3VicGF0dGVybikpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICBzdG9yZTY0
KHRlbXBSZWcsIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZih1bnNp
Z25lZCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRlcm5PZmZzZXQoc3Vi
cGF0dGVybikpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRlbXBS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8
IDEpICogc2l6ZW9mKHVuc2lnbmVkKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tU
cmFja0luZm9QYXJlbnRoZXNlczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
ID0gc3VicGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uOyBmcmFtZUxvY2F0aW9uIDwgbV9wYXJlbkNv
bnRleHRTaXplcy5mcmFtZVNsb3RzKCk7IGZyYW1lTG9jYXRpb24rKykgewotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1l
T2Zmc2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50
cHRyX3QpKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zm
c2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRy
X3QpKSwgdGVtcFJlZyk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUodGVtcFJlZywgZnJhbWVM
b2NhdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC00ODcsNyArMzg1LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB9CiAgICAgfQogCi0gICAg
dm9pZCBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoUmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIEp1bXBM
aXN0JiBmYWlsdXJlcywgSnVtcExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVyUmFuZ2Uq
IHJhbmdlcywgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkKiBtYXRjaEluZGV4LCBjb25zdCBVQ2hh
cjMyKiBtYXRjaGVzLCB1bnNpZ25lZCBtYXRjaENvdW50KQorICAgIHZvaWQgbWF0Y2hDaGFyYWN0
ZXJDbGFzc1JhbmdlKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBt
YXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdlKiByYW5nZXMsIHVuc2lnbmVkIGNvdW50LCB1
bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNoYXIzMiogbWF0Y2hlcywgdW5zaWduZWQgbWF0
Y2hDb3VudCkKICAgICB7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIC8vIHBpY2sgd2hpY2gg
cmFuZ2Ugd2UncmUgZ29pbmcgdG8gZ2VuZXJhdGUKQEAgLTQ5OCwzMyArMzk2LDMzIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIC8vIGNoZWNr
IGlmIHRoZXJlIGFyZSBhbnkgcmFuZ2VzIG9yIG1hdGNoZXMgYmVsb3cgbG8uICBJZiBub3QsIGp1
c3QgamwgdG8gZmFpbHVyZSAtCiAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnl0aGluZyBl
bHNlIHRvIGNoZWNrLCBjaGVjayB0aGF0IGZpcnN0LCBpZiBpdCBmYWxscyB0aHJvdWdoIGptcCB0
byBmYWlsdXJlLgogICAgICAgICAgICAgaWYgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYm
IChtYXRjaGVzWyptYXRjaEluZGV4XSA8IGxvKSkgewotICAgICAgICAgICAgICAgIEp1bXAgbG9P
ckFib3ZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1
bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGxvT3JBYm92ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9y
RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCls
bykpOwogCiAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIHJhbmdlcyBi
ZWZvcmUgdGhpcyBvbmUKICAgICAgICAgICAgICAgICBpZiAod2hpY2gpCiAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRj
aERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgsIG1hdGNoZXMsIG1hdGNoQ291bnQpOwog
CiAgICAgICAgICAgICAgICAgd2hpbGUgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYmICht
YXRjaGVzWyptYXRjaEluZGV4XSA8IGxvKSkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaERl
c3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9y
dCltYXRjaGVzWyptYXRjaEluZGV4XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3Rlciwg
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCltYXRjaGVzWyptYXRjaEluZGV4
XSkpKTsKICAgICAgICAgICAgICAgICAgICAgKysqbWF0Y2hJbmRleDsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgICAgICBs
b09yQWJvdmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluaygmbV9q
aXQpOwogICAgICAgICAgICAgfSBlbHNlIGlmICh3aGljaCkgewotICAgICAgICAgICAgICAgIEp1
bXAgbG9PckFib3ZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIElt
bTMyKCh1bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxvT3JBYm92ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBz
aG9ydClsbykpOwogCiAgICAgICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNo
YXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgcmFuZ2VzLCB3aGljaCwgbWF0Y2hJbmRleCwg
bWF0Y2hlcywgbWF0Y2hDb3VudCk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAK
LSAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBs
b09yQWJvdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIsIEltbTMyKCh1
bnNpZ25lZCBzaG9ydClsbykpKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbG8pKSk7CiAKICAgICAgICAgICAgIHdoaWxl
ICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAobWF0Y2hlc1sqbWF0Y2hJbmRleF0gPD0g
aGkpKQogICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAKLSAgICAgICAgICAgIG1hdGNo
RGVzdC5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1
bnNpZ25lZCBzaG9ydCloaSkpKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWhpKSkpOwogICAgICAgICAgICAgLy8g
ZmFsbCB0aHJvdWdoIHRvIGhlcmUsIHRoZSB2YWx1ZSBpcyBhYm92ZSBoaS4KIAogICAgICAgICAg
ICAgLy8gc2h1ZmZsZSBhbG9uZyAmIGxvb3AgYXJvdW5kIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBt
YXRjaGVzIHRvIGhhbmRsZS4KQEAgLTUzNCwyNCArNDMyLDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfSB3aGlsZSAoY291bnQpOwogICAgIH0K
IAotICAgIHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhSZWdpc3RlcklEIGNoYXJhY3RlciwgSnVt
cExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJDbGFzcykKKyAgICB2
b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVy
Q2xhc3MqIGNoYXJDbGFzcykKICAgICB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fdGFibGUg
JiYgIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVz
cyB0YWJsZUVudHJ5KGNoYXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY2hhckNs
YXNzLT5tX3RhYmxlKSk7Ci0gICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaFRlc3Q4
KGNoYXJDbGFzcy0+bV90YWJsZUludmVydGVkID8gWmVybyA6IE5vblplcm8sIHRhYmxlRW50cnkp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgdGFibGVFbnRy
eShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNoYXJDbGFzcy0+bV90YWJs
ZSkpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0OChjaGFy
Q2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IE1hY3JvQXNzZW1ibGVyOjpaZXJvIDogTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHRhYmxlRW50cnkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIEp1bXBMaXN0IHVuaWNvZGVGYWlsOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgdW5pY29kZUZhaWw7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0
Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlLnNpemUoKSkg
ewotICAgICAgICAgICAgSnVtcExpc3QgaXNBc2NpaTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBpc0FzY2lpOwogICAgICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRj
aGVzLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkKLSAgICAgICAgICAgICAg
ICBpc0FzY2lpLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgVHJ1
c3RlZEltbTMyKDB4N2YpKSk7CisgICAgICAgICAgICAgICAgaXNBc2NpaS5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4N2YpKSk7CiAKICAgICAgICAgICAgIGlmIChjaGFy
Q2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzVW5pY29kZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNoID0gY2hhckNsYXNzLT5tX21hdGNo
ZXNVbmljb2RlW2ldOwotICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5j
aDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoKSkpOworICAgICAgICAgICAgICAgICAgICBt
YXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hh
cmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2gpKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCkBAIC01NjAsMjUgKzQ1OCwyNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgbG8gPSBj
aGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5iZWdpbjsKICAgICAgICAgICAgICAgICAgICAg
VUNoYXIzMiBoaSA9IGNoYXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlW2ldLmVuZDsKIAotICAgICAg
ICAgICAgICAgICAgICBKdW1wIGJlbG93ID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwg
SW1tMzIobG8pKTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoaGkpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJlbG93LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGJlbG93ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihsbykpOworICAgICAgICAgICAgICAg
ICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGhpKSkpOworICAg
ICAgICAgICAgICAgICAgICBiZWxvdy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6
ZSgpIHx8IGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHVuaWNv
ZGVGYWlsID0ganVtcCgpOwotICAgICAgICAgICAgaXNBc2NpaS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIHVuaWNvZGVGYWlsID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgaXNBc2Np
aS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX3Jh
bmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoSW5kZXggPSAwOwotICAg
ICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2Uo
Y2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmJlZ2lu
KCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5t
X21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAg
ICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3Rlciwg
SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10p
KSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNp
Z25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkpOwogCi0gICAg
ICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbHVyZXMubGluaygm
bV9qaXQpOwogICAgICAgICB9IGVsc2UgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkg
ewogICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uOiBnYXRoZXIgJ2EnLCdBJyBldGMgYmFjayB0
b2dldGhlciwgY2FuIG1hc2sgJiB0ZXN0IG9uY2UuCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
bWF0Y2hlc0FaYXo7CkBAIC01OTMsNzggKzQ5MSw4MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJVXBwZXIo
Y2gpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJh
Y3RlciwgSW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOworICAgICAgICAgICAgICAgIG1hdGNo
RGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpY2gpKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmICh1bnNpZ25lZCBjb3VudEFaYXogPSBtYXRjaGVzQVph
ei5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnRBWmF6OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5h
cHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTMyKG1hdGNoZXNBWmF6
W2ldKSkpOworICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG1hdGNoZXNBWmF6W2ldKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzVW5pY29kZS5zaXplKCkgfHwgY2hhckNs
YXNzLT5tX3Jhbmdlc1VuaWNvZGUuc2l6ZSgpKQotICAgICAgICAgICAgdW5pY29kZUZhaWwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxpbmsoJm1faml0KTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKLSAgICB2b2lkIGFkdmFu
Y2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJtTWF0Y2goY29uc3QgUGF0dGVyblRlcm0qIHRl
cm0sIEp1bXBMaXN0JiBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5nSW5kZXgsIGNvbnN0IFJlZ2lz
dGVySUQgY2hhcmFjdGVyKQorICAgIHZvaWQgYWR2YW5jZUluZGV4QWZ0ZXJDaGFyYWN0ZXJDbGFz
c1Rlcm1NYXRjaChjb25zdCBQYXR0ZXJuVGVybSogdGVybSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5nSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIEFTU0VSVCh0ZXJtLT50eXBl
ID09IFBhdHRlcm5UZXJtOjpUeXBlOjpDaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAgaWYgKHRl
cm0tPmlzRml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIg
OiAxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8g
MiA6IDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgSnVtcCBpc0JNUENoYXIgPSBi
cmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
X3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFy
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1f
cmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAgICBmYWlsdXJlc0FmdGVy
SW5jcmVtZW50aW5nSW5kZXguYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmsoJm1faml0
KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gSnVtcHMgaWYgaW5wdXQgbm90
IGF2YWlsYWJsZTsgd2lsbCBoYXZlIChpbmNvcnJlY3RseSkgaW5jcmVtZW50ZWQgYWxyZWFkeSEK
LSAgICBKdW1wIGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291bnRUb0NoZWNrID0g
MCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2ln
bmVkIGNvdW50VG9DaGVjayA9IDApCiAgICAgewogICAgICAgICBpZiAoY291bnRUb0NoZWNrKQot
ICAgICAgICAgICAgYWRkMzIoSW1tMzIoY291bnRUb0NoZWNrKSwgaW5kZXgpOwotICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoQWJvdmUsIGluZGV4LCBsZW5ndGgpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvdW50VG9DaGVjayksIG1fcmVncy5pbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIG1f
cmVncy5pbmRleCwgbV9yZWdzLmxlbmd0aCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcElmQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291bnRUb0NoZWNrKQorICAgIHsK
KyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvdW50VG9DaGVjayks
IG1fcmVncy5pbmRleCk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOwogICAgIH0K
IAotICAgIEp1bXAganVtcElmQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291bnRUb0NoZWNrKQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrTm90RW5vdWdoSW5wdXQoTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgYWRkaXRpb25hbEFtb3VudCkKICAgICB7Ci0gICAgICAgIGFkZDMyKElt
bTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93
T3JFcXVhbCwgaW5kZXgsIGxlbmd0aCk7CisgICAgICAgIG1faml0LmFkZDMyKG1fcmVncy5pbmRl
eCwgYWRkaXRpb25hbEFtb3VudCk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIG1fcmVncy5sZW5ndGgpOwogICAg
IH0KIAotICAgIEp1bXAgY2hlY2tOb3RFbm91Z2hJbnB1dChSZWdpc3RlcklEIGFkZGl0aW9uYWxB
bW91bnQpCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2tJbnB1dCgpCiAgICAgewotICAg
ICAgICBhZGQzMihpbmRleCwgYWRkaXRpb25hbEFtb3VudCk7Ci0gICAgICAgIHJldHVybiBicmFu
Y2gzMihBYm92ZSwgYWRkaXRpb25hbEFtb3VudCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fcmVncy5pbmRleCwg
bV9yZWdzLmxlbmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBjaGVja0lucHV0KCkKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBhdEVuZE9mSW5wdXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKEJlbG93T3JFcXVhbCwgaW5kZXgsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgbV9yZWdzLmxl
bmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBhdEVuZE9mSW5wdXQoKQorICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNo
MzIoRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOwog
ICAgIH0KIAotICAgIEp1bXAgbm90QXRFbmRPZklucHV0KCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MoQ2hlY2tlZDx1bnNpZ25lZD4g
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRlbXBS
ZWcpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBsZW5n
dGgpOworICAgICAgICByZXR1cm4gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhuZWdhdGl2
ZUNoYXJhY3Rlck9mZnNldCwgdGVtcFJlZywgbV9yZWdzLmluZGV4KTsKICAgICB9CiAKLSAgICBC
YXNlSW5kZXggbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBu
ZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgUmVnaXN0ZXJJRCB0ZW1wUmVnLCBSZWdpc3RlcklEIGlu
ZGV4UmVnID0gaW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zm
c2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBpbmRleFJlZykKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVySUQgYmFzZSA9IGlu
cHV0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiYXNlID0gbV9yZWdzLmlu
cHV0OwogCi0gICAgICAgIC8vIEJhc2VJbmRleCgpIGFkZHJlc3NpbmcgY2FuIHRha2UgYSBpbnQz
Ml90IG9mZnNldC4gR2l2ZW4gdGhhdCB3ZSBjYW4gaGF2ZSBhIHJlZ3VsYXIKLSAgICAgICAgLy8g
ZXhwcmVzc2lvbiB0aGF0IGhhcyB1bnNpZ25lZCBjaGFyYWN0ZXIgb2Zmc2V0cywgQmFzZUluZGV4
J3Mgc2lnbmVkIG9mZnNldCBpcyBpbnN1ZmZpY2llbnQKKyAgICAgICAgLy8gTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgpIGFkZHJlc3NpbmcgY2FuIHRha2UgYSBpbnQzMl90IG9mZnNldC4gR2l2
ZW4gdGhhdCB3ZSBjYW4gaGF2ZSBhIHJlZ3VsYXIKKyAgICAgICAgLy8gZXhwcmVzc2lvbiB0aGF0
IGhhcyB1bnNpZ25lZCBjaGFyYWN0ZXIgb2Zmc2V0cywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCdzIHNpZ25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CiAgICAgICAgIC8vIGZvciBhZGRyZXNz
aW5nIGluIGV4dHJlbWUgY2FzZXMgd2hlcmUgd2UgbWlnaHQgdW5kZXJmbG93LiBUaGVyZWZvcmUg
d2UgY2hlY2sgdG8gc2VlIGlmCiAgICAgICAgIC8vIG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0IHdp
bGwgdW5kZXJmbG93IGRpcmVjdGx5IG9yIGFmdGVyIGNvbnZlcnRpbmcgZm9yIDE2IGJpdCBjaGFy
YWN0ZXJzLgogICAgICAgICAvLyBJZiBzbywgd2UgZG8gb3VyIG93biBhZGRyZXNzIGNhbGN1bGF0
aW5nIGJ5IGFkanVzdGluZyB0aGUgYmFzZSwgdXNpbmcgdGhlIHJlc3VsdCByZWdpc3RlcgpAQCAt
NjczLDExICs1NzYsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICB1bnNpZ25lZCBvZmZzZXRBZGp1c3RBbW91bnQgPSAweDQwMDAwMDAwOwogICAg
ICAgICBpZiAobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgPiBtYXhpbXVtTmVnYXRpdmVPZmZzZXRG
b3JDaGFyYWN0ZXJTaXplKSB7CiAgICAgICAgICAgICBiYXNlID0gdGVtcFJlZzsKLSAgICAgICAg
ICAgIG1vdmUoaW5wdXQsIGJhc2UpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5w
dXQsIGJhc2UpOwogICAgICAgICAgICAgd2hpbGUgKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0ID4g
bWF4aW11bU5lZ2F0aXZlT2Zmc2V0Rm9yQ2hhcmFjdGVyU2l6ZSkgewotICAgICAgICAgICAgICAg
IHN1YlB0cihUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwgYmFzZSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0
QWRqdXN0QW1vdW50KSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgIT0g
Q2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgICAgICAgICBzdWJQdHIoVHJ1c3RlZEltbTMy
KG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihvZmZzZXRBZGp1c3RBbW91bnQpLCBi
YXNlKTsKICAgICAgICAgICAgICAgICBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCAtPSBvZmZzZXRB
ZGp1c3RBbW91bnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY4NSw2NyArNTg4LDcy
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgQ2hl
Y2tlZDxpbnQzMl90PiBjaGFyYWN0ZXJPZmZzZXQoLXN0YXRpY19jYXN0PGludDMyX3Q+KG5lZ2F0
aXZlQ2hhcmFjdGVyT2Zmc2V0KSk7CiAKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNp
emU6OkNoYXI4KQotICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChpbnB1dCwgaW5kZXhSZWcs
IFRpbWVzT25lLCBjaGFyYWN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2Yo
Y2hhcikpKTsKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1f
cmVncy5pbnB1dCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgY2hhcmFjdGVy
T2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGNoYXIpKSk7CiAKLSAgICAgICAg
cmV0dXJuIEJhc2VJbmRleChpbnB1dCwgaW5kZXhSZWcsIFRpbWVzVHdvLCBjaGFyYWN0ZXJPZmZz
ZXQgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoVUNoYXIpKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5pbnB1dCwgaW5kZXhSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc1R3bywgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2l6ZW9mKFVDaGFyKSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RF
X0VYUFJFU1NJT05TKQotICAgIHZvaWQgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChSZWdpc3RlcklE
IHJlc3VsdFJlZykKKyAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhckltcGwoTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2hhclNp
emUgPT0gQ2hhclNpemU6OkNoYXIxNik7CiAKLSAgICAgICAgSnVtcExpc3Qgbm90VW5pY29kZTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vdFVuaWNvZGU7CiAKLSAgICAgICAg
bG9hZDE2VW5hbGlnbmVkKHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCByZXN1bHRSZWcpOworICAg
ICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQobV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWls
LCByZXN1bHRSZWcpOwogCiAgICAgICAgIC8vIElzIHRoZSBjaGFyYWN0ZXIgYSBsZWFkaW5nIHN1
cnJvZ2F0ZT8KLSAgICAgICAgYW5kMzIoc3Vycm9nYXRlVGFnTWFzaywgcmVzdWx0UmVnLCB1bmlj
b2RlVGVtcCk7Ci0gICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCB1
bmljb2RlVGVtcCwgbGVhZGluZ1N1cnJvZ2F0ZVRhZykpOworICAgICAgICBtX2ppdC5hbmQzMihZ
YXJySklURGVmYXVsdFJlZ2lzdGVyczo6c3Vycm9nYXRlVGFnTWFzaywgcmVzdWx0UmVnLCBtX3Jl
Z3MudW5pY29kZVRlbXApOworICAgICAgICBub3RVbmljb2RlLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy51bmljb2RlVGVtcCwgbV9yZWdzLmxl
YWRpbmdTdXJyb2dhdGVUYWcpKTsKIAogICAgICAgICAvLyBJcyB0aGUgaW5wdXQgbG9uZyBlbm91
Z2ggdG8gcmVhZCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZT8KLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigyKSwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwotICAgICAgICBub3RVbmljb2RlLmFw
cGVuZChicmFuY2hQdHIoQWJvdmVPckVxdWFsLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgZW5k
T2ZTdHJpbmdBZGRyZXNzKSk7CisgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDIpLCBtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOworICAgICAg
ICBub3RVbmljb2RlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCBtX3JlZ3MuZW5kT2ZTdHJp
bmdBZGRyZXNzKSk7CiAKICAgICAgICAgLy8gSXMgdGhlIGNoYXJhY3RlciBhIHRyYWlsaW5nIHN1
cnJvZ2F0ZT8KLSAgICAgICAgbG9hZDE2VW5hbGlnbmVkKEFkZHJlc3MocmVnVW5pY29kZUlucHV0
QW5kVHJhaWwpLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7Ci0gICAgICAgIGFuZDMyKHN1cnJv
Z2F0ZVRhZ01hc2ssIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCB1bmljb2RlVGVtcCk7Ci0gICAg
ICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCB1bmljb2RlVGVtcCwgdHJh
aWxpbmdTdXJyb2dhdGVUYWcpKTsKKyAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCksIG1fcmVn
cy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG1faml0LmFuZDMyKFlhcnJKSVRE
ZWZhdWx0UmVnaXN0ZXJzOjpzdXJyb2dhdGVUYWdNYXNrLCBtX3JlZ3MucmVnVW5pY29kZUlucHV0
QW5kVHJhaWwsIG1fcmVncy51bmljb2RlVGVtcCk7CisgICAgICAgIG5vdFVuaWNvZGUuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLnVuaWNvZGVU
ZW1wLCBtX3JlZ3MudHJhaWxpbmdTdXJyb2dhdGVUYWcpKTsKIAogICAgICAgICAvLyBDb21iaW5l
IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHN1cnJvZ2F0ZXMgdG8gcHJvZHVjZSBhIGNvZGUgcG9pbnQu
Ci0gICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMigxMCksIHJlc3VsdFJlZyk7Ci0gICAgICAg
IGdldEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KHJlc3VsdFJlZywgcmVnVW5pY29kZUlucHV0
QW5kVHJhaWwsIFRpbWVzT25lLCAtVTE2X1NVUlJPR0FURV9PRkZTRVQpLCByZXN1bHRSZWcpOwot
ICAgICAgICBub3RVbmljb2RlLmxpbmsodGhpcyk7CisgICAgICAgIG1faml0LmxzaGlmdDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTApLCByZXN1bHRSZWcpOworICAgICAgICBtX2pp
dC5nZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UmVn
LCBtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09u
ZSwgLVUxNl9TVVJST0dBVEVfT0ZGU0VUKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbm90VW5pY29k
ZS5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXIoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0UmVnKQorICAgIHZvaWQgdHJ5UmVhZFVu
aWNvZGVDaGFyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYWRkcmVzcywgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2hhclNp
emUgPT0gQ2hhclNpemU6OkNoYXIxNik7CiAKLSAgICAgICAgZ2V0RWZmZWN0aXZlQWRkcmVzcyhh
ZGRyZXNzLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG1faml0LmdldEVmZmVj
dGl2ZUFkZHJlc3MoYWRkcmVzcywgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKTsKIAot
ICAgICAgICBpZiAocmVzdWx0UmVnID09IHJlZ1QwKQotICAgICAgICAgICAgbV90cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckNhbGxzLmFwcGVuZChuZWFyQ2FsbCgpKTsKKyAgICAgICAgaWYgKHJlc3Vs
dFJlZyA9PSBtX3JlZ3MucmVnVDApCisgICAgICAgICAgICBtX3RyeVJlYWRVbmljb2RlQ2hhcmFj
dGVyQ2FsbHMuYXBwZW5kKG1faml0Lm5lYXJDYWxsKCkpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKHJlc3VsdFJlZyk7CiAgICAgfQogI2VuZGlmCiAg
ICAgCi0gICAgdm9pZCByZWFkQ2hhcmFjdGVyKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hh
cmFjdGVyT2Zmc2V0LCBSZWdpc3RlcklEIHJlc3VsdFJlZywgUmVnaXN0ZXJJRCBpbmRleFJlZyA9
IGluZGV4KQorICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2
ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQog
ICAgIHsKLSAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBuZWdhdGl2ZU9mZnNldEluZGV4ZWRB
ZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIGluZGV4UmVnKTsKKyAg
ICAgICAgcmVhZENoYXJhY3RlcihuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBt
X3JlZ3MuaW5kZXgpOworICAgIH0KKworICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVu
c2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFJlZykKKyAgICB7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYWRkcmVzcyA9IG5lZ2F0aXZlT2Zm
c2V0SW5kZXhlZEFkZHJlc3MobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIHJlc3VsdFJlZywgaW5k
ZXhSZWcpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkKLSAg
ICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkOChhZGRyZXNzLCByZXN1bHRSZWcpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VY
UFJFU1NJT05TKQogICAgICAgICBlbHNlIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKQogICAg
ICAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFyKGFkZHJlc3MsIHJlc3VsdFJlZyk7CiAjZW5kaWYK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKGFkZHJlc3MsIHJlc3Vs
dFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQoYWRkcmVzcywgcmVzdWx0
UmVnKTsKICAgICB9CiAKLSAgICBKdW1wIGp1bXBJZkNoYXJOb3RFcXVhbHMoVUNoYXIzMiBjaCwg
Q2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVySUQgY2hh
cmFjdGVyKQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBJZkNoYXJOb3RFcXVhbHMoVUNo
YXIzMiBjaCwgQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIHJlYWRDaGFy
YWN0ZXIobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlcik7CiAKQEAgLTc1Myw0MyAr
NjYxLDQzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgLy8gdXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRv
IGEgY2hhcmFjdGVyIGNsYXNzLgogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5pZ25vcmVDYXNl
KCkgfHwgaXNBU0NJSUFscGhhKGNoKSB8fCBpc0Nhbm9uaWNhbGx5VW5pcXVlKGNoLCBtX2Nhbm9u
aWNhbE1vZGUpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25vcmVDYXNlKCkgJiYgaXNBU0NJ
SUFscGhhKGNoKSkgewotICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMHgyMCksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMHgyMCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjaCB8PSAweDIwOwogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNo
KSk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uKQorICAgIHZvaWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
ZywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHBva2UocmVnLCBmcmFt
ZUxvY2F0aW9uKTsKKyAgICAgICAgbV9qaXQucG9rZShyZWcsIGZyYW1lTG9jYXRpb24pOwogICAg
IH0KIAotICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMiBpbW0sIHVuc2lnbmVkIGZy
YW1lTG9jYXRpb24pCisgICAgdm9pZCBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICBwb2tl
KGltbSwgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0LnBva2UoaW1tLCBmcmFtZUxvY2F0
aW9uKTsKICAgICB9CiAKICNpZiBDUFUoQVJNNjQpIHx8IENQVShYODZfNjQpCi0gICAgdm9pZCBz
dG9yZVRvRnJhbWUoVHJ1c3RlZEltbVB0ciBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisg
ICAgdm9pZCBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgaW1tLCB1
bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAgcG9rZShpbW0sIGZyYW1lTG9j
YXRpb24pOworICAgICAgICBtX2ppdC5wb2tlKGltbSwgZnJhbWVMb2NhdGlvbik7CiAgICAgfQog
I2VuZGlmCiAKLSAgICBEYXRhTGFiZWxQdHIgc3RvcmVUb0ZyYW1lV2l0aFBhdGNoKHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24pCisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdG9yZVRv
RnJhbWVXaXRoUGF0Y2godW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBzdG9yZVB0cldpdGhQYXRjaChUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOworICAg
ICAgICByZXR1cm4gbV9qaXQuc3RvcmVQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGxvYWRGcm9tRnJhbWUodW5zaWduZWQgZnJhbWVMb2NhdGlvbiwg
UmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBsb2FkRnJvbUZyYW1lKHVuc2lnbmVkIGZyYW1lTG9j
YXRpb24sIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICB7Ci0gICAgICAgIHBl
ZWsocmVnLCBmcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgbV9qaXQucGVlayhyZWcsIGZyYW1lTG9j
YXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgbG9hZEZyb21GcmFtZUFuZEp1bXAodW5zaWduZWQg
ZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIGZhckp1bXAoQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBZYXJyQmFja3RyYWNr
UHRyVGFnKTsKKyAgICAgICAgbV9qaXQuZmFySnVtcChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXpl
b2Yodm9pZCopKSwgWWFyckJhY2t0cmFja1B0clRhZyk7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
YWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyh1bnNpZ25lZCBjYWxsRnJhbWVTaXplKQpAQCAtODA3
LDEzICs3MTUsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxG
cmFtZVNpemVJbkJ5dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAg
ICAgIGlmIChjYWxsRnJhbWVTaXplSW5CeXRlcykKLSAgICAgICAgICAgIGFkZFB0cihJbW0zMihj
YWxsRnJhbWVTaXplSW5CeXRlcyksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2FsbEZyYW1lU2l6ZUluQnl0ZXMp
LCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHZv
aWQgZ2VuZXJhdGVGYWlsUmV0dXJuKCkKICAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cigodm9pZCopV1RGOjpub3RGb3VuZCksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKVdURjo6bm90Rm91bmQpLCBtX3JlZ3Mu
cmV0dXJuUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCksIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOworCisjaWYgRU5BQkxFKFlBUlJf
SklUX1JFR0VYUF9URVNUX0lOTElORSkKKyAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklU
Q29tcGlsZU1vZGU6OklubGluZVRlc3QpIHsKKyAgICAgICAgICAgIG1faW5saW5lZEZhaWxlZE1h
dGNoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisjZW5kaWYKKwogICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogICAgIH0KIApAQCAtODIyLDQ4
ICs3MzgsNDIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
ICAgICBpZiAobV9hYm9ydEV4ZWN1dGlvbi5lbXB0eSgpICYmIG1faGl0TWF0Y2hMaW1pdC5lbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEp1bXBMaXN0IGZpbmlzaEV4aXRp
bmc7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmaW5pc2hFeGl0aW5nOwogICAg
ICAgICBpZiAoIW1fYWJvcnRFeGVjdXRpb24uZW1wdHkoKSkgewotICAgICAgICAgICAgbV9hYm9y
dEV4ZWN1dGlvbi5saW5rKHRoaXMpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCh2
b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIGZpbmlzaEV4aXRpbmcuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBtX2Fib3J0RXhl
Y3V0aW9uLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oLTIpKSwgbV9yZWdz
LnJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZpbmlzaEV4aXRpbmcuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1faGl0TWF0Y2hMaW1pdC5lbXB0
eSgpKSB7Ci0gICAgICAgICAgICBtX2hpdE1hdGNoTGltaXQubGluayh0aGlzKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpLCBy
ZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBtX2hpdE1hdGNoTGltaXQubGluaygmbV9qaXQp
OworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigo
dm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZmluaXNoRXhpdGluZy5saW5rKHRoaXMpOworICAgICAgICBm
aW5pc2hFeGl0aW5nLmxpbmsoJm1faml0KTsKICAgICAgICAgcmVtb3ZlQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdpc3RlcjIpOworICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIG1fcmVncy5yZXR1cm5S
ZWdpc3RlcjIpOwogICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogICAgIH0KIAogICAgIC8vIFVz
ZWQgdG8gcmVjb3JkIHN1YnBhdHRlcm5zLCBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgbV9jb21w
aWxlTW9kZSBpcyBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zLgotICAgIHZvaWQg
c2V0U3VicGF0dGVyblN0YXJ0KFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJuKQor
ICAgIHZvaWQgc2V0U3VicGF0dGVyblN0YXJ0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
ZywgdW5zaWduZWQgc3VicGF0dGVybikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJu
KTsKICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVN
b2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlz
IGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMy
KHJlZywgQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihyZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVn
cy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9Ci0gICAg
dm9pZCBzZXRTdWJwYXR0ZXJuRW5kKFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJu
KQorICAgIHZvaWQgc2V0U3VicGF0dGVybkVuZChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBy
ZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCiAgICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVy
bik7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQobV9jb21waWxl
TW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSwgYnV0IHRoZW4gdGhp
cyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IE5PUkVUVVJOLiA6LSgKLSAgICAgICAgc3RvcmUz
MihyZWcsIEFkZHJlc3Mob3V0cHV0LCAoKHN1YnBhdHRlcm4gPDwgMSkgKyAxKSAqIHNpemVvZihp
bnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhtX3JlZ3Mub3V0cHV0LCAoKHN1YnBhdHRlcm4gPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7
CiAgICAgfQogICAgIHZvaWQgY2xlYXJTdWJwYXR0ZXJuU3RhcnQodW5zaWduZWQgc3VicGF0dGVy
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJuKTsKICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2Rl
OjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlv
bmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigtMSksIEFk
ZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjbGVhck1hdGNoZXModW5zaWduZWQgc3VicGF0dGVybiwgdW5zaWduZWQgbGFz
dFN1YnBhdHRlcm4pCi0gICAgewotICAgICAgICBmb3IgKDsgc3VicGF0dGVybiA8PSBsYXN0U3Vi
cGF0dGVybjsgc3VicGF0dGVybisrKQotICAgICAgICAgICAgY2xlYXJTdWJwYXR0ZXJuU3RhcnQo
c3VicGF0dGVybik7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigtMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsIChzdWJw
YXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9CiAKICAgICAvLyBXZSB1c2Ugb25l
IG9mIHRocmVlIGRpZmZlcmVudCBzdHJhdGVnaWVzIHRvIHRyYWNrIHRoZSBzdGFydCBvZiB0aGUg
Y3VycmVudCBtYXRjaCwKQEAgLTg3MSwyNSArNzgxLDI1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyAxKSBJZiB0aGUgcGF0dGVybiBoYXMgYSBmaXhl
ZCBzaXplLCBkbyBub3RoaW5nISAtIHdlIGNhbGN1bGF0ZSB0aGUgdmFsdWUgbGF6aWx5CiAgICAg
Ly8gICAgYXQgdGhlIGVuZCBvZiBtYXRjaGluZy4gVGhpcyBpcyBpcnJlc3BlY3RpdmUgb2YgbV9j
b21waWxlTW9kZSwgYW5kIGluIHRoaXMgY2FzZQogICAgIC8vICAgIHRoZXNlIG1ldGhvZHMgc2hv
dWxkIG5ldmVyIGJlIGNhbGxlZC4KLSAgICAvLyAyKSBJZiB3ZSdyZSBjb21waWxpbmcgSklUQ29t
cGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucywgJ291dHB1dCcgY29udGFpbnMgYSBwb2ludGVy
IHRvIGFuIG91dHB1dAorICAgIC8vIDIpIElmIHdlJ3JlIGNvbXBpbGluZyBKSVRDb21waWxlTW9k
ZTo6SW5jbHVkZVN1YnBhdHRlcm5zLCAnbV9yZWdzLm91dHB1dCcgY29udGFpbnMgYSBwb2ludGVy
IHRvIGFuIG91dHB1dAogICAgIC8vICAgIHZlY3Rvciwgc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGlu
IHRoZSBvdXRwdXQgdmVjdG9yLgotICAgIC8vIDMpIElmIHdlJ3JlIGNvbXBpbGluZyBNYXRjaE9u
bHksICdvdXRwdXQnIGlzIHVudXNlZCwgc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGRpcmVjdGx5Cisg
ICAgLy8gMykgSWYgd2UncmUgY29tcGlsaW5nIE1hdGNoT25seSBvciBJbmxpbmVkVGVzdCwgJ21f
cmVncy5vdXRwdXQnIGlzIHVudXNlZCwgc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGRpcmVjdGx5CiAg
ICAgLy8gICAgaW4gdGhpcyByZWdpc3Rlci4KLSAgICB2b2lkIHNldE1hdGNoU3RhcnQoUmVnaXN0
ZXJJRCByZWcpCisgICAgdm9pZCBzZXRNYXRjaFN0YXJ0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNG
aXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6
SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgc3RvcmUzMihyZWcsIG91dHB1dCk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlZywgbV9yZWdzLm91dHB1dCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1vdmUocmVnLCBvdXRwdXQpOworICAgICAgICAgICAgbV9qaXQubW92
ZShyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgIH0KLSAgICB2b2lkIGdldE1hdGNoU3RhcnQoUmVn
aXN0ZXJJRCByZWcpCisgICAgdm9pZCBnZXRNYXRjaFN0YXJ0KE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1fYm9keS0+bV9o
YXNGaXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9k
ZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZDMyKG91dHB1dCwgcmVnKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihtX3JlZ3Mub3V0cHV0LCByZWcpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtb3ZlKG91dHB1dCwgcmVnKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUobV9yZWdzLm91dHB1dCwgcmVnKTsKICAgICB9CiAKICAgICBlbnVtIGNsYXNzIFlhcnJPcENv
ZGUgOiB1aW50OF90IHsKQEAgLTk2NSwxMiArODc1LDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgLy8gdXNlZCBmb3IganVtcHMgb3V0IHRvIGJh
Y2t0cmFja2luZyBjb2RlLCBhbmQgYSBzaW5nbGUgcmVlbnRyeSBiYWNrCiAgICAgICAgIC8vIGlu
dG8gdGhlIGNvZGUgZm9yIGEgbm9kZSAobGlrZWx5IHdoZXJlIGEgYmFja3RyYWNrIHdpbGwgdHJp
Z2dlcgogICAgICAgICAvLyByZW1hdGNoaW5nKS4KLSAgICAgICAgTGFiZWwgbV9yZWVudHJ5Owot
ICAgICAgICBKdW1wTGlzdCBtX2p1bXBzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9yZWVudHJ5OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9qdW1wczsKIAog
ICAgICAgICAvLyBVc2VkIGZvciBiYWNrdHJhY2tpbmcgd2hlbiB0aGUgcHJpb3IgYWx0ZXJuYXRp
dmUgZGlkIG5vdCBjb25zdW1lIGFueQogICAgICAgICAvLyBjaGFyYWN0ZXJzIGJ1dCBtYXRjaGVk
LgotICAgICAgICBKdW1wIG1femVyb0xlbmd0aE1hdGNoOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKIAogICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNl
ZCB0byBudWxsIG91dCB0aGUgc2Vjb25kIHBhdHRlcm4gY2hhcmFjdGVyLCB3aGVuCiAgICAgICAg
IC8vIHR3byBhcmUgZnVzZWQgdG8gbWF0Y2ggYSBwYWlyIHRvZ2V0aGVyLgpAQCAtOTg0LDcgKzg5
NCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAg
Ly8gVXNlZCBieSBZYXJyT3BDb2RlOjpOZXN0ZWRBbHRlcm5hdGl2ZU5leHQvRW5kIHRvIGhvbGQg
dGhlIHBvaW50ZXIgdG8gdGhlCiAgICAgICAgIC8vIHZhbHVlIHRoYXQgd2lsbCBiZSBwdXNoZWQg
aW50byB0aGUgcGF0dGVybidzIGZyYW1lIHRvIHJldHVybiB0bywKICAgICAgICAgLy8gdXBvbiBi
YWNrdHJhY2tpbmcgYmFjayBpbnRvIHRoZSBkaXNqdW5jdGlvbi4KLSAgICAgICAgRGF0YUxhYmVs
UHRyIG1fcmV0dXJuQWRkcmVzczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBtX3JldHVybkFkZHJlc3M7CiAKICAgICAgICAgQm95ZXJNb29yZUluZm8qIG1fYm1JbmZvIHsg
bnVsbHB0ciB9OwogICAgIH07CkBAIC0xMDA2LDcgKzkxNiwyMSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgLy8gIC0gQSBmbGFnIGluZGljYXRpbmcgdGhh
dCB0aGUgY3VycmVudCBzZXF1ZW5jZSBvZiBnZW5lcmF0ZWQgY29kZSB1cCB0bwogICAgIC8vICAg
IHRoaXMgcG9pbnQgcmVxdWlyZXMgYmFja3RyYWNraW5nLgogICAgIGNsYXNzIEJhY2t0cmFja2lu
Z1N0YXRlIHsKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3QgUmV0dXJuQWRkcmVzc1JlY29y
ZCB7CisgICAgICAgICAgICBSZXR1cm5BZGRyZXNzUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgZGF0YUxhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmFja3RyYWNrTG9jYXRp
b24pCisgICAgICAgICAgICAgICAgOiBtX2RhdGFMYWJlbChkYXRhTGFiZWwpCisgICAgICAgICAg
ICAgICAgLCBtX2JhY2t0cmFja0xvY2F0aW9uKGJhY2t0cmFja0xvY2F0aW9uKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIG1fZGF0YUxhYmVsOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
YmFja3RyYWNrTG9jYXRpb247CisgICAgICAgIH07CisKICAgICBwdWJsaWM6CisgICAgICAgIHR5
cGVkZWYgVmVjdG9yPFJldHVybkFkZHJlc3NSZWNvcmQsIDQ+IEJhY2t0cmFja1JlY29yZHM7CisK
ICAgICAgICAgQmFja3RyYWNraW5nU3RhdGUoKQogICAgICAgICAgICAgOiBtX3BlbmRpbmdGYWxs
dGhyb3VnaChmYWxzZSkKICAgICAgICAgewpAQCAtMTAxNCwxNSArOTM4LDE1IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAvLyBBZGQgYSBqdW1w
IG9yIGp1bXBzLCBhIHJldHVybiBhZGRyZXNzLCBvciBzZXQgdGhlIGZsYWcgaW5kaWNhdGluZwog
ICAgICAgICAvLyB0aGF0IHRoZSBjdXJyZW50ICdmYWxsdGhyb3VnaCcgY29udHJvbCBmbG93IHJl
cXVpcmVzIGJhY2t0cmFja2luZy4KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSnVtcCYganVt
cCkKKyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5hcHBlbmQoanVtcCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdm9pZCBhcHBlbmQoSnVtcExpc3QmIGp1bXBMaXN0KQorICAgICAg
ICB2b2lkIGFwcGVuZChNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBMaXN0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXBMaXN0KTsKICAgICAg
ICAgfQotICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBEYXRhTGFiZWxQdHImIHJldHVybkFkZHJl
c3MpCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHImIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVy
bnMuYXBwZW5kKHJldHVybkFkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMDM5LDcgKzk2Myw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgdm9pZCBs
aW5rKE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgewotICAgICAgICAgICAgICAgIExhYmVsIGhlcmUo
YXNzZW1ibGVyKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaGVyZShh
c3NlbWJsZXIpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Bl
bmRpbmdSZXR1cm5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a1JlY29yZHMuYXBwZW5kKFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tpXSwg
aGVyZSkpOwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVybnMuY2xlYXIoKTsKQEAgLTEw
NDgsNyArOTcyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmNsZWFyKCk7CiAgICAgICAgICAgICBtX3BlbmRp
bmdGYWxsdGhyb3VnaCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1RvKExh
YmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQorICAgICAgICB2b2lkIGxpbmtU
byhNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgewog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BlbmRpbmdSZXR1cm5z
LnNpemUoKTsgKytpKQpAQCAtMTA2MSwxMCArOTg1LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigp
OwogICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChKdW1wTGlzdCYganVtcExpc3Qs
IE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCisgICAgICAgIHZvaWQgdGFrZUJhY2t0cmFja3NU
b0p1bXBMaXN0KE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcExpc3QsIE1hY3JvQXNzZW1i
bGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdSZXR1
cm5zLnNpemUoKSkgewotICAgICAgICAgICAgICAgIExhYmVsIGhlcmUoYXNzZW1ibGVyKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaGVyZShhc3NlbWJsZXIpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BlbmRpbmdSZXR1cm5zLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1JlY29yZHMuYXBwZW5k
KFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tpXSwgaGVyZSkpOwogICAgICAg
ICAgICAgICAgIG1fcGVuZGluZ1JldHVybnMuY2xlYXIoKTsKQEAgLTEwODIsNiArMTAwNiwxNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBy
ZXR1cm4gbV9sYXRlckZhaWx1cmVzLmVtcHR5KCkgJiYgbV9wZW5kaW5nUmV0dXJucy5pc0VtcHR5
KCkgJiYgIW1fcGVuZGluZ0ZhbGx0aHJvdWdoOwogICAgICAgICB9CiAKKyAgICAgICAgQmFja3Ry
YWNrUmVjb3JkcyYgYmFja3RyYWNrUmVjb3JkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2JhY2t0cmFja1JlY29yZHM7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9p
ZCBsaW5rQmFja3RyYWNrUmVjb3JkcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBjb25zdCBCYWNr
dHJhY2tSZWNvcmRzJiBiYWNrdHJhY2tSZWNvcmRzKQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGJhY2t0cmFja1JlY29yZHNbaV0ubV9kYXRh
TGFiZWwsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxZYXJyQmFja3RyYWNrUHRyVGFnPihiYWNrdHJh
Y2tSZWNvcmRzW2ldLm1fYmFja3RyYWNrTG9jYXRpb24pKTsKKyAgICAgICAgfQorCiAgICAgICAg
IC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGNvZGUgZ2VuZXJhdGlvbiB0byBsaW5rIGFsbCByZXR1
cm4gYWRkcmVzc2VzLgogICAgICAgICB2b2lkIGxpbmtEYXRhTGFiZWxzKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpCiAgICAgICAgIHsKQEAgLTEwOTEsMjAgKzEwMjYsOSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHN0cnVjdCBSZXR1cm5BZGRyZXNzUmVjb3JkIHsKLSAgICAgICAgICAgIFJldHVybkFk
ZHJlc3NSZWNvcmQoRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCwgTGFiZWwgYmFja3RyYWNrTG9jYXRp
b24pCi0gICAgICAgICAgICAgICAgOiBtX2RhdGFMYWJlbChkYXRhTGFiZWwpCi0gICAgICAgICAg
ICAgICAgLCBtX2JhY2t0cmFja0xvY2F0aW9uKGJhY2t0cmFja0xvY2F0aW9uKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEYXRhTGFiZWxQdHIgbV9kYXRhTGFi
ZWw7Ci0gICAgICAgICAgICBMYWJlbCBtX2JhY2t0cmFja0xvY2F0aW9uOwotICAgICAgICB9Owot
Ci0gICAgICAgIEp1bXBMaXN0IG1fbGF0ZXJGYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IG1fbGF0ZXJGYWlsdXJlczsKICAgICAgICAgYm9vbCBtX3BlbmRpbmdGYWxs
dGhyb3VnaDsKLSAgICAgICAgVmVjdG9yPERhdGFMYWJlbFB0ciwgND4gbV9wZW5kaW5nUmV0dXJu
czsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIsIDQ+IG1fcGVu
ZGluZ1JldHVybnM7CiAgICAgICAgIFZlY3RvcjxSZXR1cm5BZGRyZXNzUmVjb3JkLCA0PiBtX2Jh
Y2t0cmFja1JlY29yZHM7CiAgICAgfTsKIApAQCAtMTEyNywyMyArMTA1MSwyMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0
ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgIGlmIChtX3BhdHRlcm4ubXVsdGlsaW5lKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3Mu
cmVnVDA7CiAKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgICAgICBpZiAoIXRlcm0t
PmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gz
MihFcXVhbCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKKyAgICAgICAgICAgICAg
ICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
bV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOwog
CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0
UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFz
cyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygp
KTsKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBtYXRjaERlc3Qu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0
aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0
UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVx
dWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOworICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
bV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQXNzZXJ0aW9uQk9MKHNpemVfdCBv
cEluZGV4KQpAQCAtMTE1NywyMyArMTA4MSwyMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwog
CiAgICAgICAgIGlmIChtX3BhdHRlcm4ubXVsdGlsaW5lKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAg
ICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBtYXRjaERlc3Q7CiAgICAgICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBt
X2NoZWNrZWRPZmZzZXQpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChhdEVuZE9m
SW5wdXQoKSk7CiAKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFj
dGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVy
Q2xhc3MoKSk7Ci0gICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbWF0
Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0g
bV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG5vdEF0
RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgICAgIC8vIEVyaywgcmVhbGx5IHNob3VsZCBwb2lzb24g
b3V0IHRoZXNlIGFsdGVybmF0aXZlcyBlYXJseS4gOi0vCiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHZv
aWQgYmFja3RyYWNrQXNzZXJ0aW9uRU9MKHNpemVfdCBvcEluZGV4KQpAQCAtMTE4MiwxMiArMTEw
NiwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgfQog
CiAgICAgLy8gQWxzbyBmYWxscyB0aG91Z2ggb24gbmV4dElzTm90V29yZENoYXIuCi0gICAgdm9p
ZCBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHNpemVfdCBvcEluZGV4LCBKdW1wTGlzdCYgbmV4dElz
V29yZENoYXIsIEp1bXBMaXN0JiBuZXh0SXNOb3RXb3JkQ2hhcikKKyAgICB2b2lkIG1hdGNoQXNz
ZXJ0aW9uV29yZGNoYXIoc2l6ZV90IG9wSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bmV4dElzV29yZENoYXIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgbmV4dElzTm90V29yZENo
YXIpCiAgICAgewogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAg
IFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAogICAgICAgICBpZiAodGVybS0+aW5w
dXRQb3NpdGlvbiA9PSBtX2NoZWNrZWRPZmZzZXQpCiAgICAgICAgICAgICBuZXh0SXNOb3RXb3Jk
Q2hhci5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwpAQCAtMTIwOSwxMiArMTEzMywxMiBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3Ag
PSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07
CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKKyAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1Qw
OwogCi0gICAgICAgIEp1bXAgYXRCZWdpbjsKLSAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhdEJlZ2luOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRp
b24pCi0gICAgICAgICAgICBhdEJlZ2luID0gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBJbW0zMiht
X2NoZWNrZWRPZmZzZXQpKTsKKyAgICAgICAgICAgIGF0QmVnaW4gPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KG1fY2hlY2tlZE9mZnNldCkpOwogICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNl
dCAtIHRlcm0tPmlucHV0UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIpOwogCiAgICAgICAgIENoYXJh
Y3RlckNsYXNzKiB3b3JkY2hhckNoYXJhY3RlckNsYXNzOwpAQCAtMTIyNiwyNyArMTE1MCwyNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgd29yZGNoYXJDaGFyYWN0ZXJD
bGFzcyk7CiAgICAgICAgIGlmICghdGVybS0+aW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAgIGF0
QmVnaW4ubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF0QmVnaW4ubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIC8vIFdlIGZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHRoZSBsYXN0IGNoYXJhY3RlciB3
YXMgbm90IGEgd29yZGNoYXIuCi0gICAgICAgIEp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyOwotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcjsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbldvcmRDaGFyOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7
CiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRp
b25Xb3JkY2hhcihvcEluZGV4LCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhciwgbm9uV29yZENo
YXJUaGVuV29yZENoYXIpOwotICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0
aW9uV29yZGNoYXIob3BJbmRleCwgbm9uV29yZENoYXJUaGVuV29yZENoYXIsIG5vbldvcmRDaGFy
VGhlbk5vbldvcmRDaGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFy
LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogCiAgICAgICAgIC8vIFdlIGp1bXAgaGVy
ZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIGEgd29yZGNoYXIuCi0gICAgICAgIG1hdGNoRGVz
dC5saW5rKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcjsKLSAg
ICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuTm9uV29yZENoYXI7CisgICAgICAgIG1hdGNoRGVz
dC5saW5rKCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCB3b3JkQ2hh
clRoZW5Xb3JkQ2hhcjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHdvcmRDaGFy
VGhlbk5vbldvcmRDaGFyOwogICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKICAgICAgICAg
ICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIob3BJbmRleCwgd29yZENoYXJUaGVuTm9uV29yZENo
YXIsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKLSAgICAgICAgICAgIHdvcmRDaGFyVGhlbldvcmRD
aGFyLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgd29yZENoYXJUaGVuV29yZENoYXIuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEFz
c2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbldvcmRDaGFyLCB3b3JkQ2hhclRo
ZW5Ob25Xb3JkQ2hhcik7CiAgICAgICAgICAgICAvLyBUaGlzIGNhbiBmYWxsLXRob3VnaCEKQEAg
LTEyNTQsOCArMTE3OCw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKIAogICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZCh3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAK
LSAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIubGluayh0aGlzKTsKLSAgICAgICAgd29y
ZENoYXJUaGVuTm9uV29yZENoYXIubGluayh0aGlzKTsKKyAgICAgICAgbm9uV29yZENoYXJUaGVu
V29yZENoYXIubGluaygmbV9qaXQpOworICAgICAgICB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5s
aW5rKCZtX2ppdCk7CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQXNzZXJ0aW9uV29yZEJvdW5k
YXJ5KHNpemVfdCBvcEluZGV4KQogICAgIHsKQEAgLTEyNjMsNDAgKzExODcsNDAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIH0KIAogI2lmIEVOQUJMRShZ
QVJSX0pJVF9CQUNLUkVGRVJFTkNFUykKLSAgICB2b2lkIG1hdGNoQmFja3JlZmVyZW5jZShzaXpl
X3Qgb3BJbmRleCwgSnVtcExpc3QmIGNoYXJhY3Rlck1hdGNoRmFpbHMsIFJlZ2lzdGVySUQgY2hh
cmFjdGVyLCBSZWdpc3RlcklEIHBhdHRlcm5JbmRleCwgUmVnaXN0ZXJJRCBwYXR0ZXJuQ2hhcmFj
dGVyKQorICAgIHZvaWQgbWF0Y2hCYWNrcmVmZXJlbmNlKHNpemVfdCBvcEluZGV4LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIGNoYXJhY3Rlck1hdGNoRmFpbHMsIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybklu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuQ2hhcmFjdGVyKQogICAgIHsK
ICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVy
bS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKIAotICAgICAgICBMYWJlbCBsb29wKHRoaXMp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgmbV9qaXQpOwogCiAgICAgICAg
IHJlYWRDaGFyYWN0ZXIoMCwgcGF0dGVybkNoYXJhY3RlciwgcGF0dGVybkluZGV4KTsKICAgICAg
ICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBj
aGFyYWN0ZXIpOwogICAgIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5pZ25vcmVDYXNlKCkpCi0g
ICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
Y2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRj
aEZhaWxzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNo
YXJhY3RlciwgcGF0dGVybkNoYXJhY3RlcikpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEp1bXAgY2hhcmFjdGVyc01hdGNoID0gYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgcGF0dGVy
bkNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3MgY2hhcmFjdGVyVGFibGVF
bnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJs
ZUxDaGFyKSk7Ci0gICAgICAgICAgICBsb2FkMTYoY2hhcmFjdGVyVGFibGVFbnRyeSwgY2hhcmFj
dGVyKTsKLSAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVzcyBwYXR0ZXJuVGFibGVFbnRyeShwYXR0
ZXJuQ2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVM
Q2hhcikpOwotICAgICAgICAgICAgbG9hZDE2KHBhdHRlcm5UYWJsZUVudHJ5LCBwYXR0ZXJuQ2hh
cmFjdGVyKTsKLSAgICAgICAgICAgIGNoYXJhY3Rlck1hdGNoRmFpbHMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIGNo
YXJhY3RlcnNNYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgY2hhcmFjdGVyc01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkV4dGVuZGVkQWRkcmVzcyBjaGFyYWN0ZXJUYWJsZUVudHJ5KGNoYXJhY3RlciwgcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQxNihjaGFyYWN0ZXJUYWJsZUVudHJ5LCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVkQWRkcmVzcyBwYXR0ZXJuVGFibGVFbnRyeShwYXR0
ZXJuQ2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVM
Q2hhcikpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2KHBhdHRlcm5UYWJsZUVudHJ5LCBwYXR0
ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNoYXJhY3Rlck1hdGNoRmFpbHMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJu
Q2hhcmFjdGVyKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzTWF0Y2gubGluaygmbV9qaXQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGF0dGVy
bkluZGV4KTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewotICAgICAg
ICAgICAgSnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBw
bGVtZW50YXJ5UGxhbmVzQmFzZSk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4KTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4
KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
X3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5r
KCZtX2ppdCk7CiAgICAgICAgIH0KIAotICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgcGF0dGVy
bkluZGV4LCBBZGRyZXNzKG91dHB1dCwgKChzdWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVv
ZihpbnQpKSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9yZWdzLm91dHB1dCwgKChzdWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQp
KSkubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUJhY2tS
ZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgpCkBAIC0xMzEyLDExNiArMTIzNiwxMTYgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB1bnNpZ25lZCBzdWJw
YXR0ZXJuSWQgPSB0ZXJtLT5iYWNrUmVmZXJlbmNlU3VicGF0dGVybklkOwogICAgICAgICB1bnNp
Z25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwogCi0g
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1wID0gcmVnVDA7Ci0gICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gcmVnVDE7Ci0gICAgICAgIGNvbnN0IFJl
Z2lzdGVySUQgcGF0dGVyblRlbXAgPSByZWdUMjsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1wID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuSW5kZXggPSBtX3JlZ3MucmVn
VDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5UZW1w
ID0gbV9yZWdzLnJlZ1QyOwogCi0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgo
KSk7CisgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOwogICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50
IHx8IHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gMSkKLSAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkp
OwogCi0gICAgICAgIEp1bXBMaXN0IG1hdGNoZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBtYXRjaGVzOwogCiAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVh
bnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0
cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAg
ICAgbG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKIAogICAgICAgICAgICAgLy8gQW4gZW1wdHkgbWF0Y2ggaXMgc3Vj
Y2Vzc2Z1bCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCiAgICAgICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50IHx8IHRlcm0tPnF1
YW50aXR5TWF4Q291bnQgIT0gMSkgewotICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGJy
YW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcGF0dGVybkluZGV4LCBwYXR0
ZXJuVGVtcCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSks
IHBhdHRlcm5JbmRleCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBKdW1wIHplcm9MZW5ndGhN
YXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpOwot
ICAgICAgICAgICAgICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgICAgIHplcm9MZW5ndGhN
YXRjaC5saW5rKHRoaXMpOwotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1t
MzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJl
bmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgemVyb0xlbmd0aE1hdGNoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCB0cnlOb25aZXJvTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgICAgIHpl
cm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1l
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAg
ICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAg
ICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CiAgICAgICAgIGNhc2Ug
UXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6IHsKLSAgICAgICAgICAgIExhYmVsIG91dGVyTG9v
cCh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBvdXRlckxvb3AoJm1f
aml0KTsKIAogICAgICAgICAgICAgLy8gUGF0dGVyblRlbXAgc2hvdWxkIGNvbnRhaW4gcGF0dGVy
biBlbmQgaW5kZXggYXQgdGhpcyBwb2ludAotICAgICAgICAgICAgc3ViMzIocGF0dGVybkluZGV4
LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuSW5kZXgsIHBh
dHRlcm5UZW1wKTsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGNoZWNrTm90RW5vdWdo
SW5wdXQocGF0dGVyblRlbXApKTsKIAogICAgICAgICAgICAgbWF0Y2hCYWNrcmVmZXJlbmNlKG9w
SW5kZXgsIG9wLm1fanVtcHMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAKICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IDEpIHsK
ICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCksIGNoYXJhY3Rl
ck9yVGVtcCk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0
ZXJPclRlbXApOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKGNoYXJhY3Rlck9yVGVtcCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4
Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAgICAgICBsb2FkU3ViUGF0dGVy
bihvdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7Ci0gICAg
ICAgICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKKyAgICAg
ICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBh
dHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgICAgIG1faml0Lmp1bXAob3V0
ZXJMb29wKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hdGNoZXMubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1hdGNoZXMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBlOjpHcmVlZHk6IHsKLSAgICAg
ICAgICAgIEp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOwogCi0gICAgICAgICAgICBMYWJlbCBv
dXRlckxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgb3V0ZXJM
b29wKCZtX2ppdCk7CiAKICAgICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWlu
IHBhdHRlcm4gZW5kIGluZGV4IGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIHN1YjMyKHBhdHRl
cm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChjaGVja05vdEVu
b3VnaElucHV0KHBhdHRlcm5UZW1wKSk7CiAKICAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5j
ZShvcEluZGV4LCBpbmNvbXBsZXRlTWF0Y2hlcywgY2hhcmFjdGVyT3JUZW1wLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKIAogICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJ
bmRleCgpLCBjaGFyYWN0ZXJPclRlbXApOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBjaGFyYWN0ZXJPclRlbXApOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1wKTsKICAgICAgICAgICAgIHN0
b3JlVG9GcmFtZShjaGFyYWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwogICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAg
ICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgSW1tMzIodGVybS0+cXVh
bnRpdHlNYXhDb3VudCksIGNoYXJhY3Rlck9yVGVtcCkpOwotICAgICAgICAgICAgbG9hZFN1YlBh
dHRlcm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwor
ICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQp
LCBjaGFyYWN0ZXJPclRlbXApKTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVncy5v
dXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAKICAgICAg
ICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgaW5kZXggaW4gZnJhbWUgZm9yIHJlc3RvcmluZyBhZnRl
ciBhIHBhcnRpYWwgbWF0Y2gKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5k
ZXgoKSk7Ci0gICAgICAgICAgICBqdW1wKG91dGVyTG9vcCk7CisgICAgICAgICAgICBzdG9yZVRv
RnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAo
b3V0ZXJMb29wKTsKIAotICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluayh0aGlzKTsK
LSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAg
ICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgbG9hZEZyb21G
cmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5j
ZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0gICAgICAgICAgICBtYXRjaGVzLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAg
ICAgbWF0Y2hlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2pp
dC5sYWJlbCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHk6IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGluY29t
cGxldGVNYXRjaGVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGluY29t
cGxldGVNYXRjaGVzOwogCi0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgb3Au
bV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0Lmxh
YmVsKCk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwgc3VicGF0dGVybklk
LCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJu
KG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7
CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBj
b25zdW1pbmcgY2hhcmFjdGVycwotICAgICAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoTWF0Y2ggPSBi
cmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKLSAgICAgICAg
ICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRl
eCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRl
eCgpKTsKLSAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICB0
cnlOb25aZXJvTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnlOb25aZXJvTWF0Y2ggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
OworICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJ
bmRleCgpKTsKKyAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICB0cnlOb25aZXJvTWF0Y2gubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAvLyBD
aGVjayBpZiB3ZSBoYXZlIGlucHV0IHJlbWFpbmluZyB0byBtYXRjaAotICAgICAgICAgICAgc3Vi
MzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihw
YXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGNo
ZWNrTm90RW5vdWdoSW5wdXQocGF0dGVyblRlbXApKTsKIAotICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1Jl
ZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3Mu
aW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJl
bmNlOjpiZWdpbkluZGV4KCkpOwogCiAgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJ
bmRleCwgaW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7CiAKLSAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBpbmNv
bXBsZXRlTWF0Y2hlcy5saW5rKHRoaXMpOwotICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5J
bmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICBpbmNvbXBsZXRlTWF0Y2hlcy5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIG1fcmVncy5pbmRleCk7
CiAKLSAgICAgICAgICAgIG1hdGNoZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hdGNoZXMu
bGluaygmbV9qaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTQzMyw0OSArMTM1Nyw0OSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS0+YmFja1JlZmVy
ZW5jZVN1YnBhdHRlcm5JZDsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhp
cyk7Ci0gICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwog
Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZXM7CiAKICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKICAgICAgICAgc3dpdGNoICh0ZXJtLT5xdWFudGl0
eVR5cGUpIHsKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudDoKLSAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgbG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1Jl
ZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5OiB7Ci0gICAgICAgICAgICBj
b25zdCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIHBhdHRlcm5TdGFydEluZGV4ID0gcmVnVDE7Ci0gICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIHBhdHRlcm5FbmRJbmRleE9yTGVuID0gcmVnVDI7CisgICAgICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IG1fcmVncy5yZWdUMDsK
KyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5TdGFy
dEluZGV4ID0gbV9yZWdzLnJlZ1QxOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcGF0dGVybkVuZEluZGV4T3JMZW4gPSBtX3JlZ3MucmVnVDI7CiAKICAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOwotICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBtYXRjaEFtb3VudCkp
OworICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbWF0Y2hBbW91bnQpKTsKIAotICAgICAgICAgICAgbG9hZFN1YlBhdHRl
cm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5k
ZXhPckxlbik7Ci0gICAgICAgICAgICBzdWIzMihwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVu
ZEluZGV4T3JMZW4pOwotICAgICAgICAgICAgc3ViMzIocGF0dGVybkVuZEluZGV4T3JMZW4sIGlu
ZGV4KTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRl
cm5JZCwgcGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRleE9yTGVuKTsKKyAgICAgICAg
ICAgIG1faml0LnN1YjMyKHBhdHRlcm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7
CisgICAgICAgICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuRW5kSW5kZXhPckxlbiwgbV9yZWdzLmlu
ZGV4KTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7
CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBtYXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQsIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRj
aEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAgICAg
ICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHk6IHsKLSAgICAg
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSByZWdUMDsKKyAgICAgICAgICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gbV9yZWdzLnJl
Z1QwOwogCiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBtYXRjaEFtb3VudCk7CiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWws
IEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBtYXRjaEFtb3VudCkpOwotICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7CisgICAgICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgbWF0Y2hB
bW91bnQpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIG1hdGNoQW1vdW50KTsKICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtYXRjaEFt
b3VudCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVu
Y2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7
CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGZhaWx1cmVzLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5mYWxsdGhyb3VnaCgpOwogICAgIH0KICNlbmRpZgpAQCAtMTQ5NywxMSArMTQyMSwxMSBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgaWYgKCFp
c0xhdGluMShjaCkgJiYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KSkgewogICAgICAg
ICAgICAgLy8gSGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3Ry
aW5nIC0gc2hvcnQgY2lyY3VpdAotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJh
Y3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
aGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQog
ICAgICAgICB1bnNpZ25lZCBtYXhDaGFyYWN0ZXJzQXRPbmNlID0gbV9jaGFyU2l6ZSA9PSBDaGFy
U2l6ZTo6Q2hhcjggPyA4IDogNDsKICNlbHNlCkBAIC0xNTUyLDcgKzE0NzYsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgIGlmICghaXNM
YXRpbjEoY3VycmVudENoYXJhY3RlcikgJiYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4
KSkgewogICAgICAgICAgICAgICAgIC8vIEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIg
YW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQKLSAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
CkBAIC0xNTc1LDI5ICsxNDk5LDI5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gY2hlY2syID0gWyZd
IChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVpbnQxNl90IGNoYXJhY3RlcnMsIHVpbnQxNl90
IG1hc2spIHsKLSAgICAgICAgICAgICAgICBsb2FkMTZVbmFsaWduZWQobmVnYXRpdmVPZmZzZXRJ
bmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mo
b2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChtYXNr
KQotICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0
ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoYXJhY3RlcnMgfCBt
YXNrKSkpOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgYXV0byBjaGVjazQgPSBbJl0g
KENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVycywgdW5zaWduZWQg
bWFzaykgewogICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVz
cyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRk
cmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChtYXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hh
cmFjdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2hhcmFjdGVycyB8IG1hc2spKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtYXNrKSwg
Y2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1i
bGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIG5lZ2F0aXZlT2Zmc2V0
SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBUcnVzdGVkSW1tMzIoY2hhcmFjdGVy
cykpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMldp
dGhVbmFsaWduZWRIYWxmV29yZHMoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihjaGFyYWN0ZXJzKSkpOwogICAgICAgICAgICAgfTsKIAogI2lmIENQVShYODZf
NjQpIHx8IENQVShBUk02NCkKICAgICAgICAgICAgIGF1dG8gY2hlY2s4ID0gWyZdIChDaGVja2Vk
PHVuc2lnbmVkPiBvZmZzZXQsIHVpbnQ2NF90IGNoYXJhY3RlcnMsIHVpbnQ2NF90IG1hc2spIHsK
LSAgICAgICAgICAgICAgICBsb2FkNjQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZz
ZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0
KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrKQotICAgICAgICAgICAgICAgICAgICBvcjY0
KFRydXN0ZWRJbW02NChtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChicmFuY2g2NChOb3RFcXVhbCwgY2hhcmFjdGVyLCBUcnVzdGVkSW1tNjQoY2hh
cmFjdGVycyB8IG1hc2spKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChtYXNrKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChjaGFyYWN0ZXJzIHwg
bWFzaykpKTsKICAgICAgICAgICAgIH07CiAjZW5kaWYKIApAQCAtMTY0OSwyMSArMTU3MywyMSBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAg
IGF1dG8gY2hlY2syID0gWyZdIChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVuc2lnbmVkIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIG1hc2spIHsKICAgICAgICAgICAgICAgICBpZiAobWFzaykgewot
ICAgICAgICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZl
T2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0
aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgICAgIG9y
MzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMg
fCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hh
cmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVx
dWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgVHJ1
c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobV9qaXQuYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3Rlciks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2hhcmFjdGVycykpKTsKICAgICAgICAgICAg
IH07CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCiAgICAgICAgICAgICBhdXRvIGNo
ZWNrNCA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1aW50NjRfdCBjaGFyYWN0ZXJz
LCB1aW50NjRfdCBtYXNrKSB7Ci0gICAgICAgICAgICAgICAgbG9hZDY0KG5lZ2F0aXZlT2Zmc2V0
SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQ2NChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwg
Y2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAg
ICAgICAgICAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoNjQoTm90RXF1YWwsIGNoYXJhY3Rl
ciwgVHJ1c3RlZEltbTY0KGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAgICB9OwogI2VuZGlmCiAKQEAg
LTE2OTgsMzQgKzE2MjIsMzQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgVUNo
YXIzMiBjaCA9IHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7CiAKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJl
Z2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICBpZiAo
bV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CiAKICAgICAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gc2Nh
bGVkTWF4Q291bnQgPSB0ZXJtLT5xdWFudGl0eU1heENvdW50OwogICAgICAgICBzY2FsZWRNYXhD
b3VudCAqPSBVX0lTX0JNUChjaCkgPyAxIDogMjsKLSAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMy
KHNjYWxlZE1heENvdW50KSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LnN1YjMyKG1f
cmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHNjYWxlZE1heENvdW50KSwgY291bnRS
ZWdpc3Rlcik7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNr
ZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gc2NhbGVkTWF4Q291bnQsIGNoYXJhY3Rl
ciwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIC8vIEZvciBjYXNlLWluc2VzaXRpdmUgY29tcGFy
ZXMsIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBkaWZmZXJlbnQKICAgICAgICAgLy8g
dXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRvIGEgY2hh
cmFjdGVyIGNsYXNzLgogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5pZ25vcmVDYXNlKCkgfHwg
aXNBU0NJSUFscGhhKGNoKSB8fCBpc0Nhbm9uaWNhbGx5VW5pcXVlKGNoLCBtX2Nhbm9uaWNhbE1v
ZGUpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25vcmVDYXNlKCkgJiYgaXNBU0NJSUFscGhh
KGNoKSkgewotICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMHgyMCksIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgy
MCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjaCB8PSAweDIwOwogICAgICAgICB9CiAKLSAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1t
MzIoY2gpKSk7CisgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2gp
KSk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlm
IChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lTX0JNUChjaCkpCi0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigyKSwgY291bnRSZWdpc3Rlcik7CiAg
ICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBj
b3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIs
IGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBtX3Jl
Z3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFj
a1BhdHRlcm5DaGFyYWN0ZXJGaXhlZChzaXplX3Qgb3BJbmRleCkKICAgICB7CkBAIC0xNzM4LDM4
ICsxNjYyLDM4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyMzIgY2gg
PSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hh
cmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9
IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIC8vIFVubGVz
cyBoYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVyIGFuZCBhbiA4IGJpdCBzdHJpbmcgLSBz
aG9ydCBjaXJjdWl0CiAgICAgICAgIGlmICghKCFpc0xhdGluMShjaCkgJiYgKG1fY2hhclNpemUg
PT0gQ2hhclNpemU6OkNoYXI4KSkpIHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwot
ICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBs
b29wKCZtX2ppdCk7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkp
OwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIG1f
Y2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3RlcikpOwogCi0gICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAj
aWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgICAgICBpZiAo
bV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKSB7Ci0gICAgICAgICAgICAg
ICAgSnVtcCBzdXJyb2dhdGVQYWlyT2sgPSBub3RBdEVuZE9mSW5wdXQoKTsKLSAgICAgICAgICAg
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2subGlu
ayh0aGlzKTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdXJyb2dhdGVQYWlyT2sgPSBu
b3RBdEVuZE9mSW5wdXQoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZVBh
aXJPay5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIH0KICNl
bmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3Vu
dCA9PSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuanVtcChsb29wKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVh
bnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlua1RvKGxvb3AsICZt
X2ppdCk7CiAKLSAgICAgICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBm
YWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KLSAgICAgICAgb3AubV9yZWVudHJ5ID0g
bGFiZWwoKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAg
ICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCkpOwogICAgIH0KQEAg
LTE3NzgsMTggKzE3MDIsMTggQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291
bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291bnRSZWdp
c3Rlcik7Ci0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKGJyYW5jaFRlc3QzMiha
ZXJvLCBjb3VudFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRSZWdpc3RlcikpOworICAgICAg
ICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKICAgICAgICAgaWYgKCFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzIHx8IFVfSVNfQk1QKHRl
cm0tPnBhdHRlcm5DaGFyYWN0ZXIpKQotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMiksIGluZGV4KTsKLSAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigyKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgIH0K
IAogICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNpemVfdCBvcElu
ZGV4KQpAQCAtMTc5NywxMCArMTcyMSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAg
ICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBvcC5tX3JlZW50cnkg
PSBsYWJlbCgpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJl
bCgpOwogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCkp
OwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJOb25HcmVlZHkoc2l6
ZV90IG9wSW5kZXgpCkBAIC0xODA5LDQzICsxNzMzLDQzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rl
cm07CiAgICAgICAgIFVDaGFyMzIgY2ggPSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJl
Z2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7
CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICBtX2Jh
Y2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hB
bW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBVbmxlc3MgaGF2ZSBh
IDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQgY2ly
Y3VpdAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlczsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlczsK
ICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKKyAgICAg
ICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVy
bS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFw
cGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1
dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RF
X0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYg
IVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAgICAgIEp1bXAgc3Vycm9nYXRlUGFpck9rID0g
bm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2subGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJl
Z2lzdGVyKTsKIAotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwotICAgICAgICAgICAg
bm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAob3Au
bV9yZWVudHJ5KTsKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmxpbmsoJm1faml0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lT
X0JNUChjaCkpIHsKICAgICAgICAgICAgIC8vIHN1YnRyYWN0IGNvdW50UmVnaXN0ZXIqMiBmb3Ig
bm9uLUJNUCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7CisgICAgICAgIG1faml0LnN1YjMyKGNvdW50
UmVnaXN0ZXIsIG1fcmVncy5pbmRleCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFs
bHRocm91Z2goKTsKICAgICB9CiAKQEAgLTE4NTQsMTQgKzE3NzgsMTQgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNb
b3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAogICAg
ICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dCgpKTsKLSAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShpbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJD
bGFzczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5k
ZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgIHJlYWRD
aGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVy
KTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAiYW55IGNoYXJhY3RlciIgYnVp
bHRpbiBjbGFzcyB3ZSBvbmx5IG5lZWQgdG8gcmVhZCB0aGUKICAgICAgICAgLy8gY2hhcmFjdGVy
IGFuZCBkb24ndCBuZWVkIHRvIG1hdGNoIGFzIGl0IHdpbGwgYWx3YXlzIHN1Y2NlZWQuCkBAIC0x
ODcxLDE2ICsxNzk1LDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKICAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtYXRjaERlc3QpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaERl
c3QubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9O
UykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYgKCF0ZXJtLT5jaGFyYWN0
ZXJDbGFzcy0+aGFzT25lQ2hhcmFjdGVyU2l6ZSgpIHx8IHRlcm0tPmludmVydCgpKSkgewotICAg
ICAgICAgICAgSnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBz
dXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBpc0JNUENoYXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNo
YXJhY3RlciwgbV9yZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
X3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmsoJm1faml0KTsKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgfQpAQCAtMTg5MSw4ICsxODE1LDggQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAK
LSAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKLSAgICAgICAgICAg
IGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0
ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICBtX2JhY2t0cmFja2lu
Z1N0YXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBt
X3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3Vn
aCgpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTE5MDQsOCArMTgyOCw4IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1Qx
OwogCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKQogICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dCgpKTsKQEAgLTE5MTUsMTAgKzE4
MzksMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiB0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFz
T25seU5vbkJNUENoYXJhY3RlcnMoKSAmJiAhdGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICBz
Y2FsZWRNYXhDb3VudCAqPSAyOwogI2VuZGlmCi0gICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihz
Y2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5zdWIzMihtX3Jl
Z3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVn
aXN0ZXIpOwogCi0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7Ci0gICAgICAgIEp1bXBMaXN0IG1h
dGNoRGVzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgcmVhZENo
YXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gc2NhbGVkTWF4
Q291bnQsIGNoYXJhY3RlciwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIC8vIElmIHdlIGFyZSBt
YXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3Mgd2Ugb25seSBuZWVkIHRv
IHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3RlciBhbmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBh
cyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMTkyOCwyNyArMTg1MiwyNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBpZiAodGVybS0+
aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobWF0Y2hEZXN0KTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBt
YXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICNpZiBF
TkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2Rl
U3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICh0ZXJtLT5pc0ZpeGVkV2lkdGhDaGFy
YWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMih0ZXJtLT5j
aGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAyIDog
MSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBK
dW1wIGlzQk1QQ2hhciA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIsIHN1cHBsZW1lbnRh
cnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9yZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsK
ICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAg
ICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgICAg
ICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3Mu
aW5kZXgpOworICAgICAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291
bnRSZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwor
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNvdW50UmVn
aXN0ZXIsIG1fcmVncy5pbmRleCkubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgfQogICAgIHZv
aWQgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NGaXhlZChzaXplX3Qgb3BJbmRleCkKICAgICB7CkBA
IC0xOTYwLDE5ICsxODg0LDE5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgIGlmIChtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09uZUNoYXJhY3Rl
clNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5k
ZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdp
c3Rlcik7CiAKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIEp1bXBMaXN0IGZh
aWx1cmVzRGVjcmVtZW50SW5kZXg7Ci0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVzRGVjcmVtZW50SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQ
UkVTU0lPTlMpCiAgICAgICAgIGlmICh0ZXJtLT5pc0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygp
ICYmIHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkpIHsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXIpOwogICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGNoZWNrTm90RW5vdWdoSW5wdXQoY2hhcmFjdGVyKSk7
CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCkBAIC0xOTgyLDE1ICsxOTA2LDE1IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIHJlYWRDaGFyYWN0
ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAg
ICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmYWlsdXJlcywgdGVybS0+
Y2hhcmFjdGVyQ2xhc3MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSnVtcExpc3Qg
bWF0Y2hEZXN0OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVz
dDsKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5w
dXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBtYXRjaGlu
ZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3MgZm9yIG5vbi11bmljb2RlIHBhdHRl
cm5zLAogICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlIGNoYXJhY3RlciBh
bmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgogICAgICAg
ICAgICAgaWYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+bV9hbnlDaGFyYWN0ZXIpIHsKICAgICAg
ICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJt
LT5jaGFyYWN0ZXJDbGFzcyk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJ
VF9VTklDT0RFX0VYUFJFU1NJT05TKQpAQCAtMTk5OCwyMiArMTkyMiwyMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBhZHZhbmNlSW5kZXhB
ZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgs
IGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAo
dGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRlKSB7Ci0gICAgICAgICAg
ICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlN
YXhDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRp
dHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAganVtcChs
b29wKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAobG9vcCk7CiAKICAgICAgICAgaWYgKCFmYWls
dXJlc0RlY3JlbWVudEluZGV4LmVtcHR5KCkpIHsKLSAgICAgICAgICAgIGZhaWx1cmVzRGVjcmVt
ZW50SW5kZXgubGluayh0aGlzKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
aW5kZXgpOworICAgICAgICAgICAgZmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgZmFpbHVyZXMubGluayh0aGlz
KTsKLSAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgZmFpbHVyZXMubGlu
aygmbV9qaXQpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAg
ICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudEluZGV4KCkpOwogICAgIH0KQEAg
LTIwMjIsNDUgKzE5NDYsNDUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291
bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50UmVnaXN0
ZXIpOwotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIoWmVy
bywgY291bnRSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50
UmVnaXN0ZXIpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVnaXN0ZXIpKTsKKyAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7CiAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudEluZGV4KCkpOwog
CiAgICAgICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycykKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZSBp
ZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3MoKSkKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygp
ID8gMiA6IDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJz
KCkgPyAyIDogMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gUmVtYXRjaCBvbmUgbGVzcwotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSByZWdUMDsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAotICAgICAgICAgICAgbG9hZEZyb21GcmFtZSh0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbklu
ZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBtX3JlZ3Mu
aW5kZXgpOwogCi0gICAgICAgICAgICBMYWJlbCByZW1hdGNoTG9vcCh0aGlzKTsKLSAgICAgICAg
ICAgIEp1bXAgZG9uZVJlbWF0Y2hpbmcgPSBicmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3Rl
cik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgcmVtYXRjaExvb3AoJm1faml0
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmVSZW1hdGNoaW5nID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBjb3VudFJlZ2lzdGVyKTsKIAog
ICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBv
c2l0aW9uLCBjaGFyYWN0ZXIpOwogCi0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRl
eCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAKICNpZiBFTkFCTEUoWUFSUl9K
SVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKLSAgICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0gYnJh
bmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwotICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICBpc0JN
UENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQk1Q
Q2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVy
LCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgbV9qaXQuYWRk
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAg
ICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAjZW5kaWYKIAotICAgICAgICAgICAganVt
cChyZW1hdGNoTG9vcCk7Ci0gICAgICAgICAgICBkb25lUmVtYXRjaGluZy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbV9qaXQuanVtcChyZW1hdGNoTG9vcCk7CisgICAgICAgICAgICBkb25lUmVt
YXRjaGluZy5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+
ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJ
bmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgfQotICAgICAgICBqdW1wKG9wLm1fcmVl
bnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICB9CiAKICAgICB2
b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkoc2l6ZV90IG9wSW5kZXgpCkBAIC0y
MDY4LDE1ICsxOTkyLDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJu
VGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50
UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7
CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICNp
ZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVj
b2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xh
c3MtPmhhc09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkKLSAgICAgICAgICAg
ICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKG1fcmVncy5pbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9D
aGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTIw
ODgsMjcgKzIwMTIsMjcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJl
Z1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgSnVtcExpc3Qgbm9uR3Jl
ZWR5RmFpbHVyZXM7Ci0gICAgICAgIEp1bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50
SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJl
czsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVzRGVj
cmVtZW50SW5kZXg7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogI2lmIEVOQUJMRShZ
QVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dh
dGVQYWlycykgewogICAgICAgICAgICAgaWYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzT25l
Q2hhcmFjdGVyU2l6ZSgpIHx8IHRlcm0tPmludmVydCgpKQotICAgICAgICAgICAgICAgIGxvYWRG
cm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFz
czo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZSh0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbklu
ZGV4KCksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIGxvYWRG
cm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFz
czo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBub25HcmVl
ZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAgICAgICBub25HcmVlZHlGYWls
dXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1
YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNvdW50UmVnaXN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkpOwogCi0gICAgICAgIEp1bXBM
aXN0IG1hdGNoRGVzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVz
dDsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBv
c2l0aW9uLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhlICJh
bnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5pY29kZSBwYXR0ZXJucywKICAg
ICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlIGNoYXJhY3RlciBhbmQgZG9uJ3QgbmVl
ZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMjExOCw4ICsyMDQyLDgg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAg
aWYgKHRlcm0tPmludmVydCgpKQogICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFw
cGVuZChtYXRjaERlc3QpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9u
R3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yMTI4LDE3ICsyMDUyLDE3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGFkdmFuY2VJbmRl
eEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJtTWF0Y2godGVybSwgbm9uR3JlZWR5RmFpbHVyZXNEZWNy
ZW1lbnRJbmRleCwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgIG1faml0LmFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogCi0g
ICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50
cnkpOwogCiAgICAgICAgIGlmICghbm9uR3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5lbXB0
eSgpKSB7Ci0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4Lmxpbmso
dGhpcyk7Ci0gICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgICAgICBub25HcmVlZHlG
YWlsdXJlc0RlY3JlbWVudEluZGV4LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJy
ZWFrcG9pbnQoKTsKICAgICAgICAgfQotICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKHRo
aXMpOwotICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7CisgICAgICAgIG5vbkdy
ZWVkeUZhaWx1cmVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuc3ViMzIoY291bnRSZWdp
c3RlciwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhy
b3VnaCgpOwogICAgIH0KIApAQCAtMjE0Nyw2MiArMjA3MSw2MiBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcElu
ZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBtYXRjaFBvcyA9IHJlZ1QxOwotICAgICAgICBKdW1wTGlzdCBmb3VuZEJlZ2lubmluZ05l
d0xpbmU7Ci0gICAgICAgIEp1bXBMaXN0IHNhdmVTdGFydEluZGV4OwotICAgICAgICBKdW1wTGlz
dCBmb3VuZEVuZGluZ05ld0xpbmU7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hQb3MgPSBtX3JlZ3MucmVnVDE7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmb3VuZEJlZ2lubmluZ05ld0xpbmU7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZvdW5kRW5kaW5nTmV3TGluZTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJu
LmRvdEFsbCgpKSB7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgbWF0Y2hQb3Mp
OworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
LCBtYXRjaFBvcyk7CiAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1hdGNoUG9zKTsKLSAgICAg
ICAgICAgIG1vdmUobGVuZ3RoLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVn
cy5sZW5ndGgsIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKTsKICAg
ICAgICAgZ2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7CiAKLSAgICAgICAgc2F2ZVN0YXJ0SW5kZXgu
YXBwZW5kKGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgbWF0Y2hQb3MsIGluaXRpYWxTdGFydCkpOwot
ICAgICAgICBMYWJlbCBmaW5kQk9MTG9vcCh0aGlzKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBtYXRjaFBvcyk7CisgICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtYXRjaFBvcywgbV9yZWdzLmlu
aXRpYWxTdGFydCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmluZEJPTExvb3Ao
Jm1faml0KTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbWF0Y2hQb3MpOwogICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hh
cjgpCi0gICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc09u
ZSwgMCksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KG1fcmVncy5pbnB1dCwgbWF0Y2hQb3MsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c09uZSwgMCksIGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNihC
YXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc1R3bywgMCksIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5w
dXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOwog
ICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZm91bmRCZWdpbm5pbmdOZXdM
aW5lLCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkpOwogCi0gICAgICAgIGJyYW5j
aDMyKEFib3ZlLCBtYXRjaFBvcywgaW5pdGlhbFN0YXJ0KS5saW5rVG8oZmluZEJPTExvb3AsIHRo
aXMpOwotICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBtYXRjaFBvcywgbV9yZWdzLmluaXRp
YWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCAmbV9qaXQpOworICAgICAgICBzYXZlU3RhcnRJ
bmRleC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICBmb3VuZEJlZ2lubmluZ05ld0xp
bmUubGluayh0aGlzKTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7
IC8vIEFkdmFuY2UgcGFzdCBuZXdsaW5lCi0gICAgICAgIHNhdmVTdGFydEluZGV4LmxpbmsodGhp
cyk7CisgICAgICAgIGZvdW5kQmVnaW5uaW5nTmV3TGluZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1hdGNoUG9zKTsg
Ly8gQWR2YW5jZSBwYXN0IG5ld2xpbmUKKyAgICAgICAgc2F2ZVN0YXJ0SW5kZXgubGluaygmbV9q
aXQpOwogCiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm11bHRpbGluZSgpICYmIHRlcm0tPmFuY2hv
cnMuYm9sQW5jaG9yKQotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoVGVzdDMy
KE5vblplcm8sIG1hdGNoUG9zKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1hdGNoUG9zKSk7CiAKICAg
ICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAg
IHNldE1hdGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIG1vdmUoaW5kZXgsIG1hdGNoUG9z
KTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1hdGNoUG9zKTsKIAotICAgICAg
ICBMYWJlbCBmaW5kRU9MTG9vcCh0aGlzKTsgICAgICAgIAotICAgICAgICBmb3VuZEVuZGluZ05l
d0xpbmUuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBtYXRjaFBvcywgbGVuZ3RoKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaW5kRU9MTG9vcCgmbV9qaXQpOworICAgICAgICBmb3Vu
ZEVuZGluZ05ld0xpbmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgbWF0Y2hQb3MsIG1fcmVncy5sZW5ndGgpKTsKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0g
Q2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRj
aFBvcywgVGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwg
Y2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5k
RW5kaW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKLSAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7Ci0gICAgICAgIGp1bXAoZmluZEVP
TExvb3ApOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtYXRjaFBvcyk7CisgICAgICAgIG1faml0Lmp1bXAoZmluZEVPTExvb3ApOwogCi0gICAg
ICAgIGZvdW5kRW5kaW5nTmV3TGluZS5saW5rKHRoaXMpOworICAgICAgICBmb3VuZEVuZGluZ05l
d0xpbmUubGluaygmbV9qaXQpOwogCiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm11bHRpbGluZSgp
ICYmIHRlcm0tPmFuY2hvcnMuZW9sQW5jaG9yKQotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIG1hdGNoUG9zLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
bWF0Y2hQb3MsIG1fcmVncy5sZW5ndGgpKTsKIAotICAgICAgICBtb3ZlKG1hdGNoUG9zLCBpbmRl
eCk7CisgICAgICAgIG1faml0Lm1vdmUobWF0Y2hQb3MsIG1fcmVncy5pbmRleCk7CiAgICAgfQog
CiAgICAgdm9pZCBiYWNrdHJhY2tEb3RTdGFyRW5jbG9zdXJlKHNpemVfdCBvcEluZGV4KQpAQCAt
MjM2Nyw3ICsyMjkxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yR2VuZXJhdGUob3BJbmRleCwgbGFiZWwo
KSk7CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5k
ZXgsIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJ
bmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsKQEAgLTI0MDgsNyArMjMzMiw3
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAg
ICAgICAgIC8vIFdlIHdpbGwgcmVlbnRlciBhZnRlciB0aGUgY2hlY2ssIGFuZCBhc3N1bWUgdGhl
IGlucHV0IHBvc2l0aW9uIHRvIGhhdmUgYmVlbgogICAgICAgICAgICAgICAgIC8vIHNldCBhcyBh
cHByb3ByaWF0ZSB0byB0aGlzIGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIEVtaXQgZmFzdCBza2lwIHBhdGggd2l0aCBzdHJp
ZGUgaWYgd2UgaGF2ZSBCb3llck1vb3JlSW5mby4KICAgICAgICAgICAgICAgICBpZiAob3AubV9i
bUluZm8pIHsKQEAgLTI0MjAsOCArMjM0NCw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gW21hcCwgY2hhcmFj
dGVyc0Zhc3RQYXRoXSA9IG9wLm1fYm1JbmZvLT5jcmVhdGVDYW5kaWRhdGVCaXRtYXAoYmVnaW5J
bmRleCwgZW5kSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbWFwQ291
bnQgPSBtYXAuY291bnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNhbmRpYXRl
IGNoYXJhY3RlcnMgYXJlIDw9IDIsIGNoZWNraW5nIGVhY2ggaXMgYmV0dGVyIHRoYW4gdXNpbmcg
dmVjdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3Qgb3V0T2ZMZW5ndGhGYWls
dXJlOwotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3QgbWF0Y2hlZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvdXRPZkxlbmd0aEZhaWx1
cmU7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0
Y2hlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFlhcnJKSVRJbnRlcm5h
bDo6dmVyYm9zZSwgIkJNIEJpdG1hcCBpcyAiLCBtYXApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUGF0dGVybnMgbGlrZSAvW10vIGhhdmUgemVybyBjYW5kaWRhdGVzLiBTaW5jZSBpdCBp
cyByYXJlLCB3ZSBkbyBub3QgZG8gbm90aGluZyBmb3Igbm93LgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXBDb3VudCkKQEAgLTI0MzAsNzUgKzIzNTQsNzUgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoQm95ZXJNb29yZUZhc3RDYW5kaWRhdGVzOjptYXhTaXplID09IDIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VS
ZWdFeHBDb21waWxhdGlvbigpLCAiRm91bmQgY2hhcmFjdGVycyBmYXN0cGF0aCBsb29rYWhlYWQg
IiwgY2hhcmFjdGVyc0Zhc3RQYXRoLCAiIHJhbmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBlbmRJ
bmRleCwgIikiKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9vcEhlYWQg
PSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9j
aGVja2VkT2Zmc2V0IC0gZW5kSW5kZXggKyAxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoY2hhcmFjdGVyc0Zhc3RQYXRoLmF0KDApKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbG9vcEhlYWQgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gZW5kSW5kZXggKyAxLCBtX3Jl
Z3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLnJlZ1QwLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgwKSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyc0Zhc3RQYXRoLnNpemUoKSA+IDEp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgxKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MucmVnVDAsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoY2hhcmFjdGVyc0Zhc3RQYXRoLmF0KDEpKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVtcElmTm9BdmFpbGFi
bGVJbnB1dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BIZWFkLCAmbV9qaXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBhdXRvKiBwb2ludGVyID0gZ2V0Qm95ZXJNb29yZUJpdG1hcChtYXApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VSZWdFeHBDb21waWxh
dGlvbigpLCAiRm91bmQgYml0bWFwIGxvb2thaGVhZCBjb3VudDooIiwgbWFwQ291bnQsICIpLHJh
bmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBlbmRJbmRleCwgIikiKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgcmVnVDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9vcEhlYWQgPSBsYWJlbCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gZW5k
SW5kZXggKyAxLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgbV9yZWdzLnJlZ1QxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbV9qaXQubGFiZWwo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9m
ZnNldCAtIGVuZEluZGV4ICsgMSwgbV9yZWdzLnJlZ1QwKTsKICNpZiBDUFUoQVJNNjQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJp
dG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDYgPT0gNjQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAoNiArIDEpID09IEJveWVyTW9vcmVC
aXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0
VW5zaWduZWRCaXRmaWVsZDMyKHJlZ1QwLCBUcnVzdGVkSW1tMzIoNiksIFRydXN0ZWRJbW0zMigx
KSwgcmVnVDIpOyAvLyBFeHRyYWN0IDEgYml0IGZvciBpbmRleC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMiwgVGltZXNFaWdodCksIHJl
Z1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cnNoaWZ0NjQocmVnVDAsIHJlZ1Qy
KTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5IGxvd2VyIDZiaXRzIGFyZSBl
ZmZlY3RpdmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJh
bmNoVGVzdDY0KE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5leHRyYWN0VW5zaWduZWRCaXRmaWVsZDMyKG1fcmVncy5y
ZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgbV9yZWdzLnJlZ1QyKTsgLy8gRXh0cmFjdCAxIGJpdCBmb3IgaW5kZXgu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC51cnNoaWZ0NjQobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVnVDIpOyAvLyBXZSBjYW4gaWdu
b3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNmJpdHMgYXJlIGVmZmVjdGl2ZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1fcmVncy5yZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSkpOwogI2VsaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihCb3llck1vb3JlQml0bWFwOjpNYXA6OldvcmRU
eXBlKSA9PSBzaXplb2YodWludDY0X3QpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KDEgPDwgNiA9PSA2NCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydCgxIDw8ICg2ICsgMSkgPT0gQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpzaXpl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKDYpLCByZWdU
Mik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MSwgcmVnVDIsIFRpbWVzRWlnaHQpLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoVGVzdEJpdDY0KE5vblplcm8sIHJlZ1QyLCByZWdUMCkp
OyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgc2luY2UgbW9kdWxvLTY0IGlzIHBlcmZvcm1l
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5yZWdUMCwg
bV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC51cnNoaWZ0
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5yZWdUMSwgbV9yZWdz
LnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIG1fcmVncy5yZWdUMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdEJp
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIG1fcmVncy5yZWdUMCkp
OyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgc2luY2UgbW9kdWxvLTY0IGlzIHBlcmZvcm1l
ZC4KICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6ZW9mKHVpbnQzMl90KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDUgPT0gMzIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAoNSArIDIp
ID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXJzaGlmdDMyKFRydXN0ZWRJbW0zMig1KSwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigwYjExKSwgcmVnVDIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDEsIHJlZ1QyLCBUaW1lc0ZvdXIpLCBy
ZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKHJlZ1QwLCByZWdU
Mik7IC8vIFdlIGNhbiBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA1Yml0cyBhcmUg
ZWZmZWN0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdUMik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoNSksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwYjExKSwg
bV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEsIG1fcmVncy5yZWdUMiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsg
Ly8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5IGxvd2VyIDViaXRzIGFyZSBlZmZl
Y3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSkpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1
dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BIZWFkLCAmbV9qaXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBz
aXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0aGUgc3RhcnQgaW5kZXggZm9yIHVzZSBpZiB3
ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgYWRq
dXN0aW5nIG1hdGNoLXN0YXJ0IHdoZW4gd2UgZmFpbGVkIHRvIGZpbmQgdGhlIHN0YXJ0IHdpdGgg
Qm95ZXJNb29yZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcGF0dGVy
bi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0T2ZMZW5ndGhGYWlsdXJlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0T2ZMZW5ndGhGYWlsdXJlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRj
aFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQo
aW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9y
ZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQob3V0T2ZMZW5ndGhGYWlsdXJl
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0
aGUgc3RhcnQgaW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIG1hdGNoLXN0YXJ0IHdoZW4gd2Ugc3Rh
cnQgcGF0dGVybiBtYXRjaGluZyB3aXRoIHRoZSB1cGRhdGVkIGluZGV4CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBieSBCb3llck1vb3JlIHNlYXJjaC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRNYXRjaFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRj
aFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNTE3LDIxICsyNDQxLDIwIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAvLyBMb2FkIGFwcHJvcHJpYXRlIHZhbHVlcyBpbnRvIHRoZSByZXR1cm4gcmVnaXN0ZXIgYW5k
IHRoZSBmaXJzdCBvdXRwdXQKICAgICAgICAgICAgICAgICAvLyBzbG90LCBhbmQgcmV0dXJuLiBJ
biB0aGUgY2FzZSBvZiBwYXR0ZXJuIHdpdGggYSBmaXhlZCBzaXplLCB3ZSB3aWxsCiAgICAgICAg
ICAgICAgICAgLy8gbm90IGhhdmUgeWV0IHNldCB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IAotICAg
ICAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fcmVncy5pbmRleCAhPSBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihwcmlvckFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplKSwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIocHJpb3JB
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgs
IHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUobV9y
ZWdzLmluZGV4LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVQYWlyMzIocmV0dXJuUmVnaXN0ZXIsIGluZGV4
LCBvdXRwdXQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVBhaXIzMihtX3JlZ3MucmV0dXJuUmVnaXN0ZXIsIG1fcmVncy5pbmRleCwgbV9yZWdz
Lm91dHB1dCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TWF0Y2hTdGFydChyZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGdldE1hdGNoU3RhcnQobV9yZWdzLnJldHVyblJl
Z2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29t
cGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCA0KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9y
ZWdzLm91dHB1dCwgNCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtb3Zl
KGluZGV4LCByZXR1cm5SZWdpc3RlcjIpOwotCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSht
X3JlZ3MuaW5kZXgsIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOwogICAgICAgICAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkaXZpZGUg
YmV0d2VlbiB0aGUgdGFpbCBvZiB0aGUgcHJpb3IgYWx0ZXJuYXRpdmUsIGFib3ZlLCBhbmQKQEAg
LTI1NDIsMTcgKzI0NjUsMTcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGp1bXBzIGhlcmUgdG8gZG8gc28gd2l0
aCB0aGUgaW5wdXQgcG9zaXRpb24gbWF0Y2hpbmcgdGhhdCBvZiB0aGUKICAgICAgICAgICAgICAg
ICAgICAgLy8gUFJJT1IgYWx0ZXJhbmF0aXZlLCBhbmQgd2Ugd2lsbCBvbmx5IGNoZWNrIGlucHV0
IGF2YWlsYWJpbGl0eSBpZiB3ZQogICAgICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHByb2dy
ZXNzIGl0IGZvcndhcmRzLgotICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPiBwcmlv
ckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGQzMihJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByaW9yQWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBw
cmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpb3JBbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSA+IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3ViMzIoSW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGFs
dGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgLSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5tX25leHRPcCA9PSBub3RGb3VuZCkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWVudHJ5IHBvaW50IGZvciB0aGUg
RW5kIG9mICdvbmNlIHRocm91Z2gnIGFsdGVybmF0aXZlcywKICAgICAgICAgICAgICAgICAgICAg
Ly8ganVtcGVkIHRvIHdoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFpbHMgdG8gbWF0Y2guCi0g
ICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN1YjMyKEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihwcmlv
ckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBZYXJyT3BDb2RlOjpCb2R5
QWx0ZXJuYXRpdmVOZXh0KQpAQCAtMjYwOCw3ICsyNTMxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIW1fb3BzW29wLm1fcHJldmlv
dXNPcF0ubV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgbWF0Y2hlZCB3aXRob3V0IGNvbnN1bWlu
ZyBjaGFyYWN0ZXJzIHRoZW4KICAgICAgICAgICAgICAgICAgICAgLy8gYmFja3RyYWNrIHRvIHRy
eSB0byBtYXRjaCB3aGlsZSBjb25zdW1taW5nIHNvbWUgaW5wdXQuCi0gICAgICAgICAgICAgICAg
ICAgIG9wLm1femVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQq
KSkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZy
YW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2ggaGVyZSB0aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZl
IGhhcyBtYXRjaGVkIC0ganVtcCB0byB0aGUKQEAgLTI2MjUsMTAgKzI1NDgsMTAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBl
bmRPcCA9ICZtX29wc1tlbmRPcC0+bV9uZXh0T3BdOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBBU1NFUlQoZW5kT3AtPm1fb3AgPT0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVk
QWx0ZXJuYXRpdmVFbmQgfHwgZW5kT3AtPm1fb3AgPT0gWWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJu
YXRpdmVFbmQpOwotICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1bXBzLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXh0
IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSBob3cgbXVjaCBpbnB1dCB3ZSBuZWVkIHRvIGNoZWNrIGZvciwg
YW5kIGlmIG5vbi16ZXJvIGNoZWNrLgogICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3Qg
PSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKQEAgLTI2NTUsMTMgKzI1NzgsMTMgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlm
ICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIW1f
b3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgbWF0Y2hlZCB3
aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzIHRoZW4KICAgICAgICAgICAgICAgICAgICAgLy8g
YmFja3RyYWNrIHRvIHRyeSB0byBtYXRjaCB3aGlsZSBjb25zdW1taW5nIHNvbWUgaW5wdXQuCi0g
ICAgICAgICAgICAgICAgICAgIG9wLm1femVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1YWws
IGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9u
ICogc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3plcm9MZW5ndGhN
YXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzZXQgb2YgYWx0ZXJuYXRpdmVz
IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsCiAgICAgICAgICAgICAgICAgLy8g
dGhlbiB0aGUgTmV4dCBub2RlcyB3aWxsIGhhdmUgcGxhbnRlZCBqdW1wcyB0byB0aGUgRW5kLCBh
bmQgYWRkZWQKICAgICAgICAgICAgICAgICAvLyB0aGVtIHRvIHRoaXMgbm9kZSdzIG1fanVtcHMg
bGlzdC4KLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5jbGVhcigpOwogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5t
X3ByZXZpb3VzT3BdOwpAQCAtMjY3Niw3ICsyNTk5LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRo
ZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW46IHsKICAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSog
dGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVncy5yZWdU
MDsKICAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlNYXhDb3VudCA9PSAxKTsK
IAogICAgICAgICAgICAgICAgIC8vIFVwb24gZW50cnkgdG8gYSBHcmVlZHkgcXVhbnRpZmllZCBz
ZXQgb2YgcGFyZW50aGVzZSBzdG9yZSB0aGUgaW5kZXguCkBAIC0yNjk0LDEyICsyNjE3LDEyIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAvLwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3IgY2FwdHVyaW5nIHBhcmVucywgY291
bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBhcnJheT8KICAgICAgICAgICAgICAgICBp
ZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpCi0gICAgICAg
ICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3Rl
ZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFi
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4
KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZSht
X3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJlIGNhcHR1cmluZywgc3RvcmUgdGhlIHN0
YXJ0aW5nIGluZGV4IHZhbHVlIHRvIHRoZQpAQCAtMjcxMywyMyArMjYzNiwyMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dE9mZnNldCArPSB0ZXJtLT5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zm
c2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoaW5wdXRP
ZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9mZnNldCksIGlu
ZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5TdGFy
dChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0
ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQobV9yZWdzLmluZGV4LCB0ZXJtLT5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6
UGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZDogewogICAgICAgICAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwotICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
aW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMDsKICAgICAgICAg
ICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlNYXhDb3VudCA9PSAxKTsKIAogICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBuZXN0ZWQgYWx0ZXJuYXRpdmUgbWF0Y2hlZCB3aXRob3V0IGNvbnN1
bWluZyBhbnkgY2hhcmFjdGVycywgcHVudCB0aGlzIGJhY2sgdG8gdGhlIGludGVycHJldGVyLgog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDc4Nj4gQWRkIGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJVCB0byBwcm9wZXJs
eQogICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4g
bWF0Y2ggd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgIGlmICh0
ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIXRlcm0t
PnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAg
ICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9p
ZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJt
LT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKIAogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBlbmRpbmcgaW5kZXgg
dmFsdWUgdG8gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZXMgYXJyYXksIG9mZnNldHRp
bmcgYXMgbmVjZXNzYXJ5LgpAQCAtMjc0MCwyMCArMjY2MywyMCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1
cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVy
bnMpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNr
ZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aW5wdXRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0z
MihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGlucHV0T2Zm
c2V0KSwgaW5kZXhUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0
dGVybkVuZChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRT
dWJwYXR0ZXJuRW5kKGluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChtX3JlZ3MuaW5kZXgsIHRlcm0t
PnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2VzIGFyZSBxdWFudGlmaWVkIEdyZWVkeSB0aGVu
IGFkZCBhIGxhYmVsIHRvIGp1bXAgYmFjawogICAgICAgICAgICAgICAgIC8vIHRvIGlmIHdlIGdl
dCBhIGZhaWxlZCBtYXRjaCBmcm9tIGFmdGVyIHRoZSBwYXJlbnRoZXNlcy4gRm9yIE5vbkdyZWVk
eQogICAgICAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzLCBsaW5rIHRoZSBqdW1wIGZyb20gYmVm
b3JlIHRoZSBzdWJwYXR0ZXJuIHRvIGhlcmUuCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAg
ICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50
cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7CiAgICAgICAgICAgICAgICAg
ICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Ci0gICAgICAgICAg
ICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBiZWdpbk9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI3NjYsMTEgKzI2ODksMTEgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAg
IEFTU0VSVCghdGVybS0+Y2FwdHVyZSgpKTsKIAogICAgICAgICAgICAgICAgIC8vIFVwb24gZW50
cnkgc2V0IGEgbGFiZWwgdG8gbG9vcCBiYWNrIHRvLgotICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBzdGFydCBpbmRleCBvZiB0aGUg
Y3VycmVudCBtYXRjaDsgd2UgbmVlZCB0byByZWplY3QgemVybwogICAgICAgICAgICAgICAgIC8v
IGxlbmd0aCBtYXRjaGVzLgotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgdGVy
bS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc1Rlcm1pbmFsOjpiZWdp
bkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDo6YmVn
aW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxFbmQ6
IHsKQEAgLTI3ODEsMTUgKzI3MDQsMTUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4gQWRkIGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJ
VCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lv
bnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291
bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplKQotICAg
ICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChicmFuY2gzMihFcXVhbCwg
aW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24g
KiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9u
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKIAogICAgICAg
ICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgbWF0Y2ggaXMgbm9uLXplcm8sIHdlIGNhbiBh
Y2NlcHQgaXQgYW5kCiAgICAgICAgICAgICAgICAgLy8gbG9vcCBiYWNrIHVwIHRvIHRoZSBoZWFk
IG9mIHRoZSBzdWJwYXR0ZXJuLgotICAgICAgICAgICAgICAgIGp1bXAoYmVnaW5PcC5tX3JlZW50
cnkpOworICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5PcC5tX3JlZW50cnkpOwogCiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8ganVtcCB0byB3aGVu
IHdlIHN0b3AgbWF0Y2hpbmcgLSB3ZSB3aWxsCiAgICAgICAgICAgICAgICAgLy8gZG8gc28gb25j
ZSB0aGUgc3VicGF0dGVybiBjYW5ub3QgbWF0Y2ggYW55IG1vcmUuCi0gICAgICAgICAgICAgICAg
b3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBt
X2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBA
IC0yODE2LDI0ICsyNzM5LDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Ig
Y2FwdHVyaW5nIHBhcmVucywgY291bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBhcnJh
eT8KICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJU
eXBlOjpHcmVlZHkgfHwgdGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25H
cmVlZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigw
KSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpt
YXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1v
dW50SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsg
QmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlw
ZTo6Tm9uR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1
c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1Bh
cmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
b3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBj
dXJyUGFyZW5Db250ZXh0UmVnID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy
SUQgbmV3UGFyZW5Db250ZXh0UmVnID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgIG9wLm1f
cmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDA7CisgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4
dFJlZyA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1l
KHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFy
ZW5Db250ZXh0SGVhZEluZGV4KCksIGN1cnJQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAg
ICAgICAgICBhbGxvY2F0ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNvbnRleHRSZWcpOwotICAgICAg
ICAgICAgICAgICAgICBzdG9yZVB0cihjdXJyUGFyZW5Db250ZXh0UmVnLCBuZXdQYXJlbkNvbnRl
eHRSZWcpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjdXJyUGFyZW5Db250
ZXh0UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUobmV3UGFyZW5Db250ZXh0UmVnLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgc2F2ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNvbnRleHRSZWcsIHJlZ1QyLCB0
ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2VzLmxhc3RTdWJw
YXR0ZXJuSWQsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzYXZl
UGFyZW5Db250ZXh0KG5ld1BhcmVuQ29udGV4dFJlZywgbV9yZWdzLnJlZ1QyLCB0ZXJtLT5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUg
c3RhcnRpbmcgaW5kZXggdmFsdWUgdG8gdGhlCkBAIC0yODQzLDE1ICsyNzY2LDE1IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBv
ZmZzZXRzIG9ubHkgYWZ0ZXJ3YXJkcywgYXQgdGhlIHBvaW50IHRoZSByZXN1bHRzIGFycmF5IGlz
CiAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYWNjZXNzZWQuCiAgICAgICAgICAgICAgICAgaWYg
KHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNs
dWRlU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBp
bmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMDsKICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNrZWRPZmZzZXQgLSB0
ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50KQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRPZmZzZXQgKz0gdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWlu
aW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhU
ZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXhUZW1wb3Jh
cnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KGluZGV4
LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0U3VicGF0dGVyblN0YXJ0KG1fcmVncy5pbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3Vi
cGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAjZWxzZSAvLyAhWUFSUl9KSVRfQUxMX1BB
UkVOU19FWFBSRVNTSU9OUwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yODY3LDEzICsyNzkwLDEzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFS
UiBKSVQgdG8gcHJvcGVybHkKICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJl
c3Npb25zIHRoYXQgY2FuIG1hdGNoIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhl
ZENvdW50ICYmICF0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkK
LSAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0
RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1f
cmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCop
KSkpOwogCi0gICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgICAgICAgICAgWWFyck9w
JiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKICAgICAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRUZW1w
b3JhcnkpOwogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFRlbXBvcmFyeSwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFt
b3VudEluZGV4KCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJl
IGNhcHR1cmluZywgc3RvcmUgdGhlIGVuZGluZyBpbmRleCB2YWx1ZSB0byB0aGUKQEAgLTI4ODMs
MTQgKzI4MDYsMTQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9pbnQg
dGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3NlZC4K
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0g
SklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0g
bV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0
aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9y
YXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwg
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChpbmRleFRlbXBvcmFyeSwgdGVy
bS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKGluZGV4LCB0ZXJtLT5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3Vi
cGF0dGVybkVuZChtX3JlZ3MuaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhl
c2VzIGFyZSBxdWFudGlmaWVkIEdyZWVkeSB0aGVuIGFkZCBhIGxhYmVsIHRvIGp1bXAgYmFjawpA
QCAtMjg5OCwxNSArMjgyMSwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gcGFyZW50aGVzZXMsIGxpbmsgdGhlIGp1bXAgZnJv
bSBiZWZvcmUgdGhlIHN1YnBhdHRlcm4gdG8gaGVyZS4KICAgICAgICAgICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDMyKEJlbG93LCBjb3VudFRlbXBvcmFyeSwg
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwg
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIGNvdW50VGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+
cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAganVtcChiZWdp
bk9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2lu
T3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLT5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewogICAgICAgICAgICAgICAg
ICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAg
ICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICAg
ICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5PcC5t
X2p1bXBzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0g
bV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICB9CiAjZWxzZSAvLyAhWUFSUl9KSVRfQUxM
X1BBUkVOU19FWFBSRVNTSU9OUwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yOTIxLDEyICsyODQ0LDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBp
bmRleCAtIGFzc2VydGlvbnMgc2hvdWxkIG5vdCB1cGRhdGUgaW5kZXgsIHNvCiAgICAgICAgICAg
ICAgICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHJlc3RvcmUgaXQgdXBvbiBhIHN1Y2Nlc3NmdWwgbWF0
Y2guCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0g
dGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNz
ZXJ0aW9uOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3Jl
Z3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXRpY2FsQXNzZXJ0aW9uOjpiZWdpbkluZGV4KCkpOwogCiAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgCiAgICAgICAgICAgICAgICAgb3AubV9jaGVja0FkanVzdCA9IG1fY2hlY2tlZE9mZnNldCAt
IHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1
c3QpCi0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBp
bmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAg
IG1fY2hlY2tlZE9mZnNldCAtPSBvcC5tX2NoZWNrQWRqdXN0OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjkzNiwxMyArMjg1OSwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbnB1dCBpbmRl
eCB2YWx1ZS4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxBc3Nl
cnRpb246OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJh
bWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxB
c3NlcnRpb246OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAg
IC8vIElmIGludmVydGVkLCBhIHN1Y2Nlc3NmdWwgbWF0Y2ggb2YgdGhlIGFzc2VydGlvbiBtdXN0
IGJlIHRyZWF0ZWQKICAgICAgICAgICAgICAgICAvLyBhcyBhIGZhaWx1cmUsIHNvIGp1bXAgdG8g
YmFja3RyYWNraW5nLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3Jl
ZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKQEAgLTI5NzAsNyAr
Mjg5Myw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgIC0tb3BJbmRleDsKIAogICAgICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAg
ICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCYWNrdHJhY2sob3BJbmRleCwgbGFi
ZWwoKSk7CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJhY2t0cmFjayhv
cEluZGV4LCBtX2ppdC5sYWJlbCgpKTsKIAogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChvcC5tX29wKSB7CkBAIC0zMDE1LDcgKzI5
MzgsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
ICAgICAgICAgLy8gSXMgdGhpcyB0aGUgbGFzdCBhbHRlcm5hdGl2ZT8gSWYgbm90LCB0aGVuIGlm
IHdlIGJhY2t0cmFjayB0byB0aGlzIHBvaW50IHdlIGp1c3QKICAgICAgICAgICAgICAgICAvLyBu
ZWVkIHRvIGp1bXAgdG8gdHJ5IHRvIG1hdGNoIHRoZSBuZXh0IGFsdGVybmF0aXZlLgogICAgICAg
ICAgICAgICAgIGlmIChtX29wc1tvcC5tX25leHRPcF0ubV9vcCAhPSBZYXJyT3BDb2RlOjpCb2R5
QWx0ZXJuYXRpdmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rVG8obV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKG1fb3BzW29wLm1fbmV4dE9wXS5t
X3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9wID0gbV9vcHNbb3AubV9uZXh0
T3BdOwpAQCAtMzAyOSwxNyArMjk1MiwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICBib29sIG9uY2VUaHJvdWdoID0gZW5kT3Au
bV9uZXh0T3AgPT0gbm90Rm91bmQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
SnVtcExpc3QgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXM7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzOwog
CiAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGdlbmVyYXRlIGNvZGUgdG8gaGFuZGxlIGNhc2Vz
IHdoZXJlIHdlIGJhY2t0cmFjayBvdXQgb2YgYW4gYXR0ZW1wdGVkIG1hdGNoCiAgICAgICAgICAg
ICAgICAgLy8gb2YgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuIElmIHRoaXMgaXMgYSAnb25jZSB0aHJv
dWdoJyBzZXQgb2YgYWx0ZXJuYXRpdmVzIHRoZW4gd2UKICAgICAgICAgICAgICAgICAvLyBoYXZl
IG5vdGhpbmcgdG8gZG8gLSBsaW5rIHRoaXMgc3RyYWlnaHQgdGhyb3VnaCB0byB0aGUgRW5kLgog
ICAgICAgICAgICAgICAgIGlmIChvbmNlVGhyb3VnaCkKLSAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCAm
bV9qaXQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9wYXR0ZXJuLnN0aWNreSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBh
IHN0aWNreSBwYXR0ZXJuIGFuZCB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBmYWlsZWQsIGp1bXAgdG8g
dGhlIGVuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFr
ZUJhY2t0cmFja3NUb0p1bXBMaXN0KGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzLCB0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0
cmFja3NUb0p1bXBMaXN0KGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzLCAmbV9qaXQpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4
ZWRTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUgPiBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQogICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSAxKSkgewpAQCAtMzA0NywxMSArMjk3MCwx
MSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB3ZSBvbWl0IHRoZSBzdG9yZSBvZiB0aGUg
c3RhcnQgaW5kZXggdW50aWwgdGhlIHBhdHRlcm4gaGFzIG1hdGNoZWQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiBqdXN0IGxpbmsgdGhlIGJhY2t0cmFjayBvdXQgb2Yg
dGhlIGxhc3QgYWx0ZXJuYXRpdmUgc3RyYWlnaHQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBoZWFkIG9mIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgdGhp
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhi
ZWdpbk9wLT5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdlbmVyYXRlIGEgdHJhbXBv
bGluZSBvZiBjb2RlIHRvIGV4ZWN1dGUgYmVmb3JlIGxvb3BpbmcgYmFjawogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXJvdW5kIHRvIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGFkdmFuY2UgYW5kIHJldHJ5IGZvciBh
IHN0aWNreSBwYXR0ZXJuLiBBbmQgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGJlZm9yZSB0aGlzIGJy
YW5jaC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLnN0aWNreSgp
KTsKQEAgLTMwNTksMTMgKzI5ODIsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gc2l6
ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGluZGV4IGZvciB1c2UgaWYgd2Ug
bWF0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1f
aGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMy
KGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIDEpLCByZWdUMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIDEp
LCBtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4LCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNo
U3RhcnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4LCBtX3Jl
Z3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0
KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0zMDc3LDE2ICszMDAwLDE2IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBkZWx0YSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+bV9h
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSAhPSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSAtIDEp
LCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcChiZWdpbk9wLT5tX3Jl
ZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEgLSAxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AtPm1fcmVlbnRyeSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBoYXMgbWluaW11bSBzaXplIDB4RkZGRkZGRkZ1LCB0
aGVuIHRoZXJlIGNhbm5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHN1ZmZp
Y2VudCBpbnB1dCBhdmFpbGFibGUgdG8gaGFuZGxlIHRoaXMsIHNvIGp1c3QgZmFsbCB0aHJvdWdo
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbHRhID0gYmVnaW5PcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSAhPSAweEZGRkZGRkZGdSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlu
cHV0IGJlY2F1c2Ugd2UgYXJlIGluY3JlbWVudGluZyB0aGUgaW5wdXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGRlbHRhICsgMSksIGluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9wLT5t
X3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEgKyAxKSwgbV9yZWdzLmluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9w
LT5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMDk5LDcg
KzMwMjIsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgLy8gICAgZm9sbG93aW5nIGEgZmFpbGVkIGlucHV0IGNoZWNrLgogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHdheSwgd2UgaGF2ZSBqdXN0
IGZhaWxlZCB0aGUgaW5wdXQgY2hlY2sgZm9yIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4KLSAgICAg
ICAgICAgICAgICBMYWJlbCBmaXJzdElucHV0Q2hlY2tGYWlsZWQodGhpcyk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpcnN0SW5wdXRDaGVja0ZhaWxlZCgmbV9qaXQp
OwogCiAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgY29kZSB0byBoYW5kbGUgaW5wdXQgY2hl
Y2sgZmFpbHVyZXMgZnJvbSBhbHRlcm5hdGl2ZXMgZXhjZXB0IHRoZSBsYXN0LgogICAgICAgICAg
ICAgICAgIC8vIHByZXZPcCBpcyB0aGUgYWx0ZXJuYXRpdmUgd2UncmUgaGFuZGxpbmcgYSBiYWls
IG91dCBmcm9tIChpbml0aWFsbHkgQmVnaW4pLCBhbmQKQEAgLTMxMTAsNyArMzAzMyw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBZ
YXJyT3AqIHByZXZPcCA9IGJlZ2luT3A7CiAgICAgICAgICAgICAgICAgWWFyck9wKiBuZXh0T3Ag
PSAmbV9vcHNbYmVnaW5PcC0+bV9uZXh0T3BdOwogICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0
T3AtPm1fb3AgIT0gWWFyck9wQ29kZTo6Qm9keUFsdGVybmF0aXZlRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByZXZPcC0+bV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBwcmV2T3AtPm1fanVtcHMubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG9ubHkgZ2V0IGhlcmUgaWYgYW4gaW5wdXQgY2hlY2sgZmFpbHMsIGl0IGlzIG9ubHkgd29y
dGggY2hlY2tpbmcgYWdhaW4KICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIG5leHQgYWx0
ZXJuYXRpdmUgaGFzIGEgbWluaW11bSBzaXplIGxlc3MgdGhhbiB0aGUgbGFzdC4KQEAgLTMxMTks
MTMgKzMwNDIsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VidHJhY3QgZGVsdGEgYmFjayBvdXQsIGFuZCBy
ZWR1Y2UgdGhpcyBjb2RlLiBTaG91bGQgcGVyZm9ybWFuY2UgdGVzdAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIGJlbmVmaXQgb2YgdGhpcy4KICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGRlbHRhID0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0g
bmV4dE9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3ViMzIoSW1tMzIoZGVsdGEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGQzMihJbW0zMihkZWx0YSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGp1bXAobmV4dE9wLT5tX3JlZW50cnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKGRlbHRhKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuanVtcChuZXh0T3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWls
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2T3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPCBuZXh0T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihuZXh0T3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIobmV4dE9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
IC0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgcHJldk9wID0gbmV4dE9wOwogICAgICAgICAgICAgICAgICAg
ICBuZXh0T3AgPSAmbV9vcHNbbmV4dE9wLT5tX25leHRPcF07CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzEzNSwxNCArMzA1OCwxNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGlucHV0
IHRvIHJ1biB0aGUgbGFzdCBhbHRlcm5hdGl2ZSwgdGhlbiBmb3IgJ29uY2UgdGhyb3VnaCcKICAg
ICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgd2UgYXJlIGRvbmUgLSBqdXN0IGp1bXAgYmFj
ayB1cCBpbnRvIHRoZSBmb3J3YXJkcyBtYXRjaGluZyBwYXRoIGF0IHRoZSBFbmQuCiAgICAgICAg
ICAgICAgICAgaWYgKG9uY2VUaHJvdWdoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMubGlua1RvKGVuZE9wLm1fcmVlbnRyeSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIGp1
bXAoZW5kT3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5r
VG8oZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5q
dW1wKGVuZE9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIEZvciByZXBlYXRpbmcgYWx0ZXJuYXRp
dmVzLCBsaW5rIGFueSBpbnB1dCBjaGVjayBmYWlsdXJlIGZyb20gdGhlIGxhc3QgYWx0ZXJuYXRp
dmUgdG8KICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1f
aml0KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgPSAh
bV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemU7CiAKQEAgLTMxNTEsNyArMzA3NCw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAvLyBkaXNqdW5jdGlvbiBpcyAwLCBlLmcuIC9hKnxiLykuCiAgICAgICAgICAgICAgICAgaWYg
KG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ICYmIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09
IDEpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXggaXMgYWxyZWFkeSBpbmNyZW1lbnRl
ZCBieSAxLCBzbyBqdXN0IHN0b3JlIGl0IG5vdyEKLSAgICAgICAgICAgICAgICAgICAgc2V0TWF0
Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdz
LmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgbmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTMxNjQsMjIgKzMwODcsMjIgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBp
ZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5p
bXVtU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgYWx0ZXJu
YXRpdmUgaGFkIHRoZSBzYW1lIG1pbmltdW0gc2l6ZSBhcyB0aGUgZGlzanVuY3Rpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHNpbXBseSBpbmNyZW1lbnQgaW5wdXQgcG9zIGJ5
IDEsIG5vIGFkanVzdG1lbnQgYmFzZWQgb24gbWluaW11bSBzaXplLgotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIG1pbnVtdW0gZm9yIHRoZSBsYXN0IGFsdGVybmF0aXZlIHdhcyBv
bmUgZ3JlYXRlciB0aGFuIHRoYW4gdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9y
IHRoZSBkaXNqdW5jdGlvbiwgd2UncmUgYWxyZWFkeSBwcm9ncmVzc2VkIGJ5IDEsIG5vdGhpbmcg
dG8gZG8hCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWx0YSA9IChhbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSAtIG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpIC0g
MTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIEp1
bXAgbWF0Y2hGYWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1hdGNoRmFpbGVkID0ganVtcElmTm9BdmFpbGFi
bGVJbnB1dCgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc1RvVXBkYXRlTWF0Y2hT
dGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5t
X21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQo
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdz
LmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmlt
dW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3Rh
cnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVn
cy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11
bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0zMTg3LDIyICszMTEwLDIyIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRo
ZSBib2R5IGFzIGEgd2hvbGUuIElmIG5vIG1vcmUgaXMgbmVlZGVkIHRoZW4gd2UgZG9udCBuZWVk
IGFuIGFkZGl0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQgY2hlY2sgaGVyZSAt
IGp1bXAgc3RyYWlnaHQgYmFjayB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGFsdGVybmF0
aXZlLgogICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSA9PSBtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKQotICAgICAgICAg
ICAgICAgICAgICAgICAganVtcChiZWdpbk9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuanVtcChiZWdpbk9wLT5tX3JlZW50cnkpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbk9wLT5tX2FsdGVy
bmF0aXZlLT5tX21pbmltdW1TaXplID4gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihiZWdpbk9wLT5tX2FsdGVy
bmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSks
IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIG1f
cGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKElt
bTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksIHRoaXMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAganVtcChmaXJzdElucHV0Q2hlY2tGYWlsZWQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtX3BhdHRlcm4u
bV9ib2R5LT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0
KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAoZmlyc3RJbnB1dENoZWNrRmFpbGVkKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBpZiB3ZSBp
dGVyYXRlIHRvIHRoZSBwb2ludCB0aGF0IHRoZXJlIGlzIGluc3VmZmljaWVudCBpbnB1dCB0bwog
ICAgICAgICAgICAgICAgICAgICAvLyBydW4gYW55IG1hdGNoZXMsIGFuZCBuZWVkIHRvIHJldHVy
biBhIGZhaWx1cmUgc3RhdGUgZnJvbSBKSVQgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgbWF0
Y2hGYWlsZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hGYWlsZWQubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxhc3RTdGlj
a3lBbHRlcm5hdGl2ZUZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbGFzdFN0
aWNreUFsdGVybmF0aXZlRmFpbHVyZXMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIHJl
bW92ZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzI2MiwxNCArMzE4NSwxNCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gbGluayB0
aGUgYmFja3RyYWNrcyBkaXJlY3RseSB0byB0aGVpciBkZXN0aW5hdGlvbi4KICAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBIYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gbGluayB0aGUgYmFja3RyYWNrcyBoZXJlLgot
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIob3AubV9j
aGVja0FkanVzdCksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNM
YXN0QWx0ZXJuYXRpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0
aXZlIHRoYXQgaXMgbm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRvIGl0cyBzdWNjZXNzb3IuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG5leHRPcC5tX3JlZW50cnkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuanVtcChuZXh0T3AubV9yZWVudHJ5KTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZXMgbXVzdCBqdW1wIGJhY2sg
dG8gdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRPcC5tX2p1bXBz
LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE9wLm1fanVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBIHNpbmdsZSBhbHRlcm5hdGl2ZSBvbiBpdHMgb3duIGNh
biBmYWxsIHRocm91Z2guCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zMjc4LDEwICszMjAxLDEwIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlcyB3aGVyZSB3ZSBjYW4gbGluayB0aGUgYmFja3RyYWNrcyBkaXJlY3RseSB0byB0
aGVpciBkZXN0aW5hdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNMYXN0QWx0ZXJu
YXRpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHRoYXQg
aXMgbm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRvIGl0cyBzdWNjZXNzb3IuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhuZXh0T3AubV9yZWVudHJ5
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
a1RvKG5leHRPcC5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWlzQmVnaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IG9m
IG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmVzIG11c3QganVtcCBiYWNrIHRvIHRoZSBiZWdpbm5p
bmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNr
dHJhY2tzVG9KdW1wTGlzdChuZXh0T3AubV9qdW1wcywgdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChuZXh0
T3AubV9qdW1wcywgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSBhbHRlcm5hdGl2ZSBvbiBpdHMgb3du
IGRvIG5vdGhpbmcgLSBpdCBjYW4gZmFsbCB0aHJvdWdoLgogICAgICAgICAgICAgICAgIH0KQEAg
LTMzMzEsNyArMzI1NCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBlbmQgb2YgYSBub24tc2ltcGxlIHNldCBv
ZiBhbHRlcm50aXZlcyB3ZSBuZWVkIHRvIGp1bXAKICAgICAgICAgICAgICAgICAvLyB0byB0aGUg
YmFja3RyYWNraW5nIHJldHVybiBhZGRyZXNzIHNldCB1cCBkdXJpbmcgZ2VuZXJhdGlvbi4KICAg
ICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBZYXJyT3BDb2RlOjpOZXN0ZWRBbHRlcm5hdGl2
ZUVuZCkgewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQp
OwogCiAgICAgICAgICAgICAgICAgICAgIC8vIFBsYW50IGEganVtcCB0byB0aGUgcmV0dXJuIGFk
ZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CkBAIC0zMzY4LDcgKzMyOTEsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdG8gYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgaWYgY2FwdHVyaW5nIG9yIGdy
ZWVkeS4KICAgICAgICAgICAgICAgICBpZiAoKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVN
b2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHx8IHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgY2FwdHVyaW5nLCBjbGVhciB0aGUgY2FwdHVyZSAod2Ugb25seSBuZWVkIHRvIHJlc2V0IHN0
YXJ0KS4KICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBp
bGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCkBAIC0zMzc4LDEy
ICszMzAxLDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlw
ZTo6R3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmxhZyBp
biB0aGUgc3RhY2tmcmFtZSBpbmRpY2F0aW5nIHdlIHJhbiB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJu
LgogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpi
ZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVtcCB0byBhZnRlciB0
aGUgcGFyZW50aGVzZXMsIHNraXBwaW5nIHRoZSBzdWJwYXR0ZXJuLgotICAgICAgICAgICAgICAg
ICAgICAgICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2t0cmFjayBmcm9tIGFmdGVyIHRoZSBwYXJl
bnRoZXNlcywgd2hlbiBza2lwcGluZyB0aGUgc3VicGF0dGVybiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHdpbGwganVtcCBiYWNrIHRvIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTMzOTQsMTMgKzMz
MTcsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGJhY2t0cmFjayBi
YWNrIGludG8gdGhlIHBhcmVudGhlc2VzLCBvciBpZiB3ZQogICAgICAgICAgICAgICAgICAgICAv
LyBhcmUgY3VycmVudGx5IGluIGEgc3RhdGUgd2hlcmUgd2UgaGFkIHNraXBwZWQgb3ZlciB0aGUg
c3VicGF0dGVybgogICAgICAgICAgICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB0aGUgZmxh
ZyB2YWx1ZSBvbiB0aGUgc3RhY2sgd2lsbCBiZSAtMSkuCiAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBlZCA9IGJyYW5jaDMyKEVxdWFsLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lkKikp
LCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaGFkU2tpcHBlZCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2Vz
T25jZTo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKC0xKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGb3IgR3JlZWR5IHBhcmVudGhlc2VzLCB3ZSBza2lwIGFmdGVyIGhhdmluZyBhbHJlYWR5
IHRyaWVkIGdvaW5nCkBAIC0zNDE0LDcgKzMzMzcsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaGluZyBw
YXRoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5VHlwZSA9
PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFlh
cnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwg
Jm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIG1f
YmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTM0MzUsNyArMzM1OCw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAv
LyBxdWFudGlmaWVkIHdpdGggYSBtaW5pbXVtIG9mIHplcm8pIGp1bXAgYmFjayB0byB0aGUgZm9y
d2FyZHMgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAvLyBwYXRoIGF0IHRoZSBlbmQuCiAgICAg
ICAgICAgICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1fbmV4dE9wXTsKLSAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksIHRoaXMp
OworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVuZE9wLm1fcmVl
bnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxF
bmQ6CkBAIC0zNDY1LDQwICszMzg4LDQwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwogCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0t
PnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCi0gICAgICAgICAgICAg
ICAgICAgIFJlZ2lzdGVySUQgY3VyclBhcmVuQ29udGV4dFJlZyA9IHJlZ1QwOwotICAgICAgICAg
ICAgICAgICAgICBSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IHJlZ1QxOworICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0
UmVnID0gbV9yZWdzLnJlZ1QwOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAg
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpLCBjdXJyUGFyZW5D
b250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJl
c3RvcmVQYXJlbkNvbnRleHQoY3VyclBhcmVuQ29udGV4dFJlZywgcmVnVDIsIHRlcm0tPnBhcmVu
dGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVBh
cmVuQ29udGV4dChjdXJyUGFyZW5Db250ZXh0UmVnLCBtX3JlZ3MucmVnVDIsIHRlcm0tPnBhcmVu
dGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIGZyZWVQYXJlbkNvbnRleHQoY3VyclBhcmVuQ29udGV4dFJlZywgbmV3UGFy
ZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG5ld1BhcmVu
Q29udGV4dFJlZywgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9IG1f
cmVncy5yZWdUMDsKICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5k
ZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAgICBKdW1wIHplcm9MZW5n
dGhNYXRjaCA9IGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRUZW1wb3JhcnkpOwogCi0gICAg
ICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRUZW1wb3JhcnkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShjb3VudFRlbXBvcmFyeSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5m
b1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkpOwogCi0gICAgICAgICAgICAgICAgICAg
IGp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
Q2xlYXIgdGhlIGZsYWcgaW4gdGhlIHN0YWNrZnJhbWUgaW5kaWNhdGluZyB3ZSBkaWRuJ3QgcnVu
IHRocm91Z2ggdGhlIHN1YnBhdHRlcm4uCi0gICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAobV9vcHNbb3AubV9uZXh0
T3BdLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG1fb3Bz
W29wLm1fbmV4dE9wXS5tX3JlZW50cnkpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIEdy
ZWVkeSwganVtcCB0byB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEEgYmFja3RyYWNrIGZyb20gYWZ0ZXIgdGhlIHBhcmVudGhlc2VzLCB3aGVuIHNr
aXBwaW5nIHRoZSBzdWJwYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBq
dW1wIGJhY2sgdG8gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQp
OwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpAQCAtMzUxMyw3ICszNDM2LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkgewotICAgICAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247
CiAKQEAgLTM1MjEsNyArMzQ0NCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hv
dWxkIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIHBhcmVudGhlc2VzLCBvciBpZiB3ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXJlIGN1cnJlbnRseSBpbiBhIHN0YXRlIHdoZXJlIHdlIGhh
ZCBza2lwcGVkIG92ZXIgdGhlIHN1YnBhdHRlcm4KICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IChpbiB3aGljaCBjYXNlIHRoZSBmbGFnIHZhbHVlIG9uIHRoZSBzdGFjayB3aWxsIGJlIC0xKS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBlZCA9IGJyYW5jaDMyKEVxdWFs
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lk
KikpLCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGhhZFNraXBwZWQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAgKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXM6OmJlZ2luSW5kZXgoKSkgKiBzaXplb2Yodm9pZCopKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigtMSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgR3Jl
ZWR5IHBhcmVudGhlc2VzLCB3ZSBza2lwIGFmdGVyIGhhdmluZyBhbHJlYWR5IHRyaWVkIGdvaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJuLCBzbyBp
ZiB3ZSBnZXQgaGVyZSB3ZSdyZSBkb25lLgpAQCAtMzUzNCwyNCArMzQ1NywyNCBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBtYXRjaGluZyBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm0t
PnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBiZWdpblRlbXBvcmFyeSA9IHJlZ1QwOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9
IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgYmVnaW5UZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9
IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9w
ID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgbG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXM6OmJlZ2luSW5kZXgoKSwgYmVnaW5UZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJhbmNoMzIoRXF1YWwsIGJlZ2luVGVtcG9yYXJ5LCBUcnVzdGVkSW1tMzIoLTEpKS5s
aW5rVG8oYmVnaW5PcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBiZWdpblRlbXBvcmFyeSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwg
Jm1faml0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3QgZXhjZWVkZWRNYXRj
aExpbWl0OworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGV4Y2VlZGVkTWF0Y2hMaW1pdDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0t
PnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50VGVtcG9yYXJ5
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgY291bnRUZW1wb3JhcnksIEltbTMyKHRlcm0tPnF1YW50
aXR5TWF4Q291bnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWVkZWRNYXRj
aExpbWl0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBjb3VudFRlbXBvcmFyeSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4
Q291bnQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgYmVnaW5UZW1wb3JhcnkpLmxpbmtUbyhiZWdp
bk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIG1fcmVncy5pbmRleCwgYmVnaW5UZW1wb3Jhcnkp
LmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZWVkZWRNYXRjaExpbWl0LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBleGNlZWRlZE1hdGNoTGltaXQubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3Vn
aCgpOwpAQCAtMzU3MywxNyArMzQ5NiwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gb2YgYSBwYXJlbnRoZXRpY2FsIGFzc2Vy
dGlvbiBpZiBlaXRoZXIgd2UgbmVlZCB0byBjb3JyZWN0CiAgICAgICAgICAgICAgICAgLy8gdGhl
IGlucHV0IGluZGV4LCBvciB0aGUgYXNzZXJ0aW9uIHdhcyBpbnZlcnRlZC4KICAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCB8fCB0ZXJtLT5pbnZlcnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAg
ICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZDMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIob3AubV9jaGVja0FkanVzdCks
IG1fcmVncy5pbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gSW4gYW4gaW52ZXJ0ZWQg
YXNzZXJ0aW9uIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHN1YnBhdHRlcm4KICAgICAgICAgICAgICAg
ICAgICAgLy8gaXMgdHJlYXRlZCBhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2ggLSBqdW1wIHRvIHRoZSBl
bmQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnBhdHRlcm4uIFdlIGFscmVhZHkg
aGF2ZSBhZGp1c3RlZCB0aGUgaW5wdXQgcG9zaXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8g
YmFjayB0byB0aGF0IGJlZm9yZSB0aGUgYXNzZXJ0aW9uLCB3aGljaCBpcyBjb3JyZWN0LgogICAg
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKGVuZE9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5qdW1wKGVuZE9wLm1fcmVlbnRyeSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTM2MDIsNyAr
MzUyNSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgICAgICAvLyB0aGlzIGJ1ZyB0b28gKHByZXN1bWFibHkgYmVjYXVzZSB0aGV5IHVzZSBZ
QVJSISkKIAogICAgICAgICAgICAgICAgIC8vIE5ldmVyIGJhY2t0cmFjayBpbnRvIGFuIGFzc2Vy
dGlvbjsgbGF0ZXIgZmFpbHVyZXMgYmFpbCB0byBiZWZvcmUgdGhlIGJlZ2luLgotICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG9wLm1f
anVtcHMsIHRoaXMpOworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJh
Y2t0cmFja3NUb0p1bXBMaXN0KG9wLm1fanVtcHMsICZtX2ppdCk7CiAKICAgICAgICAgICAgICAg
ICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CiAgICAgICAgICAgICAg
ICAgbV9jaGVja2VkT2Zmc2V0IC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OwpAQCAtMzYzNyw3ICsz
NTYwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICBZYXJyT3BDb2RlIGFsdGVybmF0aXZlTmV4dE9wQ29kZSA9IFlhcnJPcENvZGU6OlNpbXBsZU5l
c3RlZEFsdGVybmF0aXZlTmV4dDsKICAgICAgICAgWWFyck9wQ29kZSBhbHRlcm5hdGl2ZUVuZE9w
Q29kZSA9IFlhcnJPcENvZGU6OlNpbXBsZU5lc3RlZEFsdGVybmF0aXZlRW5kOwogCi0gICAgICAg
IGlmIChVTkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFz
b24gPSBKSVRGYWlsdXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3RlZFRvb0RlZXA7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM3NDgsNyArMzY3MSw3IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyBvbmNlLCBhbmQgd2lsbCBuZXZl
ciBiYWNrdHJhY2sgYmFjayBpbnRvIHRoZSBhc3NlcnRpb24uCiAgICAgdm9pZCBvcENvbXBpbGVQ
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uKFBhdHRlcm5UZXJtKiB0ZXJtKQogICAgIHsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNv
biA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhlc2lzTmVzdGVkVG9vRGVlcDsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzgzMyw3ICszNzU2LDcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIC8vIHRvIHJldHVybiB0aGUgZmFpbGlu
ZyByZXN1bHQuCiAgICAgdm9pZCBvcENvbXBpbGVCb2R5KFBhdHRlcm5EaXNqdW5jdGlvbiogZGlz
anVuY3Rpb24pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVj
dXJzZSgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkgewog
ICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6UGFyZW50aGVz
aXNOZXN0ZWRUb29EZWVwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODky
LDYgKzM4MTUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICBpZiAoY29sbGVjdEJveWVyTW9vcmVJbmZvKGRpc2p1bmN0aW9uLCBjdXJyZW50
QWx0ZXJuYXRpdmVJbmRleCwgYm1JbmZvLmdldCgpKSkgewogICAgICAgICAgICAgICAgIG1fb3Bz
Lmxhc3QoKS5tX2JtSW5mbyA9IGJtSW5mby5wdHIoKTsKICAgICAgICAgICAgICAgICBtX2JtSW5m
b3MuYXBwZW5kKFdURk1vdmUoYm1JbmZvKSk7CisgICAgICAgICAgICAgICAgbV91c2VzVDIgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQwMDgsOCArMzkzMiw5IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgIGNvbnN0IEJveWVy
TW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUqIGdldEJveWVyTW9vcmVCaXRtYXAoY29uc3QgQm95
ZXJNb29yZUJpdG1hcDo6TWFwJiBtYXApCiAgICAgewotICAgICAgICBpZiAoY29uc3QgYXV0byog
ZXhpc3RpbmdQb2ludGVyID0gbV9jb2RlQmxvY2sudHJ5UmV1c2VCb3llck1vb3JlQml0bWFwKG1h
cCkpCi0gICAgICAgICAgIHJldHVybiBleGlzdGluZ1BvaW50ZXI7CisgICAgICAgIGlmIChjb25z
dCBhdXRvKiBleGlzdGluZ1BvaW50ZXIgPSBtX2JveWVyTW9vcmVEYXRhLT50cnlSZXVzZUJveWVy
TW9vcmVCaXRtYXAobWFwKSkKKyAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1BvaW50ZXI7CisK
ICAgICAgICAgYXV0byBoZWFwTWFwID0gbWFrZVVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpN
YXA+KG1hcCk7CiAgICAgICAgIGNvbnN0IGF1dG8qIHBvaW50ZXIgPSBoZWFwTWFwLT5zdG9yYWdl
KCk7CiAgICAgICAgIG1fYm1NYXBzLmFwcGVuZChXVEZNb3ZlKGhlYXBNYXApKTsKQEAgLTQwMjQs
NjQgKzM5NDksNjQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
CiAgICAgICAgIEFTU0VSVChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKTsKIAotICAgICAgICBtX3Ry
eVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnkgPSBsYWJlbCgpOworICAgICAgICBtX3RyeVJlYWRV
bmljb2RlQ2hhcmFjdGVyRW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCi0gICAgICAgIHRhZ1JldHVy
bkFkZHJlc3MoKTsKKyAgICAgICAgbV9qaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgICAg
IHRyeVJlYWRVbmljb2RlQ2hhckltcGwocmVnVDApOworICAgICAgICB0cnlSZWFkVW5pY29kZUNo
YXJJbXBsKG1fcmVncy5yZWdUMCk7CiAKLSAgICAgICAgcmV0KCk7CisgICAgICAgIG1faml0LnJl
dCgpOwogI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUVudGVyKCkKICAgICB7CiAj
aWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OmVicCk7Ci0gICAgICAg
IG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICAgICAg
bV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVicCk7CiAKICAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAgICAgICAg
IHB1c2goWDg2UmVnaXN0ZXJzOjplYngpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZSZWdp
c3RlcnM6OmVieCk7CiAKICNpZiBPUyhXSU5ET1dTKQotICAgICAgICBwdXNoKFg4NlJlZ2lzdGVy
czo6ZWRpKTsKKyAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVkaSk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYg
KG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykgewogI2lmIE9TKFdJTkRPV1MpCi0gICAgICAg
ICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZXNpKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2
UmVnaXN0ZXJzOjplc2kpOwogI2VuZGlmCi0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6
cjEyKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjpyMTIpOwogICAgICAg
ICB9CiAjZW5kaWYKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewotICAg
ICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OnIxMyk7Ci0gICAgICAgICAgICBwdXNoKFg4NlJl
Z2lzdGVyczo6cjE0KTsKLSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTUpOworICAg
ICAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OnIxMyk7CisgICAgICAgICAgICBtX2pp
dC5wdXNoKFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVn
aXN0ZXJzOjpyMTUpOwogICAgICAgICB9CiAjaWYgT1MoV0lORE9XUykKICAgICAgICAgaWYgKG1f
Y29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNiAqIHNpemVvZih2b2lk
KikpLCBvdXRwdXQpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNiAqIHNpemVvZih2b2lkKikpLCBtX3JlZ3Mub3V0
cHV0KTsKICAgICAgICAgLy8gcmN4IGlzIHRoZSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgc3Bh
Y2UgZm9yIHJlc3VsdCBpbiB4NjQgV2luZG93cy4KLSAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6
OmVjeCk7CisgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjplY3gpOwogI2VuZGlmCiAj
ZWxpZiBDUFUoQVJNNjQpCiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAg
ICAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgICAgICAgICAgbV9qaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICAgICAgcHVzaFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigweDEwMDAwKSwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhkODAwKSwgbGVhZGluZ1N1cnJvZ2F0ZVRhZyk7Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGRjMDApLCB0cmFpbGluZ1N1cnJvZ2F0ZVRh
Zyk7CisgICAgICAgICAgICAgICAgbV9qaXQucHVzaFBhaXIoTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDEwMDAwKSwgbV9y
ZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApLCBtX3JlZ3MubGVhZGluZ1N1cnJvZ2F0
ZVRhZyk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMHhkYzAwKSwgbV9yZWdzLnRyYWlsaW5nU3Vycm9nYXRlVGFnKTsKICAgICAgICAgfQogI2Vs
aWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNCk7Ci0gICAg
ICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7Ci0gICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpy
Nik7Ci0gICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyOCk7Ci0gICAgICAgIHB1c2goQVJNUmVn
aXN0ZXJzOjpyMTApOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjQpOworICAg
ICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjUpOworICAgICAgICBtX2ppdC5wdXNoKEFS
TVJlZ2lzdGVyczo6cjYpOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjgpOwor
ICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjEwKTsKICNlbGlmIENQVShNSVBTKQog
ICAgICAgICAvLyBEbyBub3RoaW5nLgogI2VuZGlmCkBAIC00MDg5LDcwICs0MDE0LDc5IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgIHZvaWQgZ2VuZXJh
dGVSZXR1cm4oKQogICAgIHsKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5F
KQorICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5saW5lVGVz
dCkgeworICAgICAgICAgICAgbV9pbmxpbmVkTWF0Y2hlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBDUFUoWDg2XzY0
KQogI2lmIE9TKFdJTkRPV1MpCiAgICAgICAgIC8vIFN0b3JlIHRoZSByZXR1cm4gdmFsdWUgaW4g
dGhlIGFsbG9jYXRlZCBzcGFjZSBwb2ludGVkIGJ5IHJjeC4KLSAgICAgICAgcG9wKFg4NlJlZ2lz
dGVyczo6ZWN4KTsKLSAgICAgICAgc3RvcmU2NChyZXR1cm5SZWdpc3RlciwgQWRkcmVzcyhYODZS
ZWdpc3RlcnM6OmVjeCkpOwotICAgICAgICBzdG9yZTY0KHJldHVyblJlZ2lzdGVyMiwgQWRkcmVz
cyhYODZSZWdpc3RlcnM6OmVjeCwgc2l6ZW9mKHZvaWQqKSkpOwotICAgICAgICBtb3ZlKFg4NlJl
Z2lzdGVyczo6ZWN4LCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIG1faml0LnBvcChYODZSZWdp
c3RlcnM6OmVjeCk7CisgICAgICAgIHN0b3JlNjQobV9yZWdzLnJldHVyblJlZ2lzdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVjeCkpOworICAgICAgICBzdG9yZTY0
KG1fcmVncy5yZXR1cm5SZWdpc3RlcjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lz
dGVyczo6ZWN4LCBzaXplb2Yodm9pZCopKSk7CisgICAgICAgIG1faml0Lm1vdmUoWDg2UmVnaXN0
ZXJzOjplY3gsIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAjZW5kaWYKICAgICAgICAgaWYgKG1f
ZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIHBvcChYODZSZWdpc3RlcnM6OnIx
NSk7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpyMTQpOwotICAgICAgICAgICAgcG9w
KFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6
OnIxNSk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjpyMTQpOworICAgICAg
ICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjEzKTsKICAgICAgICAgfQogCiAjaWYgRU5B
QkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2NvbnRh
aW5zTmVzdGVkU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgIHBvcChYODZSZWdpc3RlcnM6OnIx
Mik7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjpyMTIpOwogI2lmIE9TKFdJ
TkRPV1MpCi0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplc2kpOworICAgICAgICAgICAg
bV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZXNpKTsKICNlbmRpZgogICAgICAgICB9CiAjZW5kaWYK
ICNpZiBPUyhXSU5ET1dTKQotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplZGkpOworICAgICAg
ICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjplZGkpOwogI2VuZGlmCiAKICAgICAgICAgaWYgKG1f
cGF0dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAgICAgICAgIHBvcChYODZSZWdp
c3RlcnM6OmVieCk7Ci0gICAgICAgIHBvcChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgICAgICAg
ICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYngpOworICAgICAgICBtX2ppdC5wb3AoWDg2UmVn
aXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQogICAgICAgICBpZiAobV9kZWNvZGVTdXJy
b2dhdGVQYWlycykgewogICAgICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0g
ICAgICAgICAgICAgICAgcG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wb3BQYWlyKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBv
aW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OmxpbmtSZWdpc3Rlcik7CiAgICAgICAgIH0K
ICNlbGlmIENQVShBUk1fVEhVTUIyKQotICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyMTApOwot
ICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyOCk7Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6
OnI2KTsKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwotICAgICAgICBwb3AoQVJNUmVn
aXN0ZXJzOjpyNCk7CisgICAgICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnIxMCk7CisgICAg
ICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnI4KTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJl
Z2lzdGVyczo6cjYpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CisgICAg
ICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnI0KTsKICNlbGlmIENQVShNSVBTKQogICAgICAg
ICAvLyBEbyBub3RoaW5nCiAjZW5kaWYKICNpZiBDUFUoQVJNNjRFKQogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgZmFySnVtcChUcnVzdGVkSW1tUHRyKHJl
dGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBPcGVyYXRpb25QdHJUYWc+KCZ2bUVu
dHJ5VG9ZYXJySklUQWZ0ZXIpKSwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgICAgIG1faml0
LmZhckp1bXAoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmV0YWdDb2RlUHRyPHZvaWQq
LCBDRnVuY3Rpb25QdHJUYWcsIE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlUb1lhcnJKSVRBZnRl
cikpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXQoKTsK
KyAgICAgICAgICAgIG1faml0LnJldCgpOwogI2Vsc2UKLSAgICAgICAgcmV0KCk7CisgICAgICAg
IG1faml0LnJldCgpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBsb2FkU3ViUGF0dGVybihS
ZWdpc3RlcklEIG91dHB1dEdQUiwgdW5zaWduZWQgc3VicGF0dGVybklkLCBSZWdpc3RlcklEIHN0
YXJ0SW5kZXhHUFIsIFJlZ2lzdGVySUQgZW5kSW5kZXhPckxlbkdQUikKKyAgICB2b2lkIGxvYWRT
dWJQYXR0ZXJuKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG91dHB1dEdQUiwgdW5zaWduZWQg
c3VicGF0dGVybklkLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzdGFydEluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbmRJbmRleE9yTGVuR1BSKQogICAgIHsKLSAgICAg
ICAgbG9hZFBhaXIzMihvdXRwdXRHUFIsIFRydXN0ZWRJbW0zMigoc3VicGF0dGVybklkIDw8IDEp
ICogc2l6ZW9mKGludCkpLCBzdGFydEluZGV4R1BSLCBlbmRJbmRleE9yTGVuR1BSKTsKKyAgICAg
ICAgbV9qaXQubG9hZFBhaXIzMihvdXRwdXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSwgc3RhcnRJbmRleEdQUiwgZW5k
SW5kZXhPckxlbkdQUik7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgWWFyckdlbmVyYXRvcihWTSog
dm0sIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFlhcnJDb2Rl
QmxvY2smIGNvZGVCbG9jaywgQ2hhclNpemUgY2hhclNpemUsIEpJVENvbXBpbGVNb2RlIGNvbXBp
bGVNb2RlKQotICAgICAgICA6IG1fdm0odm0pCisgICAgWWFyckdlbmVyYXRvcihNYWNyb0Fzc2Vt
YmxlciYgaml0LCBjb25zdCBWTSogdm0sIFlhcnJDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
WWFyckpJVFJlZ3MmIHJlZ3MsIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBjb25zdCBTdHJpbmcmIHBh
dHRlcm5TdHJpbmcsIENoYXJTaXplIGNoYXJTaXplLCBKSVRDb21waWxlTW9kZSBjb21waWxlTW9k
ZSkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV92bSh2bSkKKyAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9yZWdzKHJlZ3MpCiAgICAgICAgICwg
bV9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwgbV9wYXR0ZXJuU3RyaW5nKHBhdHRlcm5TdHJp
bmcpCi0gICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1fY2hhclNp
emUoY2hhclNpemUpCiAgICAgICAgICwgbV9jb21waWxlTW9kZShjb21waWxlTW9kZSkKICAgICAg
ICAgLCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXIx
NiAmJiBtX3BhdHRlcm4udW5pY29kZSgpKQpAQCAtNDE2MywxMSArNDA5Nyw0NyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9wYXJlbkNvbnRleHRTaXplcyhjb21waWxlTW9kZSA9PSBKSVRDb21waWxl
TW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zID8gbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMgOiAw
LCBtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCiAjZW5kaWYKICAgICB7CisgICAg
ICAgIG1fYm95ZXJNb29yZURhdGEgPSBkeW5hbWljX2Nhc3Q8WWFyckJveWVyTW95ZXJEYXRhKj4o
bV9jb2RlQmxvY2spOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZSgpCisgICAgWWFyckdlbmVy
YXRvcihNYWNyb0Fzc2VtYmxlciYgaml0LCBjb25zdCBWTSogdm0sIFlhcnJCb3llck1veWVyRGF0
YSogeWFyckJNRGF0YSwgY29uc3QgWWFyckpJVFJlZ3MmIHJlZ3MsIFlhcnJQYXR0ZXJuJiBwYXR0
ZXJuLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplIGNoYXJTaXplLCBKSVRD
b21waWxlTW9kZSBjb21waWxlTW9kZSkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwg
bV92bSh2bSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhudWxscHRyKQorICAgICAgICAsIG1fYm95
ZXJNb29yZURhdGEoeWFyckJNRGF0YSkKKyAgICAgICAgLCBtX3JlZ3MocmVncykKKyAgICAgICAg
LCBtX3BhdHRlcm4ocGF0dGVybikKKyAgICAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0
cmluZykKKyAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQorICAgICAgICAsIG1fY29tcGls
ZU1vZGUoY29tcGlsZU1vZGUpCisgICAgICAgICwgbV9kZWNvZGVTdXJyb2dhdGVQYWlycyhtX2No
YXJTaXplID09IENoYXJTaXplOjpDaGFyMTYgJiYgbV9wYXR0ZXJuLnVuaWNvZGUoKSkKKyAgICAg
ICAgLCBtX3VuaWNvZGVJZ25vcmVDYXNlKG1fcGF0dGVybi51bmljb2RlKCkgJiYgbV9wYXR0ZXJu
Lmlnbm9yZUNhc2UoKSkKKyAgICAgICAgLCBtX2Nhbm9uaWNhbE1vZGUobV9wYXR0ZXJuLnVuaWNv
ZGUoKSA/IENhbm9uaWNhbE1vZGU6OlVuaWNvZGUgOiBDYW5vbmljYWxNb2RlOjpVQ1MyKQorI2lm
IEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgICAgICAsIG1fY29u
dGFpbnNOZXN0ZWRTdWJwYXR0ZXJucyhmYWxzZSkKKyAgICAgICAgLCBtX3BhcmVuQ29udGV4dFNp
emVzKGNvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMgPyBt
X3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyA6IDAsIG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZy
YW1lU2l6ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKG1fcGF0dGVybi5tX2NvbnRhaW5z
QmFja3JlZmVyZW5jZXMpCisgICAgICAgICAgICBtX3VzZXNUMiA9IHRydWU7CisgICAgfQorCisg
ICAgYm9vbCBpc1NhZmVUb1JlY3Vyc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fY29t
cGlsYXRpb25UaHJlYWRTdGFja0NoZWNrZXIpCisgICAgICAgICAgICByZXR1cm4gbV9jb21waWxh
dGlvblRocmVhZFN0YWNrQ2hlY2tlci0+aXNTYWZlVG9SZWN1cnNlKCk7CisKKyAgICAgICAgcmV0
dXJuIG1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhY2tD
aGVja2VyKFN0YWNrQ2hlY2sqIHN0YWNrQ2hlY2tlcikKICAgICB7Ci0gICAgICAgIFlhcnJDb2Rl
QmxvY2smIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgICAgICBtX2NvbXBpbGF0aW9uVGhy
ZWFkU3RhY2tDaGVja2VyID0gc3RhY2tDaGVja2VyOworICAgIH0KKworICAgIHZvaWQgY29tcGls
ZShZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc3RhcnRPZk1haW5Db2RlOwogCiAjaWYgIUVOQUJMRShZQVJSX0pJVF9VTklDT0RF
X0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewpAQCAt
NDE5OCw3ICs0MTY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBt
YWtlVW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+KHRoaXMpOwogCiAgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJl
bCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShtX2ppdC5s
YWJlbCgpKTsKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQog
ICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKQpAQCAtNDIwNyw0MiArNDE3
Nyw0NiBAQCBwdWJsaWM6CiAKICAgICAgICAgZ2VuZXJhdGVFbnRlcigpOwogCi0gICAgICAgIEp1
bXAgaGFzSW5wdXQgPSBjaGVja0lucHV0KCk7CisgICAgICAgIHN0YXJ0T2ZNYWluQ29kZSA9IG1f
aml0LmxhYmVsKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFzSW5wdXQgPSBj
aGVja0lucHV0KCk7CiAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwotICAgICAgICBoYXNJ
bnB1dC5saW5rKHRoaXMpOworICAgICAgICBoYXNJbnB1dC5saW5rKCZtX2ppdCk7CiAKICAgICAg
ICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5
dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAgICAgIGlmIChjYWxs
RnJhbWVTaXplSW5CeXRlcykgewogICAgICAgICAgICAgLy8gQ2hlY2sgc3RhY2sgc2l6ZQotICAg
ICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtY2FsbEZyYW1lU2l6ZUluQnl0ZXMpLCBzdGFj
a1BvaW50ZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX3JlZ3MucmVnVDApOwogI2lmIENQVShYODZf
NjQpICYmIE9TKFdJTkRPV1MpCiAgICAgICAgICAgICAvLyBtYXRjaGluZ0NvbnRleHQgaXMgdGhl
IDV0aCBhcmd1bWVudCwgaXQgaXMgZm91bmQgb24gdGhlIHN0YWNrLgotICAgICAgICAgICAgUmVn
aXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBtYXRjaGluZ0NvbnRl
eHQpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hpbmdDb250
ZXh0ID0gbV9yZWdzLnJlZ1QxOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBtYXRj
aGluZ0NvbnRleHQpOwogI2VsaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShNSVBTKQogICAgICAg
ICAgICAgLy8gbWF0Y2hpbmdDb250ZXh0IGlzIHRoZSA1dGggYXJndW1lbnQsIGl0IGlzIGZvdW5k
IG9uIHRoZSBzdGFjay4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0g
cmVnVDE7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IDQgKiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5yZWdUMTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQqKSksIG1hdGNoaW5n
Q29udGV4dCk7CisjZWxzZQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
bWF0Y2hpbmdDb250ZXh0ID0gbV9yZWdzLm1hdGNoaW5nQ29udGV4dDsKICNlbmRpZgotICAgICAg
ICAgICAgSnVtcCBzdGFja09rID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhtYXRj
aGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdGFja09rID0gbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRP
ZlN0YWNrTGltaXQoKSksIG1fcmVncy5yZWdUMCk7CiAKICAgICAgICAgICAgIC8vIEV4Y2VlZGVk
IHN0YWNrIGxpbWl0LCBwdW50IHRvIHRoZSBpbnRlcnByZXRlci4KLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1JlZ0V4cFJlc3VsdDo6
SklUQ29kZUZhaWx1cmUpKSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KEpT
UmVnRXhwUmVzdWx0OjpKSVRDb2RlRmFpbHVyZSkpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBt
X3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKICAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CiAK
LSAgICAgICAgICAgIHN0YWNrT2subGluayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUocmVnVDAs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHN0YWNrT2subGluaygmbV9qaXQp
OworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVF9V
TklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykK
LSAgICAgICAgICAgIGdldEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KGlucHV0LCBsZW5ndGgs
IFRpbWVzVHdvKSwgZW5kT2ZTdHJpbmdBZGRyZXNzKTsKKyAgICAgICAgICAgIG1faml0LmdldEVm
ZmVjdGl2ZUFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIG1f
cmVncy5sZW5ndGgsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIG1fcmVncy5lbmRPZlN0cmlu
Z0FkZHJlc3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBS
RVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKG1hdGNoTGltaXQpLCByZW1haW5pbmdNYXRjaENvdW50
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
YXRjaExpbWl0KSwgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpOwogI2VuZGlmCiAKICAgICAg
ICAgLy8gSW5pdGlhbGl6ZSBzdWJwYXR0ZXJucycgc3RhcnRzLiBBbmQgaW5pdGlhbGl6ZSBtYXRj
aFN0YXJ0IGlmIGAhbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemVgLgpAQCAtNDI1MSwx
NCArNDIyNSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQg
PSAwOwogICAgICAgICAgICAgLy8gRmlyc3Qgc3VicGF0dGVybklkJ3Mgc3RhcnQgaXMgY29uZmln
dXJlZCB0byBgaW5kZXhgIGlmICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZS4KICAg
ICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKLSAgICAg
ICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICBzZXRNYXRj
aFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgKytzdWJwYXR0ZXJuSWQ7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKDsgc3VicGF0dGVybklkIDwgbV9wYXR0ZXJu
Lm1fbnVtU3VicGF0dGVybnMgKyAxOyArK3N1YnBhdHRlcm5JZCkKLSAgICAgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybklkIDw8
IDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3Jl
Z3Mub3V0cHV0LCAoc3VicGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNp
emUpCi0gICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUo
WUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKQEAgLTQyNzIsNDUgKzQyNDYsNjMgQEAg
cHVibGljOgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUlu
aXRpYWxTdGFydFZhbHVlKQotICAgICAgICAgICAgbW92ZShpbmRleCwgaW5pdGlhbFN0YXJ0KTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtX3JlZ3MuaW5pdGlhbFN0YXJ0
KTsKIAogICAgICAgICBnZW5lcmF0ZSgpOwogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0g
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZHZW5lcmF0ZShsYWJlbCgpKTsKKyAg
ICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkdlbmVyYXRlKG1faml0LmxhYmVsKCkp
OwogICAgICAgICBiYWNrdHJhY2soKTsKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3RyYWNrKGxhYmVsKCkpOworICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3RyYWNrKG1faml0LmxhYmVsKCkp
OworCisgICAgICAgIHB0cmRpZmZfdCBjb2RlU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJl
bmNlQmV0d2VlbihzdGFydE9mTWFpbkNvZGUsIG1faml0LmxhYmVsKCkpOworICAgICAgICBib29s
IGNhbklubGluZSA9IG1fY29tcGlsZU1vZGUgIT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJw
YXR0ZXJucworICAgICAgICAgICAgJiYgIW1fcGF0dGVybi5nbG9iYWwoKSAmJiAhbV9wYXR0ZXJu
LnN0aWNreSgpICYmICFtX3BhdHRlcm4udW5pY29kZSgpCisjaWYgRU5BQkxFKFlBUlJfSklUX0FM
TF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgICAgICAgICAmJiAhbV9jb250YWluc05lc3RlZFN1
YnBhdHRlcm5zCisjZW5kaWYKKyAgICAgICAgICAgICYmICFtX3BhdHRlcm4ubV9jb250YWluc0Jh
Y2tyZWZlcmVuY2VzOwogCiAgICAgICAgIGdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJI
ZWxwZXIoKTsKIAogICAgICAgICBnZW5lcmF0ZUpJVEZhaWxSZXR1cm4oKTsKIAogICAgICAgICBp
ZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZD
b2RlKGxhYmVsKCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZSht
X2ppdC5sYWJlbCgpKTsKIAotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJF
R0VYUF9DT0RFX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpZYXJySklULCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwotICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7
Ci0gICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbihKSVRG
YWlsdXJlUmVhc29uOjpFeGVjdXRhYmxlTWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUpOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGJhY2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFj
a2luZ1N0YXRlLmJhY2t0cmFja1JlY29yZHMoKTsKKyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNv
cmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6
OmxpbmtCYWNrdHJhY2tSZWNvcmRzKGxpbmtCdWZmZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJDYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKyAgICAg
ICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5pY29k
ZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90cnlS
ZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKIAotICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwg
OiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMpCi0gICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8gY2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscykK
KyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2Rl
Q2hhcmFjdGVySGVscGVyKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKKyAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKG1faml0LCBSRUdFWFBfQ09ERV9JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6WWFyckpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLnNl
dEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJsZU1l
bW9yeUFsbG9jYXRpb25GYWlsdXJlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
CiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5kdW1wKGxpbmtCdWZmZXIpOwogCiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENv
bXBpbGVNb2RlOjpNYXRjaE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENo
YXJTaXplOjpDaGFyOCkKKyAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpD
aGFyOCkgewogICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZU1hdGNoT25seShG
SU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZywg
Ik1hdGNoLW9ubHkgOC1iaXQgcmVndWxhciBleHByZXNzaW9uIiksIFdURk1vdmUobV9ibU1hcHMp
KTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdElu
bGluZVN0YXRzKGNvZGVTaXplLCBjYWxsRnJhbWVTaXplSW5CeXRlcywgY2FuSW5saW5lLCBtX3Vz
ZXNUMik7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvZGVCbG9jay5z
ZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlciwgWWFy
ck1hdGNoT25seTE2Qml0UHRyVGFnLCAiTWF0Y2gtb25seSAxNi1iaXQgcmVndWxhciBleHByZXNz
aW9uIiksIFdURk1vdmUobV9ibU1hcHMpKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0
MTZCaXRJbmxpbmVTdGF0cyhjb2RlU2l6ZSwgY2FsbEZyYW1lU2l6ZUluQnl0ZXMsIGNhbklubGlu
ZSwgbV91c2VzVDIpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQogICAgICAgICAgICAgICAgIGNv
ZGVCbG9jay5zZXQ4Qml0Q29kZShGSU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyLCBZYXJy
OEJpdFB0clRhZywgIjgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCBXVEZNb3ZlKG1fYm1NYXBz
KSk7CkBAIC00MzIxLDYgKzQzMTMsMTAyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNvZGVCbG9j
ay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKCptX2ZhaWx1cmVSZWFzb24pOwogICAgIH0K
IAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgdm9pZCBjb21w
aWxlSW5saW5lKFlhcnJCb3llck1veWVyRGF0YSYgYm95ZXJNb29yZURhdGEpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9wYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyk7
CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIGJlZm9yZSBnZW5lcmF0aW5nIGNvZGUg
c2luY2Ugd2Ugc2V0IGZsYWdzIGJhc2VkIG9uIGNvbXBpbGF0aW9uIHRoYXQKKyAgICAgICAgLy8g
YXJlIHVzZWQgZHVyaW5nIGdlbmVyYXRpb24uCisgICAgICAgIG9wQ29tcGlsZUJvZHkobV9wYXR0
ZXJuLm1fYm9keSk7CisKKyNpZm5kZWYgSklUX1VOSUNPREVfRVhQUkVTU0lPTlMKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpOworI2VuZGlmCisKKyNpZiBF
TkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucyk7CisjZW5kaWYKKworICAgICAgICBB
U1NFUlQoIW1fZmFpbHVyZVJlYXNvbik7CisgICAgICAgIAorICAgICAgICBpZiAobV91c2VzVDIp
CisgICAgICAgICAgICBBU1NFUlQobV9yZWdzLnJlZ1QyICE9IE1hY3JvQXNzZW1ibGVyOjpJbnZh
bGlkR1BSUmVnKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCkpKQorICAgICAgICAgICAg
bV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+KHRoaXMpOworCisg
ICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRTdGFydE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBoYXNJbnB1dCA9IGNoZWNrSW5wdXQoKTsKKyAgICAgICAgZ2VuZXJhdGVGYWlsUmV0dXJu
KCk7CisgICAgICAgIGhhc0lucHV0LmxpbmsoJm1faml0KTsKKworICAgICAgICB1bnNpZ25lZCBj
YWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJu
Lm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKKyAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJbkJ5
dGVzKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgc3BhY2Ugb24gc3RhY2sgZm9yIG1hdGNoaW5n
IGNvbnRleHQgZGF0YS4KKyAgICAgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgfQorCisjaWZkZWYgSklUX1VOSUNPREVfRVhQUkVTU0lPTlMKKyAgICAgICAgaWYg
KG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCisgICAgICAgICAgICBtX2ppdC5nZXRFZmZlY3RpdmVB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtX3JlZ3MubGVu
Z3RoLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCBtX3JlZ3MuZW5kT2ZTdHJpbmdBZGRyZXNz
KTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMp
CisgICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpCisgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF0Y2hMaW1pdCksIG1fcmVn
cy5yZW1haW5pbmdNYXRjaENvdW50KTsKKyNlbmRpZgorCisgICAgICAgIGlmIChtX2NvbXBpbGVN
b2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDE7
ICsraSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoaSA8
PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcGF0dGVy
bi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQorICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3Jl
Z3MuaW5kZXgpOworCisgICAgICAgIGlmIChtX3BhdHRlcm4ubV9zYXZlSW5pdGlhbFN0YXJ0VmFs
dWUpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwgbV9yZWdzLmluaXRpYWxT
dGFydCk7CisKKyAgICAgICAgZ2VuZXJhdGUoKTsKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVy
KQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJhdGUobV9qaXQubGFi
ZWwoKSk7CisgICAgICAgIGJhY2t0cmFjaygpOworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIp
CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJhY2sobV9qaXQubGFi
ZWwoKSk7CisKKyAgICAgICAgZ2VuZXJhdGVUcnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcigp
OworCisgICAgICAgIGdlbmVyYXRlSklURmFpbFJldHVybigpOworCisgICAgICAgIGlmIChtX2Rp
c2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobV9q
aXQubGFiZWwoKSk7CisKKyAgICAgICAgbV9pbmxpbmVkRmFpbGVkTWF0Y2gubGluaygmbV9qaXQp
OworICAgICAgICBtX2lubGluZWRNYXRjaGVkLmxpbmsoJm1faml0KTsKKworICAgICAgICBhdXRv
IGJhY2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFja2luZ1N0YXRlLmJhY2t0cmFja1JlY29yZHMo
KTsKKyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNvcmRzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6OmxpbmtCYWNrdHJhY2tSZWNvcmRzKGxpbmtC
dWZmZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFk
VW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4o
bV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKworICAgICAgICAgICAgICAgIGZvciAo
YXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzKQorICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxw
ZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBib3llck1vb3JlRGF0
YS5zYXZlTWFwcyhXVEZNb3ZlKG1fYm1NYXBzKSk7CisgICAgfQorI2VuZGlmCisKICAgICBjb25z
dCBjaGFyKiB2YXJpYW50KCkgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2Rl
ID09IEpJVENvbXBpbGVNb2RlOjpNYXRjaE9ubHkpIHsKQEAgLTQ1MjYsMTIgKzQ2MTQsMTYgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWTSogbV92bTsKKyAgICBNYWNyb0Fzc2Vt
YmxlciYgbV9qaXQ7CisgICAgY29uc3QgVk0qIG1fdm07CisgICAgWWFyckNvZGVCbG9jayogbV9j
b2RlQmxvY2s7CisgICAgWWFyckJveWVyTW95ZXJEYXRhKiBtX2JveWVyTW9vcmVEYXRhOworICAg
IGNvbnN0IFlhcnJKSVRSZWdzJiBtX3JlZ3M7CiAKKyAgICBTdGFja0NoZWNrKiBtX2NvbXBpbGF0
aW9uVGhyZWFkU3RhY2tDaGVja2VyIHsgbnVsbHB0ciB9OwogICAgIFlhcnJQYXR0ZXJuJiBtX3Bh
dHRlcm47Ci0gICAgU3RyaW5nJiBtX3BhdHRlcm5TdHJpbmc7CisgICAgY29uc3QgU3RyaW5nJiBt
X3BhdHRlcm5TdHJpbmc7CiAKLSAgICBZYXJyQ29kZUJsb2NrJiBtX2NvZGVCbG9jazsKICAgICBD
aGFyU2l6ZSBtX2NoYXJTaXplOwogICAgIEpJVENvbXBpbGVNb2RlIG1fY29tcGlsZU1vZGU7CiAK
QEAgLTQ1NDEsMTUgKzQ2MzMsMTkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kZWNvZGVTdXJy
b2dhdGVQYWlyczsKICAgICBib29sIG1fdW5pY29kZUlnbm9yZUNhc2U7CisgICAgYm9vbCBtX3Vz
ZXNUMjsKICAgICBDYW5vbmljYWxNb2RlIG1fY2Fub25pY2FsTW9kZTsKICNpZiBFTkFCTEUoWUFS
Ul9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICBib29sIG1fY29udGFpbnNOZXN0ZWRT
dWJwYXR0ZXJuczsKICAgICBQYXJlbkNvbnRleHRTaXplcyBtX3BhcmVuQ29udGV4dFNpemVzOwog
I2VuZGlmCi0gICAgSnVtcExpc3QgbV9hYm9ydEV4ZWN1dGlvbjsKLSAgICBKdW1wTGlzdCBtX2hp
dE1hdGNoTGltaXQ7Ci0gICAgVmVjdG9yPENhbGw+IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJD
YWxsczsKLSAgICBMYWJlbCBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fYWJvcnRFeGVjdXRpb247CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IG1faGl0TWF0Y2hMaW1pdDsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6
OkNhbGw+IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxsczsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5OworCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG1faW5saW5lZE1hdGNoZWQ7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IG1faW5saW5lZEZhaWxlZE1hdGNoOwogCiAgICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVz
c2lvbiBleHByZXNzZWQgYXMgYSBsaW5lYXIgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy4KICAgICBW
ZWN0b3I8WWFyck9wLCAxMjg+IG1fb3BzOwpAQCAtNDYwNiw3ICs0NzAyLDEzIEBAIHN0YXRpYyB2
b2lkIGR1bXBDb21waWxlRmFpbHVyZShKSVRGYWlsdXIKIAogdm9pZCBqaXRDb21waWxlKFlhcnJQ
YXR0ZXJuJiBwYXR0ZXJuLCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplIGNoYXJTaXpl
LCBWTSogdm0sIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jaywgSklUQ29tcGlsZU1vZGUgbW9kZSkK
IHsKLSAgICBZYXJyR2VuZXJhdG9yKHZtLCBwYXR0ZXJuLCBwYXR0ZXJuU3RyaW5nLCBjb2RlQmxv
Y2ssIGNoYXJTaXplLCBtb2RlKS5jb21waWxlKCk7CisgICAgTWFjcm9Bc3NlbWJsZXIgbWFzbTsK
KworICAgIEFTU0VSVChtb2RlID09IEpJVENvbXBpbGVNb2RlOjpNYXRjaE9ubHkgfHwgbW9kZSA9
PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKTsKKworICAgIFlhcnJKSVREZWZh
dWx0UmVnaXN0ZXJzIGppdFJlZ2lzdGVyczsKKyAgICBZYXJyR2VuZXJhdG9yPFlhcnJKSVREZWZh
dWx0UmVnaXN0ZXJzPihtYXNtLCB2bSwgJmNvZGVCbG9jaywgaml0UmVnaXN0ZXJzLCBwYXR0ZXJu
LCBwYXR0ZXJuU3RyaW5nLCBjaGFyU2l6ZSwgbW9kZSkuY29tcGlsZShjb2RlQmxvY2spOworCiAg
ICAgaWYgKGF1dG8gZmFpbHVyZVJlYXNvbiA9IGNvZGVCbG9jay5mYWlsdXJlUmVhc29uKCkpIHsK
ICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBDb21waWxlZFJlZ0V4cFBhdHRlcm5z
KCkpKSB7CiAgICAgICAgICAgICBwYXR0ZXJuLmR1bXBQYXR0ZXJuU3RyaW5nKFdURjo6ZGF0YUZp
bGUoKSwgcGF0dGVyblN0cmluZyk7CkBAIC00NjE2LDYgKzQ3MTgsMTggQEAgdm9pZCBqaXRDb21w
aWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBTdAogICAgIH0KIH0KIAorI2lmIEVOQUJMRShZQVJS
X0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCit2b2lkIGppdENvbXBpbGVJbmxpbmVkVGVzdChTdGFj
a0NoZWNrKiBtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLCBjb25zdCBTdHJpbmcmIHBh
dHRlcm5TdHJpbmcsIE9wdGlvblNldDxZYXJyOjpGbGFncz4gZmxhZ3MsIENoYXJTaXplIGNoYXJT
aXplLCBjb25zdCBWTSogdm0sIFlhcnJCb3llck1veWVyRGF0YSYgYm95ZXJNb29yZURhdGEsIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIFlhcnJKSVRSZWdpc3RlcnMmIGppdFJlZ2lzdGVycykKK3sKKyAg
ICBZYXJyOjpFcnJvckNvZGUgZXJyb3JDb2RlOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRl
cm4ocGF0dGVyblN0cmluZywgZmxhZ3MsIGVycm9yQ29kZSk7CisKKyAgICBZYXJyR2VuZXJhdG9y
PFlhcnJKSVRSZWdpc3RlcnM+IHlhcnJHZW5lcmF0b3Ioaml0LCB2bSwgJmJveWVyTW9vcmVEYXRh
LCBqaXRSZWdpc3RlcnMsIHBhdHRlcm4sIHBhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCBKSVRDb21w
aWxlTW9kZTo6SW5saW5lVGVzdCk7CisgICAgeWFyckdlbmVyYXRvci5zZXRTdGFja0NoZWNrZXIo
bV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlcik7CisgICAgeWFyckdlbmVyYXRvci5jb21w
aWxlSW5saW5lKGJveWVyTW9vcmVEYXRhKTsKK30KKyNlbmRpZgorCiB9fQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDI4MzA4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIllhcnJQYXR0ZXJuLmgiCiAjaW5jbHVkZSA8d3RmL0Jp
dG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TdGFj
a0NoZWNrLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjZGVmaW5lIFlBUlJfQ0FM
TApAQCAtNDMsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVk07CiBjbGFzcyBF
eGVjdXRhYmxlUG9vbDsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyOwogCiBuYW1lc3BhY2UgWWFyciB7
CiAKQEAgLTE5OSw3ICsyMDEsNzIgQEAgZXh0ZXJuICJDIiBFbmNvZGVkTWF0Y2hSZXN1bHQgdm1F
bnRyeVRvWQogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb1lhcnJKSVRBZnRlcih2b2lkKTsKICNl
bmRpZgogCi1jbGFzcyBZYXJyQ29kZUJsb2NrIHsKK2NsYXNzIFlhcnJCb3llck1veWVyRGF0YSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
WWFyckJveWVyTW95ZXJEYXRhKTsKKworcHVibGljOgorICAgIFlhcnJCb3llck1veWVyRGF0YSgp
ID0gZGVmYXVsdDsKKworICAgIHZvaWQgc2F2ZU1hcHMoVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1v
b3JlQml0bWFwOjpNYXA+PiBtYXBzKQorICAgIHsKKyAgICAgICAgbV9tYXBzLnJlc2VydmVDYXBh
Y2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIG1f
bWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgIH0KKworICAg
IHZvaWQgY2xlYXJNYXBzKCkKKyAgICB7CisgICAgICAgIG1fbWFwcy5jbGVhcigpOworICAgIH0K
KworICAgIGNvbnN0IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUqIHRyeVJldXNlQm95
ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1hcCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGZvciAoYXV0byYgc3RvcmVkIDogbV9tYXBzKSB7CisgICAgICAgICAgICBp
ZiAoc3RvcmVkLmdldCgpID09IG1hcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVkLT5z
dG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCitw
cml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbV9t
YXBzOworfTsKKworY2xhc3MgWWFyckNvZGVCbG9jayA6IHB1YmxpYyBZYXJyQm95ZXJNb3llckRh
dGEgeworICAgIHN0cnVjdCBJbmxpbmVTdGF0cyB7CisgICAgICAgIElubGluZVN0YXRzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluc25Db3VudCwgdW5zaWduZWQgc3RhY2tTaXplLCBib29sIGNhbklubGlu
ZSwgYm9vbCBuZWVkc1RlbXAyKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luc25Db3VudD0g
aW5zbkNvdW50OworICAgICAgICAgICAgbV9zdGFja1NpemUgPSBzdGFja1NpemU7CisgICAgICAg
ICAgICBtX2NhbklubGluZSA9IGNhbklubGluZTsKKyAgICAgICAgICAgIG1fbmVlZHNUZW1wMiA9
IG5lZWRzVGVtcDI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9pbnNuQ291bnQgPSAwOworICAgICAgICAgICAgbV9zdGFja1NpemUg
PSAwOworICAgICAgICAgICAgbV9jYW5JbmxpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fbmVl
ZHNUZW1wMiA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgY29kZVNpemUo
KSBjb25zdCB7IHJldHVybiBtX2luc25Db3VudDsgfQorICAgICAgICB1bnNpZ25lZCBzdGFja1Np
emUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorICAgICAgICBib29sIGNhbklubGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuSW5saW5lOyB9CisgICAgICAgIGJvb2wgbmVlZHNUZW1w
MigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNUZW1wMjsgfQorCisgICAgICAgIHVuc2lnbmVkIG1f
aW5zbkNvdW50OworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZSA6IDMwOworICAgICAgICBi
b29sIG1fY2FuSW5saW5lIDogMTsKKyAgICAgICAgYm9vbCBtX25lZWRzVGVtcDIgOiAxOworICAg
IH07CisKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShZYXJyQ29kZUJsb2NrKTsKIApAQCAtMjE5LDE2ICsyODYsMTIgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4Qml0UHRyVGFnPiBy
ZWYsIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbWFwcykKICAgICB7
CiAgICAgICAgIG1fcmVmOCA9IHJlZjsKLSAgICAgICAgbV9tYXBzLnJlc2VydmVDYXBhY2l0eSht
X21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIG1fbWFwcy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgICAgICBzYXZlTWFwcyhX
VEZNb3ZlKG1hcHMpKTsKICAgICB9CiAgICAgdm9pZCBzZXQxNkJpdENvZGUoTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPFlhcnIxNkJpdFB0clRhZz4gcmVmLCBWZWN0b3I8VW5pcXVlUmVmPEJveWVyTW9v
cmVCaXRtYXA6Ok1hcD4+IG1hcHMpCiAgICAgewogICAgICAgICBtX3JlZjE2ID0gcmVmOwotICAg
ICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBtYXBzLnNpemUoKSk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHMuc2l6ZSgpOyAr
K2luZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHNb
aW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwogICAgIH0KIAogICAg
IGJvb2wgaGFzOEJpdENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNoT25seTguc2l6ZSgp
OyB9CkBAIC0yMzYsMTYgKzI5OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXQ4Qml0Q29kZU1h
dGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seThCaXRQdHJUYWc+IG1h
dGNoT25seSwgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpNYXA+PiBtYXBzKQog
ICAgIHsKICAgICAgICAgbV9tYXRjaE9ubHk4ID0gbWF0Y2hPbmx5OwotICAgICAgICBtX21hcHMu
cmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBtYXBzLnNpemUoKSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHMuc2l6ZSgpOyArK2luZGV4KQotICAg
ICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHNbaW5kZXhdKSk7Cisg
ICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwogICAgIH0KICAgICB2b2lkIHNldDE2Qml0
Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seTE2Qml0UHRy
VGFnPiBtYXRjaE9ubHksIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4g
bWFwcykKICAgICB7CiAgICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBtYXRjaE9ubHk7Ci0gICAgICAg
IG1fbWFwcy5yZXNlcnZlQ2FwYWNpdHkobV9tYXBzLnNpemUoKSArIG1hcHMuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcy5zaXplKCk7ICsraW5k
ZXgpCi0gICAgICAgICAgICBtX21hcHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFwc1tpbmRl
eF0pKTsKKyAgICAgICAgc2F2ZU1hcHMoV1RGTW92ZShtYXBzKSk7CiAgICAgfQogCiAgICAgYm9v
bCB1c2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IHJldHVybiBtX3VzZXNQYXR0ZXJuQ29udGV4
dEJ1ZmZlcjsgfQpAQCAtMjUzLDYgKzMxMiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2Vz
UGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyID0gdHJ1
ZTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIHNldDhCaXRJbmxpbmVTdGF0cyh1bnNpZ25lZCBpbnNu
Q291bnQsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgYm9vbCBjYW5JbmxpbmUsIGJvb2wgbmVlZHNUMikK
KyAgICB7CisgICAgICAgIG1fbWF0Y2hPbmx5OFN0YXRzLnNldChpbnNuQ291bnQsIHN0YWNrU2l6
ZSwgY2FuSW5saW5lLCBuZWVkc1QyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDE2Qml0SW5saW5l
U3RhdHModW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25lZCBzdGFja1NpemUsIGJvb2wgY2FuSW5s
aW5lLCBib29sIG5lZWRzVDIpCisgICAgeworICAgICAgICBtX21hdGNoT25seTE2U3RhdHMuc2V0
KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUsIG5lZWRzVDIpOworICAgIH0KKworICAg
IElubGluZVN0YXRzJiBnZXQ4Qml0SW5saW5lU3RhdHMoKSB7IHJldHVybiBtX21hdGNoT25seThT
dGF0czsgfQorICAgIElubGluZVN0YXRzJiBnZXQxNkJpdElubGluZVN0YXRzKCkgeyByZXR1cm4g
IG1fbWF0Y2hPbmx5MTZTdGF0czsgfQorCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBM
Q2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0
LCBNYXRjaGluZ0NvbnRleHRIb2xkZXImIG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKQEAgLTMzOCwxNyArNDEwLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9yZWYxNiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQdHJUYWc+KCk7
CiAgICAgICAgIG1fbWF0Y2hPbmx5OCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hP
bmx5OEJpdFB0clRhZz4oKTsKICAgICAgICAgbV9tYXRjaE9ubHkxNiA9IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KCk7Ci0gICAgICAgIG1fbWFwcy5jbGVh
cigpOworICAgICAgICBtX21hdGNoT25seThTdGF0cy5jbGVhcigpOworICAgICAgICBtX21hdGNo
T25seTE2U3RhdHMuY2xlYXIoKTsKICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gc3RkOjpudWxs
b3B0OwotICAgIH0KLQotICAgIGNvbnN0IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUq
IHRyeVJldXNlQm95ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1h
cCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RvcmVkIDogbV9tYXBzKSB7Ci0g
ICAgICAgICAgICBpZiAoc3RvcmVkLmdldCgpID09IG1hcCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gc3RvcmVkLT5zdG9yYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIGNsZWFyTWFwcygpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTM1NiwxNyArNDIx
LDI4IEBAIHByaXZhdGU6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJpdFB0clRh
Zz4gbV9yZWYxNjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seThCaXRQ
dHJUYWc+IG1fbWF0Y2hPbmx5ODsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNo
T25seTE2Qml0UHRyVGFnPiBtX21hdGNoT25seTE2OwotICAgIFZlY3RvcjxVbmlxdWVSZWY8Qm95
ZXJNb29yZUJpdG1hcDo6TWFwPj4gbV9tYXBzOworICAgIElubGluZVN0YXRzIG1fbWF0Y2hPbmx5
OFN0YXRzOworICAgIElubGluZVN0YXRzIG1fbWF0Y2hPbmx5MTZTdGF0czsKKwogICAgIGJvb2wg
bV91c2VzUGF0dGVybkNvbnRleHRCdWZmZXIgeyBmYWxzZSB9OwogICAgIHN0ZDo6b3B0aW9uYWw8
SklURmFpbHVyZVJlYXNvbj4gbV9mYWlsdXJlUmVhc29uOwogfTsKIAogZW51bSBjbGFzcyBKSVRD
b21waWxlTW9kZSA6IHVpbnQ4X3QgewogICAgIE1hdGNoT25seSwKLSAgICBJbmNsdWRlU3VicGF0
dGVybnMKKyAgICBJbmNsdWRlU3VicGF0dGVybnMsCisgICAgSW5saW5lVGVzdAogfTsKIHZvaWQg
aml0Q29tcGlsZShZYXJyUGF0dGVybiYsIFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hhclNpemUs
IFZNKiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBKSVRDb21waWxlTW9kZSk7CiAKKyNpZiBF
TkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorCisKK2NsYXNzIFlhcnJKSVRSZWdp
c3RlcnM7CisKK3ZvaWQgaml0Q29tcGlsZUlubGluZWRUZXN0KFN0YWNrQ2hlY2sqLCBjb25zdCBT
dHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+LCBDaGFyU2l6ZSwgY29uc3QgVk0qLCBZYXJy
Qm95ZXJNb3llckRhdGEmLCBNYWNyb0Fzc2VtYmxlciYsIFlhcnJKSVRSZWdpc3RlcnMmKTsKKyNl
bmRpZgorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3RlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklUUmVnaXN0ZXJzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lzdGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFlBUlJfSklUKQor
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2RlZmluZSBZQVJSX0NBTEwKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBZYXJyIHsKKworc3RydWN0IFlhcnJKSVREZWZhdWx0
UmVnaXN0ZXJzIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CitwdWJsaWM6CisjaWYgQ1BVKEFS
TV9USFVNQjIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNUmVn
aXN0ZXJzOjpyMDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBBUk1S
ZWdpc3RlcnM6OnIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBB
Uk1SZWdpc3RlcnM6OnIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQg
PSBBUk1SZWdpc3RlcnM6OnIzOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJl
Z1QwID0gQVJNUmVnaXN0ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI1OworICAgIC8vIHI2IGlzIHJlc2VydmVkIGZvciBNYWNy
b0Fzc2VtYmxlckFSTXY3LAorICAgIC8vIHI3IGlzIGZwLgorICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCByZWdUMiA9IEFSTVJlZ2lzdGVyczo6cjg7CisgICAgLy8gcjkgaXMgc2IgaW4g
RUFCSS4KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJN
UmVnaXN0ZXJzOjpyMTA7IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBhIHNwZWNpYWwgcmVn
aXN0ZXIuCisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIg
PSBBUk1SZWdpc3RlcnM6OnIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1
cm5SZWdpc3RlcjIgPSBBUk1SZWdpc3RlcnM6OnIxOworCisjZWxpZiBDUFUoQVJNNjQpCisgICAg
Ly8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlu
cHV0ID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBpbmRleCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgbGVuZ3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVn
aXN0ZXJzOjp4NDsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0
aGUgcHJvbG9ndWUuCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6
ZVJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRp
YWxpemF0aW9uLgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3OworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3VudCA9IEFSTTY0UmVn
aXN0ZXJzOjp4OTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlu
cHV0QW5kVHJhaWwgPSBBUk02NFJlZ2lzdGVyczo6eDEwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCB1bmljb2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdpc3RlcnM6OngxMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2Ug
PSBBUk02NFJlZ2lzdGVyczo6eDEyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBs
ZWFkaW5nU3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6
eDE0OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3Mg
PSBBUk02NFJlZ2lzdGVyczo6eDE1OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IHJldHVyblJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3Rl
ZEltbTMyKDB4ZmZmZmZjMDApOworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKKworICAg
IC8vIHQwIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCisgICAgLy8gdDEgaXMg
cmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KKyAgICBzdGF0aWMgY29uc3RleHByIFJl
Z2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp0MjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVyczo6dDU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0
ZXJzOjp2MDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIy
ID0gTUlQU1JlZ2lzdGVyczo6djE7CisKKyNlbGlmIENQVShYODZfNjQpCisjaWYgIU9TKFdJTkRP
V1MpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplZGk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJl
Z2lzdGVyczo6cjg7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4g
dGhlIHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFNp
emVSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlh
bGl6YXRpb24uCisjZWxzZQorICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgZG9lc24ndCBmaXQg
aW4gNjRiaXRzLCBpdHMgZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3ggYW5kIHRoZSBwYXJh
bWV0ZXJzIGFyZSBzaGlmdGVkLgorICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS83NTcyenR6NC5hc3B4CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWF0Y2hS
ZXN1bHQpID4gc2l6ZW9mKHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90IGZpdCBpbiA2NGJp
dHMiKTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3Rl
cnM6OmVkeDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdp
c3RlcnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODZS
ZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBY
ODZSZWdpc3RlcnM6OnIxMDsKKyNlbmRpZgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVheDsK
KyNpZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEg
PSBYODZSZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdU
MiA9IFg4NlJlZ2lzdGVyczo6cjEwOworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJl
Z2lzdGVySUQgcmVnVDIgPSBYODZSZWdpc3RlcnM6OmVkaTsKKyNlbmRpZgorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBSZWdpc3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lzdGVyczo6ZWJ4Owor
I2lmICFPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5p
bmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjpyMTI7CisjZWxzZQorICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjplc2k7
CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0
QW5kVHJhaWwgPSBYODZSZWdpc3RlcnM6OnIxMzsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgdW5pY29kZVRlbXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0ZXJzOjpyMTU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBYODZSZWdp
c3RlcnM6OmVheDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0
ZXIyID0gWDg2UmVnaXN0ZXJzOjplZHg7CisKKyAgICBzdGF0aWMgY29uc3RleHByIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMHhkYzAwKTsKKyAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0z
MiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2VuZGlmCit9
OworCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKK2NsYXNzIFlhcnJK
SVRSZWdpc3RlcnMgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICBZYXJy
SklUUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorICAgIC8vIEFy
Z3VtZW50IHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgaW5wdXQgeyBBUk02NFJlZ2lzdGVyczo6
SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBBUk02NFJlZ2lzdGVyczo6
SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgbGVuZ3RoIHsgQVJNNjRSZWdpc3RlcnM6
OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIG91dHB1dCB7IEFSTTY0UmVnaXN0ZXJz
OjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgeyBBUk02
NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdp
c3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBm
cmVlbGlzdFNpemVSZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisK
KyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVnVDAgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVnVDEgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVnVDIgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hD
b3VudCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBy
ZWdVbmljb2RlSW5wdXRBbmRUcmFpbCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07
CisgICAgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BS
UmVnIH07CisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBBUk02NFJlZ2lzdGVyczo6SW52
YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzIHsgQVJNNjRS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhk
ODAwKTsKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5nU3Vy
cm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworCisgICAg
UmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVn
IH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBBUk02NFJlZ2lzdGVyczo6SW52
YWxpZEdQUlJlZyB9OworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1MpCisgICAgLy8g
QXJndW1lbnQgcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJRCBpbnB1dCB7IFg4NlJlZ2lzdGVyczo6
SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBYODZSZWdpc3RlcnM6Oklu
dmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGxlbmd0aCB7IFg4NlJlZ2lzdGVyczo6SW52
YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgb3V0cHV0IHsgWDg2UmVnaXN0ZXJzOjpJbnZh
bGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgeyBYODZSZWdpc3Rl
cnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGZyZWVsaXN0UmVnaXN0ZXIgeyBY
ODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGZyZWVsaXN0U2l6
ZVJlZ2lzdGVyIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisKKyAgICAvLyBTY3Jh
dGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVnVDAgeyBYODZSZWdpc3RlcnM6OkludmFs
aWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1QxIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlk
R1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZWdUMiB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQ
UlJlZyB9OworCisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBYODZSZWdpc3RlcnM6Oklu
dmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1VuaWNvZGVJbnB1
dEFuZFRyYWlsIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJ
RCB1bmljb2RlVGVtcCB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lz
dGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07
CisKKyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlk
R1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBYODZSZWdpc3RlcnM6
OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgbGVhZGlu
Z1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkODAwKTsKKyAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5nU3Vycm9nYXRlVGFn
ID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworI2Vsc2UKKyNlcnJvciAi
Tm8gc3VwcG9ydCBmb3IgaW5saW5lZCBKSVQnaW5nIG9mIFJlZ0V4cC50ZXN0IGZvciB0aGlzIENQ
VSAvIE9TIGNvbWJpbmF0aW9uLiIKKyNlbmRpZgorfTsKKyNlbmRpZgorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6WWFycgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjgzMDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGV0ZXIgVmFyZ2EgKHB2YXJn
YUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4MzA4NCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDktMjUgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgSW5saW5lIFJlZ0V4cC50ZXN0IEpJVCBjb2Rl
IGluIERGRyBhbmQgRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzA0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBhIG5ldyBlbmFibGVtZW50OiBFTkFCTEVfWUFSUl9KSVRfQUxMX1BBUkVO
U19FWFBSRVNTSU9OUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5oOgorCiAyMDIx
LTA5LTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxk
IGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1F
bmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCShy
ZXZpc2lvbiAyODMwODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NDAsNiArNzQwLDcgQEAKIC8qIEVuYWJsZSBKSVQnaW5nIFJlZ3VsYXIg
RXhwcmVzc2lvbnMgdGhhdCBoYXZlIG5lc3RlZCBwYXJlbnRoZXNpcyAuICovCiAjaWYgRU5BQkxF
KFlBUlJfSklUKSAmJiAoQ1BVKEFSTTY0KSB8fCAoQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1Mp
KSkKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMgMQorI2Rl
ZmluZSBFTkFCTEVfWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FIDEKICNlbmRpZgogCiAvKiBF
bmFibGUgSklUJ2luZyBSZWd1bGFyIEV4cHJlc3Npb25zIHRoYXQgaGF2ZSBuZXN0ZWQgYmFjayBy
ZWZlcmVuY2VzLiAqLwo=
</data>
<flag name="commit-queue"
          id="462910"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439295</attachid>
            <date>2021-09-26 13:24:26 -0700</date>
            <delta_ts>2021-10-04 14:11:49 -0700</delta_ts>
            <desc>Patch with speculative fix for Windows</desc>
            <filename>230469-4.patch</filename>
            <type>text/plain</type>
            <size>261143</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMwODUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTA5LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG1pY3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTA5LTI0IFJpY2sgV2FsZHJvbiA8d2FsZHJvbi5y
aWNrQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBBZGQgY2hlY2tTY3JpcHRTeW50YXggZnVu
Y3Rpb24gdG8ganNjIGhvc3QgZW52aXJvbm1lbnQKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL3JlZ2V4cC10ZXN0LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvcmVnZXhwLXRlc3QtaW5saW5lZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2VyaWVz
IDMiCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHN0cmluZ3MgPSBbICJ0aGVtIiwgInRoZXJlIiwg
InRoZXkiLCAiYW50aGVtIiwgImFtcGhpdGhlYXRlciIsICJib3RoZXIiLCAiYW5vdGhlciIsICJi
cm90aGVyIiwgImFwb3RoZWNhcnkiLCAiYW5hdGhlbWEiXTsKKyAgICBsZXQgcmVzdWx0ID0gMDsK
KyAgICBsZXQgbiA9IDEwMDAwMDAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKQor
ICAgICAgICByZXN1bHQgKz0gL3RoZS8udGVzdChzdHJpbmdzW2kgJSAxMF0pOworICAgIGlmIChy
ZXN1bHQgIT0gbikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk2IEBACisyMDIxLTA5LTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNDY5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzdHJ1Y3R1
cmVkIFlhcnJKSVQgZnJvbSBpbmhlcml0aW5nIGZyb20gTWFjcm9Bc3NlbWJsZXIgdG8gaGF2aW5n
IGEgTWFjcm9Bc3NlbWJsZXIKKyAgICAgICAgbWVtYmVyLiAgQWRkZWQgYSBuZXcgcGF0aCB0byBZ
YXJyIEpJVCBjb2RlIHRvIGNvbXBpbGUgaW5saW5lIGNvZGUgYnkgY2hhbmdpbmcgaG93IHRoZQor
ICAgICAgICBjb2RlIGlzIGVudGVyZWQgYW5kIGV4aXRlZC4gIEFkZGVkIHN0YXRpc3RpYyB0byB0
aGUgbm9ybWFsIGNvbXBpbGF0aW9uIHBhdGggdG8gcmVjb3JkCisgICAgICAgIHRoZSBzaXplIG9m
IHRoZSBtYXRjaGluZyBjb2RlIGdlbmVyYXRlZCwgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBu
ZWVkZWQsIGFuZCBpZgorICAgICAgICB0aGUgY29kZSBjYW4gYmUgaW5saW5lZC4gIFRoaXMgcGF0
Y2ggb25seSBpbmxpbmVzIDhiaXQgY29kZSwgYXMgdGhpcyBzZWVtcyB0byBjb3ZlcgorICAgICAg
ICB0aGUgbW9zdCBjb21tb24gcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNhc2VzLiAgQWRkaW5nIDE2
IGJpdCwgbm9uLVVuaWNvZGUgaW5saW5pbmcKKyAgICAgICAgd291bGQgYmUgc3RyYWlnaHRmb3J3
YXJkLiAgVGhlIGNvZGUgaXMgc3RydWN0dXJlZCB0byB0YWtlIHRoZSBpbmxpbmVkIHBhdGggZm9y
IHRoZQorICAgICAgICBjYXNlIG9mIG5vbi1yb3BlIHN0cmluZyBhcmd1bWVudHMuICBGb3Igb3Ro
ZXIgY2FzZXMsIHdlIGZhbGwgYmFjayB0byBjYWxsaW5nIG91dAorICAgICAgICB0byBDKysgcGF0
aHMuCisKKyAgICAgICAgSGVyZSBhcmUgdGhlIHBlcmYgcmVzdWx0cyBydW5uaW5nIHRoZSBuZXds
eSBhZGRlZCByZWdleHAtdGVzdC1pbmxpbmVkIG1pY3JvCisgICAgICAgIGJlbmNobWFyayAodGlt
ZSBpbiBtc2VjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lICAgICAgIFdpdGgg
dGhpcyBwYXRjaCAgICAgUmVzdWx0CisgICAgICAgICAgICBBUk02NCAgIDEzNy4zODQ5Ky0zLjA3
NDAgICA2NC45MjgyKy0wLjczNDggIDIuMTJ4IGZhc3RlcgorICAgICAgICAgICAgWDg2LTY0ICAy
MjAuMjYxNistMTkuMjgxNCAxMDUuMjAzNCstNi44NzIyICAyLjA5eCBmYXN0ZXIKKworICAgICAg
ICBBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBmb3VuZCB0aGF0IHRoZSBzdHJlbmd0aCByZWR1Y3Rp
b24gZGlkbid0IHdvcmsgcHJvcGVybHkgZm9yIHRoZQorICAgICAgICBleGlzdGluZyBjYXNlcyBm
b3IgUmVnRXhwRXhlYywgUmVnRXhwVGVzdCBhbmQgcmVsYXRlZCBzaW5jZSB3ZSBhZGRlZCB0aGF0
IGNoZWNrcyBmb3IKKyAgICAgICAgb3ZlcnJpZGluZyB0aGUgUmVnRXhwIG9iamVjdC4gIENsb2Ji
ZXJpemUgZm9yIHRyeUdldEJ5SWQgd2FzIGNsb2JiZXIgdG9wLCBidXQgYWRkZWQKKyAgICAgICAg
YW4gZXhjZXB0aW9uIGZvciBSZWdFeHAubGFzdEluZGV4LiAgVGhpcyBmaXggYWxsb3dlZCBtYW55
IG9mIHRoZSBzdHJlbmd0aCByZWR1Y3Rpb25zCisgICAgICAgIGNhc2VzIHRvIHN0YXJ0IHdvcmtp
bmcgYWdhaW4sIG5hbWVseSB0aGUgY29zdGFudCBmb2xkaW5nIGNhc2VzLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6
ZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHRG9l
c0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpoYXNDZWxsT3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6
CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwVGVzdElu
bGluZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50
aW1lL1N0YWNrQWxpZ25tZW50Lmg6CisgICAgICAgIChKU0M6OmFyZ3VtZW50Q291bnRGb3JTdGFj
a1NpemUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OmppdENvbXBpbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlSW5saW5lZFRlc3Qp
OgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQm95
ZXJNb3llckRhdGE6OnNhdmVNYXBzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckJveWVyTW95
ZXJEYXRhOjpjbGVhck1hcHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQm95ZXJNb3llckRh
dGE6OnRyeVJldXNlQm95ZXJNb29yZUJpdG1hcCBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0YXRzOjpzZXQpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6Y29kZVNpemUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6c3RhY2tTaXplIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OmNhbklu
bGluZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0
YXRzOjpuZWVkc1RlbXAyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9j
azo6c2V0OEJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQx
NkJpdENvZGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQ4Qml0Q29k
ZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2Qml0
Q29kZU1hdGNoT25seSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhC
aXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDE2
Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpnZXQ4
Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpnZXQx
NkJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjp0cnlSZXVzZUJveWVyTW9v
cmVCaXRtYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyckpJVFJlZ2lzdGVy
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckpJVFJlZ2lzdGVyczo6WWFyckpJ
VFJlZ2lzdGVycyk6CisgICAgICAgICogeWFyci9ZYXJyUGF0dGVybi5oOgorCiAyMDIxLTA5LTI1
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGFuIHVu
bGlua2VkIGJhc2VsaW5lIEpJVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjczLDYgKzEyNzMs
NyBAQAogCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjQxMTJE
QjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQk4NjcwNEI4NTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgwMTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJySklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1M0JDNDNF
MjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCOEExMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njg5
MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQ
cml2YXRlTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00MjQ4LDYgKzQyNDksNyBAQAogCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyckludGVycHJldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJJ
bnRlcnByZXRlci5oOyBwYXRoID0geWFyci9ZYXJySW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyckpJVC5jcHA7IHBhdGgg
PSB5YXJyL1lhcnJKSVQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4
MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBZYXJySklULmg7IHBhdGggPSB5YXJyL1lhcnJKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3Rl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckpJVFJlZ2lzdGVycy5o
OyBwYXRoID0geWFyci9ZYXJySklUUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXJzZXIuaDsgcGF0aCA9IHlhcnIvWWFyclBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MjEyREJBMzM3MDBB
OUZFN0IgLyogWWFyclBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gWWFyclBhdHRlcm4uY3BwOyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJy
UGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyUGF0dGVybi5o
OyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODE1Niw2ICs4MTU4LDcgQEAKIAkJCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi8sCiAJCQkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJK
SVQuY3BwICovLAogCQkJCTg2NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8s
CisJCQkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLywK
IAkJCQlFM0YwRkM5NDI2QTExQjRBMDA5OUZGQTAgLyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRl
ci5oICovLAogCQkJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8s
CiAJCQkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLywKQEAg
LTEwMjI2LDYgKzEwMjI5LDggQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklU
UmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEg
LyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUw
MDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRF
MURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTA5MzEsNyArMTA5MzYsNiBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJy
RXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIg
LyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjcwNEI4NzEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNGMEZDOTUyNkEx
MUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjgzMDg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjQzLDYgKzI2NDMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBU
ZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2
ZSBwcm92ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAg
ICAgICAgIC8vIGFjY2Vzc2luZyBsYXN0SW5kZXggaXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9i
YWwgcmVnZXhwLgogICAgICAgICBjbG9iYmVyV29ybGQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyODMwODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
MywxNCArNjczLDI2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgICAgICAKKworICAgIGNhc2Ug
VHJ5R2V0QnlJZDoKKyAgICAgICAgcmVhZChXb3JsZCk7CisjZGVmaW5lIEFCU1RSQUNUX0hFQVBf
Tk9UX1JlZ0V4cE9iamVjdF9sYXN0SW5kZXgobmFtZSkgaWYgKG5hbWUgIT0gSW52YWxpZEFic3Ry
YWN0SGVhcCAmJiBcCisgICAgbmFtZSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIFwKKyAgICBu
YW1lICE9IFdvcmxkICYmIFwKKyAgICBuYW1lICE9IFN0YWNrICYmIFwKKyAgICBuYW1lICE9IEhl
YXAgJiYgXAorICAgIG5hbWUgIT0gUmVnRXhwT2JqZWN0X2xhc3RJbmRleCkgXAorICAgICAgICB3
cml0ZShuYW1lKTsKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1RfSEVB
UF9OT1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleCkKKyN1bmRlZiBBQlNUUkFDVF9IRUFQX05PVF9S
ZWdFeHBPYmplY3RfbGFzdEluZGV4CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJ
ZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRXaXRoVGhpczoKICAg
ICBjYXNlIEdldEJ5SWREaXJlY3Q6CiAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1c2g6CiAgICAg
Y2FzZSBHZXRCeVZhbFdpdGhUaGlzOgotICAgIGNhc2UgVHJ5R2V0QnlJZDoKICAgICBjYXNlIFB1
dEJ5SWQ6CiAgICAgY2FzZSBQdXRCeUlkV2l0aFRoaXM6CiAgICAgY2FzZSBQdXRCeVZhbFdpdGhU
aGlzOgpAQCAtMTc1MCw2ICsxNzYyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoK
KyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJv
dmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAg
ICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVmZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJl
Z2V4cC4KICAgICAgICAgY2xvYmJlclRvcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgorI2luY2x1ZGUgIllh
cnJKSVQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAKQEAgLTEyMiw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29yZGVkU3RhdHVz
ZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBtX2p1bXBS
ZXBsYWNlbWVudHM7CisgICAgWWFycjo6WWFyckJveWVyTW95ZXJEYXRhIG1fYm95ZXJNb29yZURh
dGE7CiAgICAgCiAgICAgU2NyYXRjaEJ1ZmZlciogY2F0Y2hPU1JFbnRyeUJ1ZmZlcjsKICAgICBS
ZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDI4MzA4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1
LDYgKzMzNSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgIGNhc2Ug
UmVzb2x2ZVNjb3BlOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbElu
RXZhbDoKICAgICBjYXNlIFJldHVybjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjgzMDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NzIsNyAr
MTQ3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIGNhc2UgUmVnRXhwVGVzdElubGluZTogewogICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVSZWdF
eHBPYmplY3QoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShy
ZXZpc2lvbiAyODMwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzIxLDYgKzMyMSwxNiBAQCB2b2lkIE5vZGU6OmNvbnZlcnRU
b1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAgICAgbV9vcEluZm8gPSByZWdFeHA7CiB9CiAKK3ZvaWQg
Tm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZShGcm96ZW5WYWx1ZSogcmVnRXhwKQorewor
ICAgIEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9wQW5kRGVmYXVsdEZsYWdz
KFJlZ0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShjaGlsZHJl
bi5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hpbGRyZW4uY2hpbGQyKCkg
PSBFZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2JqZWN0VXNlKTsKKyAgICAv
LyBXZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcEluZm8gPSByZWdFeHA7Cit9
CisKIFN0cmluZyBOb2RlOjp0cnlHZXRTdHJpbmcoR3JhcGgmIGdyYXBoKQogewogICAgIGlmICho
YXNDb25zdGFudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODIzLDYgKzgyMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udmVy
dFRvUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5V2l0aG91dENoZWNrcyhGcm96ZW5WYWx1ZSog
cmVnRXhwKTsKICAgICB2b2lkIGNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhbFdpdGhvdXRD
aGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4cCk7CisgICAgdm9pZCBjb252ZXJ0VG9SZWdFeHBUZXN0
SW5saW5lKEZyb3plblZhbHVlKiByZWdFeHApOwogCiAgICAgdm9pZCBjb252ZXJ0VG9TZXRSZWdF
eHBPYmplY3RMYXN0SW5kZXgoKQogICAgIHsKQEAgLTE4MDAsNiArMTgwMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9i
YWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBjYXNlIFJlZ0V4
cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICBjYXNl
IFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkBAIC0x
ODk2LDYgKzE4OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRGlyZWN0VGFpbENhbGxJbmxp
bmVkQ2FsbGVyOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAg
ICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CisgICAgICAgIGNhc2UgUmVnRXhwVGVz
dElubGluZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMjgzMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzE5LDYgKzMxOSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhSZWdFeHBFeGVjLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwRXhlY05vbkdsb2Jh
bE9yU3RpY2t5LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhSZWdFeHBUZXN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmVnRXhwVGVzdElubGluZSwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJlZ0V4cE1hdGNo
RmFzdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJlZ0V4
cE1hdGNoRmFzdEdsb2JhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU3RyaW5nUmVwbGFj
ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODY4
LDYgKzg2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICAgICAg
Y2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6CiAgICAgICAgIGNhc2UgUmVnRXhwVGVz
dDoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgICAgICBjYXNlIFJlZ0V4cE1h
dGNoRmFzdDoKICAgICAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgICAgIGNh
c2UgU3RyaW5nUmVwbGFjZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyODMwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1NCw2ICs1NTQs
NyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBS
ZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAgIGNh
c2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgY2FzZSBSZWdF
eHBNYXRjaEZhc3Q6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBD
YWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5NDIsNyAr
Mjk0Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICBj
YXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOiB7CiAgICAgICAgIGNv
bXBpbGVSZWdFeHBUZXN0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
U3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNs
dWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVnaXN0ZXJzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjY5NCw2ICsyNjk1LDE5NSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kCiAgICAgfSB9CiB9CiAKKyNp
ZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSogbm9kZSkKK3sKKyAgICBSZWdFeHAqIHJl
Z0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKKwor
ICAgIEFTU0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKTsKKworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGdsb2JhbE9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IGdsb2JhbE9iamVjdC5ncHIoKTsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIGFyZ3VtZW50R1BSOworICAgIEdQUkZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgIEdQUlRlbXBvcmFyeSBzdHJpbmdJbXBsKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBz
dHJpbmdEYXRhKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdHJMZW5ndGgodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IG91dHB1dCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0Mih0aGlz
KTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAx
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wMjsKKyAgICBHUFJSZWcgc3RyaW5nSW1wbEdQ
UiA9IHN0cmluZ0ltcGwuZ3ByKCk7CisgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBzdHJpbmdE
YXRhLmdwcigpOworICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBvdXRwdXQuZ3ByKCk7CisgICAgR1BS
UmVnIHN0ckxlbmd0aEdQUiA9IHN0ckxlbmd0aC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0MkdQ
UiA9IHJlc3VsdDIuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXAwR1BSID0gdGVtcDAuZ3ByKCk7Cisg
ICAgR1BSUmVnIHRlbXAxR1BSID0gdGVtcDEuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXAyR1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgc3dhcFJlZyA9IEludmFsaWRHUFJSZWc7CisKKyAg
ICBhdXRvIGppdENvZGVCbG9jayA9IHJlZ0V4cC0+Z2V0UmVnRXhwSklUQ29kZUJsb2NrKCk7Cisg
ICAgYXV0byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5nZXQ4Qml0SW5saW5l
U3RhdHMoKTsKKworI2lmICFDUFUoWDg2XzY0KQorICAgIGlmIChpbmxpbmVDb2RlU3RhdHM4Qml0
Lm5lZWRzVGVtcDIoKSkgeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXAyKHRoaXMpOwor
ICAgICAgICB0ZW1wMi5hZG9wdChyZWFsVGVtcDIpOworICAgICAgICB0ZW1wMkdQUiA9IHRlbXAy
LmdwcigpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChu
b2RlLT5jaGlsZDIoKSwgYmFzZUdQUik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZG9uZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisKKyAg
ICBhdXRvIHN3YXBSZWdJZk5lZWRlZCA9IFsmXSB7CisgICAgICAgIGlmIChnbG9iYWxPYmplY3RH
UFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBzd2FwUmVnID0gYWxsb2NhdGUoKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCBzd2FwUmVnKTsKKyAgICAgICAg
ICAgIGdsb2JhbE9iamVjdEdQUiA9IHN3YXBSZWc7CisgICAgICAgIH0gZWxzZSBpZiAoYmFzZUdQ
UiA9PSByZXN1bHRHUFIpIHsKKyAgICAgICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShiYXNlR1BSLCBzd2FwUmVnKTsKKyAgICAgICAgICAgIGJhc2VH
UFIgPSBzd2FwUmVnOworICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50R1BSID09IHJlc3VsdEdQ
UikgeworICAgICAgICAgICAgc3dhcFJlZyA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKGFyZ3VtZW50R1BSLCBzd2FwUmVnKTsKKyAgICAgICAgICAgIGFyZ3VtZW50R1BSID0g
c3dhcFJlZzsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRvIHJlZ0V4cFRlc3RJbmxpbmVD
YXNlID0gWyZdIHsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdHJpbmdEYXRhR1BS
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0lt
cGxHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgc3RyTGVuZ3RoR1BSKTsK
KworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBzdHJpbmdJbXBsR1BSOworCisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBpbmRleEdQUik7CisKKyAgICAgICAgWWFycjo6WWFy
ckpJVFJlZ2lzdGVycyB5YXJyUmVnaXN0ZXJzOworICAgICAgICB5YXJyUmVnaXN0ZXJzLmlucHV0
ID0gc3RyaW5nRGF0YUdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5pbmRleCA9IGluZGV4R1BS
OworICAgICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0ckxlbmd0aEdQUjsKKyAgICAgICAg
eWFyclJlZ2lzdGVycy5vdXRwdXQgPSBvdXRwdXRHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMu
cmVnVDAgPSB0ZW1wMEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5yZWdUMSA9IHRlbXAxR1BS
OworI2lmIENQVShYODZfNjQpCisgICAgICAgIHRlbXAyR1BSID0gZ2xvYmFsT2JqZWN0R1BSOwor
I2VuZGlmCisgICAgICAgIGlmIChpbmxpbmVDb2RlU3RhdHM4Qml0Lm5lZWRzVGVtcDIoKSkKKyAg
ICAgICAgICAgIHlhcnJSZWdpc3RlcnMucmVnVDIgPSB0ZW1wMkdQUjsKKworICAgICAgICB5YXJy
UmVnaXN0ZXJzLnJldHVyblJlZ2lzdGVyID0gcmVzdWx0R1BSOworICAgICAgICB5YXJyUmVnaXN0
ZXJzLnJldHVyblJlZ2lzdGVyMiA9IHJlc3VsdDJHUFI7CisKKyAgICAgICAgYXV0byBjb21tb25E
YXRhID0gbV9qaXQuaml0Q29kZSgpLT5kZmdDb21tb24oKTsKKyAgICAgICAgWWFycjo6aml0Q29t
cGlsZUlubGluZWRUZXN0KCZtX2dyYXBoLm1fc3RhY2tDaGVja2VyLCByZWdFeHAtPnBhdHRlcm4o
KSwgcmVnRXhwLT5mbGFncygpLCBZYXJyOjpDaGFyU2l6ZTo6Q2hhcjgsICZ2bSgpLCBjb21tb25E
YXRhLT5tX2JveWVyTW9vcmVEYXRhLCBtX2ppdCwgeWFyclJlZ2lzdGVycyk7CisKKyAgICAgICAg
YXV0byBmYWlsZWRNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOworCisgICAgICAgIC8vICBTYXZlZCBjYWNo
ZWQgcmVzdWx0CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaWYgKGlubGluZUNvZGVTdGF0czhC
aXQubmVlZHNUZW1wMigpKSB7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0UHRyID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdFB0ciksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIH0KKyNlbmRpZgor
CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFs
RGF0YU9mZnNldCgpICsgUmVnRXhwR2xvYmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsK
KworICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCByZWdFeHApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNl
dCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0UmVnRXhwKCkpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoYXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RJbnB1dCgp
KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVzdWx0R1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZS
ZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgc3RhcnQpKSk7CisgICAgICAg
IG1faml0LnN0b3JlMzIocmVzdWx0MkdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVzdWx0KCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIGVuZCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU4
KFRydXN0ZWRJbW0zMigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBv
ZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVpZmllZCgpKSk7CisKKyAgICAg
ICAgaWYgKHN3YXBSZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHVubG9jayhzd2Fw
UmVnKTsKKworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBmYWlsZWRNYXRj
aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHUFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIH07CisKKyAg
ICBpZiAobm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAg
ICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0ZVN0cmlu
Zyhub2RlLT5jaGlsZDMoKSwgYXJndW1lbnRHUFIpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICAgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudEdQUiwgSlNTdHJpbmc6Om9mZnNldE9m
VmFsdWUoKSksIHN0cmluZ0ltcGxHUFIpOworICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEg
cm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAgICAgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikp
OworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisKKyAg
ICAgICAgcmVnRXhwVGVzdElubGluZUNhc2UoKTsKKworICAgICAgICBvcGVyYXRpb25DYXNlcy5s
aW5rKCZtX2ppdCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWdFeHBUZXN0
U3RyaW5nLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQUiwgYXJndW1lbnRHUFIp
OworCisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1l
bnQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3By
KCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisK
KyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGFyZ3VtZW50
R1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5n
KGFyZ3VtZW50R1BSKSk7CisKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RyaW5nSW1wbEdQ
Uik7CisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIHJvcGUgb3IgMTYgYml0LCB3ZSBjYWxsIHRo
ZSBvcGVyYXRpb24uCisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9w
ZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikpOworICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFn
c09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQo
KSkpKTsKKworICAgIHJlZ0V4cFRlc3RJbmxpbmVDYXNlKCk7CisKKyAgICBvcGVyYXRpb25DYXNl
cy5saW5rKCZtX2ppdCk7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3Qs
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisKKyAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorI2Vsc2UKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBjb21waWxlUmVnRXhwVGVzdChub2RlKTsKK30KKyNlbmRpZgorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5v
cCgpOwpAQCAtMzgyOCw2ICs0MDE4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBSZWdFeHBUZXN0
SW5saW5lOiB7CisgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDogewogICAgICAgICBj
b21waWxlUmVnRXhwTWF0Y2hGYXN0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI4
MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE0OTksNiArMTQ5OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVSZWdFeHBNYXRjaEZhc3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1hdGNo
RmFzdEdsb2JhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdChOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
U3RyaW5nUmVwbGFjZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNPYmplY3QoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVR5cGVPZklzT2JqZWN0KE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMjgzMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5MSw2ICs3OTEsNDIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH07
CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorICAgICAgICAgICAg
YXV0byBjb252ZXJ0VGVzdFRvVGVzdElubGluZSA9IFsmXSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBUZXN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAocmVnRXhwLT5nbG9iYWxPclN0aWNreSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAo
cmVnRXhwLT51bmljb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIGF1dG8gaml0Q29kZUJsb2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRD
b2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUNvZGVTdGF0czhCaXQgPSBq
aXRDb2RlQmxvY2stPmdldDhCaXRJbmxpbmVTdGF0cygpOworCisgICAgICAgICAgICAgICAgaWYg
KCFpbmxpbmVDb2RlU3RhdHM4Qml0LmNhbklubGluZSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2RlU2l6ZSA9IGlubGlu
ZUNvZGVTdGF0czhCaXQuY29kZVNpemUoKTsKKworICAgICAgICAgICAgICAgIGlmIChjb2RlU2l6
ZSA+IE9wdGlvbnM6Om1heGltdW1SZWdFeHBUZXN0SW5saW5lQ29kZXNpemUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxp
Z25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5
dGVzKCksIGlubGluZUNvZGVTdGF0czhCaXQuc3RhY2tTaXplKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKGFsaWduZWRGcmFtZVNpemUpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9w
YXJhbWV0ZXJTbG90cyA9IHN0ZDo6bWF4KG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cywgYXJndW1l
bnRDb3VudEZvclN0YWNrU2l6ZShhbGlnbmVkRnJhbWVTaXplKSk7CisKKyAgICAgICAgICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgbV9ub2RlLT5jaGlsZHJlbi5qdXN0Q2hlY2tzKCkp
OworICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRvUmVnRXhwVGVzdElubGluZShtX2dy
YXBoLmZyZWV6ZShyZWdFeHApKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyNlbmRpZgorCiAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRUb1N0YXRpYyA9IFsmXSB7CiAgICAgICAgICAgICAgICAg
aWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBFeGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC04MDksNiArODQ1LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
Zm9sZFRvQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmIEVOQUJMRShZ
QVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgICAgICBpZiAoY29udmVydFRlc3RU
b1Rlc3RJbmxpbmUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCiAgICAgICAg
ICAgICBpZiAoY29udmVydFRvU3RhdGljKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzNyw2ICszMzcsNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNh
c2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAg
ICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAg
Y2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBOZXdSZWdleHA6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyODMwODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJTdXBlclNhbXBs
ZXIuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSA8YXRvbWlj
PgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3dGYvUmVjdXJzYWJsZUxhbWJkYS5o
PgpAQCAtMTU4MCw2ICsxNTgxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0
OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4cFRlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CisgICAgICAgICAgICBjb21waWxlUmVnRXhw
VGVzdElubGluZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0
Y2hGYXN0OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdCgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xNDI2Nyw2ICsxNDI3MSwxNTggQEAgcHJpdmF0ZToKICAgICAgICAgc2V0
Qm9vbGVhbihyZXN1bHQpOwogICAgIH0KIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVT
VF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZSgpCisgICAgeworICAg
ICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihtX25vZGUtPmNlbGxPcGVyYW5k
KCktPnZhbHVlKCkpOworCisgICAgICAgIEFTU0VSVCghcmVnRXhwLT5nbG9iYWxPclN0aWNreSgp
KTsKKworICAgICAgICBhdXRvIGppdENvZGVCbG9jayA9IHJlZ0V4cC0+Z2V0UmVnRXhwSklUQ29k
ZUJsb2NrKCk7CisgICAgICAgIGF1dG8gaW5saW5lQ29kZVN0YXRzOEJpdCA9IGppdENvZGVCbG9j
ay0+Z2V0OEJpdElubGluZVN0YXRzKCk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdFB0ciA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBpbmxpbmVDb2RlU3RhdHM4Qml0
LnN0YWNrU2l6ZSgpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUlu
Qnl0ZXMoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2s4Qml0
U3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlvbkNhc2Ug
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7
CisKKyAgICAgICAgTFZhbHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93UmVnRXhwT2JqZWN0KG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBudWxscHRyOworICAgICAgICBib29sIGhh
dmVTdHJpbmdBcmcgPSBtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2U7CisK
KyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcpCisgICAgICAgICAgICBhcmd1bWVudCA9IGxvd1N0
cmluZyhtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJndW1l
bnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIGF1dG8gdm0gPSAm
dGhpcy0+dm0oKTsKKyAgICAgICAgYXV0byBzdGFja0NoZWNrZXIgPSAmbV9ncmFwaC5tX3N0YWNr
Q2hlY2tlcjsKKworICAgICAgICBpZiAoIWhhdmVTdHJpbmdBcmcpIHsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGlzQ2VsbChhcmd1bWVudCksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVs
eShvcGVyYXRpb25DYXNlKSk7CisKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhhcmd1bWVudCksIHVzdWFsbHkoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKG9wZXJhdGlv
bkNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjaGVj
azhCaXRTdHJpbmcpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNSb3BlU3RyaW5nKGFy
Z3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5zdXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUo
Y2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrOEJp
dFN0cmluZywgaW5saW5lQ2FzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX291
dC5icmFuY2goaXNSb3BlU3RyaW5nKGFyZ3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5zdXJl
KG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUoY2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAgICAg
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2s4Qml0U3RyaW5nLCBpbmxpbmVDYXNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihh
cmd1bWVudCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291dC5s
b2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwK
KyAgICAgICAgICAgIHVuc3VyZShvcGVyYXRpb25DYXNlKSwgdW5zdXJlKGlubGluZUNhc2UpKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVDYXNlLCBvcGVyYXRpb25DYXNlKTsKKyAg
ICAgICAgTFZhbHVlIHN0cmluZ0xlbmd0aCA9IG1fb3V0Lnplcm9FeHQobV9vdXQubG9hZDMyKHN0
cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9sZW5ndGgpLCBJbnQ2NCk7CisgICAgICAgIExW
YWx1ZSBzdHJpbmdEYXRhID0gbV9vdXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmlu
Z0ltcGxfZGF0YSk7CisKKyAgICAgICAgYXV0byBjb21tb25EYXRhID0gbV9mdGxTdGF0ZS5qaXRD
b2RlLT5kZmdDb21tb24oKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX291dC5wYXRjaHBvaW50KEludDMyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUoc3RyaW5nRGF0YSwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc3RyaW5nTGVuZ3Ro
LCBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShhcmd1bWVudCwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gaW5saW5lQ29k
ZVN0YXRzOEJpdC5uZWVkc1RlbXAyKCkgPyA2IDogNTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKwor
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXR1cm5HUFIgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0xlbmd0aEdQUiA9IHBhcmFtc1syXS5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc3RyaW5nR1BSID0gcGFyYW1zWzNdLmdwcigpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHJldHVybjJHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyB0ZW1wMEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMyk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHRlbXAxR1BSID0gcGFyYW1zLmdwU2NyYXRjaCg0KTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgdGVtcDJHUFIgPSBpbmxpbmVDb2RlU3RhdHM4Qml0Lm5lZWRzVGVtcDIo
KSA/IHBhcmFtcy5ncFNjcmF0Y2goNSkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIGluZGV4R1BSKTsKKwor
ICAgICAgICAgICAgICAgIFlhcnI6OllhcnJKSVRSZWdpc3RlcnMgeWFyclJlZ2lzdGVyczsKKwor
ICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOworICAg
ICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXggPSBpbmRleEdQUjsKKyAgICAgICAgICAg
ICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0cmluZ0xlbmd0aEdQUjsKKyAgICAgICAgICAg
ICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1dCA9IG91dHB1dEdQUjsKKyAgICAgICAgICAgICAgICB5
YXJyUmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lz
dGVycy5yZWdUMSA9IHRlbXAxR1BSOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDb2RlU3Rh
dHM4Qml0Lm5lZWRzVGVtcDIoKSkKKyAgICAgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5y
ZWdUMiA9IHRlbXAyR1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMucmV0dXJuUmVn
aXN0ZXIgPSByZXR1cm5HUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5S
ZWdpc3RlcjIgPSByZXR1cm4yR1BSOworCisgICAgICAgICAgICAgICAgWWFycjo6aml0Q29tcGls
ZUlubGluZWRUZXN0KHN0YWNrQ2hlY2tlciwgcmVnRXhwLT5wYXR0ZXJuKCksIHJlZ0V4cC0+Zmxh
Z3MoKSwgWWFycjo6Q2hhclNpemU6OkNoYXI4LCB2bSwgY29tbW9uRGF0YS0+bV9ib3llck1vb3Jl
RGF0YSwgaml0LCB5YXJyUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAgIGF1dG8gZmFpbGVkTWF0Y2ggPSBq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgcmV0dXJuR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlZCBjYWNoZWQg
cmVzdWx0LgorICAgICAgICAgICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSB0ZW1wMEdQ
UjsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0UHRyKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gSlNHbG9iYWxPYmplY3Q6OnJlZ0V4cEdsb2JhbERhdGFPZmZzZXQoKSAr
IFJlZ0V4cEdsb2JhbERhdGE6Om9mZnNldE9mQ2FjaGVkUmVzdWx0KCk7CisKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlZ0V4cCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hl
ZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0UmVnRXhwKCkpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoc3RyaW5nR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBv
ZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mTGFzdElucHV0KCkpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmUzMihyZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1
bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgc3RhcnQpKSk7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIocmV0dXJuMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZlJlc3VsdCgp
ICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBlbmQpKSk7CisgICAgICAgICAgICAgICAg
aml0LnN0b3JlOChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZz
ZXRPZlJlaWZpZWQoKSkpOworCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIHJldHVybkdQUik7CisgICAgICAgICAgICAgICAgZG9uZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICBmYWlsZWRNYXRjaC5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
LCByZXR1cm5HUFIpOworICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAgICAg
ICAgICAgfSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlubGluZXJlc3VsdCA9IG1fb3V0LmFuY2hvcihwYXRj
aHBvaW50KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG9wZXJhdGlvbkNhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG9wZXJhdGlvblJlc3VsdDsKKworICAgICAgICBpZiAoaGF2ZVN0cmluZ0FyZykK
KyAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50MzIs
IG9wZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcsIGdsb2JhbE9iamVjdCwgYmFzZSwgYXJndW1lbnQp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uUmVnRXhwVGVzdCwgZ2xvYmFsT2JqZWN0LCBiYXNl
LCBhcmd1bWVudCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJv
b2xlYW4obV9vdXQucGhpKEludDMyLCBpbmxpbmVyZXN1bHQsIG9wZXJhdGlvblJlc3VsdCkpOwor
ICAgIH0KKyNlbHNlCisgICAgTk9fUkVUVVJOIHZvaWQgY29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisj
ZW5kaWYKKwogICAgIHZvaWQgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdCgpCiAgICAgewogICAgICAg
ICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24g
MjgzMDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nyw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCk7CiAgICAgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1CaW5hcnlTdHJpbmdT
d2l0Y2hDYXNlTGVuZ3RoLCA1MCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwg
bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoLCAyMDAwLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KFVuc2lnbmVkLCBtYXhpbXVtUmVnRXhwVGVzdElubGluZUNvZGVzaXplLCA1
MDAsIE5vcm1hbCwgIk1heGltdW0gY29kZSBzaXplIGluIGJ5dGVzIGZvciBpbmxpbmVkIFJlZ0V4
cC50ZXN0IEpJVCBjb2RlLiIpIFwKICAgICBcCiAgICAgdihEb3VibGUsIGppdFBvbGljeVNjYWxl
LCAxLjAsIE5vcm1hbCwgInNjYWxlIEpJVCB0aHJlc2hvbGRzIHRvIHRoaXMgc3BlY2lmaWVkIHJh
dGlvIGJldHdlZW4gMC4wIChjb21waWxlIEFTQVApIGFuZCAxLjAgKGNvbXBpbGUgbGlrZSBub3Jt
YWwpLiIpIFwKICAgICB2KEJvb2wsIGZvcmNlRWFnZXJDb21waWxhdGlvbiwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJ
KHJldmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDEzIEBAIHB1YmxpYzoKIAogICAgIFN0
cmluZyB0b1NvdXJjZVN0cmluZygpIGNvbnN0OwogCisjaWYgRU5BQkxFKFlBUlJfSklUKQorICAg
IFlhcnI6OllhcnJDb2RlQmxvY2sqIGdldFJlZ0V4cEpJVENvZGVCbG9jaygpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9yZWdFeHBKSVRDb2RlLmdldCgpOworICAgIH0KKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNoZTsKICAgICBSZWdFeHAoVk0mLCBjb25z
dCBTdHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAkocmV2aXNpb24gMjgzMDg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Myw2ICs1MywxNiBAQCBpbmxpbmUgdW5zaWduZWQgcm91bmRMb2NhbFJl
Z2lzdGVyQ291bnRGCiAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpLCBsb2NhbFJlZ2lzdGVyQ291bnQgKyBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnMpIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwog
fQogCitpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDb3VudEZvclN0YWNrU2l6ZSh1bnNpZ25lZCBz
aXplSW5CeXRlcykKK3sKKyAgICB1bnNpZ25lZCBzaXplSW5SZWdpc3RlcnMgPSBzaXplSW5CeXRl
cyAvIHNpemVvZih2b2lkKik7CisKKyAgICBpZiAoc2l6ZUluUmVnaXN0ZXJzIDw9IENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBzaXplSW5SZWdpc3RlcnMgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsKK30K
KwogaW5saW5lIHVuc2lnbmVkIGxvZ1N0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkKIHsKICAgICBy
ZXR1cm4gV1RGOjpmYXN0TG9nMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyODMwODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyQ2Fub25pY2Fs
aXplLmgiCiAjaW5jbHVkZSAiWWFyckRpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIllhcnJKSVRS
ZWdpc3RlcnMuaCIKICNpbmNsdWRlICJZYXJyTWF0Y2hpbmdDb250ZXh0SG9sZGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CkBAIC0x
ODIsMTE1ICsxODMsMTEgQEAgc3RkOjp0dXBsZTxCb3llck1vb3JlQml0bWFwOjpNYXAsIEJveWVy
TQogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgV1RGTW92ZShtYXApLCBXVEZNb3ZlKGNoYXJhY3Rl
cnNGYXN0UGF0aCkgfTsKIH0KIAotY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySklUSW5mbywgcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7Cit0ZW1wbGF0ZTxjbGFzcyBZYXJy
SklUUmVncyA9IFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzPgorY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySklUSW5mbyB7CiAKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTVJlZ2lzdGVyczo6cjE7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IEFSTVJlZ2lzdGVyczo6cjI7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IEFSTVJlZ2lzdGVyczo6
cjM7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBBUk1SZWdpc3Rl
cnM6OnI0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IEFSTVJlZ2lz
dGVyczo6cjU7Ci0gICAgLy8gcjYgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyQVJNdjcs
Ci0gICAgLy8gcjcgaXMgZnAuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1Qy
ID0gQVJNUmVnaXN0ZXJzOjpyODsKLSAgICAvLyByOSBpcyBzYiBpbiBFQUJJLgotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgPSBBUk1SZWdpc3RlcnM6OnIxMDsg
Ly8gcjEwIGlzIFNMLCBidXQgbm8gbG9uZ2VyIGEgc3BlY2lhbCByZWdpc3Rlci4KLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6
cjA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IEFS
TVJlZ2lzdGVyczo6cjE7Ci0KLSNlbGlmIENQVShBUk02NCkKLSAgICAvLyBBcmd1bWVudCByZWdp
c3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBBUk02NFJlZ2lz
dGVyczo6eDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gQVJNNjRS
ZWdpc3RlcnM6OngxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBB
Uk02NFJlZ2lzdGVyczo6eDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1
dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
bWF0Y2hpbmdDb250ZXh0ID0gQVJNNjRSZWdpc3RlcnM6Ong0OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OyAvLyBM
b2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGluIHRoZSBwcm9sb2d1ZS4KLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgPSBBUk02
NFJlZ2lzdGVyczo6eDU7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0KLSAg
ICAvLyBTY3JhdGNoIHJlZ2lzdGVycwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZWdUMCA9IEFSTTY0UmVnaXN0ZXJzOjp4NjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgcmVnVDEgPSBBUk02NFJlZ2lzdGVyczo6eDc7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIHJlZ1QyID0gQVJNNjRSZWdpc3RlcnM6Ong4OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gQVJNNjRSZWdpc3RlcnM6Ong5OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCA9IEFS
TTY0UmVnaXN0ZXJzOjp4MTA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHVuaWNv
ZGVUZW1wID0gQVJNNjRSZWdpc3RlcnM6Ong1OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBpbml0aWFsU3RhcnQgPSBBUk02NFJlZ2lzdGVyczo6eDExOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSA9IEFSTTY0UmVnaXN0ZXJz
Ojp4MTI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlYWRpbmdTdXJyb2dhdGVU
YWcgPSBBUk02NFJlZ2lzdGVyczo6eDEzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IEFSTTY0UmVnaXN0ZXJzOjp4MTQ7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBSZWdpc3RlcklEIGVuZE9mU3RyaW5nQWRkcmVzcyA9IEFSTTY0UmVnaXN0ZXJz
Ojp4MTU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIg
PSBBUk02NFJlZ2lzdGVyczo6eDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJl
dHVyblJlZ2lzdGVyMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgVHJ1c3RlZEltbTMyIHN1cnJvZ2F0ZVRhZ01hc2sgPSBUcnVzdGVkSW1tMzIoMHhmZmZmZmMw
MCk7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5w
dXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
aW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgbGVuZ3RoID0gTUlQU1JlZ2lzdGVyczo6YTI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIG91dHB1dCA9IE1JUFNSZWdpc3RlcnM6OmEzOwotCi0gICAgLy8gdDAgaXMgcmVzZXJ2
ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KLSAgICAvLyB0MSBpcyByZXNlcnZlZCBmb3IgTWFj
cm9Bc3NlbWJsZXJNSVBTLgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9
IE1JUFNSZWdpc3RlcnM6OnQyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdU
MSA9IE1JUFNSZWdpc3RlcnM6OnQzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBpbml0aWFsU3RhcnQgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBNSVBTUmVnaXN0ZXJz
Ojp2MTsKLQotI2VsaWYgQ1BVKFg4Nl82NCkKLSNpZiAhT1MoV0lORE9XUykKLSAgICAvLyBBcmd1
bWVudCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBY
ODZSZWdpc3RlcnM6OmVkaTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXgg
PSBYODZSZWdpc3RlcnM6OmVzaTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVu
Z3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6ZWN4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBYODZSZWdpc3RlcnM6OnI4OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyODsgLy8g
TG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjpyOTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSNlbHNl
Ci0gICAgLy8gSWYgdGhlIHJldHVybiB2YWx1ZSBkb2Vzbid0IGZpdCBpbiA2NGJpdHMsIGl0cyBk
ZXN0aW5hdGlvbiBpcyBwb2ludGVkIGJ5IHJjeCBhbmQgdGhlIHBhcmFtZXRlcnMgYXJlIHNoaWZ0
ZWQuCi0gICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5Lzc1NzJ6
dHo0LmFzcHgKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihNYXRjaFJlc3VsdCkgPiBzaXplb2Yo
dm9pZCopLCAiTWF0Y2hSZXN1bHQgZG9lcyBub3QgZml0IGluIDY0Yml0cyIpOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6cjg7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6cjk7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6cjEw
OwotI2VuZGlmCi0KLSAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycwotICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCByZWdUMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwotI2lmICFPUyhXSU5ET1dT
KQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IFg4NlJlZ2lzdGVyczo6
cjk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gWDg2UmVnaXN0ZXJz
OjpyMTA7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IFg4
NlJlZ2lzdGVyczo6ZWN4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9
IFg4NlJlZ2lzdGVyczo6ZWRpOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgaW5pdGlhbFN0YXJ0ID0gWDg2UmVnaXN0ZXJzOjplYng7Ci0jaWYgIU9TKFdJTkRPV1Mp
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgPSBY
ODZSZWdpc3RlcnM6OnIxMjsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IHJlbWFpbmluZ01hdGNoQ291bnQgPSBYODZSZWdpc3RlcnM6OmVzaTsKLSNlbmRpZgotICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCA9IFg4NlJl
Z2lzdGVyczo6cjEzOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmljb2RlVGVt
cCA9IFg4NlJlZ2lzdGVyczo6cjE0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBl
bmRPZlN0cmluZ0FkZHJlc3MgPSBYODZSZWdpc3RlcnM6OnIxNTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZWF4OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBYODZSZWdpc3Rl
cnM6OmVkeDsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIHN1cHBsZW1lbnRh
cnlQbGFuZXNCYXNlID0gVHJ1c3RlZEltbTMyKDB4MTAwMDApOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgVHJ1c3RlZEltbTMyIGxlYWRpbmdTdXJyb2dhdGVUYWcgPSBUcnVzdGVkSW1tMzIoMHhkODAw
KTsKLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRh
ZyA9IFRydXN0ZWRJbW0zMigweGRjMDApOwotICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZElt
bTMyIHN1cnJvZ2F0ZVRhZ01hc2sgPSBUcnVzdGVkSW1tMzIoMHhmZmZmZmMwMCk7CisjaWZkZWYg
IEpJVF9VTklDT0RFX0VYUFJFU1NJT05TCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
eGZmZmZmYzAwKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQ
UkVTU0lPTlMpCkBAIC0zNjAsOCArMjU3LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKIAogICAgIHZvaWQgaW5pdFBhcmVuQ29udGV4dEZyZWVMaXN0KCkKICAg
ICB7Ci0gICAgICAgIFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UG9pbnRlciA9IHJlZ1QwOwotICAg
ICAgICBSZWdpc3RlcklEIG5leHRQYXJlbkNvbnRleHRQb2ludGVyID0gcmVnVDI7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVuQ29udGV4dFBvaW50ZXIgPSBtX3JlZ3Mu
cmVnVDA7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5leHRQYXJlbkNvbnRl
eHRQb2ludGVyID0gbV9yZWdzLnJlZ1QyOworCisgICAgICAgIG1fdXNlc1QyID0gdHJ1ZTsKIAog
ICAgICAgICBzaXplX3QgcGFyZW5Db250ZXh0U2l6ZSA9IFBhcmVuQ29udGV4dDo6c2l6ZUZvciht
X3BhcmVuQ29udGV4dFNpemVzKTsKIApAQCAtMzcyLDk0ICsyNzEsOTMgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0Nv
bnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkpLCBmcmVlbGlz
dFNpemVSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNl
dE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkpLCBtX3JlZ3MuZnJlZWxpc3RTaXplUmVnaXN0
ZXIpOwogICAgICAgICAvLyBOb3RlIHRoYXQgbWF0Y2hpbmdDb250ZXh0IGFuZCBmcmVlbGlzdFJl
Z2lzdGVyIGFyZSBsaWtlbHkgdGhlIHNhbWUgcmVnaXN0ZXIuCi0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0
ZXJuQ29udGV4dEJ1ZmZlcigpKSwgZnJlZWxpc3RSZWdpc3Rlcik7Ci0gICAgICAgIEp1bXAgZW1w
dHlGcmVlTGlzdCA9IGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxpc3RSZWdpc3Rlcik7Ci0gICAg
ICAgIG1vdmUoZnJlZWxpc3RSZWdpc3RlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIGZyZWVsaXN0UmVnaXN0ZXIs
IG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKLSAgICAgICAgYWRkUHRyKGZyZWVsaXN0UmVnaXN0
ZXIsIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihw
YXJlbkNvbnRleHRTaXplKSwgZnJlZWxpc3RTaXplUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5tYXRjaGluZ0NvbnRleHQsIE1h
dGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlcigpKSwgbV9y
ZWdzLmZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBlbXB0
eUZyZWVMaXN0ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbV9y
ZWdzLmZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5mcmVlbGlz
dFJlZ2lzdGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIG1fcmVncy5mcmVl
bGlzdFJlZ2lzdGVyLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7CisgICAgICAgIG1faml0LmFk
ZFB0cihtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lzdGVy
KTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFy
ZW5Db250ZXh0U2l6ZSksIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rlcik7CiAKLSAgICAgICAg
TGFiZWwgbG9vcFRvcCh0aGlzKTsKLSAgICAgICAgSnVtcCBpbml0RG9uZSA9IGJyYW5jaFB0cihB
Ym92ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKLSAg
ICAgICAgc3RvcmVQdHIobmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIEFkZHJlc3MocGFyZW5Db250
ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKLSAgICAgICAgbW92ZShu
ZXh0UGFyZW5Db250ZXh0UG9pbnRlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBhcmVuQ29udGV4dFBvaW50ZXIs
IG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKLSAgICAgICAganVtcChsb29wVG9wKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3BUb3AoJm1faml0KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaW5pdERvbmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lz
dGVyKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIobmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50ZXIsIFBhcmVuQ29udGV4dDo6
bmV4dE9mZnNldCgpKSk7CisgICAgICAgIG1faml0Lm1vdmUobmV4dFBhcmVuQ29udGV4dFBvaW50
ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihwYXJlbkNvbnRleHRTaXplKSwgcGFyZW5Db250ZXh0UG9pbnRl
ciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5qdW1wKGxvb3BUb3Ap
OwogCi0gICAgICAgIGluaXREb25lLmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250
ZXh0OjpuZXh0T2Zmc2V0KCkpKTsKLSAgICAgICAgZW1wdHlGcmVlTGlzdC5saW5rKHRoaXMpOwor
ICAgICAgICBpbml0RG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSkpOwor
ICAgICAgICBlbXB0eUZyZWVMaXN0LmxpbmsoJm1faml0KTsKICAgICB9CiAKLSAgICB2b2lkIGFs
bG9jYXRlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgcmVzdWx0KQorICAgIHZvaWQgYWxsb2NhdGVQ
YXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0KQogICAgIHsKLSAg
ICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBmcmVlbGlz
dFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVtYWluaW5nTWF0
Y2hDb3VudCk7Ci0gICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZW1haW5pbmdNYXRjaENvdW50KSk7Ci0gICAgICAgIG1vdmUoZnJlZWxpc3RSZWdpc3Rl
ciwgcmVzdWx0KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyZWVsaXN0UmVnaXN0ZXIsIFBh
cmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgZnJlZWxpc3RSZWdpc3Rlcik7CisgICAgICAgIG1f
YWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyKSk7CisgICAgICAgIG1faml0LnN1YjMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5yZW1haW5pbmdNYXRjaENvdW50
KTsKKyAgICAgICAgbV9oaXRNYXRjaExpbWl0LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3VudCkpOworICAgICAg
ICBtX2ppdC5tb3ZlKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCByZXN1bHQpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5mcmVlbGlzdFJlZ2lz
dGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVy
KTsKICAgICB9CiAKLSAgICB2b2lkIGZyZWVQYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBoZWFkUHRy
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgbmV3SGVhZFB0clJlZ2lzdGVyKQorICAgIHZvaWQgZnJlZVBh
cmVuQ29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBoZWFkUHRyUmVnaXN0ZXIsIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdpc3RlcikKICAgICB7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9m
ZnNldCgpKSwgbmV3SGVhZFB0clJlZ2lzdGVyKTsKLSAgICAgICAgc3RvcmVQdHIoZnJlZWxpc3RS
ZWdpc3RlciwgQWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNl
dCgpKSk7Ci0gICAgICAgIG1vdmUoaGVhZFB0clJlZ2lzdGVyLCBmcmVlbGlzdFJlZ2lzdGVyKTsK
KyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhoZWFkUHRyUmVn
aXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSwgbmV3SGVhZFB0clJlZ2lzdGVyKTsK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIobV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGhlYWRQdHJSZWdpc3RlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0
KCkpKTsKKyAgICAgICAgbV9qaXQubW92ZShoZWFkUHRyUmVnaXN0ZXIsIG1fcmVncy5mcmVlbGlz
dFJlZ2lzdGVyKTsKICAgICB9CiAKLQotICAgIHZvaWQgc3RvcmVCZWdpbkFuZE1hdGNoQW1vdW50
VG9QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBiZWdpbkdQUiwgUmVnaXN0ZXJJRCBtYXRjaEFtb3Vu
dEdQUiwgUmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCisgICAgdm9pZCBzdG9yZUJlZ2luQW5k
TWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiZWdp
bkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVuQ29udGV4dEdQUikKICAgICB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpICsgNCA9PSBQYXJlbkNvbnRleHQ6
Om1hdGNoQW1vdW50T2Zmc2V0KCkpOwotICAgICAgICBzdG9yZVBhaXIzMihiZWdpbkdQUiwgbWF0
Y2hBbW91bnRHUFIsIHBhcmVuQ29udGV4dEdQUiwgVHJ1c3RlZEltbTMyKFBhcmVuQ29udGV4dDo6
YmVnaW5PZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5zdG9yZVBhaXIzMihiZWdpbkdQUiwgbWF0
Y2hBbW91bnRHUFIsIHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihQYXJlbkNvbnRleHQ6OmJlZ2luT2Zmc2V0KCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGxvYWRC
ZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHBhcmVuQ29udGV4
dEdQUiwgUmVnaXN0ZXJJRCBiZWdpbkdQUiwgUmVnaXN0ZXJJRCBtYXRjaEFtb3VudEdQUikKKyAg
ICB2b2lkIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGJlZ2luR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudEdQUikK
ICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgp
ICsgNCA9PSBQYXJlbkNvbnRleHQ6Om1hdGNoQW1vdW50T2Zmc2V0KCkpOwotICAgICAgICBsb2Fk
UGFpcjMyKHBhcmVuQ29udGV4dEdQUiwgVHJ1c3RlZEltbTMyKFBhcmVuQ29udGV4dDo6YmVnaW5P
ZmZzZXQoKSksIGJlZ2luR1BSLCBtYXRjaEFtb3VudEdQUik7CisgICAgICAgIG1faml0LmxvYWRQ
YWlyMzIocGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFBhcmVu
Q29udGV4dDo6YmVnaW5PZmZzZXQoKSksIGJlZ2luR1BSLCBtYXRjaEFtb3VudEdQUik7CiAgICAg
fQogCi0gICAgdm9pZCBzYXZlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVn
LCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3VicGF0dGVybiwgdW5zaWduZWQg
bGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbikKKyAg
ICB2b2lkIHNhdmVQYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5D
b250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBm
aXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0
ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewogICAgICAgICBsb2FkRnJvbUZyYW1lKHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hB
bW91bnRJbmRleCgpLCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVCZWdpbkFuZE1hdGNoQW1vdW50
VG9QYXJlbkNvbnRleHQoaW5kZXgsIHRlbXBSZWcsIHBhcmVuQ29udGV4dFJlZyk7CisgICAgICAg
IHN0b3JlQmVnaW5BbmRNYXRjaEFtb3VudFRvUGFyZW5Db250ZXh0KG1fcmVncy5pbmRleCwgdGVt
cFJlZywgcGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgbG9hZEZyb21GcmFtZShzdWJwYXR0ZXJu
QmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnJldHVybkFkZHJl
c3NJbmRleCgpLCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVQdHIodGVtcFJlZywgQWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSk7Cisg
ICAgICAgIG1faml0LnN0b3JlUHRyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBh
cmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpyZXR1cm5BZGRyZXNzT2Zmc2V0KCkpKTsKICAg
ICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0
ZXJucykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJwYXR0ZXJuID0gZmlyc3RTdWJw
YXR0ZXJuOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuKyspIHsKICAg
ICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXQoKSk7Ci0gICAgICAgICAgICAgICAg
bG9hZDY0KEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZih1bnNpZ25l
ZCkpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICBzdG9yZTY0KHRlbXBSZWcsIEFkZHJlc3Mo
cGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRlcm5PZmZzZXQoc3VicGF0dGVy
bikpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWduZWQpKSwg
dGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0ZW1wUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c3VicGF0dGVy
bk9mZnNldChzdWJwYXR0ZXJuKSkpOwogICAgICAgICAgICAgICAgIGNsZWFyU3VicGF0dGVyblN0
YXJ0KHN1YnBhdHRlcm4pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uID0gc3VicGF0
dGVybkJhc2VGcmFtZUxvY2F0aW9uOyBmcmFtZUxvY2F0aW9uIDwgbV9wYXJlbkNvbnRleHRTaXpl
cy5mcmFtZVNsb3RzKCk7IGZyYW1lTG9jYXRpb24rKykgewogICAgICAgICAgICAgbG9hZEZyb21G
cmFtZShmcmFtZUxvY2F0aW9uLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHRlbXBS
ZWcsIEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnNhdmVkRnJhbWVPZmZz
ZXQobV9wYXJlbkNvbnRleHRTaXplcykgKyBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHVpbnRwdHJf
dCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zmc2V0
KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRyX3Qp
KSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHJlc3RvcmVQYXJlbkNvbnRleHQoUmVn
aXN0ZXJJRCBwYXJlbkNvbnRleHRSZWcsIFJlZ2lzdGVySUQgdGVtcFJlZywgdW5zaWduZWQgZmly
c3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwgdW5zaWduZWQgc3VicGF0dGVy
bkJhc2VGcmFtZUxvY2F0aW9uKQorICAgIHZvaWQgcmVzdG9yZVBhcmVuQ29udGV4dChNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZpcnN0U3VicGF0dGVybiwgdW5zaWduZWQgbGFzdFN1
YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbikKICAgICB7Ci0g
ICAgICAgIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4dChwYXJlbkNvbnRl
eHRSZWcsIGluZGV4LCB0ZW1wUmVnKTsKLSAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2lu
SW5kZXgoKSk7CisgICAgICAgIGxvYWRCZWdpbkFuZE1hdGNoQW1vdW50RnJvbVBhcmVuQ29udGV4
dChwYXJlbkNvbnRleHRSZWcsIG1fcmVncy5pbmRleCwgdGVtcFJlZyk7CisgICAgICAgIHN0b3Jl
VG9GcmFtZShtX3JlZ3MuaW5kZXgsIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgc3RvcmVUb0ZyYW1l
KHRlbXBSZWcsIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHBh
cmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpyZXR1cm5BZGRyZXNzT2Zmc2V0KCkpLCB0ZW1w
UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJl
bkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwgdGVtcFJl
Zyk7CiAgICAgICAgIHN0b3JlVG9GcmFtZSh0ZW1wUmVnLCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnJldHVybkFkZHJlc3NJbmRleCgpKTsK
ICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJw
YXR0ZXJucykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWJwYXR0ZXJuID0gZmlyc3RT
dWJwYXR0ZXJuOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuKyspIHsK
ICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGlzNjRCaXQoKSk7Ci0gICAgICAgICAgICAg
ICAgbG9hZDY0KEFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRl
cm5PZmZzZXQoc3VicGF0dGVybikpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICBzdG9yZTY0
KHRlbXBSZWcsIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZih1bnNp
Z25lZCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRlcm5PZmZzZXQoc3Vi
cGF0dGVybikpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHRlbXBS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8
IDEpICogc2l6ZW9mKHVuc2lnbmVkKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tU
cmFja0luZm9QYXJlbnRoZXNlczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBmcmFtZUxvY2F0aW9u
ID0gc3VicGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uOyBmcmFtZUxvY2F0aW9uIDwgbV9wYXJlbkNv
bnRleHRTaXplcy5mcmFtZVNsb3RzKCk7IGZyYW1lTG9jYXRpb24rKykgewotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1l
T2Zmc2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50
cHRyX3QpKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zm
c2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRy
X3QpKSwgdGVtcFJlZyk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUodGVtcFJlZywgZnJhbWVM
b2NhdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC00ODcsNyArMzg1LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB9CiAgICAgfQogCi0gICAg
dm9pZCBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoUmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIEp1bXBM
aXN0JiBmYWlsdXJlcywgSnVtcExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVyUmFuZ2Uq
IHJhbmdlcywgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkKiBtYXRjaEluZGV4LCBjb25zdCBVQ2hh
cjMyKiBtYXRjaGVzLCB1bnNpZ25lZCBtYXRjaENvdW50KQorICAgIHZvaWQgbWF0Y2hDaGFyYWN0
ZXJDbGFzc1JhbmdlKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlcywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBt
YXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdlKiByYW5nZXMsIHVuc2lnbmVkIGNvdW50LCB1
bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNoYXIzMiogbWF0Y2hlcywgdW5zaWduZWQgbWF0
Y2hDb3VudCkKICAgICB7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIC8vIHBpY2sgd2hpY2gg
cmFuZ2Ugd2UncmUgZ29pbmcgdG8gZ2VuZXJhdGUKQEAgLTQ5OCwzMyArMzk2LDMzIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIC8vIGNoZWNr
IGlmIHRoZXJlIGFyZSBhbnkgcmFuZ2VzIG9yIG1hdGNoZXMgYmVsb3cgbG8uICBJZiBub3QsIGp1
c3QgamwgdG8gZmFpbHVyZSAtCiAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnl0aGluZyBl
bHNlIHRvIGNoZWNrLCBjaGVjayB0aGF0IGZpcnN0LCBpZiBpdCBmYWxscyB0aHJvdWdoIGptcCB0
byBmYWlsdXJlLgogICAgICAgICAgICAgaWYgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYm
IChtYXRjaGVzWyptYXRjaEluZGV4XSA8IGxvKSkgewotICAgICAgICAgICAgICAgIEp1bXAgbG9P
ckFib3ZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1
bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGxvT3JBYm92ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9y
RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCls
bykpOwogCiAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgY29kZSBmb3IgYWxsIHJhbmdlcyBi
ZWZvcmUgdGhpcyBvbmUKICAgICAgICAgICAgICAgICBpZiAod2hpY2gpCiAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShjaGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRj
aERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgsIG1hdGNoZXMsIG1hdGNoQ291bnQpOwog
CiAgICAgICAgICAgICAgICAgd2hpbGUgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYmICht
YXRjaGVzWyptYXRjaEluZGV4XSA8IGxvKSkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaERl
c3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9y
dCltYXRjaGVzWyptYXRjaEluZGV4XSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3Rlciwg
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCltYXRjaGVzWyptYXRjaEluZGV4
XSkpKTsKICAgICAgICAgICAgICAgICAgICAgKysqbWF0Y2hJbmRleDsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgICAgICBs
b09yQWJvdmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluaygmbV9q
aXQpOwogICAgICAgICAgICAgfSBlbHNlIGlmICh3aGljaCkgewotICAgICAgICAgICAgICAgIEp1
bXAgbG9PckFib3ZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIElt
bTMyKCh1bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxvT3JBYm92ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBz
aG9ydClsbykpOwogCiAgICAgICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKGNo
YXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgcmFuZ2VzLCB3aGljaCwgbWF0Y2hJbmRleCwg
bWF0Y2hlcywgbWF0Y2hDb3VudCk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAK
LSAgICAgICAgICAgICAgICBsb09yQWJvdmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBs
b09yQWJvdmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIsIEltbTMyKCh1
bnNpZ25lZCBzaG9ydClsbykpKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbG8pKSk7CiAKICAgICAgICAgICAgIHdoaWxl
ICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAobWF0Y2hlc1sqbWF0Y2hJbmRleF0gPD0g
aGkpKQogICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAKLSAgICAgICAgICAgIG1hdGNo
RGVzdC5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1
bnNpZ25lZCBzaG9ydCloaSkpKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWhpKSkpOwogICAgICAgICAgICAgLy8g
ZmFsbCB0aHJvdWdoIHRvIGhlcmUsIHRoZSB2YWx1ZSBpcyBhYm92ZSBoaS4KIAogICAgICAgICAg
ICAgLy8gc2h1ZmZsZSBhbG9uZyAmIGxvb3AgYXJvdW5kIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBt
YXRjaGVzIHRvIGhhbmRsZS4KQEAgLTUzNCwyNCArNDMyLDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfSB3aGlsZSAoY291bnQpOwogICAgIH0K
IAotICAgIHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhSZWdpc3RlcklEIGNoYXJhY3RlciwgSnVt
cExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJDbGFzcykKKyAgICB2
b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoRGVzdCwgY29uc3QgQ2hhcmFjdGVy
Q2xhc3MqIGNoYXJDbGFzcykKICAgICB7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fdGFibGUg
JiYgIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVz
cyB0YWJsZUVudHJ5KGNoYXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY2hhckNs
YXNzLT5tX3RhYmxlKSk7Ci0gICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaFRlc3Q4
KGNoYXJDbGFzcy0+bV90YWJsZUludmVydGVkID8gWmVybyA6IE5vblplcm8sIHRhYmxlRW50cnkp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgdGFibGVFbnRy
eShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNoYXJDbGFzcy0+bV90YWJs
ZSkpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0OChjaGFy
Q2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IE1hY3JvQXNzZW1ibGVyOjpaZXJvIDogTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHRhYmxlRW50cnkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIEp1bXBMaXN0IHVuaWNvZGVGYWlsOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgdW5pY29kZUZhaWw7CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0
Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlLnNpemUoKSkg
ewotICAgICAgICAgICAgSnVtcExpc3QgaXNBc2NpaTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBpc0FzY2lpOwogICAgICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRj
aGVzLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkKLSAgICAgICAgICAgICAg
ICBpc0FzY2lpLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgVHJ1
c3RlZEltbTMyKDB4N2YpKSk7CisgICAgICAgICAgICAgICAgaXNBc2NpaS5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4N2YpKSk7CiAKICAgICAgICAgICAgIGlmIChjaGFy
Q2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzVW5pY29kZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNoID0gY2hhckNsYXNzLT5tX21hdGNo
ZXNVbmljb2RlW2ldOwotICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5j
aDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoKSkpOworICAgICAgICAgICAgICAgICAgICBt
YXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hh
cmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2gpKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCkBAIC01NjAsMjUgKzQ1OCwyNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgbG8gPSBj
aGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5iZWdpbjsKICAgICAgICAgICAgICAgICAgICAg
VUNoYXIzMiBoaSA9IGNoYXJDbGFzcy0+bV9yYW5nZXNVbmljb2RlW2ldLmVuZDsKIAotICAgICAg
ICAgICAgICAgICAgICBKdW1wIGJlbG93ID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwg
SW1tMzIobG8pKTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gz
MihMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoaGkpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJlbG93LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGJlbG93ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihsbykpOworICAgICAgICAgICAgICAg
ICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGhpKSkpOworICAg
ICAgICAgICAgICAgICAgICBiZWxvdy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6
ZSgpIHx8IGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHVuaWNv
ZGVGYWlsID0ganVtcCgpOwotICAgICAgICAgICAgaXNBc2NpaS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIHVuaWNvZGVGYWlsID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgaXNBc2Np
aS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX3Jh
bmdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1hdGNoSW5kZXggPSAwOwotICAg
ICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2Uo
Y2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0Y2hEZXN0LCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLmJlZ2lu
KCksIGNoYXJDbGFzcy0+bV9yYW5nZXMuc2l6ZSgpLCAmbWF0Y2hJbmRleCwgY2hhckNsYXNzLT5t
X21hdGNoZXMuYmVnaW4oKSwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKTsKICAgICAgICAg
ICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLT5tX21hdGNoZXMuc2l6ZSgpKQotICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3Rlciwg
SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoYXJDbGFzcy0+bV9tYXRjaGVzW21hdGNoSW5kZXgrK10p
KSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNp
Z25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4KytdKSkpOwogCi0gICAg
ICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbHVyZXMubGluaygm
bV9qaXQpOwogICAgICAgICB9IGVsc2UgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkg
ewogICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uOiBnYXRoZXIgJ2EnLCdBJyBldGMgYmFjayB0
b2dldGhlciwgY2FuIG1hc2sgJiB0ZXN0IG9uY2UuCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
bWF0Y2hlc0FaYXo7CkBAIC01OTMsNzggKzQ5MSw4MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJVXBwZXIo
Y2gpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJh
Y3RlciwgSW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOworICAgICAgICAgICAgICAgIG1hdGNo
RGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpY2gpKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmICh1bnNpZ25lZCBjb3VudEFaYXogPSBtYXRjaGVzQVph
ei5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnRBWmF6OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5h
cHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTMyKG1hdGNoZXNBWmF6
W2ldKSkpOworICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG1hdGNoZXNBWmF6W2ldKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzVW5pY29kZS5zaXplKCkgfHwgY2hhckNs
YXNzLT5tX3Jhbmdlc1VuaWNvZGUuc2l6ZSgpKQotICAgICAgICAgICAgdW5pY29kZUZhaWwubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxpbmsoJm1faml0KTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKLSAgICB2b2lkIGFkdmFu
Y2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJtTWF0Y2goY29uc3QgUGF0dGVyblRlcm0qIHRl
cm0sIEp1bXBMaXN0JiBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5nSW5kZXgsIGNvbnN0IFJlZ2lz
dGVySUQgY2hhcmFjdGVyKQorICAgIHZvaWQgYWR2YW5jZUluZGV4QWZ0ZXJDaGFyYWN0ZXJDbGFz
c1Rlcm1NYXRjaChjb25zdCBQYXR0ZXJuVGVybSogdGVybSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlc0FmdGVySW5jcmVtZW50aW5nSW5kZXgsIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIEFTU0VSVCh0ZXJtLT50eXBl
ID09IFBhdHRlcm5UZXJtOjpUeXBlOjpDaGFyYWN0ZXJDbGFzcyk7CiAKICAgICAgICAgaWYgKHRl
cm0tPmlzRml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIg
OiAxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8g
MiA6IDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgSnVtcCBpc0JNUENoYXIgPSBi
cmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
X3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFy
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1f
cmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAgICBmYWlsdXJlc0FmdGVy
SW5jcmVtZW50aW5nSW5kZXguYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmsoJm1faml0
KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gSnVtcHMgaWYgaW5wdXQgbm90
IGF2YWlsYWJsZTsgd2lsbCBoYXZlIChpbmNvcnJlY3RseSkgaW5jcmVtZW50ZWQgYWxyZWFkeSEK
LSAgICBKdW1wIGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291bnRUb0NoZWNrID0g
MCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2ln
bmVkIGNvdW50VG9DaGVjayA9IDApCiAgICAgewogICAgICAgICBpZiAoY291bnRUb0NoZWNrKQot
ICAgICAgICAgICAgYWRkMzIoSW1tMzIoY291bnRUb0NoZWNrKSwgaW5kZXgpOwotICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoQWJvdmUsIGluZGV4LCBsZW5ndGgpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvdW50VG9DaGVjayksIG1fcmVncy5pbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIG1f
cmVncy5pbmRleCwgbV9yZWdzLmxlbmd0aCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcElmQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291bnRUb0NoZWNrKQorICAgIHsK
KyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNvdW50VG9DaGVjayks
IG1fcmVncy5pbmRleCk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOwogICAgIH0K
IAotICAgIEp1bXAganVtcElmQXZhaWxhYmxlSW5wdXQodW5zaWduZWQgY291bnRUb0NoZWNrKQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrTm90RW5vdWdoSW5wdXQoTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgYWRkaXRpb25hbEFtb3VudCkKICAgICB7Ci0gICAgICAgIGFkZDMyKElt
bTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93
T3JFcXVhbCwgaW5kZXgsIGxlbmd0aCk7CisgICAgICAgIG1faml0LmFkZDMyKG1fcmVncy5pbmRl
eCwgYWRkaXRpb25hbEFtb3VudCk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIG1fcmVncy5sZW5ndGgpOwogICAg
IH0KIAotICAgIEp1bXAgY2hlY2tOb3RFbm91Z2hJbnB1dChSZWdpc3RlcklEIGFkZGl0aW9uYWxB
bW91bnQpCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2tJbnB1dCgpCiAgICAgewotICAg
ICAgICBhZGQzMihpbmRleCwgYWRkaXRpb25hbEFtb3VudCk7Ci0gICAgICAgIHJldHVybiBicmFu
Y2gzMihBYm92ZSwgYWRkaXRpb25hbEFtb3VudCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fcmVncy5pbmRleCwg
bV9yZWdzLmxlbmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBjaGVja0lucHV0KCkKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBhdEVuZE9mSW5wdXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKEJlbG93T3JFcXVhbCwgaW5kZXgsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgbV9yZWdzLmxl
bmd0aCk7CiAgICAgfQogCi0gICAgSnVtcCBhdEVuZE9mSW5wdXQoKQorICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNo
MzIoRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOwog
ICAgIH0KIAotICAgIEp1bXAgbm90QXRFbmRPZklucHV0KCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MoQ2hlY2tlZDx1bnNpZ25lZD4g
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRlbXBS
ZWcpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBsZW5n
dGgpOworICAgICAgICByZXR1cm4gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhuZWdhdGl2
ZUNoYXJhY3Rlck9mZnNldCwgdGVtcFJlZywgbV9yZWdzLmluZGV4KTsKICAgICB9CiAKLSAgICBC
YXNlSW5kZXggbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBu
ZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgUmVnaXN0ZXJJRCB0ZW1wUmVnLCBSZWdpc3RlcklEIGlu
ZGV4UmVnID0gaW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zm
c2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBpbmRleFJlZykKICAgICB7Ci0gICAgICAgIFJlZ2lzdGVySUQgYmFzZSA9IGlu
cHV0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiYXNlID0gbV9yZWdzLmlu
cHV0OwogCi0gICAgICAgIC8vIEJhc2VJbmRleCgpIGFkZHJlc3NpbmcgY2FuIHRha2UgYSBpbnQz
Ml90IG9mZnNldC4gR2l2ZW4gdGhhdCB3ZSBjYW4gaGF2ZSBhIHJlZ3VsYXIKLSAgICAgICAgLy8g
ZXhwcmVzc2lvbiB0aGF0IGhhcyB1bnNpZ25lZCBjaGFyYWN0ZXIgb2Zmc2V0cywgQmFzZUluZGV4
J3Mgc2lnbmVkIG9mZnNldCBpcyBpbnN1ZmZpY2llbnQKKyAgICAgICAgLy8gTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgpIGFkZHJlc3NpbmcgY2FuIHRha2UgYSBpbnQzMl90IG9mZnNldC4gR2l2
ZW4gdGhhdCB3ZSBjYW4gaGF2ZSBhIHJlZ3VsYXIKKyAgICAgICAgLy8gZXhwcmVzc2lvbiB0aGF0
IGhhcyB1bnNpZ25lZCBjaGFyYWN0ZXIgb2Zmc2V0cywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCdzIHNpZ25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CiAgICAgICAgIC8vIGZvciBhZGRyZXNz
aW5nIGluIGV4dHJlbWUgY2FzZXMgd2hlcmUgd2UgbWlnaHQgdW5kZXJmbG93LiBUaGVyZWZvcmUg
d2UgY2hlY2sgdG8gc2VlIGlmCiAgICAgICAgIC8vIG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0IHdp
bGwgdW5kZXJmbG93IGRpcmVjdGx5IG9yIGFmdGVyIGNvbnZlcnRpbmcgZm9yIDE2IGJpdCBjaGFy
YWN0ZXJzLgogICAgICAgICAvLyBJZiBzbywgd2UgZG8gb3VyIG93biBhZGRyZXNzIGNhbGN1bGF0
aW5nIGJ5IGFkanVzdGluZyB0aGUgYmFzZSwgdXNpbmcgdGhlIHJlc3VsdCByZWdpc3RlcgpAQCAt
NjczLDExICs1NzYsMTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICB1bnNpZ25lZCBvZmZzZXRBZGp1c3RBbW91bnQgPSAweDQwMDAwMDAwOwogICAg
ICAgICBpZiAobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgPiBtYXhpbXVtTmVnYXRpdmVPZmZzZXRG
b3JDaGFyYWN0ZXJTaXplKSB7CiAgICAgICAgICAgICBiYXNlID0gdGVtcFJlZzsKLSAgICAgICAg
ICAgIG1vdmUoaW5wdXQsIGJhc2UpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5w
dXQsIGJhc2UpOwogICAgICAgICAgICAgd2hpbGUgKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0ID4g
bWF4aW11bU5lZ2F0aXZlT2Zmc2V0Rm9yQ2hhcmFjdGVyU2l6ZSkgewotICAgICAgICAgICAgICAg
IHN1YlB0cihUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwgYmFzZSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0
QWRqdXN0QW1vdW50KSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgIT0g
Q2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgICAgICAgICBzdWJQdHIoVHJ1c3RlZEltbTMy
KG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihvZmZzZXRBZGp1c3RBbW91bnQpLCBi
YXNlKTsKICAgICAgICAgICAgICAgICBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCAtPSBvZmZzZXRB
ZGp1c3RBbW91bnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY4NSw2NyArNTg4LDcy
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgQ2hl
Y2tlZDxpbnQzMl90PiBjaGFyYWN0ZXJPZmZzZXQoLXN0YXRpY19jYXN0PGludDMyX3Q+KG5lZ2F0
aXZlQ2hhcmFjdGVyT2Zmc2V0KSk7CiAKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNp
emU6OkNoYXI4KQotICAgICAgICAgICAgcmV0dXJuIEJhc2VJbmRleChpbnB1dCwgaW5kZXhSZWcs
IFRpbWVzT25lLCBjaGFyYWN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2Yo
Y2hhcikpKTsKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1f
cmVncy5pbnB1dCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgY2hhcmFjdGVy
T2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGNoYXIpKSk7CiAKLSAgICAgICAg
cmV0dXJuIEJhc2VJbmRleChpbnB1dCwgaW5kZXhSZWcsIFRpbWVzVHdvLCBjaGFyYWN0ZXJPZmZz
ZXQgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoVUNoYXIpKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5pbnB1dCwgaW5kZXhSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc1R3bywgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2l6ZW9mKFVDaGFyKSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RF
X0VYUFJFU1NJT05TKQotICAgIHZvaWQgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChSZWdpc3RlcklE
IHJlc3VsdFJlZykKKyAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhckltcGwoTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2hhclNp
emUgPT0gQ2hhclNpemU6OkNoYXIxNik7CiAKLSAgICAgICAgSnVtcExpc3Qgbm90VW5pY29kZTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vdFVuaWNvZGU7CiAKLSAgICAgICAg
bG9hZDE2VW5hbGlnbmVkKHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCByZXN1bHRSZWcpOworICAg
ICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQobV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWls
LCByZXN1bHRSZWcpOwogCiAgICAgICAgIC8vIElzIHRoZSBjaGFyYWN0ZXIgYSBsZWFkaW5nIHN1
cnJvZ2F0ZT8KLSAgICAgICAgYW5kMzIoc3Vycm9nYXRlVGFnTWFzaywgcmVzdWx0UmVnLCB1bmlj
b2RlVGVtcCk7Ci0gICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCB1
bmljb2RlVGVtcCwgbGVhZGluZ1N1cnJvZ2F0ZVRhZykpOworICAgICAgICBtX2ppdC5hbmQzMihZ
YXJySklURGVmYXVsdFJlZ2lzdGVyczo6c3Vycm9nYXRlVGFnTWFzaywgcmVzdWx0UmVnLCBtX3Jl
Z3MudW5pY29kZVRlbXApOworICAgICAgICBub3RVbmljb2RlLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy51bmljb2RlVGVtcCwgbV9yZWdzLmxl
YWRpbmdTdXJyb2dhdGVUYWcpKTsKIAogICAgICAgICAvLyBJcyB0aGUgaW5wdXQgbG9uZyBlbm91
Z2ggdG8gcmVhZCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZT8KLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigyKSwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwotICAgICAgICBub3RVbmljb2RlLmFw
cGVuZChicmFuY2hQdHIoQWJvdmVPckVxdWFsLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgZW5k
T2ZTdHJpbmdBZGRyZXNzKSk7CisgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDIpLCBtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOworICAgICAg
ICBub3RVbmljb2RlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCBtX3JlZ3MuZW5kT2ZTdHJp
bmdBZGRyZXNzKSk7CiAKICAgICAgICAgLy8gSXMgdGhlIGNoYXJhY3RlciBhIHRyYWlsaW5nIHN1
cnJvZ2F0ZT8KLSAgICAgICAgbG9hZDE2VW5hbGlnbmVkKEFkZHJlc3MocmVnVW5pY29kZUlucHV0
QW5kVHJhaWwpLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7Ci0gICAgICAgIGFuZDMyKHN1cnJv
Z2F0ZVRhZ01hc2ssIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCB1bmljb2RlVGVtcCk7Ci0gICAg
ICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCB1bmljb2RlVGVtcCwgdHJh
aWxpbmdTdXJyb2dhdGVUYWcpKTsKKyAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCksIG1fcmVn
cy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG1faml0LmFuZDMyKFlhcnJKSVRE
ZWZhdWx0UmVnaXN0ZXJzOjpzdXJyb2dhdGVUYWdNYXNrLCBtX3JlZ3MucmVnVW5pY29kZUlucHV0
QW5kVHJhaWwsIG1fcmVncy51bmljb2RlVGVtcCk7CisgICAgICAgIG5vdFVuaWNvZGUuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLnVuaWNvZGVU
ZW1wLCBtX3JlZ3MudHJhaWxpbmdTdXJyb2dhdGVUYWcpKTsKIAogICAgICAgICAvLyBDb21iaW5l
IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHN1cnJvZ2F0ZXMgdG8gcHJvZHVjZSBhIGNvZGUgcG9pbnQu
Ci0gICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMigxMCksIHJlc3VsdFJlZyk7Ci0gICAgICAg
IGdldEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KHJlc3VsdFJlZywgcmVnVW5pY29kZUlucHV0
QW5kVHJhaWwsIFRpbWVzT25lLCAtVTE2X1NVUlJPR0FURV9PRkZTRVQpLCByZXN1bHRSZWcpOwot
ICAgICAgICBub3RVbmljb2RlLmxpbmsodGhpcyk7CisgICAgICAgIG1faml0LmxzaGlmdDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTApLCByZXN1bHRSZWcpOworICAgICAgICBtX2pp
dC5nZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UmVn
LCBtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09u
ZSwgLVUxNl9TVVJST0dBVEVfT0ZGU0VUKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbm90VW5pY29k
ZS5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXIoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgcmVzdWx0UmVnKQorICAgIHZvaWQgdHJ5UmVhZFVu
aWNvZGVDaGFyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYWRkcmVzcywgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY2hhclNp
emUgPT0gQ2hhclNpemU6OkNoYXIxNik7CiAKLSAgICAgICAgZ2V0RWZmZWN0aXZlQWRkcmVzcyhh
ZGRyZXNzLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG1faml0LmdldEVmZmVj
dGl2ZUFkZHJlc3MoYWRkcmVzcywgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKTsKIAot
ICAgICAgICBpZiAocmVzdWx0UmVnID09IHJlZ1QwKQotICAgICAgICAgICAgbV90cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckNhbGxzLmFwcGVuZChuZWFyQ2FsbCgpKTsKKyAgICAgICAgaWYgKHJlc3Vs
dFJlZyA9PSBtX3JlZ3MucmVnVDApCisgICAgICAgICAgICBtX3RyeVJlYWRVbmljb2RlQ2hhcmFj
dGVyQ2FsbHMuYXBwZW5kKG1faml0Lm5lYXJDYWxsKCkpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKHJlc3VsdFJlZyk7CiAgICAgfQogI2VuZGlmCiAg
ICAgCi0gICAgdm9pZCByZWFkQ2hhcmFjdGVyKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hh
cmFjdGVyT2Zmc2V0LCBSZWdpc3RlcklEIHJlc3VsdFJlZywgUmVnaXN0ZXJJRCBpbmRleFJlZyA9
IGluZGV4KQorICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2
ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVzdWx0UmVnKQog
ICAgIHsKLSAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBuZWdhdGl2ZU9mZnNldEluZGV4ZWRB
ZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIGluZGV4UmVnKTsKKyAg
ICAgICAgcmVhZENoYXJhY3RlcihuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBt
X3JlZ3MuaW5kZXgpOworICAgIH0KKworICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVu
c2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFJlZykKKyAgICB7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYWRkcmVzcyA9IG5lZ2F0aXZlT2Zm
c2V0SW5kZXhlZEFkZHJlc3MobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIHJlc3VsdFJlZywgaW5k
ZXhSZWcpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkKLSAg
ICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkOChhZGRyZXNzLCByZXN1bHRSZWcpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VY
UFJFU1NJT05TKQogICAgICAgICBlbHNlIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKQogICAg
ICAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFyKGFkZHJlc3MsIHJlc3VsdFJlZyk7CiAjZW5kaWYK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKGFkZHJlc3MsIHJlc3Vs
dFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQoYWRkcmVzcywgcmVzdWx0
UmVnKTsKICAgICB9CiAKLSAgICBKdW1wIGp1bXBJZkNoYXJOb3RFcXVhbHMoVUNoYXIzMiBjaCwg
Q2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVySUQgY2hh
cmFjdGVyKQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBJZkNoYXJOb3RFcXVhbHMoVUNo
YXIzMiBjaCwgQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIHJlYWRDaGFy
YWN0ZXIobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlcik7CiAKQEAgLTc1Myw0MyAr
NjYxLDQzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgLy8gdXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRv
IGEgY2hhcmFjdGVyIGNsYXNzLgogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5pZ25vcmVDYXNl
KCkgfHwgaXNBU0NJSUFscGhhKGNoKSB8fCBpc0Nhbm9uaWNhbGx5VW5pcXVlKGNoLCBtX2Nhbm9u
aWNhbE1vZGUpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25vcmVDYXNlKCkgJiYgaXNBU0NJ
SUFscGhhKGNoKSkgewotICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMHgyMCksIGNoYXJh
Y3Rlcik7CisgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMHgyMCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjaCB8PSAweDIwOwogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNo
KSk7CisgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uKQorICAgIHZvaWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
ZywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHBva2UocmVnLCBmcmFt
ZUxvY2F0aW9uKTsKKyAgICAgICAgbV9qaXQucG9rZShyZWcsIGZyYW1lTG9jYXRpb24pOwogICAg
IH0KIAotICAgIHZvaWQgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMiBpbW0sIHVuc2lnbmVkIGZy
YW1lTG9jYXRpb24pCisgICAgdm9pZCBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICBwb2tl
KGltbSwgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0LnBva2UoaW1tLCBmcmFtZUxvY2F0
aW9uKTsKICAgICB9CiAKICNpZiBDUFUoQVJNNjQpIHx8IENQVShYODZfNjQpCi0gICAgdm9pZCBz
dG9yZVRvRnJhbWUoVHJ1c3RlZEltbVB0ciBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisg
ICAgdm9pZCBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgaW1tLCB1
bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAgcG9rZShpbW0sIGZyYW1lTG9j
YXRpb24pOworICAgICAgICBtX2ppdC5wb2tlKGltbSwgZnJhbWVMb2NhdGlvbik7CiAgICAgfQog
I2VuZGlmCiAKLSAgICBEYXRhTGFiZWxQdHIgc3RvcmVUb0ZyYW1lV2l0aFBhdGNoKHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24pCisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdG9yZVRv
RnJhbWVXaXRoUGF0Y2godW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBzdG9yZVB0cldpdGhQYXRjaChUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOworICAg
ICAgICByZXR1cm4gbV9qaXQuc3RvcmVQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGxvYWRGcm9tRnJhbWUodW5zaWduZWQgZnJhbWVMb2NhdGlvbiwg
UmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBsb2FkRnJvbUZyYW1lKHVuc2lnbmVkIGZyYW1lTG9j
YXRpb24sIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICB7Ci0gICAgICAgIHBl
ZWsocmVnLCBmcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgbV9qaXQucGVlayhyZWcsIGZyYW1lTG9j
YXRpb24pOwogICAgIH0KIAogICAgIHZvaWQgbG9hZEZyb21GcmFtZUFuZEp1bXAodW5zaWduZWQg
ZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIGZhckp1bXAoQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBZYXJyQmFja3RyYWNr
UHRyVGFnKTsKKyAgICAgICAgbV9qaXQuZmFySnVtcChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXpl
b2Yodm9pZCopKSwgWWFyckJhY2t0cmFja1B0clRhZyk7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
YWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyh1bnNpZ25lZCBjYWxsRnJhbWVTaXplKQpAQCAtODA3
LDEzICs3MTUsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxG
cmFtZVNpemVJbkJ5dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAg
ICAgIGlmIChjYWxsRnJhbWVTaXplSW5CeXRlcykKLSAgICAgICAgICAgIGFkZFB0cihJbW0zMihj
YWxsRnJhbWVTaXplSW5CeXRlcyksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2FsbEZyYW1lU2l6ZUluQnl0ZXMp
LCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHZv
aWQgZ2VuZXJhdGVGYWlsUmV0dXJuKCkKICAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cigodm9pZCopV1RGOjpub3RGb3VuZCksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKVdURjo6bm90Rm91bmQpLCBtX3JlZ3Mu
cmV0dXJuUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCksIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOworCisjaWYgRU5BQkxFKFlBUlJf
SklUX1JFR0VYUF9URVNUX0lOTElORSkKKyAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklU
Q29tcGlsZU1vZGU6OklubGluZVRlc3QpIHsKKyAgICAgICAgICAgIG1faW5saW5lZEZhaWxlZE1h
dGNoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisjZW5kaWYKKwogICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogICAgIH0KIApAQCAtODIyLDQ4
ICs3MzgsNDIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
ICAgICBpZiAobV9hYm9ydEV4ZWN1dGlvbi5lbXB0eSgpICYmIG1faGl0TWF0Y2hMaW1pdC5lbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEp1bXBMaXN0IGZpbmlzaEV4aXRp
bmc7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmaW5pc2hFeGl0aW5nOwogICAg
ICAgICBpZiAoIW1fYWJvcnRFeGVjdXRpb24uZW1wdHkoKSkgewotICAgICAgICAgICAgbV9hYm9y
dEV4ZWN1dGlvbi5saW5rKHRoaXMpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCh2
b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIGZpbmlzaEV4aXRpbmcuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBtX2Fib3J0RXhl
Y3V0aW9uLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oLTIpKSwgbV9yZWdz
LnJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZpbmlzaEV4aXRpbmcuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1faGl0TWF0Y2hMaW1pdC5lbXB0
eSgpKSB7Ci0gICAgICAgICAgICBtX2hpdE1hdGNoTGltaXQubGluayh0aGlzKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpLCBy
ZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBtX2hpdE1hdGNoTGltaXQubGluaygmbV9qaXQp
OworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigo
dm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZmluaXNoRXhpdGluZy5saW5rKHRoaXMpOworICAgICAgICBm
aW5pc2hFeGl0aW5nLmxpbmsoJm1faml0KTsKICAgICAgICAgcmVtb3ZlQ2FsbEZyYW1lKCk7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdpc3RlcjIpOworICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIG1fcmVncy5yZXR1cm5S
ZWdpc3RlcjIpOwogICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogICAgIH0KIAogICAgIC8vIFVz
ZWQgdG8gcmVjb3JkIHN1YnBhdHRlcm5zLCBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgbV9jb21w
aWxlTW9kZSBpcyBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zLgotICAgIHZvaWQg
c2V0U3VicGF0dGVyblN0YXJ0KFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJuKQor
ICAgIHZvaWQgc2V0U3VicGF0dGVyblN0YXJ0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJl
ZywgdW5zaWduZWQgc3VicGF0dGVybikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJu
KTsKICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVN
b2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlz
IGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMy
KHJlZywgQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihyZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVn
cy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9Ci0gICAg
dm9pZCBzZXRTdWJwYXR0ZXJuRW5kKFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJu
KQorICAgIHZvaWQgc2V0U3VicGF0dGVybkVuZChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBy
ZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCiAgICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVy
bik7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQobV9jb21waWxl
TW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSwgYnV0IHRoZW4gdGhp
cyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IE5PUkVUVVJOLiA6LSgKLSAgICAgICAgc3RvcmUz
MihyZWcsIEFkZHJlc3Mob3V0cHV0LCAoKHN1YnBhdHRlcm4gPDwgMSkgKyAxKSAqIHNpemVvZihp
bnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhtX3JlZ3Mub3V0cHV0LCAoKHN1YnBhdHRlcm4gPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7
CiAgICAgfQogICAgIHZvaWQgY2xlYXJTdWJwYXR0ZXJuU3RhcnQodW5zaWduZWQgc3VicGF0dGVy
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJuKTsKICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2Rl
OjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlv
bmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigtMSksIEFk
ZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjbGVhck1hdGNoZXModW5zaWduZWQgc3VicGF0dGVybiwgdW5zaWduZWQgbGFz
dFN1YnBhdHRlcm4pCi0gICAgewotICAgICAgICBmb3IgKDsgc3VicGF0dGVybiA8PSBsYXN0U3Vi
cGF0dGVybjsgc3VicGF0dGVybisrKQotICAgICAgICAgICAgY2xlYXJTdWJwYXR0ZXJuU3RhcnQo
c3VicGF0dGVybik7CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigtMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsIChzdWJw
YXR0ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9CiAKICAgICAvLyBXZSB1c2Ugb25l
IG9mIHRocmVlIGRpZmZlcmVudCBzdHJhdGVnaWVzIHRvIHRyYWNrIHRoZSBzdGFydCBvZiB0aGUg
Y3VycmVudCBtYXRjaCwKQEAgLTg3MSwyNSArNzgxLDI1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyAxKSBJZiB0aGUgcGF0dGVybiBoYXMgYSBmaXhl
ZCBzaXplLCBkbyBub3RoaW5nISAtIHdlIGNhbGN1bGF0ZSB0aGUgdmFsdWUgbGF6aWx5CiAgICAg
Ly8gICAgYXQgdGhlIGVuZCBvZiBtYXRjaGluZy4gVGhpcyBpcyBpcnJlc3BlY3RpdmUgb2YgbV9j
b21waWxlTW9kZSwgYW5kIGluIHRoaXMgY2FzZQogICAgIC8vICAgIHRoZXNlIG1ldGhvZHMgc2hv
dWxkIG5ldmVyIGJlIGNhbGxlZC4KLSAgICAvLyAyKSBJZiB3ZSdyZSBjb21waWxpbmcgSklUQ29t
cGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucywgJ291dHB1dCcgY29udGFpbnMgYSBwb2ludGVy
IHRvIGFuIG91dHB1dAorICAgIC8vIDIpIElmIHdlJ3JlIGNvbXBpbGluZyBKSVRDb21waWxlTW9k
ZTo6SW5jbHVkZVN1YnBhdHRlcm5zLCAnbV9yZWdzLm91dHB1dCcgY29udGFpbnMgYSBwb2ludGVy
IHRvIGFuIG91dHB1dAogICAgIC8vICAgIHZlY3Rvciwgc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGlu
IHRoZSBvdXRwdXQgdmVjdG9yLgotICAgIC8vIDMpIElmIHdlJ3JlIGNvbXBpbGluZyBNYXRjaE9u
bHksICdvdXRwdXQnIGlzIHVudXNlZCwgc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGRpcmVjdGx5Cisg
ICAgLy8gMykgSWYgd2UncmUgY29tcGlsaW5nIE1hdGNoT25seSBvciBJbmxpbmVkVGVzdCwgJ21f
cmVncy5vdXRwdXQnIGlzIHVudXNlZCwgc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGRpcmVjdGx5CiAg
ICAgLy8gICAgaW4gdGhpcyByZWdpc3Rlci4KLSAgICB2b2lkIHNldE1hdGNoU3RhcnQoUmVnaXN0
ZXJJRCByZWcpCisgICAgdm9pZCBzZXRNYXRjaFN0YXJ0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNG
aXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6
SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgc3RvcmUzMihyZWcsIG91dHB1dCk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlZywgbV9yZWdzLm91dHB1dCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1vdmUocmVnLCBvdXRwdXQpOworICAgICAgICAgICAgbV9qaXQubW92
ZShyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgIH0KLSAgICB2b2lkIGdldE1hdGNoU3RhcnQoUmVn
aXN0ZXJJRCByZWcpCisgICAgdm9pZCBnZXRNYXRjaFN0YXJ0KE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1fYm9keS0+bV9o
YXNGaXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9k
ZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZDMyKG91dHB1dCwgcmVnKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihtX3JlZ3Mub3V0cHV0LCByZWcpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtb3ZlKG91dHB1dCwgcmVnKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUobV9yZWdzLm91dHB1dCwgcmVnKTsKICAgICB9CiAKICAgICBlbnVtIGNsYXNzIFlhcnJPcENv
ZGUgOiB1aW50OF90IHsKQEAgLTk2NSwxMiArODc1LDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgLy8gdXNlZCBmb3IganVtcHMgb3V0IHRvIGJh
Y2t0cmFja2luZyBjb2RlLCBhbmQgYSBzaW5nbGUgcmVlbnRyeSBiYWNrCiAgICAgICAgIC8vIGlu
dG8gdGhlIGNvZGUgZm9yIGEgbm9kZSAobGlrZWx5IHdoZXJlIGEgYmFja3RyYWNrIHdpbGwgdHJp
Z2dlcgogICAgICAgICAvLyByZW1hdGNoaW5nKS4KLSAgICAgICAgTGFiZWwgbV9yZWVudHJ5Owot
ICAgICAgICBKdW1wTGlzdCBtX2p1bXBzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9yZWVudHJ5OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9qdW1wczsKIAog
ICAgICAgICAvLyBVc2VkIGZvciBiYWNrdHJhY2tpbmcgd2hlbiB0aGUgcHJpb3IgYWx0ZXJuYXRp
dmUgZGlkIG5vdCBjb25zdW1lIGFueQogICAgICAgICAvLyBjaGFyYWN0ZXJzIGJ1dCBtYXRjaGVk
LgotICAgICAgICBKdW1wIG1femVyb0xlbmd0aE1hdGNoOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKIAogICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNl
ZCB0byBudWxsIG91dCB0aGUgc2Vjb25kIHBhdHRlcm4gY2hhcmFjdGVyLCB3aGVuCiAgICAgICAg
IC8vIHR3byBhcmUgZnVzZWQgdG8gbWF0Y2ggYSBwYWlyIHRvZ2V0aGVyLgpAQCAtOTg0LDcgKzg5
NCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAg
Ly8gVXNlZCBieSBZYXJyT3BDb2RlOjpOZXN0ZWRBbHRlcm5hdGl2ZU5leHQvRW5kIHRvIGhvbGQg
dGhlIHBvaW50ZXIgdG8gdGhlCiAgICAgICAgIC8vIHZhbHVlIHRoYXQgd2lsbCBiZSBwdXNoZWQg
aW50byB0aGUgcGF0dGVybidzIGZyYW1lIHRvIHJldHVybiB0bywKICAgICAgICAgLy8gdXBvbiBi
YWNrdHJhY2tpbmcgYmFjayBpbnRvIHRoZSBkaXNqdW5jdGlvbi4KLSAgICAgICAgRGF0YUxhYmVs
UHRyIG1fcmV0dXJuQWRkcmVzczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBtX3JldHVybkFkZHJlc3M7CiAKICAgICAgICAgQm95ZXJNb29yZUluZm8qIG1fYm1JbmZvIHsg
bnVsbHB0ciB9OwogICAgIH07CkBAIC0xMDA2LDcgKzkxNiwyMSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgLy8gIC0gQSBmbGFnIGluZGljYXRpbmcgdGhh
dCB0aGUgY3VycmVudCBzZXF1ZW5jZSBvZiBnZW5lcmF0ZWQgY29kZSB1cCB0bwogICAgIC8vICAg
IHRoaXMgcG9pbnQgcmVxdWlyZXMgYmFja3RyYWNraW5nLgogICAgIGNsYXNzIEJhY2t0cmFja2lu
Z1N0YXRlIHsKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3QgUmV0dXJuQWRkcmVzc1JlY29y
ZCB7CisgICAgICAgICAgICBSZXR1cm5BZGRyZXNzUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgZGF0YUxhYmVsLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmFja3RyYWNrTG9jYXRp
b24pCisgICAgICAgICAgICAgICAgOiBtX2RhdGFMYWJlbChkYXRhTGFiZWwpCisgICAgICAgICAg
ICAgICAgLCBtX2JhY2t0cmFja0xvY2F0aW9uKGJhY2t0cmFja0xvY2F0aW9uKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIG1fZGF0YUxhYmVsOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
YmFja3RyYWNrTG9jYXRpb247CisgICAgICAgIH07CisKICAgICBwdWJsaWM6CisgICAgICAgIHR5
cGVkZWYgVmVjdG9yPFJldHVybkFkZHJlc3NSZWNvcmQsIDQ+IEJhY2t0cmFja1JlY29yZHM7CisK
ICAgICAgICAgQmFja3RyYWNraW5nU3RhdGUoKQogICAgICAgICAgICAgOiBtX3BlbmRpbmdGYWxs
dGhyb3VnaChmYWxzZSkKICAgICAgICAgewpAQCAtMTAxNCwxNSArOTM4LDE1IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAvLyBBZGQgYSBqdW1w
IG9yIGp1bXBzLCBhIHJldHVybiBhZGRyZXNzLCBvciBzZXQgdGhlIGZsYWcgaW5kaWNhdGluZwog
ICAgICAgICAvLyB0aGF0IHRoZSBjdXJyZW50ICdmYWxsdGhyb3VnaCcgY29udHJvbCBmbG93IHJl
cXVpcmVzIGJhY2t0cmFja2luZy4KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSnVtcCYganVt
cCkKKyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5hcHBlbmQoanVtcCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdm9pZCBhcHBlbmQoSnVtcExpc3QmIGp1bXBMaXN0KQorICAgICAg
ICB2b2lkIGFwcGVuZChNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBMaXN0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXBMaXN0KTsKICAgICAg
ICAgfQotICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBEYXRhTGFiZWxQdHImIHJldHVybkFkZHJl
c3MpCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHImIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVy
bnMuYXBwZW5kKHJldHVybkFkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMDM5LDcgKzk2Myw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgdm9pZCBs
aW5rKE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgewotICAgICAgICAgICAgICAgIExhYmVsIGhlcmUo
YXNzZW1ibGVyKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaGVyZShh
c3NlbWJsZXIpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Bl
bmRpbmdSZXR1cm5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a1JlY29yZHMuYXBwZW5kKFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tpXSwg
aGVyZSkpOwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVybnMuY2xlYXIoKTsKQEAgLTEw
NDgsNyArOTcyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmNsZWFyKCk7CiAgICAgICAgICAgICBtX3BlbmRp
bmdGYWxsdGhyb3VnaCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua1RvKExh
YmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQorICAgICAgICB2b2lkIGxpbmtU
byhNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgewog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BlbmRpbmdSZXR1cm5z
LnNpemUoKTsgKytpKQpAQCAtMTA2MSwxMCArOTg1LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigp
OwogICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChKdW1wTGlzdCYganVtcExpc3Qs
IE1hY3JvQXNzZW1ibGVyKiBhc3NlbWJsZXIpCisgICAgICAgIHZvaWQgdGFrZUJhY2t0cmFja3NU
b0p1bXBMaXN0KE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcExpc3QsIE1hY3JvQXNzZW1i
bGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdSZXR1
cm5zLnNpemUoKSkgewotICAgICAgICAgICAgICAgIExhYmVsIGhlcmUoYXNzZW1ibGVyKTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaGVyZShhc3NlbWJsZXIpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BlbmRpbmdSZXR1cm5zLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1JlY29yZHMuYXBwZW5k
KFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tpXSwgaGVyZSkpOwogICAgICAg
ICAgICAgICAgIG1fcGVuZGluZ1JldHVybnMuY2xlYXIoKTsKQEAgLTEwODIsNiArMTAwNiwxNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBy
ZXR1cm4gbV9sYXRlckZhaWx1cmVzLmVtcHR5KCkgJiYgbV9wZW5kaW5nUmV0dXJucy5pc0VtcHR5
KCkgJiYgIW1fcGVuZGluZ0ZhbGx0aHJvdWdoOwogICAgICAgICB9CiAKKyAgICAgICAgQmFja3Ry
YWNrUmVjb3JkcyYgYmFja3RyYWNrUmVjb3JkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2JhY2t0cmFja1JlY29yZHM7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9p
ZCBsaW5rQmFja3RyYWNrUmVjb3JkcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBjb25zdCBCYWNr
dHJhY2tSZWNvcmRzJiBiYWNrdHJhY2tSZWNvcmRzKQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGJhY2t0cmFja1JlY29yZHNbaV0ubV9kYXRh
TGFiZWwsIGxpbmtCdWZmZXIubG9jYXRpb25PZjxZYXJyQmFja3RyYWNrUHRyVGFnPihiYWNrdHJh
Y2tSZWNvcmRzW2ldLm1fYmFja3RyYWNrTG9jYXRpb24pKTsKKyAgICAgICAgfQorCiAgICAgICAg
IC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGNvZGUgZ2VuZXJhdGlvbiB0byBsaW5rIGFsbCByZXR1
cm4gYWRkcmVzc2VzLgogICAgICAgICB2b2lkIGxpbmtEYXRhTGFiZWxzKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpCiAgICAgICAgIHsKQEAgLTEwOTEsMjAgKzEwMjYsOSBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHN0cnVjdCBSZXR1cm5BZGRyZXNzUmVjb3JkIHsKLSAgICAgICAgICAgIFJldHVybkFk
ZHJlc3NSZWNvcmQoRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCwgTGFiZWwgYmFja3RyYWNrTG9jYXRp
b24pCi0gICAgICAgICAgICAgICAgOiBtX2RhdGFMYWJlbChkYXRhTGFiZWwpCi0gICAgICAgICAg
ICAgICAgLCBtX2JhY2t0cmFja0xvY2F0aW9uKGJhY2t0cmFja0xvY2F0aW9uKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBEYXRhTGFiZWxQdHIgbV9kYXRhTGFi
ZWw7Ci0gICAgICAgICAgICBMYWJlbCBtX2JhY2t0cmFja0xvY2F0aW9uOwotICAgICAgICB9Owot
Ci0gICAgICAgIEp1bXBMaXN0IG1fbGF0ZXJGYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IG1fbGF0ZXJGYWlsdXJlczsKICAgICAgICAgYm9vbCBtX3BlbmRpbmdGYWxs
dGhyb3VnaDsKLSAgICAgICAgVmVjdG9yPERhdGFMYWJlbFB0ciwgND4gbV9wZW5kaW5nUmV0dXJu
czsKKyAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIsIDQ+IG1fcGVu
ZGluZ1JldHVybnM7CiAgICAgICAgIFZlY3RvcjxSZXR1cm5BZGRyZXNzUmVjb3JkLCA0PiBtX2Jh
Y2t0cmFja1JlY29yZHM7CiAgICAgfTsKIApAQCAtMTEyNywyMyArMTA1MSwyMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0
ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgIGlmIChtX3BhdHRlcm4ubXVsdGlsaW5lKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3Mu
cmVnVDA7CiAKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgICAgICBpZiAoIXRlcm0t
PmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gz
MihFcXVhbCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKKyAgICAgICAgICAgICAg
ICBtYXRjaERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
bV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOwog
CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0
UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFz
cyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygp
KTsKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBtYXRjaERlc3Qu
bGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0
aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0
UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVx
dWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOworICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
bV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9jaGVja2VkT2Zmc2V0KSkpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQXNzZXJ0aW9uQk9MKHNpemVfdCBv
cEluZGV4KQpAQCAtMTE1NywyMyArMTA4MSwyMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwog
CiAgICAgICAgIGlmIChtX3BhdHRlcm4ubXVsdGlsaW5lKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAg
ICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBtYXRjaERlc3Q7CiAgICAgICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBt
X2NoZWNrZWRPZmZzZXQpCiAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChhdEVuZE9m
SW5wdXQoKSk7CiAKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFj
dGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVy
Q2xhc3MoKSk7Ci0gICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbWF0
Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0g
bV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG5vdEF0
RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgICAgIC8vIEVyaywgcmVhbGx5IHNob3VsZCBwb2lzb24g
b3V0IHRoZXNlIGFsdGVybmF0aXZlcyBlYXJseS4gOi0vCiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHZv
aWQgYmFja3RyYWNrQXNzZXJ0aW9uRU9MKHNpemVfdCBvcEluZGV4KQpAQCAtMTE4MiwxMiArMTEw
NiwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgfQog
CiAgICAgLy8gQWxzbyBmYWxscyB0aG91Z2ggb24gbmV4dElzTm90V29yZENoYXIuCi0gICAgdm9p
ZCBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHNpemVfdCBvcEluZGV4LCBKdW1wTGlzdCYgbmV4dElz
V29yZENoYXIsIEp1bXBMaXN0JiBuZXh0SXNOb3RXb3JkQ2hhcikKKyAgICB2b2lkIG1hdGNoQXNz
ZXJ0aW9uV29yZGNoYXIoc2l6ZV90IG9wSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bmV4dElzV29yZENoYXIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgbmV4dElzTm90V29yZENo
YXIpCiAgICAgewogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAg
IFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAogICAgICAgICBpZiAodGVybS0+aW5w
dXRQb3NpdGlvbiA9PSBtX2NoZWNrZWRPZmZzZXQpCiAgICAgICAgICAgICBuZXh0SXNOb3RXb3Jk
Q2hhci5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwpAQCAtMTIwOSwxMiArMTEzMywxMiBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3Ag
PSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07
CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKKyAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1Qw
OwogCi0gICAgICAgIEp1bXAgYXRCZWdpbjsKLSAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhdEJlZ2luOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRp
b24pCi0gICAgICAgICAgICBhdEJlZ2luID0gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBJbW0zMiht
X2NoZWNrZWRPZmZzZXQpKTsKKyAgICAgICAgICAgIGF0QmVnaW4gPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KG1fY2hlY2tlZE9mZnNldCkpOwogICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNl
dCAtIHRlcm0tPmlucHV0UG9zaXRpb24gKyAxLCBjaGFyYWN0ZXIpOwogCiAgICAgICAgIENoYXJh
Y3RlckNsYXNzKiB3b3JkY2hhckNoYXJhY3RlckNsYXNzOwpAQCAtMTIyNiwyNyArMTE1MCwyNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgd29yZGNoYXJDaGFyYWN0ZXJD
bGFzcyk7CiAgICAgICAgIGlmICghdGVybS0+aW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAgIGF0
QmVnaW4ubGluayh0aGlzKTsKKyAgICAgICAgICAgIGF0QmVnaW4ubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIC8vIFdlIGZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHRoZSBsYXN0IGNoYXJhY3RlciB3
YXMgbm90IGEgd29yZGNoYXIuCi0gICAgICAgIEp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyOwotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcjsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbldvcmRDaGFyOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7
CiAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRp
b25Xb3JkY2hhcihvcEluZGV4LCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhciwgbm9uV29yZENo
YXJUaGVuV29yZENoYXIpOwotICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0
aW9uV29yZGNoYXIob3BJbmRleCwgbm9uV29yZENoYXJUaGVuV29yZENoYXIsIG5vbldvcmRDaGFy
VGhlbk5vbldvcmRDaGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFy
LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogCiAgICAgICAgIC8vIFdlIGp1bXAgaGVy
ZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIGEgd29yZGNoYXIuCi0gICAgICAgIG1hdGNoRGVz
dC5saW5rKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcjsKLSAg
ICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuTm9uV29yZENoYXI7CisgICAgICAgIG1hdGNoRGVz
dC5saW5rKCZtX2ppdCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCB3b3JkQ2hh
clRoZW5Xb3JkQ2hhcjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHdvcmRDaGFy
VGhlbk5vbldvcmRDaGFyOwogICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKICAgICAgICAg
ICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIob3BJbmRleCwgd29yZENoYXJUaGVuTm9uV29yZENo
YXIsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKLSAgICAgICAgICAgIHdvcmRDaGFyVGhlbldvcmRD
aGFyLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgd29yZENoYXJUaGVuV29yZENoYXIuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEFz
c2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbldvcmRDaGFyLCB3b3JkQ2hhclRo
ZW5Ob25Xb3JkQ2hhcik7CiAgICAgICAgICAgICAvLyBUaGlzIGNhbiBmYWxsLXRob3VnaCEKQEAg
LTEyNTQsOCArMTE3OCw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKIAogICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZCh3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAK
LSAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIubGluayh0aGlzKTsKLSAgICAgICAgd29y
ZENoYXJUaGVuTm9uV29yZENoYXIubGluayh0aGlzKTsKKyAgICAgICAgbm9uV29yZENoYXJUaGVu
V29yZENoYXIubGluaygmbV9qaXQpOworICAgICAgICB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5s
aW5rKCZtX2ppdCk7CiAgICAgfQogICAgIHZvaWQgYmFja3RyYWNrQXNzZXJ0aW9uV29yZEJvdW5k
YXJ5KHNpemVfdCBvcEluZGV4KQogICAgIHsKQEAgLTEyNjMsNDAgKzExODcsNDAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIH0KIAogI2lmIEVOQUJMRShZ
QVJSX0pJVF9CQUNLUkVGRVJFTkNFUykKLSAgICB2b2lkIG1hdGNoQmFja3JlZmVyZW5jZShzaXpl
X3Qgb3BJbmRleCwgSnVtcExpc3QmIGNoYXJhY3Rlck1hdGNoRmFpbHMsIFJlZ2lzdGVySUQgY2hh
cmFjdGVyLCBSZWdpc3RlcklEIHBhdHRlcm5JbmRleCwgUmVnaXN0ZXJJRCBwYXR0ZXJuQ2hhcmFj
dGVyKQorICAgIHZvaWQgbWF0Y2hCYWNrcmVmZXJlbmNlKHNpemVfdCBvcEluZGV4LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QmIGNoYXJhY3Rlck1hdGNoRmFpbHMsIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybklu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuQ2hhcmFjdGVyKQogICAgIHsK
ICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVy
bS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKIAotICAgICAgICBMYWJlbCBsb29wKHRoaXMp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgmbV9qaXQpOwogCiAgICAgICAg
IHJlYWRDaGFyYWN0ZXIoMCwgcGF0dGVybkNoYXJhY3RlciwgcGF0dGVybkluZGV4KTsKICAgICAg
ICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBj
aGFyYWN0ZXIpOwogICAgIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5pZ25vcmVDYXNlKCkpCi0g
ICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
Y2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRj
aEZhaWxzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNo
YXJhY3RlciwgcGF0dGVybkNoYXJhY3RlcikpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEp1bXAgY2hhcmFjdGVyc01hdGNoID0gYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgcGF0dGVy
bkNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3MgY2hhcmFjdGVyVGFibGVF
bnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJs
ZUxDaGFyKSk7Ci0gICAgICAgICAgICBsb2FkMTYoY2hhcmFjdGVyVGFibGVFbnRyeSwgY2hhcmFj
dGVyKTsKLSAgICAgICAgICAgIEV4dGVuZGVkQWRkcmVzcyBwYXR0ZXJuVGFibGVFbnRyeShwYXR0
ZXJuQ2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVM
Q2hhcikpOwotICAgICAgICAgICAgbG9hZDE2KHBhdHRlcm5UYWJsZUVudHJ5LCBwYXR0ZXJuQ2hh
cmFjdGVyKTsKLSAgICAgICAgICAgIGNoYXJhY3Rlck1hdGNoRmFpbHMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIGNo
YXJhY3RlcnNNYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgY2hhcmFjdGVyc01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkV4dGVuZGVkQWRkcmVzcyBjaGFyYWN0ZXJUYWJsZUVudHJ5KGNoYXJhY3RlciwgcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQxNihjaGFyYWN0ZXJUYWJsZUVudHJ5LCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVkQWRkcmVzcyBwYXR0ZXJuVGFibGVFbnRyeShwYXR0
ZXJuQ2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVM
Q2hhcikpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2KHBhdHRlcm5UYWJsZUVudHJ5LCBwYXR0
ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGNoYXJhY3Rlck1hdGNoRmFpbHMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJu
Q2hhcmFjdGVyKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzTWF0Y2gubGluaygmbV9qaXQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGF0dGVy
bkluZGV4KTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewotICAgICAg
ICAgICAgSnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBw
bGVtZW50YXJ5UGxhbmVzQmFzZSk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4KTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4
KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
X3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5r
KCZtX2ppdCk7CiAgICAgICAgIH0KIAotICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgcGF0dGVy
bkluZGV4LCBBZGRyZXNzKG91dHB1dCwgKChzdWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVv
ZihpbnQpKSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9yZWdzLm91dHB1dCwgKChzdWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQp
KSkubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUJhY2tS
ZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgpCkBAIC0xMzEyLDExNiArMTIzNiwxMTYgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB1bnNpZ25lZCBzdWJw
YXR0ZXJuSWQgPSB0ZXJtLT5iYWNrUmVmZXJlbmNlU3VicGF0dGVybklkOwogICAgICAgICB1bnNp
Z25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwogCi0g
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1wID0gcmVnVDA7Ci0gICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gcmVnVDE7Ci0gICAgICAgIGNvbnN0IFJl
Z2lzdGVySUQgcGF0dGVyblRlbXAgPSByZWdUMjsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyT3JUZW1wID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuSW5kZXggPSBtX3JlZ3MucmVn
VDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5UZW1w
ID0gbV9yZWdzLnJlZ1QyOwogCi0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgo
KSk7CisgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOwogICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50
IHx8IHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gMSkKLSAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkp
OwogCi0gICAgICAgIEp1bXBMaXN0IG1hdGNoZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBtYXRjaGVzOwogCiAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVh
bnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0
cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAg
ICAgbG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKIAogICAgICAgICAgICAgLy8gQW4gZW1wdHkgbWF0Y2ggaXMgc3Vj
Y2Vzc2Z1bCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCiAgICAgICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50IHx8IHRlcm0tPnF1
YW50aXR5TWF4Q291bnQgIT0gMSkgewotICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGJy
YW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcGF0dGVybkluZGV4LCBwYXR0
ZXJuVGVtcCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSks
IHBhdHRlcm5JbmRleCkpOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBKdW1wIHplcm9MZW5ndGhN
YXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpOwot
ICAgICAgICAgICAgICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgICAgIHplcm9MZW5ndGhN
YXRjaC5saW5rKHRoaXMpOwotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1t
MzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJl
bmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgemVyb0xlbmd0aE1hdGNoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCB0cnlOb25aZXJvTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgICAgIHpl
cm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1l
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOworICAg
ICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAg
ICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CiAgICAgICAgIGNhc2Ug
UXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6IHsKLSAgICAgICAgICAgIExhYmVsIG91dGVyTG9v
cCh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBvdXRlckxvb3AoJm1f
aml0KTsKIAogICAgICAgICAgICAgLy8gUGF0dGVyblRlbXAgc2hvdWxkIGNvbnRhaW4gcGF0dGVy
biBlbmQgaW5kZXggYXQgdGhpcyBwb2ludAotICAgICAgICAgICAgc3ViMzIocGF0dGVybkluZGV4
LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuSW5kZXgsIHBh
dHRlcm5UZW1wKTsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGNoZWNrTm90RW5vdWdo
SW5wdXQocGF0dGVyblRlbXApKTsKIAogICAgICAgICAgICAgbWF0Y2hCYWNrcmVmZXJlbmNlKG9w
SW5kZXgsIG9wLm1fanVtcHMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAKICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IDEpIHsK
ICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCksIGNoYXJhY3Rl
ck9yVGVtcCk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0
ZXJPclRlbXApOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKGNoYXJhY3Rlck9yVGVtcCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4
Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAgICAgICBsb2FkU3ViUGF0dGVy
bihvdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7Ci0gICAg
ICAgICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKKyAgICAg
ICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBh
dHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgICAgIG1faml0Lmp1bXAob3V0
ZXJMb29wKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hdGNoZXMubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1hdGNoZXMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBlOjpHcmVlZHk6IHsKLSAgICAg
ICAgICAgIEp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGluY29tcGxldGVNYXRjaGVzOwogCi0gICAgICAgICAgICBMYWJlbCBv
dXRlckxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgb3V0ZXJM
b29wKCZtX2ppdCk7CiAKICAgICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWlu
IHBhdHRlcm4gZW5kIGluZGV4IGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIHN1YjMyKHBhdHRl
cm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChjaGVja05vdEVu
b3VnaElucHV0KHBhdHRlcm5UZW1wKSk7CiAKICAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5j
ZShvcEluZGV4LCBpbmNvbXBsZXRlTWF0Y2hlcywgY2hhcmFjdGVyT3JUZW1wLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKIAogICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJ
bmRleCgpLCBjaGFyYWN0ZXJPclRlbXApOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBjaGFyYWN0ZXJPclRlbXApOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1wKTsKICAgICAgICAgICAgIHN0
b3JlVG9GcmFtZShjaGFyYWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwogICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAg
ICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgSW1tMzIodGVybS0+cXVh
bnRpdHlNYXhDb3VudCksIGNoYXJhY3Rlck9yVGVtcCkpOwotICAgICAgICAgICAgbG9hZFN1YlBh
dHRlcm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwor
ICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQp
LCBjaGFyYWN0ZXJPclRlbXApKTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVncy5v
dXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAKICAgICAg
ICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgaW5kZXggaW4gZnJhbWUgZm9yIHJlc3RvcmluZyBhZnRl
ciBhIHBhcnRpYWwgbWF0Y2gKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5k
ZXgoKSk7Ci0gICAgICAgICAgICBqdW1wKG91dGVyTG9vcCk7CisgICAgICAgICAgICBzdG9yZVRv
RnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAo
b3V0ZXJMb29wKTsKIAotICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluayh0aGlzKTsK
LSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAg
ICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgbG9hZEZyb21G
cmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5j
ZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0gICAgICAgICAgICBtYXRjaGVzLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAg
ICAgbWF0Y2hlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2pp
dC5sYWJlbCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHk6IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGluY29t
cGxldGVNYXRjaGVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGluY29t
cGxldGVNYXRjaGVzOwogCi0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgb3Au
bV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0Lmxh
YmVsKCk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwgc3VicGF0dGVybklk
LCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJu
KG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7
CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1Y2Nlc3NmdWwgd2l0aG91dCBj
b25zdW1pbmcgY2hhcmFjdGVycwotICAgICAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoTWF0Y2ggPSBi
cmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKLSAgICAgICAg
ICAgIEp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRl
eCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRl
eCgpKTsKLSAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICB0
cnlOb25aZXJvTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnlOb25aZXJvTWF0Y2ggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
OworICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJ
bmRleCgpKTsKKyAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICB0cnlOb25aZXJvTWF0Y2gubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAvLyBD
aGVjayBpZiB3ZSBoYXZlIGlucHV0IHJlbWFpbmluZyB0byBtYXRjaAotICAgICAgICAgICAgc3Vi
MzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihw
YXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGNo
ZWNrTm90RW5vdWdoSW5wdXQocGF0dGVyblRlbXApKTsKIAotICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1Jl
ZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3Mu
aW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJl
bmNlOjpiZWdpbkluZGV4KCkpOwogCiAgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJ
bmRleCwgaW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7CiAKLSAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBpbmNv
bXBsZXRlTWF0Y2hlcy5saW5rKHRoaXMpOwotICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5J
bmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICBpbmNvbXBsZXRlTWF0Y2hlcy5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIG1fcmVncy5pbmRleCk7
CiAKLSAgICAgICAgICAgIG1hdGNoZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1hdGNoZXMu
bGluaygmbV9qaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTQzMyw0OSArMTM1Nyw0OSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS0+YmFja1JlZmVy
ZW5jZVN1YnBhdHRlcm5JZDsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhp
cyk7Ci0gICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwog
Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZmFpbHVyZXM7CiAKICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKICAgICAgICAgc3dpdGNoICh0ZXJtLT5xdWFudGl0
eVR5cGUpIHsKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudDoKLSAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgbG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1Jl
ZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5OiB7Ci0gICAgICAgICAgICBj
b25zdCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIHBhdHRlcm5TdGFydEluZGV4ID0gcmVnVDE7Ci0gICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIHBhdHRlcm5FbmRJbmRleE9yTGVuID0gcmVnVDI7CisgICAgICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IG1fcmVncy5yZWdUMDsK
KyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5TdGFy
dEluZGV4ID0gbV9yZWdzLnJlZ1QxOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcGF0dGVybkVuZEluZGV4T3JMZW4gPSBtX3JlZ3MucmVnVDI7CiAKICAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOwotICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBtYXRjaEFtb3VudCkp
OworICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbWF0Y2hBbW91bnQpKTsKIAotICAgICAgICAgICAgbG9hZFN1YlBhdHRl
cm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5k
ZXhPckxlbik7Ci0gICAgICAgICAgICBzdWIzMihwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVu
ZEluZGV4T3JMZW4pOwotICAgICAgICAgICAgc3ViMzIocGF0dGVybkVuZEluZGV4T3JMZW4sIGlu
ZGV4KTsKKyAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRl
cm5JZCwgcGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRleE9yTGVuKTsKKyAgICAgICAg
ICAgIG1faml0LnN1YjMyKHBhdHRlcm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7
CisgICAgICAgICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuRW5kSW5kZXhPckxlbiwgbV9yZWdzLmlu
ZGV4KTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7
CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBtYXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQsIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRj
aEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAgICAg
ICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHk6IHsKLSAgICAg
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSByZWdUMDsKKyAgICAgICAgICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gbV9yZWdzLnJl
Z1QwOwogCiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBtYXRjaEFtb3VudCk7CiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWws
IEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpLCBtYXRjaEFtb3VudCkpOwotICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7CisgICAgICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgbWF0Y2hB
bW91bnQpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIG1hdGNoQW1vdW50KTsKICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtYXRjaEFt
b3VudCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVu
Y2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7
CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGZhaWx1cmVzLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5mYWxsdGhyb3VnaCgpOwogICAgIH0KICNlbmRpZgpAQCAtMTQ5NywxMSArMTQyMSwxMSBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgaWYgKCFp
c0xhdGluMShjaCkgJiYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KSkgewogICAgICAg
ICAgICAgLy8gSGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3Ry
aW5nIC0gc2hvcnQgY2lyY3VpdAotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJh
Y3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
aGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQog
ICAgICAgICB1bnNpZ25lZCBtYXhDaGFyYWN0ZXJzQXRPbmNlID0gbV9jaGFyU2l6ZSA9PSBDaGFy
U2l6ZTo6Q2hhcjggPyA4IDogNDsKICNlbHNlCkBAIC0xNTUyLDcgKzE0NzYsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgIGlmICghaXNM
YXRpbjEoY3VycmVudENoYXJhY3RlcikgJiYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4
KSkgewogICAgICAgICAgICAgICAgIC8vIEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIg
YW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQKLSAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
CkBAIC0xNTc1LDI5ICsxNDk5LDI5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gY2hlY2syID0gWyZd
IChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVpbnQxNl90IGNoYXJhY3RlcnMsIHVpbnQxNl90
IG1hc2spIHsKLSAgICAgICAgICAgICAgICBsb2FkMTZVbmFsaWduZWQobmVnYXRpdmVPZmZzZXRJ
bmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mo
b2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChtYXNr
KQotICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0
ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoYXJhY3RlcnMgfCBt
YXNrKSkpOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgYXV0byBjaGVjazQgPSBbJl0g
KENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVycywgdW5zaWduZWQg
bWFzaykgewogICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVz
cyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRk
cmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChtYXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hh
cmFjdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2hhcmFjdGVycyB8IG1hc2spKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtYXNrKSwg
Y2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1i
bGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIG5lZ2F0aXZlT2Zmc2V0
SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBUcnVzdGVkSW1tMzIoY2hhcmFjdGVy
cykpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMldp
dGhVbmFsaWduZWRIYWxmV29yZHMoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihjaGFyYWN0ZXJzKSkpOwogICAgICAgICAgICAgfTsKIAogI2lmIENQVShYODZf
NjQpIHx8IENQVShBUk02NCkKICAgICAgICAgICAgIGF1dG8gY2hlY2s4ID0gWyZdIChDaGVja2Vk
PHVuc2lnbmVkPiBvZmZzZXQsIHVpbnQ2NF90IGNoYXJhY3RlcnMsIHVpbnQ2NF90IG1hc2spIHsK
LSAgICAgICAgICAgICAgICBsb2FkNjQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZz
ZXQsIGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0
KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrKQotICAgICAgICAgICAgICAgICAgICBvcjY0
KFRydXN0ZWRJbW02NChtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChicmFuY2g2NChOb3RFcXVhbCwgY2hhcmFjdGVyLCBUcnVzdGVkSW1tNjQoY2hh
cmFjdGVycyB8IG1hc2spKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChtYXNrKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChjaGFyYWN0ZXJzIHwg
bWFzaykpKTsKICAgICAgICAgICAgIH07CiAjZW5kaWYKIApAQCAtMTY0OSwyMSArMTU3MywyMSBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAg
IGF1dG8gY2hlY2syID0gWyZdIChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVuc2lnbmVkIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIG1hc2spIHsKICAgICAgICAgICAgICAgICBpZiAobWFzaykgewot
ICAgICAgICAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZl
T2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0
aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgICAgIG9y
MzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMg
fCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hh
cmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVx
dWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgVHJ1
c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobV9qaXQuYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3Rlciks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2hhcmFjdGVycykpKTsKICAgICAgICAgICAg
IH07CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCiAgICAgICAgICAgICBhdXRvIGNo
ZWNrNCA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1aW50NjRfdCBjaGFyYWN0ZXJz
LCB1aW50NjRfdCBtYXNrKSB7Ci0gICAgICAgICAgICAgICAgbG9hZDY0KG5lZ2F0aXZlT2Zmc2V0
SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQ2NChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwg
Y2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAg
ICAgICAgICAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoNjQoTm90RXF1YWwsIGNoYXJhY3Rl
ciwgVHJ1c3RlZEltbTY0KGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAgICB9OwogI2VuZGlmCiAKQEAg
LTE2OTgsMzQgKzE2MjIsMzQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgVUNo
YXIzMiBjaCA9IHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7CiAKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJl
Z2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICBpZiAo
bV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CiAKICAgICAgICAgQ2hlY2tlZDx1bnNpZ25lZD4gc2Nh
bGVkTWF4Q291bnQgPSB0ZXJtLT5xdWFudGl0eU1heENvdW50OwogICAgICAgICBzY2FsZWRNYXhD
b3VudCAqPSBVX0lTX0JNUChjaCkgPyAxIDogMjsKLSAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMy
KHNjYWxlZE1heENvdW50KSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LnN1YjMyKG1f
cmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHNjYWxlZE1heENvdW50KSwgY291bnRS
ZWdpc3Rlcik7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNr
ZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gc2NhbGVkTWF4Q291bnQsIGNoYXJhY3Rl
ciwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIC8vIEZvciBjYXNlLWluc2VzaXRpdmUgY29tcGFy
ZXMsIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBkaWZmZXJlbnQKICAgICAgICAgLy8g
dXBwZXIgJiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgY29udmVydGVkIHRvIGEgY2hh
cmFjdGVyIGNsYXNzLgogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5pZ25vcmVDYXNlKCkgfHwg
aXNBU0NJSUFscGhhKGNoKSB8fCBpc0Nhbm9uaWNhbGx5VW5pcXVlKGNoLCBtX2Nhbm9uaWNhbE1v
ZGUpKTsKICAgICAgICAgaWYgKG1fcGF0dGVybi5pZ25vcmVDYXNlKCkgJiYgaXNBU0NJSUFscGhh
KGNoKSkgewotICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMHgyMCksIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgy
MCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBjaCB8PSAweDIwOwogICAgICAgICB9CiAKLSAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1t
MzIoY2gpKSk7CisgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoY2gp
KSk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlm
IChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lTX0JNUChjaCkpCi0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigyKSwgY291bnRSZWdpc3Rlcik7CiAg
ICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBj
b3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIs
IGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBtX3Jl
Z3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFj
a1BhdHRlcm5DaGFyYWN0ZXJGaXhlZChzaXplX3Qgb3BJbmRleCkKICAgICB7CkBAIC0xNzM4LDM4
ICsxNjYyLDM4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyMzIgY2gg
PSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hh
cmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9
IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgIC8vIFVubGVz
cyBoYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVyIGFuZCBhbiA4IGJpdCBzdHJpbmcgLSBz
aG9ydCBjaXJjdWl0CiAgICAgICAgIGlmICghKCFpc0xhdGluMShjaCkgJiYgKG1fY2hhclNpemUg
PT0gQ2hhclNpemU6OkNoYXI4KSkpIHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwot
ICAgICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBs
b29wKCZtX2ppdCk7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkp
OwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIG1f
Y2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3RlcikpOwogCi0gICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAj
aWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgICAgICBpZiAo
bV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKSB7Ci0gICAgICAgICAgICAg
ICAgSnVtcCBzdXJyb2dhdGVQYWlyT2sgPSBub3RBdEVuZE9mSW5wdXQoKTsKLSAgICAgICAgICAg
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2subGlu
ayh0aGlzKTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdXJyb2dhdGVQYWlyT2sgPSBu
b3RBdEVuZE9mSW5wdXQoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZVBh
aXJPay5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIH0KICNl
bmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOwogCiAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3Vu
dCA9PSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuanVtcChsb29wKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVh
bnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlua1RvKGxvb3AsICZt
X2ppdCk7CiAKLSAgICAgICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBm
YWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KLSAgICAgICAgb3AubV9yZWVudHJ5ID0g
bGFiZWwoKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAg
ICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCkpOwogICAgIH0KQEAg
LTE3NzgsMTggKzE3MDIsMTggQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291
bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291bnRSZWdp
c3Rlcik7Ci0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKGJyYW5jaFRlc3QzMiha
ZXJvLCBjb3VudFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRSZWdpc3RlcikpOworICAgICAg
ICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKICAgICAgICAgaWYgKCFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzIHx8IFVfSVNfQk1QKHRl
cm0tPnBhdHRlcm5DaGFyYWN0ZXIpKQotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMiksIGluZGV4KTsKLSAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigyKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgIH0K
IAogICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNpemVfdCBvcElu
ZGV4KQpAQCAtMTc5NywxMCArMTcyMSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAg
ICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBvcC5tX3JlZW50cnkg
PSBsYWJlbCgpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJl
bCgpOwogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCkp
OwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJOb25HcmVlZHkoc2l6
ZV90IG9wSW5kZXgpCkBAIC0xODA5LDQzICsxNzMzLDQzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rl
cm07CiAgICAgICAgIFVDaGFyMzIgY2ggPSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJl
Z2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7
CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICBtX2Jh
Y2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hB
bW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBVbmxlc3MgaGF2ZSBh
IDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQgY2ly
Y3VpdAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlczsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlczsK
ICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKKyAgICAg
ICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVy
bS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFw
cGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1
dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RF
X0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYg
IVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAgICAgIEp1bXAgc3Vycm9nYXRlUGFpck9rID0g
bm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2subGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJl
Z2lzdGVyKTsKIAotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwotICAgICAgICAgICAg
bm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAob3Au
bV9yZWVudHJ5KTsKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmxpbmsoJm1faml0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lT
X0JNUChjaCkpIHsKICAgICAgICAgICAgIC8vIHN1YnRyYWN0IGNvdW50UmVnaXN0ZXIqMiBmb3Ig
bm9uLUJNUCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7CisgICAgICAgIG1faml0LnN1YjMyKGNvdW50
UmVnaXN0ZXIsIG1fcmVncy5pbmRleCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFs
bHRocm91Z2goKTsKICAgICB9CiAKQEAgLTE4NTQsMTQgKzE3NzgsMTQgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNb
b3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAogICAg
ICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dCgpKTsKLSAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShpbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJD
bGFzczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5k
ZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgIHJlYWRD
aGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVy
KTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAiYW55IGNoYXJhY3RlciIgYnVp
bHRpbiBjbGFzcyB3ZSBvbmx5IG5lZWQgdG8gcmVhZCB0aGUKICAgICAgICAgLy8gY2hhcmFjdGVy
IGFuZCBkb24ndCBuZWVkIHRvIG1hdGNoIGFzIGl0IHdpbGwgYWx3YXlzIHN1Y2NlZWQuCkBAIC0x
ODcxLDE2ICsxNzk1LDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKICAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtYXRjaERlc3QpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaERl
c3QubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9O
UykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYgKCF0ZXJtLT5jaGFyYWN0
ZXJDbGFzcy0+aGFzT25lQ2hhcmFjdGVyU2l6ZSgpIHx8IHRlcm0tPmludmVydCgpKSkgewotICAg
ICAgICAgICAgSnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBz
dXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBpc0JNUENoYXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNo
YXJhY3RlciwgbV9yZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
X3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmsoJm1faml0KTsKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgfQpAQCAtMTg5MSw4ICsxODE1LDggQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAK
LSAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKLSAgICAgICAgICAg
IGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0
ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICBtX2JhY2t0cmFja2lu
Z1N0YXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBt
X3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3Vn
aCgpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTE5MDQsOCArMTgyOCw4IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1Qx
OwogCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKQogICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dCgpKTsKQEAgLTE5MTUsMTAgKzE4
MzksMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiB0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFz
T25seU5vbkJNUENoYXJhY3RlcnMoKSAmJiAhdGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICBz
Y2FsZWRNYXhDb3VudCAqPSAyOwogI2VuZGlmCi0gICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihz
Y2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5zdWIzMihtX3Jl
Z3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVn
aXN0ZXIpOwogCi0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7Ci0gICAgICAgIEp1bXBMaXN0IG1h
dGNoRGVzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgcmVhZENo
YXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gc2NhbGVkTWF4
Q291bnQsIGNoYXJhY3RlciwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIC8vIElmIHdlIGFyZSBt
YXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3Mgd2Ugb25seSBuZWVkIHRv
IHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3RlciBhbmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBh
cyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMTkyOCwyNyArMTg1MiwyNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBpZiAodGVybS0+
aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobWF0Y2hEZXN0KTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBt
YXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICNpZiBF
TkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2Rl
U3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICh0ZXJtLT5pc0ZpeGVkV2lkdGhDaGFy
YWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMih0ZXJtLT5j
aGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAyIDog
MSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBK
dW1wIGlzQk1QQ2hhciA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIsIHN1cHBsZW1lbnRh
cnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9yZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsK
ICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAg
ICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgICAg
ICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3Mu
aW5kZXgpOworICAgICAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291
bnRSZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwor
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNvdW50UmVn
aXN0ZXIsIG1fcmVncy5pbmRleCkubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgfQogICAgIHZv
aWQgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NGaXhlZChzaXplX3Qgb3BJbmRleCkKICAgICB7CkBA
IC0xOTYwLDE5ICsxODg0LDE5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgIGlmIChtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09uZUNoYXJhY3Rl
clNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5k
ZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdp
c3Rlcik7CiAKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIEp1bXBMaXN0IGZh
aWx1cmVzRGVjcmVtZW50SW5kZXg7Ci0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVzRGVjcmVtZW50SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQ
UkVTU0lPTlMpCiAgICAgICAgIGlmICh0ZXJtLT5pc0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygp
ICYmIHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkpIHsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXIpOwogICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGNoZWNrTm90RW5vdWdoSW5wdXQoY2hhcmFjdGVyKSk7
CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCkBAIC0xOTgyLDE1ICsxOTA2LDE1IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIHJlYWRDaGFyYWN0
ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAg
ICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmYWlsdXJlcywgdGVybS0+
Y2hhcmFjdGVyQ2xhc3MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSnVtcExpc3Qg
bWF0Y2hEZXN0OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVz
dDsKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5w
dXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBtYXRjaGlu
ZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3MgZm9yIG5vbi11bmljb2RlIHBhdHRl
cm5zLAogICAgICAgICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlIGNoYXJhY3RlciBh
bmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgogICAgICAg
ICAgICAgaWYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+bV9hbnlDaGFyYWN0ZXIpIHsKICAgICAg
ICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJt
LT5jaGFyYWN0ZXJDbGFzcyk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShZQVJSX0pJ
VF9VTklDT0RFX0VYUFJFU1NJT05TKQpAQCAtMTk5OCwyMiArMTkyMiwyMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBhZHZhbmNlSW5kZXhB
ZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgs
IGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAo
dGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmluaXRlKSB7Ci0gICAgICAgICAg
ICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlN
YXhDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRp
dHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAganVtcChs
b29wKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAobG9vcCk7CiAKICAgICAgICAgaWYgKCFmYWls
dXJlc0RlY3JlbWVudEluZGV4LmVtcHR5KCkpIHsKLSAgICAgICAgICAgIGZhaWx1cmVzRGVjcmVt
ZW50SW5kZXgubGluayh0aGlzKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
aW5kZXgpOworICAgICAgICAgICAgZmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgZmFpbHVyZXMubGluayh0aGlz
KTsKLSAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgZmFpbHVyZXMubGlu
aygmbV9qaXQpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAgICAg
ICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudEluZGV4KCkpOwogICAgIH0KQEAg
LTIwMjIsNDUgKzE5NDYsNDUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291
bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50UmVnaXN0
ZXIpOwotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIoWmVy
bywgY291bnRSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50
UmVnaXN0ZXIpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVnaXN0ZXIpKTsKKyAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7CiAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjptYXRjaEFtb3VudEluZGV4KCkpOwog
CiAgICAgICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycykKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZSBp
ZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3MoKSkKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygp
ID8gMiA6IDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJz
KCkgPyAyIDogMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gUmVtYXRjaCBvbmUgbGVzcwotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSByZWdUMDsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAotICAgICAgICAgICAgbG9hZEZyb21GcmFtZSh0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbklu
ZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBtX3JlZ3Mu
aW5kZXgpOwogCi0gICAgICAgICAgICBMYWJlbCByZW1hdGNoTG9vcCh0aGlzKTsKLSAgICAgICAg
ICAgIEp1bXAgZG9uZVJlbWF0Y2hpbmcgPSBicmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3Rl
cik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgcmVtYXRjaExvb3AoJm1faml0
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmVSZW1hdGNoaW5nID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBjb3VudFJlZ2lzdGVyKTsKIAog
ICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBv
c2l0aW9uLCBjaGFyYWN0ZXIpOwogCi0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IGNvdW50UmVnaXN0ZXIpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRl
eCk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAKICNpZiBFTkFCTEUoWUFSUl9K
SVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKLSAgICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0gYnJh
bmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwotICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICBpc0JN
UENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQk1Q
Q2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVy
LCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgbV9qaXQuYWRk
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAg
ICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAjZW5kaWYKIAotICAgICAgICAgICAganVt
cChyZW1hdGNoTG9vcCk7Ci0gICAgICAgICAgICBkb25lUmVtYXRjaGluZy5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbV9qaXQuanVtcChyZW1hdGNoTG9vcCk7CisgICAgICAgICAgICBkb25lUmVt
YXRjaGluZy5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+
ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJ
bmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgfQotICAgICAgICBqdW1wKG9wLm1fcmVl
bnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICB9CiAKICAgICB2
b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkoc2l6ZV90IG9wSW5kZXgpCkBAIC0y
MDY4LDE1ICsxOTkyLDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJu
VGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50
UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7
CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICNp
ZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVj
b2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xh
c3MtPmhhc09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkKLSAgICAgICAgICAg
ICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKG1fcmVncy5pbmRleCwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9D
aGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTIw
ODgsMjcgKzIwMTIsMjcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJl
Z1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgSnVtcExpc3Qgbm9uR3Jl
ZWR5RmFpbHVyZXM7Ci0gICAgICAgIEp1bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50
SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJl
czsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVzRGVj
cmVtZW50SW5kZXg7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogI2lmIEVOQUJMRShZ
QVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dh
dGVQYWlycykgewogICAgICAgICAgICAgaWYgKCF0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzT25l
Q2hhcmFjdGVyU2l6ZSgpIHx8IHRlcm0tPmludmVydCgpKQotICAgICAgICAgICAgICAgIGxvYWRG
cm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFz
czo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZSh0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbklu
ZGV4KCksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIGxvYWRG
cm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFz
czo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBub25HcmVl
ZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAgICAgICBub25HcmVlZHlGYWls
dXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1
YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNvdW50UmVnaXN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkpOwogCi0gICAgICAgIEp1bXBM
aXN0IG1hdGNoRGVzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVz
dDsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBv
c2l0aW9uLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhlICJh
bnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5pY29kZSBwYXR0ZXJucywKICAg
ICAgICAgLy8gd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlIGNoYXJhY3RlciBhbmQgZG9uJ3QgbmVl
ZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMjExOCw4ICsyMDQyLDgg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAg
aWYgKHRlcm0tPmludmVydCgpKQogICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFw
cGVuZChtYXRjaERlc3QpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9u
R3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yMTI4LDE3ICsyMDUyLDE3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGFkdmFuY2VJbmRl
eEFmdGVyQ2hhcmFjdGVyQ2xhc3NUZXJtTWF0Y2godGVybSwgbm9uR3JlZWR5RmFpbHVyZXNEZWNy
ZW1lbnRJbmRleCwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgIG1faml0LmFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogCi0g
ICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50
cnkpOwogCiAgICAgICAgIGlmICghbm9uR3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5lbXB0
eSgpKSB7Ci0gICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4Lmxpbmso
dGhpcyk7Ci0gICAgICAgICAgICBicmVha3BvaW50KCk7CisgICAgICAgICAgICBub25HcmVlZHlG
YWlsdXJlc0RlY3JlbWVudEluZGV4LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJy
ZWFrcG9pbnQoKTsKICAgICAgICAgfQotICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKHRo
aXMpOwotICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7CisgICAgICAgIG5vbkdy
ZWVkeUZhaWx1cmVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuc3ViMzIoY291bnRSZWdp
c3RlciwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhy
b3VnaCgpOwogICAgIH0KIApAQCAtMjE0Nyw2MiArMjA3MSw2MiBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcElu
ZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBtYXRjaFBvcyA9IHJlZ1QxOwotICAgICAgICBKdW1wTGlzdCBmb3VuZEJlZ2lubmluZ05l
d0xpbmU7Ci0gICAgICAgIEp1bXBMaXN0IHNhdmVTdGFydEluZGV4OwotICAgICAgICBKdW1wTGlz
dCBmb3VuZEVuZGluZ05ld0xpbmU7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hQb3MgPSBtX3JlZ3MucmVnVDE7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBmb3VuZEJlZ2lubmluZ05ld0xpbmU7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZvdW5kRW5kaW5nTmV3TGluZTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJu
LmRvdEFsbCgpKSB7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgbWF0Y2hQb3Mp
OworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
LCBtYXRjaFBvcyk7CiAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1hdGNoUG9zKTsKLSAgICAg
ICAgICAgIG1vdmUobGVuZ3RoLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVn
cy5sZW5ndGgsIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKTsKICAg
ICAgICAgZ2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7CiAKLSAgICAgICAgc2F2ZVN0YXJ0SW5kZXgu
YXBwZW5kKGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgbWF0Y2hQb3MsIGluaXRpYWxTdGFydCkpOwot
ICAgICAgICBMYWJlbCBmaW5kQk9MTG9vcCh0aGlzKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBtYXRjaFBvcyk7CisgICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtYXRjaFBvcywgbV9yZWdzLmlu
aXRpYWxTdGFydCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmluZEJPTExvb3Ao
Jm1faml0KTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbWF0Y2hQb3MpOwogICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hh
cjgpCi0gICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc09u
ZSwgMCksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KG1fcmVncy5pbnB1dCwgbWF0Y2hQb3MsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c09uZSwgMCksIGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNihC
YXNlSW5kZXgoaW5wdXQsIG1hdGNoUG9zLCBUaW1lc1R3bywgMCksIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5w
dXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOwog
ICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZm91bmRCZWdpbm5pbmdOZXdM
aW5lLCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkpOwogCi0gICAgICAgIGJyYW5j
aDMyKEFib3ZlLCBtYXRjaFBvcywgaW5pdGlhbFN0YXJ0KS5saW5rVG8oZmluZEJPTExvb3AsIHRo
aXMpOwotICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBtYXRjaFBvcywgbV9yZWdzLmluaXRp
YWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCAmbV9qaXQpOworICAgICAgICBzYXZlU3RhcnRJ
bmRleC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICBmb3VuZEJlZ2lubmluZ05ld0xp
bmUubGluayh0aGlzKTsKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7
IC8vIEFkdmFuY2UgcGFzdCBuZXdsaW5lCi0gICAgICAgIHNhdmVTdGFydEluZGV4LmxpbmsodGhp
cyk7CisgICAgICAgIGZvdW5kQmVnaW5uaW5nTmV3TGluZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1hdGNoUG9zKTsg
Ly8gQWR2YW5jZSBwYXN0IG5ld2xpbmUKKyAgICAgICAgc2F2ZVN0YXJ0SW5kZXgubGluaygmbV9q
aXQpOwogCiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm11bHRpbGluZSgpICYmIHRlcm0tPmFuY2hv
cnMuYm9sQW5jaG9yKQotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoVGVzdDMy
KE5vblplcm8sIG1hdGNoUG9zKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1hdGNoUG9zKSk7CiAKICAg
ICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAg
IHNldE1hdGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIG1vdmUoaW5kZXgsIG1hdGNoUG9z
KTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1hdGNoUG9zKTsKIAotICAgICAg
ICBMYWJlbCBmaW5kRU9MTG9vcCh0aGlzKTsgICAgICAgIAotICAgICAgICBmb3VuZEVuZGluZ05l
d0xpbmUuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBtYXRjaFBvcywgbGVuZ3RoKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaW5kRU9MTG9vcCgmbV9qaXQpOworICAgICAgICBmb3Vu
ZEVuZGluZ05ld0xpbmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgbWF0Y2hQb3MsIG1fcmVncy5sZW5ndGgpKTsKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0g
Q2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRj
aFBvcywgVGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNPbmUsIDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwg
Y2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5k
RW5kaW5nTmV3TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKLSAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7Ci0gICAgICAgIGp1bXAoZmluZEVP
TExvb3ApOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtYXRjaFBvcyk7CisgICAgICAgIG1faml0Lmp1bXAoZmluZEVPTExvb3ApOwogCi0gICAg
ICAgIGZvdW5kRW5kaW5nTmV3TGluZS5saW5rKHRoaXMpOworICAgICAgICBmb3VuZEVuZGluZ05l
d0xpbmUubGluaygmbV9qaXQpOwogCiAgICAgICAgIGlmICghbV9wYXR0ZXJuLm11bHRpbGluZSgp
ICYmIHRlcm0tPmFuY2hvcnMuZW9sQW5jaG9yKQotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIG1hdGNoUG9zLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
bWF0Y2hQb3MsIG1fcmVncy5sZW5ndGgpKTsKIAotICAgICAgICBtb3ZlKG1hdGNoUG9zLCBpbmRl
eCk7CisgICAgICAgIG1faml0Lm1vdmUobWF0Y2hQb3MsIG1fcmVncy5pbmRleCk7CiAgICAgfQog
CiAgICAgdm9pZCBiYWNrdHJhY2tEb3RTdGFyRW5jbG9zdXJlKHNpemVfdCBvcEluZGV4KQpAQCAt
MjM2Nyw3ICsyMjkxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yR2VuZXJhdGUob3BJbmRleCwgbGFiZWwo
KSk7CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5k
ZXgsIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJ
bmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsKQEAgLTI0MDgsNyArMjMzMiw3
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAg
ICAgICAgIC8vIFdlIHdpbGwgcmVlbnRlciBhZnRlciB0aGUgY2hlY2ssIGFuZCBhc3N1bWUgdGhl
IGlucHV0IHBvc2l0aW9uIHRvIGhhdmUgYmVlbgogICAgICAgICAgICAgICAgIC8vIHNldCBhcyBh
cHByb3ByaWF0ZSB0byB0aGlzIGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIEVtaXQgZmFzdCBza2lwIHBhdGggd2l0aCBzdHJp
ZGUgaWYgd2UgaGF2ZSBCb3llck1vb3JlSW5mby4KICAgICAgICAgICAgICAgICBpZiAob3AubV9i
bUluZm8pIHsKQEAgLTI0MjAsOCArMjM0NCw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gW21hcCwgY2hhcmFj
dGVyc0Zhc3RQYXRoXSA9IG9wLm1fYm1JbmZvLT5jcmVhdGVDYW5kaWRhdGVCaXRtYXAoYmVnaW5J
bmRleCwgZW5kSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbWFwQ291
bnQgPSBtYXAuY291bnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNhbmRpYXRl
IGNoYXJhY3RlcnMgYXJlIDw9IDIsIGNoZWNraW5nIGVhY2ggaXMgYmV0dGVyIHRoYW4gdXNpbmcg
dmVjdG9yLgotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3Qgb3V0T2ZMZW5ndGhGYWls
dXJlOwotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3QgbWF0Y2hlZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvdXRPZkxlbmd0aEZhaWx1
cmU7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0
Y2hlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFlhcnJKSVRJbnRlcm5h
bDo6dmVyYm9zZSwgIkJNIEJpdG1hcCBpcyAiLCBtYXApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUGF0dGVybnMgbGlrZSAvW10vIGhhdmUgemVybyBjYW5kaWRhdGVzLiBTaW5jZSBpdCBp
cyByYXJlLCB3ZSBkbyBub3QgZG8gbm90aGluZyBmb3Igbm93LgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXBDb3VudCkKQEAgLTI0MzAsNzUgKzIzNTQsNzUgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoQm95ZXJNb29yZUZhc3RDYW5kaWRhdGVzOjptYXhTaXplID09IDIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VS
ZWdFeHBDb21waWxhdGlvbigpLCAiRm91bmQgY2hhcmFjdGVycyBmYXN0cGF0aCBsb29rYWhlYWQg
IiwgY2hhcmFjdGVyc0Zhc3RQYXRoLCAiIHJhbmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBlbmRJ
bmRleCwgIikiKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9vcEhlYWQg
PSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9j
aGVja2VkT2Zmc2V0IC0gZW5kSW5kZXggKyAxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoY2hhcmFjdGVyc0Zhc3RQYXRoLmF0KDApKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbG9vcEhlYWQgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gZW5kSW5kZXggKyAxLCBtX3Jl
Z3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLnJlZ1QwLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgwKSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyc0Zhc3RQYXRoLnNpemUoKSA+IDEp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgxKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MucmVnVDAsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoY2hhcmFjdGVyc0Zhc3RQYXRoLmF0KDEpKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVtcElmTm9BdmFpbGFi
bGVJbnB1dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BIZWFkLCAmbV9qaXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBhdXRvKiBwb2ludGVyID0gZ2V0Qm95ZXJNb29yZUJpdG1hcChtYXApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VSZWdFeHBDb21waWxh
dGlvbigpLCAiRm91bmQgYml0bWFwIGxvb2thaGVhZCBjb3VudDooIiwgbWFwQ291bnQsICIpLHJh
bmdlOlsiLCBiZWdpbkluZGV4LCAiLCAiLCBlbmRJbmRleCwgIikiKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgcmVnVDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9vcEhlYWQgPSBsYWJlbCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gZW5k
SW5kZXggKyAxLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgbV9yZWdzLnJlZ1QxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbV9qaXQubGFiZWwo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9m
ZnNldCAtIGVuZEluZGV4ICsgMSwgbV9yZWdzLnJlZ1QwKTsKICNpZiBDUFUoQVJNNjQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJp
dG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDYgPT0gNjQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAoNiArIDEpID09IEJveWVyTW9vcmVC
aXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0
VW5zaWduZWRCaXRmaWVsZDMyKHJlZ1QwLCBUcnVzdGVkSW1tMzIoNiksIFRydXN0ZWRJbW0zMigx
KSwgcmVnVDIpOyAvLyBFeHRyYWN0IDEgYml0IGZvciBpbmRleC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMiwgVGltZXNFaWdodCksIHJl
Z1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cnNoaWZ0NjQocmVnVDAsIHJlZ1Qy
KTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5IGxvd2VyIDZiaXRzIGFyZSBl
ZmZlY3RpdmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQoYnJh
bmNoVGVzdDY0KE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5leHRyYWN0VW5zaWduZWRCaXRmaWVsZDMyKG1fcmVncy5y
ZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgbV9yZWdzLnJlZ1QyKTsgLy8gRXh0cmFjdCAxIGJpdCBmb3IgaW5kZXgu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC51cnNoaWZ0NjQobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVnVDIpOyAvLyBXZSBjYW4gaWdu
b3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNmJpdHMgYXJlIGVmZmVjdGl2ZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1fcmVncy5yZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSkpOwogI2VsaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihCb3llck1vb3JlQml0bWFwOjpNYXA6OldvcmRU
eXBlKSA9PSBzaXplb2YodWludDY0X3QpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KDEgPDwgNiA9PSA2NCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydCgxIDw8ICg2ICsgMSkgPT0gQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpzaXpl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKDYpLCByZWdU
Mik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MSwgcmVnVDIsIFRpbWVzRWlnaHQpLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlZC5hcHBlbmQoYnJhbmNoVGVzdEJpdDY0KE5vblplcm8sIHJlZ1QyLCByZWdUMCkp
OyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgc2luY2UgbW9kdWxvLTY0IGlzIHBlcmZvcm1l
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5yZWdUMCwg
bV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC51cnNoaWZ0
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5yZWdUMSwgbV9yZWdz
LnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIG1fcmVncy5yZWdUMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdEJp
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIG1fcmVncy5yZWdUMCkp
OyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgc2luY2UgbW9kdWxvLTY0IGlzIHBlcmZvcm1l
ZC4KICNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6ZW9mKHVpbnQzMl90KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDUgPT0gMzIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAoNSArIDIp
ID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXJzaGlmdDMyKFRydXN0ZWRJbW0zMig1KSwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigwYjExKSwgcmVnVDIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDEsIHJlZ1QyLCBUaW1lc0ZvdXIpLCBy
ZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKHJlZ1QwLCByZWdU
Mik7IC8vIFdlIGNhbiBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA1Yml0cyBhcmUg
ZWZmZWN0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdUMik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoNSksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwYjExKSwg
bV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEsIG1fcmVncy5yZWdUMiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsg
Ly8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5IGxvd2VyIDViaXRzIGFyZSBlZmZl
Y3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSkpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1
dChlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW1wKCkubGlua1RvKGxvb3BIZWFkLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BIZWFkLCAmbV9qaXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBz
aXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0aGUgc3RhcnQgaW5kZXggZm9yIHVzZSBpZiB3
ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgYWRq
dXN0aW5nIG1hdGNoLXN0YXJ0IHdoZW4gd2UgZmFpbGVkIHRvIGZpbmQgdGhlIHN0YXJ0IHdpdGgg
Qm95ZXJNb29yZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcGF0dGVy
bi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0T2ZMZW5ndGhGYWlsdXJlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0T2ZMZW5ndGhGYWlsdXJlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRj
aFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQo
aW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9y
ZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQob3V0T2ZMZW5ndGhGYWlsdXJl
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0
aGUgc3RhcnQgaW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIG1hdGNoLXN0YXJ0IHdoZW4gd2Ugc3Rh
cnQgcGF0dGVybiBtYXRjaGluZyB3aXRoIHRoZSB1cGRhdGVkIGluZGV4CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBieSBCb3llck1vb3JlIHNlYXJjaC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRNYXRjaFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRj
aFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yNTE3LDIxICsyNDQxLDIwIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAvLyBMb2FkIGFwcHJvcHJpYXRlIHZhbHVlcyBpbnRvIHRoZSByZXR1cm4gcmVnaXN0ZXIgYW5k
IHRoZSBmaXJzdCBvdXRwdXQKICAgICAgICAgICAgICAgICAvLyBzbG90LCBhbmQgcmV0dXJuLiBJ
biB0aGUgY2FzZSBvZiBwYXR0ZXJuIHdpdGggYSBmaXhlZCBzaXplLCB3ZSB3aWxsCiAgICAgICAg
ICAgICAgICAgLy8gbm90IGhhdmUgeWV0IHNldCB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IAotICAg
ICAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fcmVncy5pbmRleCAhPSBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihwcmlvckFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplKSwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIocHJpb3JB
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgs
IHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUobV9y
ZWdzLmluZGV4LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVQYWlyMzIocmV0dXJuUmVnaXN0ZXIsIGluZGV4
LCBvdXRwdXQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVBhaXIzMihtX3JlZ3MucmV0dXJuUmVnaXN0ZXIsIG1fcmVncy5pbmRleCwgbV9yZWdz
Lm91dHB1dCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TWF0Y2hTdGFydChyZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGdldE1hdGNoU3RhcnQobV9yZWdzLnJldHVyblJl
Z2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29t
cGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCA0KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9y
ZWdzLm91dHB1dCwgNCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtb3Zl
KGluZGV4LCByZXR1cm5SZWdpc3RlcjIpOwotCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSht
X3JlZ3MuaW5kZXgsIG1fcmVncy5yZXR1cm5SZWdpc3RlcjIpOwogICAgICAgICAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkaXZpZGUg
YmV0d2VlbiB0aGUgdGFpbCBvZiB0aGUgcHJpb3IgYWx0ZXJuYXRpdmUsIGFib3ZlLCBhbmQKQEAg
LTI1NDIsMTcgKzI0NjUsMTcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGp1bXBzIGhlcmUgdG8gZG8gc28gd2l0
aCB0aGUgaW5wdXQgcG9zaXRpb24gbWF0Y2hpbmcgdGhhdCBvZiB0aGUKICAgICAgICAgICAgICAg
ICAgICAgLy8gUFJJT1IgYWx0ZXJhbmF0aXZlLCBhbmQgd2Ugd2lsbCBvbmx5IGNoZWNrIGlucHV0
IGF2YWlsYWJpbGl0eSBpZiB3ZQogICAgICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHByb2dy
ZXNzIGl0IGZvcndhcmRzLgotICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPiBwcmlv
ckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGQzMihJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByaW9yQWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBw
cmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpb3JBbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSA+IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3ViMzIoSW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGFs
dGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgLSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5tX25leHRPcCA9PSBub3RGb3VuZCkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWVudHJ5IHBvaW50IGZvciB0aGUg
RW5kIG9mICdvbmNlIHRocm91Z2gnIGFsdGVybmF0aXZlcywKICAgICAgICAgICAgICAgICAgICAg
Ly8ganVtcGVkIHRvIHdoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFpbHMgdG8gbWF0Y2guCi0g
ICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN1YjMyKEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihwcmlv
ckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBZYXJyT3BDb2RlOjpCb2R5
QWx0ZXJuYXRpdmVOZXh0KQpAQCAtMjYwOCw3ICsyNTMxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIW1fb3BzW29wLm1fcHJldmlv
dXNPcF0ubV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgbWF0Y2hlZCB3aXRob3V0IGNvbnN1bWlu
ZyBjaGFyYWN0ZXJzIHRoZW4KICAgICAgICAgICAgICAgICAgICAgLy8gYmFja3RyYWNrIHRvIHRy
eSB0byBtYXRjaCB3aGlsZSBjb25zdW1taW5nIHNvbWUgaW5wdXQuCi0gICAgICAgICAgICAgICAg
ICAgIG9wLm1femVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQq
KSkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZy
YW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2ggaGVyZSB0aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZl
IGhhcyBtYXRjaGVkIC0ganVtcCB0byB0aGUKQEAgLTI2MjUsMTAgKzI1NDgsMTAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBl
bmRPcCA9ICZtX29wc1tlbmRPcC0+bV9uZXh0T3BdOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBBU1NFUlQoZW5kT3AtPm1fb3AgPT0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVk
QWx0ZXJuYXRpdmVFbmQgfHwgZW5kT3AtPm1fb3AgPT0gWWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJu
YXRpdmVFbmQpOwotICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1bXBzLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXh0
IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSBob3cgbXVjaCBpbnB1dCB3ZSBuZWVkIHRvIGNoZWNrIGZvciwg
YW5kIGlmIG5vbi16ZXJvIGNoZWNrLgogICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3Qg
PSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKQEAgLTI2NTUsMTMgKzI1NzgsMTMgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlm
ICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIW1f
b3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgbWF0Y2hlZCB3
aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzIHRoZW4KICAgICAgICAgICAgICAgICAgICAgLy8g
YmFja3RyYWNrIHRvIHRyeSB0byBtYXRjaCB3aGlsZSBjb25zdW1taW5nIHNvbWUgaW5wdXQuCi0g
ICAgICAgICAgICAgICAgICAgIG9wLm1femVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1YWws
IGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9u
ICogc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3plcm9MZW5ndGhN
YXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzZXQgb2YgYWx0ZXJuYXRpdmVz
IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsCiAgICAgICAgICAgICAgICAgLy8g
dGhlbiB0aGUgTmV4dCBub2RlcyB3aWxsIGhhdmUgcGxhbnRlZCBqdW1wcyB0byB0aGUgRW5kLCBh
bmQgYWRkZWQKICAgICAgICAgICAgICAgICAvLyB0aGVtIHRvIHRoaXMgbm9kZSdzIG1fanVtcHMg
bGlzdC4KLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5jbGVhcigpOwogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5t
X3ByZXZpb3VzT3BdOwpAQCAtMjY3Niw3ICsyNTk5LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRo
ZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW46IHsKICAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSog
dGVybSA9IG9wLm1fdGVybTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVncy5yZWdU
MDsKICAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlNYXhDb3VudCA9PSAxKTsK
IAogICAgICAgICAgICAgICAgIC8vIFVwb24gZW50cnkgdG8gYSBHcmVlZHkgcXVhbnRpZmllZCBz
ZXQgb2YgcGFyZW50aGVzZSBzdG9yZSB0aGUgaW5kZXguCkBAIC0yNjk0LDEyICsyNjE3LDEyIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAvLwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3IgY2FwdHVyaW5nIHBhcmVucywgY291
bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBhcnJheT8KICAgICAgICAgICAgICAgICBp
ZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpCi0gICAgICAg
ICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3Rl
ZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFi
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4
KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZSht
X3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJlIGNhcHR1cmluZywgc3RvcmUgdGhlIHN0
YXJ0aW5nIGluZGV4IHZhbHVlIHRvIHRoZQpAQCAtMjcxMywyMyArMjYzNiwyMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dE9mZnNldCArPSB0ZXJtLT5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zm
c2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoaW5wdXRP
ZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9mZnNldCksIGlu
ZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5TdGFy
dChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0
ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQobV9yZWdzLmluZGV4LCB0ZXJtLT5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6
UGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZDogewogICAgICAgICAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwotICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
aW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMDsKICAgICAgICAg
ICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlNYXhDb3VudCA9PSAxKTsKIAogICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBuZXN0ZWQgYWx0ZXJuYXRpdmUgbWF0Y2hlZCB3aXRob3V0IGNvbnN1
bWluZyBhbnkgY2hhcmFjdGVycywgcHVudCB0aGlzIGJhY2sgdG8gdGhlIGludGVycHJldGVyLgog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMDc4Nj4gQWRkIGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJVCB0byBwcm9wZXJs
eQogICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4g
bWF0Y2ggd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgIGlmICh0
ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIXRlcm0t
PnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAg
ICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9p
ZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJt
LT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKIAogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBlbmRpbmcgaW5kZXgg
dmFsdWUgdG8gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZXMgYXJyYXksIG9mZnNldHRp
bmcgYXMgbmVjZXNzYXJ5LgpAQCAtMjc0MCwyMCArMjY2MywyMCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1
cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVy
bnMpIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNr
ZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aW5wdXRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0z
MihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGlucHV0T2Zm
c2V0KSwgaW5kZXhUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0
dGVybkVuZChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRT
dWJwYXR0ZXJuRW5kKGluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChtX3JlZ3MuaW5kZXgsIHRlcm0t
PnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2VzIGFyZSBxdWFudGlmaWVkIEdyZWVkeSB0aGVu
IGFkZCBhIGxhYmVsIHRvIGp1bXAgYmFjawogICAgICAgICAgICAgICAgIC8vIHRvIGlmIHdlIGdl
dCBhIGZhaWxlZCBtYXRjaCBmcm9tIGFmdGVyIHRoZSBwYXJlbnRoZXNlcy4gRm9yIE5vbkdyZWVk
eQogICAgICAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzLCBsaW5rIHRoZSBqdW1wIGZyb20gYmVm
b3JlIHRoZSBzdWJwYXR0ZXJuIHRvIGhlcmUuCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAg
ICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50
cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7CiAgICAgICAgICAgICAgICAg
ICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Ci0gICAgICAgICAg
ICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBiZWdpbk9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI3NjYsMTEgKzI2ODksMTEgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAg
IEFTU0VSVCghdGVybS0+Y2FwdHVyZSgpKTsKIAogICAgICAgICAgICAgICAgIC8vIFVwb24gZW50
cnkgc2V0IGEgbGFiZWwgdG8gbG9vcCBiYWNrIHRvLgotICAgICAgICAgICAgICAgIG9wLm1fcmVl
bnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKIAogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBzdGFydCBpbmRleCBvZiB0aGUg
Y3VycmVudCBtYXRjaDsgd2UgbmVlZCB0byByZWplY3QgemVybwogICAgICAgICAgICAgICAgIC8v
IGxlbmd0aCBtYXRjaGVzLgotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgdGVy
bS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc1Rlcm1pbmFsOjpiZWdp
bkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDo6YmVn
aW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxFbmQ6
IHsKQEAgLTI3ODEsMTUgKzI3MDQsMTUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4gQWRkIGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJ
VCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lv
bnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291
bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplKQotICAg
ICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmFwcGVuZChicmFuY2gzMihFcXVhbCwg
aW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24g
KiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9u
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKIAogICAgICAg
ICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgbWF0Y2ggaXMgbm9uLXplcm8sIHdlIGNhbiBh
Y2NlcHQgaXQgYW5kCiAgICAgICAgICAgICAgICAgLy8gbG9vcCBiYWNrIHVwIHRvIHRoZSBoZWFk
IG9mIHRoZSBzdWJwYXR0ZXJuLgotICAgICAgICAgICAgICAgIGp1bXAoYmVnaW5PcC5tX3JlZW50
cnkpOworICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5PcC5tX3JlZW50cnkpOwogCiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8ganVtcCB0byB3aGVu
IHdlIHN0b3AgbWF0Y2hpbmcgLSB3ZSB3aWxsCiAgICAgICAgICAgICAgICAgLy8gZG8gc28gb25j
ZSB0aGUgc3VicGF0dGVybiBjYW5ub3QgbWF0Y2ggYW55IG1vcmUuCi0gICAgICAgICAgICAgICAg
b3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBt
X2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBA
IC0yODE2LDI0ICsyNzM5LDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Ig
Y2FwdHVyaW5nIHBhcmVucywgY291bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBhcnJh
eT8KICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJU
eXBlOjpHcmVlZHkgfHwgdGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25H
cmVlZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigw
KSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpt
YXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1v
dW50SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsg
QmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlw
ZTo6Tm9uR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1
c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1Bh
cmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
b3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBj
dXJyUGFyZW5Db250ZXh0UmVnID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy
SUQgbmV3UGFyZW5Db250ZXh0UmVnID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgIG9wLm1f
cmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDA7CisgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4
dFJlZyA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1l
KHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFy
ZW5Db250ZXh0SGVhZEluZGV4KCksIGN1cnJQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAg
ICAgICAgICBhbGxvY2F0ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNvbnRleHRSZWcpOwotICAgICAg
ICAgICAgICAgICAgICBzdG9yZVB0cihjdXJyUGFyZW5Db250ZXh0UmVnLCBuZXdQYXJlbkNvbnRl
eHRSZWcpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjdXJyUGFyZW5Db250
ZXh0UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUobmV3UGFyZW5Db250ZXh0UmVnLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgc2F2ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNvbnRleHRSZWcsIHJlZ1QyLCB0
ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2VzLmxhc3RTdWJw
YXR0ZXJuSWQsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzYXZl
UGFyZW5Db250ZXh0KG5ld1BhcmVuQ29udGV4dFJlZywgbV9yZWdzLnJlZ1QyLCB0ZXJtLT5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUg
c3RhcnRpbmcgaW5kZXggdmFsdWUgdG8gdGhlCkBAIC0yODQzLDE1ICsyNzY2LDE1IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBv
ZmZzZXRzIG9ubHkgYWZ0ZXJ3YXJkcywgYXQgdGhlIHBvaW50IHRoZSByZXN1bHRzIGFycmF5IGlz
CiAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYWNjZXNzZWQuCiAgICAgICAgICAgICAgICAgaWYg
KHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNs
dWRlU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBp
bmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMDsKICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNrZWRPZmZzZXQgLSB0
ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50KQogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRPZmZzZXQgKz0gdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWlu
aW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhU
ZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXhUZW1wb3Jh
cnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KGluZGV4
LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0U3VicGF0dGVyblN0YXJ0KG1fcmVncy5pbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3Vi
cGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAjZWxzZSAvLyAhWUFSUl9KSVRfQUxMX1BB
UkVOU19FWFBSRVNTSU9OUwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yODY3LDEzICsyNzkwLDEzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFS
UiBKSVQgdG8gcHJvcGVybHkKICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJl
c3Npb25zIHRoYXQgY2FuIG1hdGNoIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhl
ZENvdW50ICYmICF0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkK
LSAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpOworICAgICAgICAgICAgICAgICAgICBtX2Fib3J0
RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1f
cmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCop
KSkpOwogCi0gICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9
IHJlZ1QxOworICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgICAgICAgICAgWWFyck9w
JiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKICAgICAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRUZW1w
b3JhcnkpOwogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFRlbXBvcmFyeSwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFt
b3VudEluZGV4KCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJl
IGNhcHR1cmluZywgc3RvcmUgdGhlIGVuZGluZyBpbmRleCB2YWx1ZSB0byB0aGUKQEAgLTI4ODMs
MTQgKzI4MDYsMTQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9pbnQg
dGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3NlZC4K
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0g
SklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0g
bV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW5wdXRPZmZzZXQgPSBtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0
aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9y
YXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwg
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChpbmRleFRlbXBvcmFyeSwgdGVy
bS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKGluZGV4LCB0ZXJtLT5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3Vi
cGF0dGVybkVuZChtX3JlZ3MuaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhl
c2VzIGFyZSBxdWFudGlmaWVkIEdyZWVkeSB0aGVuIGFkZCBhIGxhYmVsIHRvIGp1bXAgYmFjawpA
QCAtMjg5OCwxNSArMjgyMSwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gcGFyZW50aGVzZXMsIGxpbmsgdGhlIGp1bXAgZnJv
bSBiZWZvcmUgdGhlIHN1YnBhdHRlcm4gdG8gaGVyZS4KICAgICAgICAgICAgICAgICBpZiAodGVy
bS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDMyKEJlbG93LCBjb3VudFRlbXBvcmFyeSwg
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwg
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIGNvdW50VGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+
cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAganVtcChiZWdp
bk9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2lu
T3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLT5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewogICAgICAgICAgICAgICAg
ICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAg
ICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICAg
ICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5PcC5t
X2p1bXBzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0g
bV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICB9CiAjZWxzZSAvLyAhWUFSUl9KSVRfQUxM
X1BBUkVOU19FWFBSRVNTSU9OUwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yOTIxLDEyICsyODQ0LDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBp
bmRleCAtIGFzc2VydGlvbnMgc2hvdWxkIG5vdCB1cGRhdGUgaW5kZXgsIHNvCiAgICAgICAgICAg
ICAgICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHJlc3RvcmUgaXQgdXBvbiBhIHN1Y2Nlc3NmdWwgbWF0
Y2guCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0g
dGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNz
ZXJ0aW9uOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3Jl
Z3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXRpY2FsQXNzZXJ0aW9uOjpiZWdpbkluZGV4KCkpOwogCiAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgCiAgICAgICAgICAgICAgICAgb3AubV9jaGVja0FkanVzdCA9IG1fY2hlY2tlZE9mZnNldCAt
IHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1
c3QpCi0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBp
bmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAg
IG1fY2hlY2tlZE9mZnNldCAtPSBvcC5tX2NoZWNrQWRqdXN0OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjkzNiwxMyArMjg1OSwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbnB1dCBpbmRl
eCB2YWx1ZS4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxBc3Nl
cnRpb246OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJh
bWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxB
c3NlcnRpb246OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAg
IC8vIElmIGludmVydGVkLCBhIHN1Y2Nlc3NmdWwgbWF0Y2ggb2YgdGhlIGFzc2VydGlvbiBtdXN0
IGJlIHRyZWF0ZWQKICAgICAgICAgICAgICAgICAvLyBhcyBhIGZhaWx1cmUsIHNvIGp1bXAgdG8g
YmFja3RyYWNraW5nLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3Jl
ZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKQEAgLTI5NzAsNyAr
Mjg5Myw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgIC0tb3BJbmRleDsKIAogICAgICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAg
ICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCYWNrdHJhY2sob3BJbmRleCwgbGFi
ZWwoKSk7CisgICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJhY2t0cmFjayhv
cEluZGV4LCBtX2ppdC5sYWJlbCgpKTsKIAogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChvcC5tX29wKSB7CkBAIC0zMDE1LDcgKzI5
MzgsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
ICAgICAgICAgLy8gSXMgdGhpcyB0aGUgbGFzdCBhbHRlcm5hdGl2ZT8gSWYgbm90LCB0aGVuIGlm
IHdlIGJhY2t0cmFjayB0byB0aGlzIHBvaW50IHdlIGp1c3QKICAgICAgICAgICAgICAgICAvLyBu
ZWVkIHRvIGp1bXAgdG8gdHJ5IHRvIG1hdGNoIHRoZSBuZXh0IGFsdGVybmF0aXZlLgogICAgICAg
ICAgICAgICAgIGlmIChtX29wc1tvcC5tX25leHRPcF0ubV9vcCAhPSBZYXJyT3BDb2RlOjpCb2R5
QWx0ZXJuYXRpdmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rVG8obV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKG1fb3BzW29wLm1fbmV4dE9wXS5t
X3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9wID0gbV9vcHNbb3AubV9uZXh0
T3BdOwpAQCAtMzAyOSwxNyArMjk1MiwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICBib29sIG9uY2VUaHJvdWdoID0gZW5kT3Au
bV9uZXh0T3AgPT0gbm90Rm91bmQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
SnVtcExpc3QgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXM7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzOwog
CiAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGdlbmVyYXRlIGNvZGUgdG8gaGFuZGxlIGNhc2Vz
IHdoZXJlIHdlIGJhY2t0cmFjayBvdXQgb2YgYW4gYXR0ZW1wdGVkIG1hdGNoCiAgICAgICAgICAg
ICAgICAgLy8gb2YgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuIElmIHRoaXMgaXMgYSAnb25jZSB0aHJv
dWdoJyBzZXQgb2YgYWx0ZXJuYXRpdmVzIHRoZW4gd2UKICAgICAgICAgICAgICAgICAvLyBoYXZl
IG5vdGhpbmcgdG8gZG8gLSBsaW5rIHRoaXMgc3RyYWlnaHQgdGhyb3VnaCB0byB0aGUgRW5kLgog
ICAgICAgICAgICAgICAgIGlmIChvbmNlVGhyb3VnaCkKLSAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCAm
bV9qaXQpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9wYXR0ZXJuLnN0aWNreSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBh
IHN0aWNreSBwYXR0ZXJuIGFuZCB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBmYWlsZWQsIGp1bXAgdG8g
dGhlIGVuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFr
ZUJhY2t0cmFja3NUb0p1bXBMaXN0KGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzLCB0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0
cmFja3NUb0p1bXBMaXN0KGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzLCAmbV9qaXQpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4
ZWRTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUgPiBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQogICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSAxKSkgewpAQCAtMzA0NywxMSArMjk3MCwx
MSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB3ZSBvbWl0IHRoZSBzdG9yZSBvZiB0aGUg
c3RhcnQgaW5kZXggdW50aWwgdGhlIHBhdHRlcm4gaGFzIG1hdGNoZWQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiBqdXN0IGxpbmsgdGhlIGJhY2t0cmFjayBvdXQgb2Yg
dGhlIGxhc3QgYWx0ZXJuYXRpdmUgc3RyYWlnaHQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBoZWFkIG9mIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgdGhp
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhi
ZWdpbk9wLT5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdlbmVyYXRlIGEgdHJhbXBv
bGluZSBvZiBjb2RlIHRvIGV4ZWN1dGUgYmVmb3JlIGxvb3BpbmcgYmFjawogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXJvdW5kIHRvIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGFkdmFuY2UgYW5kIHJldHJ5IGZvciBh
IHN0aWNreSBwYXR0ZXJuLiBBbmQgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGJlZm9yZSB0aGlzIGJy
YW5jaC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLnN0aWNreSgp
KTsKQEAgLTMwNTksMTMgKzI5ODIsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1
YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gc2l6
ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGluZGV4IGZvciB1c2UgaWYgd2Ug
bWF0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1f
aGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMy
KGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIDEpLCByZWdUMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIDEp
LCBtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4LCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNo
U3RhcnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4LCBtX3Jl
Z3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0
KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0zMDc3LDE2ICszMDAwLDE2IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBkZWx0YSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+bV9h
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSAhPSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSAtIDEp
LCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcChiZWdpbk9wLT5tX3Jl
ZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEgLSAxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AtPm1fcmVlbnRyeSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBoYXMgbWluaW11bSBzaXplIDB4RkZGRkZGRkZ1LCB0
aGVuIHRoZXJlIGNhbm5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHN1ZmZp
Y2VudCBpbnB1dCBhdmFpbGFibGUgdG8gaGFuZGxlIHRoaXMsIHNvIGp1c3QgZmFsbCB0aHJvdWdo
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbHRhID0gYmVnaW5PcC0+
bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSAhPSAweEZGRkZGRkZGdSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlu
cHV0IGJlY2F1c2Ugd2UgYXJlIGluY3JlbWVudGluZyB0aGUgaW5wdXQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGRlbHRhICsgMSksIGluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9wLT5t
X3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEgKyAxKSwgbV9yZWdzLmluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9w
LT5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMDk5LDcg
KzMwMjIsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgLy8gICAgZm9sbG93aW5nIGEgZmFpbGVkIGlucHV0IGNoZWNrLgogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHdheSwgd2UgaGF2ZSBqdXN0
IGZhaWxlZCB0aGUgaW5wdXQgY2hlY2sgZm9yIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4KLSAgICAg
ICAgICAgICAgICBMYWJlbCBmaXJzdElucHV0Q2hlY2tGYWlsZWQodGhpcyk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpcnN0SW5wdXRDaGVja0ZhaWxlZCgmbV9qaXQp
OwogCiAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgY29kZSB0byBoYW5kbGUgaW5wdXQgY2hl
Y2sgZmFpbHVyZXMgZnJvbSBhbHRlcm5hdGl2ZXMgZXhjZXB0IHRoZSBsYXN0LgogICAgICAgICAg
ICAgICAgIC8vIHByZXZPcCBpcyB0aGUgYWx0ZXJuYXRpdmUgd2UncmUgaGFuZGxpbmcgYSBiYWls
IG91dCBmcm9tIChpbml0aWFsbHkgQmVnaW4pLCBhbmQKQEAgLTMxMTAsNyArMzAzMyw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBZ
YXJyT3AqIHByZXZPcCA9IGJlZ2luT3A7CiAgICAgICAgICAgICAgICAgWWFyck9wKiBuZXh0T3Ag
PSAmbV9vcHNbYmVnaW5PcC0+bV9uZXh0T3BdOwogICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0
T3AtPm1fb3AgIT0gWWFyck9wQ29kZTo6Qm9keUFsdGVybmF0aXZlRW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByZXZPcC0+bV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBwcmV2T3AtPm1fanVtcHMubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG9ubHkgZ2V0IGhlcmUgaWYgYW4gaW5wdXQgY2hlY2sgZmFpbHMsIGl0IGlzIG9ubHkgd29y
dGggY2hlY2tpbmcgYWdhaW4KICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIG5leHQgYWx0
ZXJuYXRpdmUgaGFzIGEgbWluaW11bSBzaXplIGxlc3MgdGhhbiB0aGUgbGFzdC4KQEAgLTMxMTks
MTMgKzMwNDIsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VidHJhY3QgZGVsdGEgYmFjayBvdXQsIGFuZCBy
ZWR1Y2UgdGhpcyBjb2RlLiBTaG91bGQgcGVyZm9ybWFuY2UgdGVzdAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIGJlbmVmaXQgb2YgdGhpcy4KICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGRlbHRhID0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0g
bmV4dE9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3ViMzIoSW1tMzIoZGVsdGEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGQzMihJbW0zMihkZWx0YSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGp1bXAobmV4dE9wLT5tX3JlZW50cnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKGRlbHRhKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuanVtcChuZXh0T3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWls
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2T3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPCBuZXh0T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihuZXh0T3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIobmV4dE9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
IC0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgcHJldk9wID0gbmV4dE9wOwogICAgICAgICAgICAgICAgICAg
ICBuZXh0T3AgPSAmbV9vcHNbbmV4dE9wLT5tX25leHRPcF07CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzEzNSwxNCArMzA1OCwxNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGlucHV0
IHRvIHJ1biB0aGUgbGFzdCBhbHRlcm5hdGl2ZSwgdGhlbiBmb3IgJ29uY2UgdGhyb3VnaCcKICAg
ICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgd2UgYXJlIGRvbmUgLSBqdXN0IGp1bXAgYmFj
ayB1cCBpbnRvIHRoZSBmb3J3YXJkcyBtYXRjaGluZyBwYXRoIGF0IHRoZSBFbmQuCiAgICAgICAg
ICAgICAgICAgaWYgKG9uY2VUaHJvdWdoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMubGlua1RvKGVuZE9wLm1fcmVlbnRyeSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIGp1
bXAoZW5kT3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5r
VG8oZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5q
dW1wKGVuZE9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIEZvciByZXBlYXRpbmcgYWx0ZXJuYXRp
dmVzLCBsaW5rIGFueSBpbnB1dCBjaGVjayBmYWlsdXJlIGZyb20gdGhlIGxhc3QgYWx0ZXJuYXRp
dmUgdG8KICAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgIG9w
Lm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1f
aml0KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgPSAh
bV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemU7CiAKQEAgLTMxNTEsNyArMzA3NCw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAvLyBkaXNqdW5jdGlvbiBpcyAwLCBlLmcuIC9hKnxiLykuCiAgICAgICAgICAgICAgICAgaWYg
KG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ICYmIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09
IDEpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXggaXMgYWxyZWFkeSBpbmNyZW1lbnRl
ZCBieSAxLCBzbyBqdXN0IHN0b3JlIGl0IG5vdyEKLSAgICAgICAgICAgICAgICAgICAgc2V0TWF0
Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdz
LmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgbmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTMxNjQsMjIgKzMwODcsMjIgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBp
ZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5p
bXVtU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgYWx0ZXJu
YXRpdmUgaGFkIHRoZSBzYW1lIG1pbmltdW0gc2l6ZSBhcyB0aGUgZGlzanVuY3Rpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHNpbXBseSBpbmNyZW1lbnQgaW5wdXQgcG9zIGJ5
IDEsIG5vIGFkanVzdG1lbnQgYmFzZWQgb24gbWluaW11bSBzaXplLgotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIG1pbnVtdW0gZm9yIHRoZSBsYXN0IGFsdGVybmF0aXZlIHdhcyBv
bmUgZ3JlYXRlciB0aGFuIHRoYW4gdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9y
IHRoZSBkaXNqdW5jdGlvbiwgd2UncmUgYWxyZWFkeSBwcm9ncmVzc2VkIGJ5IDEsIG5vdGhpbmcg
dG8gZG8hCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWx0YSA9IChhbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSAtIG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpIC0g
MTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIEp1
bXAgbWF0Y2hGYWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1hdGNoRmFpbGVkID0ganVtcElmTm9BdmFpbGFi
bGVJbnB1dCgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc1RvVXBkYXRlTWF0Y2hT
dGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5t
X21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQo
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdz
LmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmlt
dW1TaXplKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3Rh
cnQocmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVn
cy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11
bVNpemUpLCBtX3JlZ3MucmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0zMTg3LDIyICszMTEwLDIyIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRo
ZSBib2R5IGFzIGEgd2hvbGUuIElmIG5vIG1vcmUgaXMgbmVlZGVkIHRoZW4gd2UgZG9udCBuZWVk
IGFuIGFkZGl0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQgY2hlY2sgaGVyZSAt
IGp1bXAgc3RyYWlnaHQgYmFjayB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGFsdGVybmF0
aXZlLgogICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSA9PSBtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKQotICAgICAgICAg
ICAgICAgICAgICAgICAganVtcChiZWdpbk9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuanVtcChiZWdpbk9wLT5tX3JlZW50cnkpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbk9wLT5tX2FsdGVy
bmF0aXZlLT5tX21pbmltdW1TaXplID4gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihiZWdpbk9wLT5tX2FsdGVy
bmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSks
IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIG1f
cGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKElt
bTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksIHRoaXMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAganVtcChmaXJzdElucHV0Q2hlY2tGYWlsZWQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtX3BhdHRlcm4u
bV9ib2R5LT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0
KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAoZmlyc3RJbnB1dENoZWNrRmFpbGVkKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBpZiB3ZSBp
dGVyYXRlIHRvIHRoZSBwb2ludCB0aGF0IHRoZXJlIGlzIGluc3VmZmljaWVudCBpbnB1dCB0bwog
ICAgICAgICAgICAgICAgICAgICAvLyBydW4gYW55IG1hdGNoZXMsIGFuZCBuZWVkIHRvIHJldHVy
biBhIGZhaWx1cmUgc3RhdGUgZnJvbSBKSVQgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgbWF0
Y2hGYWlsZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hGYWlsZWQubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxhc3RTdGlj
a3lBbHRlcm5hdGl2ZUZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbGFzdFN0
aWNreUFsdGVybmF0aXZlRmFpbHVyZXMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIHJl
bW92ZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzI2MiwxNCArMzE4NSwxNCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gbGluayB0
aGUgYmFja3RyYWNrcyBkaXJlY3RseSB0byB0aGVpciBkZXN0aW5hdGlvbi4KICAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBIYW5k
bGUgdGhlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gbGluayB0aGUgYmFja3RyYWNrcyBoZXJlLgot
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIob3AubV9j
aGVja0FkanVzdCksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNM
YXN0QWx0ZXJuYXRpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0
aXZlIHRoYXQgaXMgbm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRvIGl0cyBzdWNjZXNzb3IuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG5leHRPcC5tX3JlZW50cnkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuanVtcChuZXh0T3AubV9yZWVudHJ5KTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZXMgbXVzdCBqdW1wIGJhY2sg
dG8gdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRPcC5tX2p1bXBz
LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE9wLm1fanVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBIHNpbmdsZSBhbHRlcm5hdGl2ZSBvbiBpdHMgb3duIGNh
biBmYWxsIHRocm91Z2guCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zMjc4LDEwICszMjAxLDEwIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlcyB3aGVyZSB3ZSBjYW4gbGluayB0aGUgYmFja3RyYWNrcyBkaXJlY3RseSB0byB0
aGVpciBkZXN0aW5hdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNMYXN0QWx0ZXJu
YXRpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHRoYXQg
aXMgbm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRvIGl0cyBzdWNjZXNzb3IuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhuZXh0T3AubV9yZWVudHJ5
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
a1RvKG5leHRPcC5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWlzQmVnaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IG9m
IG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmVzIG11c3QganVtcCBiYWNrIHRvIHRoZSBiZWdpbm5p
bmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNr
dHJhY2tzVG9KdW1wTGlzdChuZXh0T3AubV9qdW1wcywgdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChuZXh0
T3AubV9qdW1wcywgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSBhbHRlcm5hdGl2ZSBvbiBpdHMgb3du
IGRvIG5vdGhpbmcgLSBpdCBjYW4gZmFsbCB0aHJvdWdoLgogICAgICAgICAgICAgICAgIH0KQEAg
LTMzMzEsNyArMzI1NCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBlbmQgb2YgYSBub24tc2ltcGxlIHNldCBv
ZiBhbHRlcm50aXZlcyB3ZSBuZWVkIHRvIGp1bXAKICAgICAgICAgICAgICAgICAvLyB0byB0aGUg
YmFja3RyYWNraW5nIHJldHVybiBhZGRyZXNzIHNldCB1cCBkdXJpbmcgZ2VuZXJhdGlvbi4KICAg
ICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBZYXJyT3BDb2RlOjpOZXN0ZWRBbHRlcm5hdGl2
ZUVuZCkgewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQp
OwogCiAgICAgICAgICAgICAgICAgICAgIC8vIFBsYW50IGEganVtcCB0byB0aGUgcmV0dXJuIGFk
ZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CkBAIC0zMzY4LDcgKzMyOTEsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdG8gYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgaWYgY2FwdHVyaW5nIG9yIGdy
ZWVkeS4KICAgICAgICAgICAgICAgICBpZiAoKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVN
b2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHx8IHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgY2FwdHVyaW5nLCBjbGVhciB0aGUgY2FwdHVyZSAod2Ugb25seSBuZWVkIHRvIHJlc2V0IHN0
YXJ0KS4KICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBp
bGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCkBAIC0zMzc4LDEy
ICszMzAxLDEyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlw
ZTo6R3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmxhZyBp
biB0aGUgc3RhY2tmcmFtZSBpbmRpY2F0aW5nIHdlIHJhbiB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJu
LgogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpi
ZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVtcCB0byBhZnRlciB0
aGUgcGFyZW50aGVzZXMsIHNraXBwaW5nIHRoZSBzdWJwYXR0ZXJuLgotICAgICAgICAgICAgICAg
ICAgICAgICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2t0cmFjayBmcm9tIGFmdGVyIHRoZSBwYXJl
bnRoZXNlcywgd2hlbiBza2lwcGluZyB0aGUgc3VicGF0dGVybiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHdpbGwganVtcCBiYWNrIHRvIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTMzOTQsMTMgKzMz
MTcsMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGJhY2t0cmFjayBi
YWNrIGludG8gdGhlIHBhcmVudGhlc2VzLCBvciBpZiB3ZQogICAgICAgICAgICAgICAgICAgICAv
LyBhcmUgY3VycmVudGx5IGluIGEgc3RhdGUgd2hlcmUgd2UgaGFkIHNraXBwZWQgb3ZlciB0aGUg
c3VicGF0dGVybgogICAgICAgICAgICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB0aGUgZmxh
ZyB2YWx1ZSBvbiB0aGUgc3RhY2sgd2lsbCBiZSAtMSkuCiAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBlZCA9IGJyYW5jaDMyKEVxdWFsLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lkKikp
LCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaGFkU2tpcHBlZCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2Vz
T25jZTo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKC0xKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGb3IgR3JlZWR5IHBhcmVudGhlc2VzLCB3ZSBza2lwIGFmdGVyIGhhdmluZyBhbHJlYWR5
IHRyaWVkIGdvaW5nCkBAIC0zNDE0LDcgKzMzMzcsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaGluZyBw
YXRoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5VHlwZSA9
PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFlh
cnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwg
Jm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIG1f
YmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTM0MzUsNyArMzM1OCw3IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAv
LyBxdWFudGlmaWVkIHdpdGggYSBtaW5pbXVtIG9mIHplcm8pIGp1bXAgYmFjayB0byB0aGUgZm9y
d2FyZHMgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAvLyBwYXRoIGF0IHRoZSBlbmQuCiAgICAg
ICAgICAgICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1fbmV4dE9wXTsKLSAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksIHRoaXMp
OworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVuZE9wLm1fcmVl
bnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxF
bmQ6CkBAIC0zNDY1LDQwICszMzg4LDQwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwogCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0t
PnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCi0gICAgICAgICAgICAg
ICAgICAgIFJlZ2lzdGVySUQgY3VyclBhcmVuQ29udGV4dFJlZyA9IHJlZ1QwOwotICAgICAgICAg
ICAgICAgICAgICBSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IHJlZ1QxOworICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0
UmVnID0gbV9yZWdzLnJlZ1QwOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAg
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpLCBjdXJyUGFyZW5D
b250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJl
c3RvcmVQYXJlbkNvbnRleHQoY3VyclBhcmVuQ29udGV4dFJlZywgcmVnVDIsIHRlcm0tPnBhcmVu
dGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVBh
cmVuQ29udGV4dChjdXJyUGFyZW5Db250ZXh0UmVnLCBtX3JlZ3MucmVnVDIsIHRlcm0tPnBhcmVu
dGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIGZyZWVQYXJlbkNvbnRleHQoY3VyclBhcmVuQ29udGV4dFJlZywgbmV3UGFy
ZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG5ld1BhcmVu
Q29udGV4dFJlZywgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9IG1f
cmVncy5yZWdUMDsKICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5k
ZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAgICBKdW1wIHplcm9MZW5n
dGhNYXRjaCA9IGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRUZW1wb3JhcnkpOwogCi0gICAg
ICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRUZW1wb3JhcnkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShjb3VudFRlbXBvcmFyeSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5m
b1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkpOwogCi0gICAgICAgICAgICAgICAgICAg
IGp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
Q2xlYXIgdGhlIGZsYWcgaW4gdGhlIHN0YWNrZnJhbWUgaW5kaWNhdGluZyB3ZSBkaWRuJ3QgcnVu
IHRocm91Z2ggdGhlIHN1YnBhdHRlcm4uCi0gICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAobV9vcHNbb3AubV9uZXh0
T3BdLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG1fb3Bz
W29wLm1fbmV4dE9wXS5tX3JlZW50cnkpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIEdy
ZWVkeSwganVtcCB0byB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEEgYmFja3RyYWNrIGZyb20gYWZ0ZXIgdGhlIHBhcmVudGhlc2VzLCB3aGVuIHNr
aXBwaW5nIHRoZSBzdWJwYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBq
dW1wIGJhY2sgdG8gaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQp
OwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpAQCAtMzUxMyw3ICszNDM2LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkgewotICAgICAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247
CiAKQEAgLTM1MjEsNyArMzQ0NCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hv
dWxkIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIHBhcmVudGhlc2VzLCBvciBpZiB3ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXJlIGN1cnJlbnRseSBpbiBhIHN0YXRlIHdoZXJlIHdlIGhh
ZCBza2lwcGVkIG92ZXIgdGhlIHN1YnBhdHRlcm4KICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IChpbiB3aGljaCBjYXNlIHRoZSBmbGFnIHZhbHVlIG9uIHRoZSBzdGFjayB3aWxsIGJlIC0xKS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBlZCA9IGJyYW5jaDMyKEVxdWFs
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2b2lk
KikpLCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGhhZFNraXBwZWQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAgKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXM6OmJlZ2luSW5kZXgoKSkgKiBzaXplb2Yodm9pZCopKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigtMSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgR3Jl
ZWR5IHBhcmVudGhlc2VzLCB3ZSBza2lwIGFmdGVyIGhhdmluZyBhbHJlYWR5IHRyaWVkIGdvaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJuLCBzbyBp
ZiB3ZSBnZXQgaGVyZSB3ZSdyZSBkb25lLgpAQCAtMzUzNCwyNCArMzQ1NywyNCBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBtYXRjaGluZyBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm0t
PnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBiZWdpblRlbXBvcmFyeSA9IHJlZ1QwOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9
IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgYmVnaW5UZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFRlbXBvcmFyeSA9
IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9w
ID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgbG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXM6OmJlZ2luSW5kZXgoKSwgYmVnaW5UZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJhbmNoMzIoRXF1YWwsIGJlZ2luVGVtcG9yYXJ5LCBUcnVzdGVkSW1tMzIoLTEpKS5s
aW5rVG8oYmVnaW5PcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBiZWdpblRlbXBvcmFyeSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwg
Jm1faml0KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcExpc3QgZXhjZWVkZWRNYXRj
aExpbWl0OworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGV4Y2VlZGVkTWF0Y2hMaW1pdDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0t
PnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50VGVtcG9yYXJ5
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgY291bnRUZW1wb3JhcnksIEltbTMyKHRlcm0tPnF1YW50
aXR5TWF4Q291bnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWVkZWRNYXRj
aExpbWl0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBjb3VudFRlbXBvcmFyeSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4
Q291bnQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgYmVnaW5UZW1wb3JhcnkpLmxpbmtUbyhiZWdp
bk9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIG1fcmVncy5pbmRleCwgYmVnaW5UZW1wb3Jhcnkp
LmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgJm1faml0KTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZWVkZWRNYXRjaExpbWl0LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBleGNlZWRlZE1hdGNoTGltaXQubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3Vn
aCgpOwpAQCAtMzU3MywxNyArMzQ5NiwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gb2YgYSBwYXJlbnRoZXRpY2FsIGFzc2Vy
dGlvbiBpZiBlaXRoZXIgd2UgbmVlZCB0byBjb3JyZWN0CiAgICAgICAgICAgICAgICAgLy8gdGhl
IGlucHV0IGluZGV4LCBvciB0aGUgYXNzZXJ0aW9uIHdhcyBpbnZlcnRlZC4KICAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCB8fCB0ZXJtLT5pbnZlcnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAg
ICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZDMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIob3AubV9jaGVja0FkanVzdCks
IG1fcmVncy5pbmRleCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gSW4gYW4gaW52ZXJ0ZWQg
YXNzZXJ0aW9uIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHN1YnBhdHRlcm4KICAgICAgICAgICAgICAg
ICAgICAgLy8gaXMgdHJlYXRlZCBhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2ggLSBqdW1wIHRvIHRoZSBl
bmQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnBhdHRlcm4uIFdlIGFscmVhZHkg
aGF2ZSBhZGp1c3RlZCB0aGUgaW5wdXQgcG9zaXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8g
YmFjayB0byB0aGF0IGJlZm9yZSB0aGUgYXNzZXJ0aW9uLCB3aGljaCBpcyBjb3JyZWN0LgogICAg
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKGVuZE9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5qdW1wKGVuZE9wLm1fcmVlbnRyeSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTM2MDIsNyAr
MzUyNSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgICAgICAvLyB0aGlzIGJ1ZyB0b28gKHByZXN1bWFibHkgYmVjYXVzZSB0aGV5IHVzZSBZ
QVJSISkKIAogICAgICAgICAgICAgICAgIC8vIE5ldmVyIGJhY2t0cmFjayBpbnRvIGFuIGFzc2Vy
dGlvbjsgbGF0ZXIgZmFpbHVyZXMgYmFpbCB0byBiZWZvcmUgdGhlIGJlZ2luLgotICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG9wLm1f
anVtcHMsIHRoaXMpOworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJh
Y2t0cmFja3NUb0p1bXBMaXN0KG9wLm1fanVtcHMsICZtX2ppdCk7CiAKICAgICAgICAgICAgICAg
ICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CiAgICAgICAgICAgICAg
ICAgbV9jaGVja2VkT2Zmc2V0IC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OwpAQCAtMzYzNyw3ICsz
NTYwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICBZYXJyT3BDb2RlIGFsdGVybmF0aXZlTmV4dE9wQ29kZSA9IFlhcnJPcENvZGU6OlNpbXBsZU5l
c3RlZEFsdGVybmF0aXZlTmV4dDsKICAgICAgICAgWWFyck9wQ29kZSBhbHRlcm5hdGl2ZUVuZE9w
Q29kZSA9IFlhcnJPcENvZGU6OlNpbXBsZU5lc3RlZEFsdGVybmF0aXZlRW5kOwogCi0gICAgICAg
IGlmIChVTkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFz
b24gPSBKSVRGYWlsdXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3RlZFRvb0RlZXA7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM3NDgsNyArMzY3MSw3IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyBvbmNlLCBhbmQgd2lsbCBuZXZl
ciBiYWNrdHJhY2sgYmFjayBpbnRvIHRoZSBhc3NlcnRpb24uCiAgICAgdm9pZCBvcENvbXBpbGVQ
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uKFBhdHRlcm5UZXJtKiB0ZXJtKQogICAgIHsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKSkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNv
biA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhlc2lzTmVzdGVkVG9vRGVlcDsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzgzMyw3ICszNzU2LDcgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIC8vIHRvIHJldHVybiB0aGUgZmFpbGlu
ZyByZXN1bHQuCiAgICAgdm9pZCBvcENvbXBpbGVCb2R5KFBhdHRlcm5EaXNqdW5jdGlvbiogZGlz
anVuY3Rpb24pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVj
dXJzZSgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkgewog
ICAgICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6UGFyZW50aGVz
aXNOZXN0ZWRUb29EZWVwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODky
LDYgKzM4MTUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICBpZiAoY29sbGVjdEJveWVyTW9vcmVJbmZvKGRpc2p1bmN0aW9uLCBjdXJyZW50
QWx0ZXJuYXRpdmVJbmRleCwgYm1JbmZvLmdldCgpKSkgewogICAgICAgICAgICAgICAgIG1fb3Bz
Lmxhc3QoKS5tX2JtSW5mbyA9IGJtSW5mby5wdHIoKTsKICAgICAgICAgICAgICAgICBtX2JtSW5m
b3MuYXBwZW5kKFdURk1vdmUoYm1JbmZvKSk7CisgICAgICAgICAgICAgICAgbV91c2VzVDIgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQwMDgsOCArMzkzMiw5IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgIGNvbnN0IEJveWVy
TW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUqIGdldEJveWVyTW9vcmVCaXRtYXAoY29uc3QgQm95
ZXJNb29yZUJpdG1hcDo6TWFwJiBtYXApCiAgICAgewotICAgICAgICBpZiAoY29uc3QgYXV0byog
ZXhpc3RpbmdQb2ludGVyID0gbV9jb2RlQmxvY2sudHJ5UmV1c2VCb3llck1vb3JlQml0bWFwKG1h
cCkpCi0gICAgICAgICAgIHJldHVybiBleGlzdGluZ1BvaW50ZXI7CisgICAgICAgIGlmIChjb25z
dCBhdXRvKiBleGlzdGluZ1BvaW50ZXIgPSBtX2JveWVyTW9vcmVEYXRhLT50cnlSZXVzZUJveWVy
TW9vcmVCaXRtYXAobWFwKSkKKyAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1BvaW50ZXI7CisK
ICAgICAgICAgYXV0byBoZWFwTWFwID0gbWFrZVVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpN
YXA+KG1hcCk7CiAgICAgICAgIGNvbnN0IGF1dG8qIHBvaW50ZXIgPSBoZWFwTWFwLT5zdG9yYWdl
KCk7CiAgICAgICAgIG1fYm1NYXBzLmFwcGVuZChXVEZNb3ZlKGhlYXBNYXApKTsKQEAgLTQwMjQs
NjQgKzM5NDksNjQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
CiAgICAgICAgIEFTU0VSVChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKTsKIAotICAgICAgICBtX3Ry
eVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnkgPSBsYWJlbCgpOworICAgICAgICBtX3RyeVJlYWRV
bmljb2RlQ2hhcmFjdGVyRW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCi0gICAgICAgIHRhZ1JldHVy
bkFkZHJlc3MoKTsKKyAgICAgICAgbV9qaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgICAg
IHRyeVJlYWRVbmljb2RlQ2hhckltcGwocmVnVDApOworICAgICAgICB0cnlSZWFkVW5pY29kZUNo
YXJJbXBsKG1fcmVncy5yZWdUMCk7CiAKLSAgICAgICAgcmV0KCk7CisgICAgICAgIG1faml0LnJl
dCgpOwogI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUVudGVyKCkKICAgICB7CiAj
aWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OmVicCk7Ci0gICAgICAg
IG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICAgICAg
bV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVicCk7CiAKICAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAgICAgICAg
IHB1c2goWDg2UmVnaXN0ZXJzOjplYngpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZSZWdp
c3RlcnM6OmVieCk7CiAKICNpZiBPUyhXSU5ET1dTKQotICAgICAgICBwdXNoKFg4NlJlZ2lzdGVy
czo6ZWRpKTsKKyAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVkaSk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYg
KG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykgewogI2lmIE9TKFdJTkRPV1MpCi0gICAgICAg
ICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZXNpKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2
UmVnaXN0ZXJzOjplc2kpOwogI2VuZGlmCi0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6
cjEyKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjpyMTIpOwogICAgICAg
ICB9CiAjZW5kaWYKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewotICAg
ICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OnIxMyk7Ci0gICAgICAgICAgICBwdXNoKFg4NlJl
Z2lzdGVyczo6cjE0KTsKLSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTUpOworICAg
ICAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OnIxMyk7CisgICAgICAgICAgICBtX2pp
dC5wdXNoKFg4NlJlZ2lzdGVyczo6cjE0KTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVn
aXN0ZXJzOjpyMTUpOwogICAgICAgICB9CiAjaWYgT1MoV0lORE9XUykKICAgICAgICAgaWYgKG1f
Y29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNiAqIHNpemVvZih2b2lk
KikpLCBvdXRwdXQpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNiAqIHNpemVvZih2b2lkKikpLCBtX3JlZ3Mub3V0
cHV0KTsKICAgICAgICAgLy8gcmN4IGlzIHRoZSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgc3Bh
Y2UgZm9yIHJlc3VsdCBpbiB4NjQgV2luZG93cy4KLSAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6
OmVjeCk7CisgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjplY3gpOwogI2VuZGlmCiAj
ZWxpZiBDUFUoQVJNNjQpCiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAg
ICAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgICAgICAgICAgbV9qaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICAgICAgcHVzaFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigweDEwMDAwKSwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhkODAwKSwgbGVhZGluZ1N1cnJvZ2F0ZVRhZyk7Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGRjMDApLCB0cmFpbGluZ1N1cnJvZ2F0ZVRh
Zyk7CisgICAgICAgICAgICAgICAgbV9qaXQucHVzaFBhaXIoTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDEwMDAwKSwgbV9y
ZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApLCBtX3JlZ3MubGVhZGluZ1N1cnJvZ2F0
ZVRhZyk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMHhkYzAwKSwgbV9yZWdzLnRyYWlsaW5nU3Vycm9nYXRlVGFnKTsKICAgICAgICAgfQogI2Vs
aWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNCk7Ci0gICAg
ICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7Ci0gICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpy
Nik7Ci0gICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyOCk7Ci0gICAgICAgIHB1c2goQVJNUmVn
aXN0ZXJzOjpyMTApOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjQpOworICAg
ICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjUpOworICAgICAgICBtX2ppdC5wdXNoKEFS
TVJlZ2lzdGVyczo6cjYpOworICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjgpOwor
ICAgICAgICBtX2ppdC5wdXNoKEFSTVJlZ2lzdGVyczo6cjEwKTsKICNlbGlmIENQVShNSVBTKQog
ICAgICAgICAvLyBEbyBub3RoaW5nLgogI2VuZGlmCkBAIC00MDg5LDcwICs0MDE0LDc5IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgIHZvaWQgZ2VuZXJh
dGVSZXR1cm4oKQogICAgIHsKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5F
KQorICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5saW5lVGVz
dCkgeworICAgICAgICAgICAgbV9pbmxpbmVkTWF0Y2hlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBDUFUoWDg2XzY0
KQogI2lmIE9TKFdJTkRPV1MpCiAgICAgICAgIC8vIFN0b3JlIHRoZSByZXR1cm4gdmFsdWUgaW4g
dGhlIGFsbG9jYXRlZCBzcGFjZSBwb2ludGVkIGJ5IHJjeC4KLSAgICAgICAgcG9wKFg4NlJlZ2lz
dGVyczo6ZWN4KTsKLSAgICAgICAgc3RvcmU2NChyZXR1cm5SZWdpc3RlciwgQWRkcmVzcyhYODZS
ZWdpc3RlcnM6OmVjeCkpOwotICAgICAgICBzdG9yZTY0KHJldHVyblJlZ2lzdGVyMiwgQWRkcmVz
cyhYODZSZWdpc3RlcnM6OmVjeCwgc2l6ZW9mKHZvaWQqKSkpOwotICAgICAgICBtb3ZlKFg4NlJl
Z2lzdGVyczo6ZWN4LCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIG1faml0LnBvcChYODZSZWdp
c3RlcnM6OmVjeCk7CisgICAgICAgIG1faml0LnN0b3JlNjQobV9yZWdzLnJldHVyblJlZ2lzdGVy
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVjeCkpOworICAgICAgICBt
X2ppdC5zdG9yZTY0KG1fcmVncy5yZXR1cm5SZWdpc3RlcjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6ZWN4LCBzaXplb2Yodm9pZCopKSk7CisgICAgICAgIG1faml0Lm1v
dmUoWDg2UmVnaXN0ZXJzOjplY3gsIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAjZW5kaWYKICAg
ICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIHBvcChYODZS
ZWdpc3RlcnM6OnIxNSk7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpyMTQpOwotICAg
ICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjEzKTsKKyAgICAgICAgICAgIG1faml0LnBvcChY
ODZSZWdpc3RlcnM6OnIxNSk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjpy
MTQpOworICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjEzKTsKICAgICAgICAg
fQogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAg
IGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgIHBvcChYODZS
ZWdpc3RlcnM6OnIxMik7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjpyMTIp
OwogI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplc2kpOwor
ICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZXNpKTsKICNlbmRpZgogICAgICAg
ICB9CiAjZW5kaWYKICNpZiBPUyhXSU5ET1dTKQotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpl
ZGkpOworICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjplZGkpOwogI2VuZGlmCiAKICAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAgICAgICAg
IHBvcChYODZSZWdpc3RlcnM6OmVieCk7Ci0gICAgICAgIHBvcChYODZSZWdpc3RlcnM6OmVicCk7
CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYngpOworICAgICAgICBtX2pp
dC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQogICAgICAgICBpZiAo
bV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VK
SVRDYWdlKCkpCi0gICAgICAgICAgICAgICAgcG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3Rlciwg
bGlua1JlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wb3BQYWlyKE1hY3JvQXNzZW1i
bGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OmxpbmtSZWdpc3Rlcik7
CiAgICAgICAgIH0KICNlbGlmIENQVShBUk1fVEhVTUIyKQotICAgICAgICBwb3AoQVJNUmVnaXN0
ZXJzOjpyMTApOwotICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyOCk7Ci0gICAgICAgIHBvcChB
Uk1SZWdpc3RlcnM6OnI2KTsKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwotICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNCk7CisgICAgICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6
OnIxMCk7CisgICAgICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnI4KTsKKyAgICAgICAgbV9q
aXQucG9wKEFSTVJlZ2lzdGVyczo6cjYpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJz
OjpyNSk7CisgICAgICAgIG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnI0KTsKICNlbGlmIENQVShN
SVBTKQogICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYKICNpZiBDUFUoQVJNNjRFKQogICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgZmFySnVtcChUcnVz
dGVkSW1tUHRyKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBPcGVyYXRpb25Q
dHJUYWc+KCZ2bUVudHJ5VG9ZYXJySklUQWZ0ZXIpKSwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgICAgIG1faml0LmZhckp1bXAoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmV0YWdD
b2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlU
b1lhcnJKSVRBZnRlcikpLCBPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXQoKTsKKyAgICAgICAgICAgIG1faml0LnJldCgpOwogI2Vsc2UKLSAgICAgICAgcmV0
KCk7CisgICAgICAgIG1faml0LnJldCgpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBsb2Fk
U3ViUGF0dGVybihSZWdpc3RlcklEIG91dHB1dEdQUiwgdW5zaWduZWQgc3VicGF0dGVybklkLCBS
ZWdpc3RlcklEIHN0YXJ0SW5kZXhHUFIsIFJlZ2lzdGVySUQgZW5kSW5kZXhPckxlbkdQUikKKyAg
ICB2b2lkIGxvYWRTdWJQYXR0ZXJuKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG91dHB1dEdQ
UiwgdW5zaWduZWQgc3VicGF0dGVybklkLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBzdGFy
dEluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbmRJbmRleE9yTGVuR1BSKQog
ICAgIHsKLSAgICAgICAgbG9hZFBhaXIzMihvdXRwdXRHUFIsIFRydXN0ZWRJbW0zMigoc3VicGF0
dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkpLCBzdGFydEluZGV4R1BSLCBlbmRJbmRleE9yTGVu
R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFBhaXIzMihvdXRwdXRHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSwgc3RhcnRJ
bmRleEdQUiwgZW5kSW5kZXhPckxlbkdQUik7CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgWWFyckdl
bmVyYXRvcihWTSogdm0sIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBTdHJpbmcmIHBhdHRlcm5TdHJp
bmcsIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jaywgQ2hhclNpemUgY2hhclNpemUsIEpJVENvbXBp
bGVNb2RlIGNvbXBpbGVNb2RlKQotICAgICAgICA6IG1fdm0odm0pCisgICAgWWFyckdlbmVyYXRv
cihNYWNyb0Fzc2VtYmxlciYgaml0LCBjb25zdCBWTSogdm0sIFlhcnJDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgWWFyckpJVFJlZ3MmIHJlZ3MsIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBjb25z
dCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplIGNoYXJTaXplLCBKSVRDb21waWxlTW9k
ZSBjb21waWxlTW9kZSkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV92bSh2bSkK
KyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9yZWdzKHJlZ3Mp
CiAgICAgICAgICwgbV9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgICAgICwgbV9wYXR0ZXJuU3RyaW5n
KHBhdHRlcm5TdHJpbmcpCi0gICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAg
ICAsIG1fY2hhclNpemUoY2hhclNpemUpCiAgICAgICAgICwgbV9jb21waWxlTW9kZShjb21waWxl
TW9kZSkKICAgICAgICAgLCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKG1fY2hhclNpemUgPT0gQ2hh
clNpemU6OkNoYXIxNiAmJiBtX3BhdHRlcm4udW5pY29kZSgpKQpAQCAtNDE2MywxMSArNDA5Nyw0
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9wYXJlbkNvbnRleHRTaXplcyhjb21waWxlTW9kZSA9
PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zID8gbV9wYXR0ZXJuLm1fbnVtU3Vi
cGF0dGVybnMgOiAwLCBtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCiAjZW5kaWYK
ICAgICB7CisgICAgICAgIG1fYm95ZXJNb29yZURhdGEgPSBkeW5hbWljX2Nhc3Q8WWFyckJveWVy
TW95ZXJEYXRhKj4obV9jb2RlQmxvY2spOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZSgpCisg
ICAgWWFyckdlbmVyYXRvcihNYWNyb0Fzc2VtYmxlciYgaml0LCBjb25zdCBWTSogdm0sIFlhcnJC
b3llck1veWVyRGF0YSogeWFyckJNRGF0YSwgY29uc3QgWWFyckpJVFJlZ3MmIHJlZ3MsIFlhcnJQ
YXR0ZXJuJiBwYXR0ZXJuLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplIGNo
YXJTaXplLCBKSVRDb21waWxlTW9kZSBjb21waWxlTW9kZSkKKyAgICAgICAgOiBtX2ppdChqaXQp
CisgICAgICAgICwgbV92bSh2bSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhudWxscHRyKQorICAg
ICAgICAsIG1fYm95ZXJNb29yZURhdGEoeWFyckJNRGF0YSkKKyAgICAgICAgLCBtX3JlZ3MocmVn
cykKKyAgICAgICAgLCBtX3BhdHRlcm4ocGF0dGVybikKKyAgICAgICAgLCBtX3BhdHRlcm5TdHJp
bmcocGF0dGVyblN0cmluZykKKyAgICAgICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQorICAgICAg
ICAsIG1fY29tcGlsZU1vZGUoY29tcGlsZU1vZGUpCisgICAgICAgICwgbV9kZWNvZGVTdXJyb2dh
dGVQYWlycyhtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyMTYgJiYgbV9wYXR0ZXJuLnVuaWNv
ZGUoKSkKKyAgICAgICAgLCBtX3VuaWNvZGVJZ25vcmVDYXNlKG1fcGF0dGVybi51bmljb2RlKCkg
JiYgbV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSkKKyAgICAgICAgLCBtX2Nhbm9uaWNhbE1vZGUobV9w
YXR0ZXJuLnVuaWNvZGUoKSA/IENhbm9uaWNhbE1vZGU6OlVuaWNvZGUgOiBDYW5vbmljYWxNb2Rl
OjpVQ1MyKQorI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAg
ICAgICAsIG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucyhmYWxzZSkKKyAgICAgICAgLCBtX3Bh
cmVuQ29udGV4dFNpemVzKGNvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3Vi
cGF0dGVybnMgPyBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyA6IDAsIG1fcGF0dGVybi5tX2Jv
ZHktPm1fY2FsbEZyYW1lU2l6ZSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMpCisgICAgICAgICAgICBtX3VzZXNUMiA9IHRydWU7
CisgICAgfQorCisgICAgYm9vbCBpc1NhZmVUb1JlY3Vyc2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG1fY29tcGlsYXRpb25UaHJlYWRTdGFja0NoZWNrZXIpCisgICAgICAgICAgICByZXR1
cm4gbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlci0+aXNTYWZlVG9SZWN1cnNlKCk7CisK
KyAgICAgICAgcmV0dXJuIG1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpOworICAgIH0KKworICAgIHZv
aWQgc2V0U3RhY2tDaGVja2VyKFN0YWNrQ2hlY2sqIHN0YWNrQ2hlY2tlcikKICAgICB7Ci0gICAg
ICAgIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgICAgICBtX2Nv
bXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyID0gc3RhY2tDaGVja2VyOworICAgIH0KKworICAg
IHZvaWQgY29tcGlsZShZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhcnRPZk1haW5Db2RlOwogCiAjaWYgIUVOQUJMRShZQVJS
X0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQ
YWlycykgewpAQCAtNDE5OCw3ICs0MTY4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9kaXNh
c3NlbWJsZXIgPSBtYWtlVW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+KHRoaXMpOwogCiAgICAgICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFy
dE9mQ29kZShsYWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9m
Q29kZShtX2ppdC5sYWJlbCgpKTsKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VY
UFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKQpAQCAt
NDIwNyw0MiArNDE3Nyw0NiBAQCBwdWJsaWM6CiAKICAgICAgICAgZ2VuZXJhdGVFbnRlcigpOwog
Ci0gICAgICAgIEp1bXAgaGFzSW5wdXQgPSBjaGVja0lucHV0KCk7CisgICAgICAgIHN0YXJ0T2ZN
YWluQ29kZSA9IG1faml0LmxhYmVsKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
aGFzSW5wdXQgPSBjaGVja0lucHV0KCk7CiAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwot
ICAgICAgICBoYXNJbnB1dC5saW5rKHRoaXMpOworICAgICAgICBoYXNJbnB1dC5saW5rKCZtX2pp
dCk7CiAKICAgICAgICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxG
cmFtZVNpemVJbkJ5dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAg
ICAgIGlmIChjYWxsRnJhbWVTaXplSW5CeXRlcykgewogICAgICAgICAgICAgLy8gQ2hlY2sgc3Rh
Y2sgc2l6ZQotICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtY2FsbEZyYW1lU2l6ZUlu
Qnl0ZXMpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbV9qaXQu
YWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVz
KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX3JlZ3MucmVnVDApOwog
I2lmIENQVShYODZfNjQpICYmIE9TKFdJTkRPV1MpCiAgICAgICAgICAgICAvLyBtYXRjaGluZ0Nv
bnRleHQgaXMgdGhlIDV0aCBhcmd1bWVudCwgaXQgaXMgZm91bmQgb24gdGhlIHN0YWNrLgotICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBt
YXRjaGluZ0NvbnRleHQpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
bWF0Y2hpbmdDb250ZXh0ID0gbV9yZWdzLnJlZ1QxOworICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2
b2lkKikpLCBtYXRjaGluZ0NvbnRleHQpOwogI2VsaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShN
SVBTKQogICAgICAgICAgICAgLy8gbWF0Y2hpbmdDb250ZXh0IGlzIHRoZSA1dGggYXJndW1lbnQs
IGl0IGlzIGZvdW5kIG9uIHRoZSBzdGFjay4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hp
bmdDb250ZXh0ID0gcmVnVDE7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIDQgKiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVn
cy5yZWdUMTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQq
KSksIG1hdGNoaW5nQ29udGV4dCk7CisjZWxzZQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gbV9yZWdzLm1hdGNoaW5nQ29udGV4dDsKICNl
bmRpZgotICAgICAgICAgICAgSnVtcCBzdGFja09rID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwg
QWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZT
dGFja0xpbWl0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dGFja09rID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9s
ZGVyOjpvZmZzZXRPZlN0YWNrTGltaXQoKSksIG1fcmVncy5yZWdUMCk7CiAKICAgICAgICAgICAg
IC8vIEV4Y2VlZGVkIHN0YWNrIGxpbWl0LCBwdW50IHRvIHRoZSBpbnRlcnByZXRlci4KLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1Jl
Z0V4cFJlc3VsdDo6SklUQ29kZUZhaWx1cmUpKSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2Fz
dDxzaXplX3Q+KEpTUmVnRXhwUmVzdWx0OjpKSVRDb2RlRmFpbHVyZSkpLCBtX3JlZ3MucmV0dXJu
UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDApLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKICAgICAgICAgICAgIGdlbmVyYXRl
UmV0dXJuKCk7CiAKLSAgICAgICAgICAgIHN0YWNrT2subGluayh0aGlzKTsKLSAgICAgICAgICAg
IG1vdmUocmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHN0YWNrT2su
bGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIH0KIAogI2lmIEVOQUJM
RShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVTdXJy
b2dhdGVQYWlycykKLSAgICAgICAgICAgIGdldEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KGlu
cHV0LCBsZW5ndGgsIFRpbWVzVHdvKSwgZW5kT2ZTdHJpbmdBZGRyZXNzKTsKKyAgICAgICAgICAg
IG1faml0LmdldEVmZmVjdGl2ZUFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3Jl
Z3MuaW5wdXQsIG1fcmVncy5sZW5ndGgsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIG1fcmVn
cy5lbmRPZlN0cmluZ0FkZHJlc3MpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxM
X1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0
ZXJucykKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKG1hdGNoTGltaXQpLCByZW1haW5p
bmdNYXRjaENvdW50KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihtYXRjaExpbWl0KSwgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpOwogI2Vu
ZGlmCiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzdWJwYXR0ZXJucycgc3RhcnRzLiBBbmQgaW5p
dGlhbGl6ZSBtYXRjaFN0YXJ0IGlmIGAhbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemVg
LgpAQCAtNDI1MSwxNCArNDIyNSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB1bnNpZ25lZCBz
dWJwYXR0ZXJuSWQgPSAwOwogICAgICAgICAgICAgLy8gRmlyc3Qgc3VicGF0dGVybklkJ3Mgc3Rh
cnQgaXMgY29uZmlndXJlZCB0byBgaW5kZXhgIGlmICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0Zp
eGVkU2l6ZS4KICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNp
emUpIHsKLSAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgKytzdWJw
YXR0ZXJuSWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKDsgc3VicGF0dGVybklk
IDwgbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMgKyAxOyArK3N1YnBhdHRlcm5JZCkKLSAgICAg
ICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAoc3Vi
cGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3VicGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+
bV9oYXNGaXhlZFNpemUpCi0gICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7Cisg
ICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKQEAgLTQyNzIsNDUg
KzQyNDYsNjMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBpZiAobV9wYXR0
ZXJuLm1fc2F2ZUluaXRpYWxTdGFydFZhbHVlKQotICAgICAgICAgICAgbW92ZShpbmRleCwgaW5p
dGlhbFN0YXJ0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtX3JlZ3Mu
aW5pdGlhbFN0YXJ0KTsKIAogICAgICAgICBnZW5lcmF0ZSgpOwogICAgICAgICBpZiAobV9kaXNh
c3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZHZW5lcmF0ZShs
YWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkdlbmVyYXRlKG1f
aml0LmxhYmVsKCkpOwogICAgICAgICBiYWNrdHJhY2soKTsKICAgICAgICAgaWYgKG1fZGlzYXNz
ZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3RyYWNrKGxh
YmVsKCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3RyYWNrKG1f
aml0LmxhYmVsKCkpOworCisgICAgICAgIHB0cmRpZmZfdCBjb2RlU2l6ZSA9IE1hY3JvQXNzZW1i
bGVyOjpkaWZmZXJlbmNlQmV0d2VlbihzdGFydE9mTWFpbkNvZGUsIG1faml0LmxhYmVsKCkpOwor
ICAgICAgICBib29sIGNhbklubGluZSA9IG1fY29tcGlsZU1vZGUgIT0gSklUQ29tcGlsZU1vZGU6
OkluY2x1ZGVTdWJwYXR0ZXJucworICAgICAgICAgICAgJiYgIW1fcGF0dGVybi5nbG9iYWwoKSAm
JiAhbV9wYXR0ZXJuLnN0aWNreSgpICYmICFtX3BhdHRlcm4udW5pY29kZSgpCisjaWYgRU5BQkxF
KFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgICAgICAgICAmJiAhbV9jb250
YWluc05lc3RlZFN1YnBhdHRlcm5zCisjZW5kaWYKKyAgICAgICAgICAgICYmICFtX3BhdHRlcm4u
bV9jb250YWluc0JhY2tyZWZlcmVuY2VzOwogCiAgICAgICAgIGdlbmVyYXRlVHJ5UmVhZFVuaWNv
ZGVDaGFyYWN0ZXJIZWxwZXIoKTsKIAogICAgICAgICBnZW5lcmF0ZUpJVEZhaWxSZXR1cm4oKTsK
IAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEVuZE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKIAotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpZYXJySklULCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKSB7Ci0gICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVy
ZVJlYXNvbihKSVRGYWlsdXJlUmVhc29uOjpFeGVjdXRhYmxlTWVtb3J5QWxsb2NhdGlvbkZhaWx1
cmUpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGJhY2t0cmFja1JlY29yZHMg
PSBtX2JhY2t0cmFja2luZ1N0YXRlLmJhY2t0cmFja1JlY29yZHMoKTsKKyAgICAgICAgaWYgKCFi
YWNrdHJhY2tSZWNvcmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgQmFja3Ry
YWNraW5nU3RhdGU6OmxpbmtCYWNrdHJhY2tSZWNvcmRzKGxpbmtCdWZmZXIsIGJhY2t0cmFja1Jl
Y29yZHMpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fdHJ5
UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVu
dHJ5KTsKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiB0
cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0
clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKIAotICAgICAgICAgICAgZm9y
IChhdXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMpCi0gICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVy
KTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gY2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFy
YWN0ZXJDYWxscykKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRy
eVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9
CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVy
KTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1faml0LCBSRUdFWFBfQ09ERV9JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6WWFyckpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAg
ICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICAgICAg
Y29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6
RXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIpOwogCiAgICAgICAgIGlmIChtX2NvbXBpbGVN
b2RlID09IEpJVENvbXBpbGVNb2RlOjpNYXRjaE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChtX2No
YXJTaXplID09IENoYXJTaXplOjpDaGFyOCkKKyAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09
IENoYXJTaXplOjpDaGFyOCkgewogICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29k
ZU1hdGNoT25seShGSU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyLCBZYXJyTWF0Y2hPbmx5
OEJpdFB0clRhZywgIk1hdGNoLW9ubHkgOC1iaXQgcmVndWxhciBleHByZXNzaW9uIiksIFdURk1v
dmUobV9ibU1hcHMpKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb2RlQmxv
Y2suc2V0OEJpdElubGluZVN0YXRzKGNvZGVTaXplLCBjYWxsRnJhbWVTaXplSW5CeXRlcywgY2Fu
SW5saW5lLCBtX3VzZXNUMik7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGNvZGVCbG9jay5zZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfUkVHRVhQX0NPREUobGlu
a0J1ZmZlciwgWWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCAiTWF0Y2gtb25seSAxNi1iaXQgcmVn
dWxhciBleHByZXNzaW9uIiksIFdURk1vdmUobV9ibU1hcHMpKTsKKyAgICAgICAgICAgICAgICBj
b2RlQmxvY2suc2V0MTZCaXRJbmxpbmVTdGF0cyhjb2RlU2l6ZSwgY2FsbEZyYW1lU2l6ZUluQnl0
ZXMsIGNhbklubGluZSwgbV91c2VzVDIpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQogICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay5zZXQ4Qml0Q29kZShGSU5BTElaRV9SRUdFWFBfQ09ERShsaW5r
QnVmZmVyLCBZYXJyOEJpdFB0clRhZywgIjgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCBXVEZN
b3ZlKG1fYm1NYXBzKSk7CkBAIC00MzIxLDYgKzQzMTMsMTAyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKCptX2ZhaWx1cmVSZWFz
b24pOwogICAgIH0KIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisg
ICAgdm9pZCBjb21waWxlSW5saW5lKFlhcnJCb3llck1veWVyRGF0YSYgYm95ZXJNb29yZURhdGEp
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wYXR0ZXJuLm1fY29udGFpbnNCYWNr
cmVmZXJlbmNlcyk7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIGJlZm9yZSBnZW5l
cmF0aW5nIGNvZGUgc2luY2Ugd2Ugc2V0IGZsYWdzIGJhc2VkIG9uIGNvbXBpbGF0aW9uIHRoYXQK
KyAgICAgICAgLy8gYXJlIHVzZWQgZHVyaW5nIGdlbmVyYXRpb24uCisgICAgICAgIG9wQ29tcGls
ZUJvZHkobV9wYXR0ZXJuLm1fYm9keSk7CisKKyNpZm5kZWYgSklUX1VOSUNPREVfRVhQUkVTU0lP
TlMKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpOworI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucyk7CisjZW5kaWYK
KworICAgICAgICBBU1NFUlQoIW1fZmFpbHVyZVJlYXNvbik7CisgICAgICAgIAorICAgICAgICBp
ZiAobV91c2VzVDIpCisgICAgICAgICAgICBBU1NFUlQobV9yZWdzLnJlZ1QyICE9IE1hY3JvQXNz
ZW1ibGVyOjpJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCkpKQor
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPFlhcnJEaXNhc3NlbWJsZXI+
KHRoaXMpOworCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBoYXNJbnB1dCA9IGNoZWNrSW5wdXQoKTsKKyAgICAgICAgZ2VuZXJh
dGVGYWlsUmV0dXJuKCk7CisgICAgICAgIGhhc0lucHV0LmxpbmsoJm1faml0KTsKKworICAgICAg
ICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0
ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKKyAgICAgICAgaWYgKGNhbGxG
cmFtZVNpemVJbkJ5dGVzKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgc3BhY2Ugb24gc3RhY2sg
Zm9yIG1hdGNoaW5nIGNvbnRleHQgZGF0YS4KKyAgICAgICAgICAgIG1faml0LmFkZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisjaWZkZWYgSklUX1VOSUNPREVfRVhQUkVTU0lPTlMK
KyAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCisgICAgICAgICAgICBtX2ppdC5n
ZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0
LCBtX3JlZ3MubGVuZ3RoLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCBtX3JlZ3MuZW5kT2ZT
dHJpbmdBZGRyZXNzKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNf
RVhQUkVTU0lPTlMpCisgICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpCisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF0Y2hM
aW1pdCksIG1fcmVncy5yZW1haW5pbmdNYXRjaENvdW50KTsKKyNlbmRpZgorCisgICAgICAgIGlm
IChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhdHRlcm4ubV9udW1TdWJw
YXR0ZXJucyArIDE7ICsraSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mu
b3V0cHV0LCAoaSA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQorICAgICAgICAgICAgc2V0TWF0
Y2hTdGFydChtX3JlZ3MuaW5kZXgpOworCisgICAgICAgIGlmIChtX3BhdHRlcm4ubV9zYXZlSW5p
dGlhbFN0YXJ0VmFsdWUpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwgbV9y
ZWdzLmluaXRpYWxTdGFydCk7CisKKyAgICAgICAgZ2VuZXJhdGUoKTsKKyAgICAgICAgaWYgKG1f
ZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJh
dGUobV9qaXQubGFiZWwoKSk7CisgICAgICAgIGJhY2t0cmFjaygpOworICAgICAgICBpZiAobV9k
aXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZCYWNrdHJh
Y2sobV9qaXQubGFiZWwoKSk7CisKKyAgICAgICAgZ2VuZXJhdGVUcnlSZWFkVW5pY29kZUNoYXJh
Y3RlckhlbHBlcigpOworCisgICAgICAgIGdlbmVyYXRlSklURmFpbFJldHVybigpOworCisgICAg
ICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZkNvZGUobV9qaXQubGFiZWwoKSk7CisKKyAgICAgICAgbV9pbmxpbmVkRmFpbGVkTWF0Y2gu
bGluaygmbV9qaXQpOworICAgICAgICBtX2lubGluZWRNYXRjaGVkLmxpbmsoJm1faml0KTsKKwor
ICAgICAgICBhdXRvIGJhY2t0cmFja1JlY29yZHMgPSBtX2JhY2t0cmFja2luZ1N0YXRlLmJhY2t0
cmFja1JlY29yZHMoKTsKKyAgICAgICAgaWYgKCFiYWNrdHJhY2tSZWNvcmRzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgQmFja3RyYWNraW5nU3RhdGU6OmxpbmtCYWNrdHJhY2tS
ZWNvcmRzKGxpbmtCdWZmZXIsIGJhY2t0cmFja1JlY29yZHMpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRy
VGFnPiB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxOb1B0clRhZz4obV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5KTsKKworICAgICAgICAg
ICAgICAgIGZvciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzKQor
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJIZWxwZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBi
b3llck1vb3JlRGF0YS5zYXZlTWFwcyhXVEZNb3ZlKG1fYm1NYXBzKSk7CisgICAgfQorI2VuZGlm
CisKICAgICBjb25zdCBjaGFyKiB2YXJpYW50KCkgZmluYWwKICAgICB7CiAgICAgICAgIGlmICht
X2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpNYXRjaE9ubHkpIHsKQEAgLTQ1MjYsMTIg
KzQ2MTQsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWTSogbV92bTsKKyAg
ICBNYWNyb0Fzc2VtYmxlciYgbV9qaXQ7CisgICAgY29uc3QgVk0qIG1fdm07CisgICAgWWFyckNv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgWWFyckJveWVyTW95ZXJEYXRhKiBtX2JveWVyTW9v
cmVEYXRhOworICAgIGNvbnN0IFlhcnJKSVRSZWdzJiBtX3JlZ3M7CiAKKyAgICBTdGFja0NoZWNr
KiBtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyIHsgbnVsbHB0ciB9OwogICAgIFlhcnJQ
YXR0ZXJuJiBtX3BhdHRlcm47Ci0gICAgU3RyaW5nJiBtX3BhdHRlcm5TdHJpbmc7CisgICAgY29u
c3QgU3RyaW5nJiBtX3BhdHRlcm5TdHJpbmc7CiAKLSAgICBZYXJyQ29kZUJsb2NrJiBtX2NvZGVC
bG9jazsKICAgICBDaGFyU2l6ZSBtX2NoYXJTaXplOwogICAgIEpJVENvbXBpbGVNb2RlIG1fY29t
cGlsZU1vZGU7CiAKQEAgLTQ1NDEsMTUgKzQ2MzMsMTkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9kZWNvZGVTdXJyb2dhdGVQYWlyczsKICAgICBib29sIG1fdW5pY29kZUlnbm9yZUNhc2U7Cisg
ICAgYm9vbCBtX3VzZXNUMjsKICAgICBDYW5vbmljYWxNb2RlIG1fY2Fub25pY2FsTW9kZTsKICNp
ZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICBib29sIG1fY29u
dGFpbnNOZXN0ZWRTdWJwYXR0ZXJuczsKICAgICBQYXJlbkNvbnRleHRTaXplcyBtX3BhcmVuQ29u
dGV4dFNpemVzOwogI2VuZGlmCi0gICAgSnVtcExpc3QgbV9hYm9ydEV4ZWN1dGlvbjsKLSAgICBK
dW1wTGlzdCBtX2hpdE1hdGNoTGltaXQ7Ci0gICAgVmVjdG9yPENhbGw+IG1fdHJ5UmVhZFVuaWNv
ZGVDaGFyYWN0ZXJDYWxsczsKLSAgICBMYWJlbCBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50
cnk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fYWJvcnRFeGVjdXRpb247CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1faGl0TWF0Y2hMaW1pdDsKKyAgICBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXI6OkNhbGw+IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxsczsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5OworCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1faW5saW5lZE1hdGNoZWQ7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IG1faW5saW5lZEZhaWxlZE1hdGNoOwogCiAgICAgLy8gVGhlIHJl
Z3VsYXIgZXhwcmVzc2lvbiBleHByZXNzZWQgYXMgYSBsaW5lYXIgc2VxdWVuY2Ugb2Ygb3BlcmF0
aW9ucy4KICAgICBWZWN0b3I8WWFyck9wLCAxMjg+IG1fb3BzOwpAQCAtNDYwNiw3ICs0NzAyLDEz
IEBAIHN0YXRpYyB2b2lkIGR1bXBDb21waWxlRmFpbHVyZShKSVRGYWlsdXIKIAogdm9pZCBqaXRD
b21waWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJT
aXplIGNoYXJTaXplLCBWTSogdm0sIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jaywgSklUQ29tcGls
ZU1vZGUgbW9kZSkKIHsKLSAgICBZYXJyR2VuZXJhdG9yKHZtLCBwYXR0ZXJuLCBwYXR0ZXJuU3Ry
aW5nLCBjb2RlQmxvY2ssIGNoYXJTaXplLCBtb2RlKS5jb21waWxlKCk7CisgICAgTWFjcm9Bc3Nl
bWJsZXIgbWFzbTsKKworICAgIEFTU0VSVChtb2RlID09IEpJVENvbXBpbGVNb2RlOjpNYXRjaE9u
bHkgfHwgbW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKTsKKworICAg
IFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzIGppdFJlZ2lzdGVyczsKKyAgICBZYXJyR2VuZXJhdG9y
PFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzPihtYXNtLCB2bSwgJmNvZGVCbG9jaywgaml0UmVnaXN0
ZXJzLCBwYXR0ZXJuLCBwYXR0ZXJuU3RyaW5nLCBjaGFyU2l6ZSwgbW9kZSkuY29tcGlsZShjb2Rl
QmxvY2spOworCiAgICAgaWYgKGF1dG8gZmFpbHVyZVJlYXNvbiA9IGNvZGVCbG9jay5mYWlsdXJl
UmVhc29uKCkpIHsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBDb21waWxlZFJl
Z0V4cFBhdHRlcm5zKCkpKSB7CiAgICAgICAgICAgICBwYXR0ZXJuLmR1bXBQYXR0ZXJuU3RyaW5n
KFdURjo6ZGF0YUZpbGUoKSwgcGF0dGVyblN0cmluZyk7CkBAIC00NjE2LDYgKzQ3MTgsMTggQEAg
dm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBTdAogICAgIH0KIH0KIAorI2lm
IEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCit2b2lkIGppdENvbXBpbGVJbmxp
bmVkVGVzdChTdGFja0NoZWNrKiBtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLCBjb25z
dCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIE9wdGlvblNldDxZYXJyOjpGbGFncz4gZmxhZ3MsIENo
YXJTaXplIGNoYXJTaXplLCBjb25zdCBWTSogdm0sIFlhcnJCb3llck1veWVyRGF0YSYgYm95ZXJN
b29yZURhdGEsIE1hY3JvQXNzZW1ibGVyJiBqaXQsIFlhcnJKSVRSZWdpc3RlcnMmIGppdFJlZ2lz
dGVycykKK3sKKyAgICBZYXJyOjpFcnJvckNvZGUgZXJyb3JDb2RlOworICAgIFlhcnI6OllhcnJQ
YXR0ZXJuIHBhdHRlcm4ocGF0dGVyblN0cmluZywgZmxhZ3MsIGVycm9yQ29kZSk7CisKKyAgICBZ
YXJyR2VuZXJhdG9yPFlhcnJKSVRSZWdpc3RlcnM+IHlhcnJHZW5lcmF0b3Ioaml0LCB2bSwgJmJv
eWVyTW9vcmVEYXRhLCBqaXRSZWdpc3RlcnMsIHBhdHRlcm4sIHBhdHRlcm5TdHJpbmcsIGNoYXJT
aXplLCBKSVRDb21waWxlTW9kZTo6SW5saW5lVGVzdCk7CisgICAgeWFyckdlbmVyYXRvci5zZXRT
dGFja0NoZWNrZXIobV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlcik7CisgICAgeWFyckdl
bmVyYXRvci5jb21waWxlSW5saW5lKGJveWVyTW9vcmVEYXRhKTsKK30KKyNlbmRpZgorCiB9fQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9u
IDI4MzA4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIllhcnJQYXR0ZXJuLmgiCiAjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi9TdGFja0NoZWNrLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjZGVm
aW5lIFlBUlJfQ0FMTApAQCAtNDMsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
Vk07CiBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyOwogCiBuYW1l
c3BhY2UgWWFyciB7CiAKQEAgLTE5OSw3ICsyMDEsNzIgQEAgZXh0ZXJuICJDIiBFbmNvZGVkTWF0
Y2hSZXN1bHQgdm1FbnRyeVRvWQogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb1lhcnJKSVRBZnRl
cih2b2lkKTsKICNlbmRpZgogCi1jbGFzcyBZYXJyQ29kZUJsb2NrIHsKK2NsYXNzIFlhcnJCb3ll
ck1veWVyRGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoWWFyckJveWVyTW95ZXJEYXRhKTsKKworcHVibGljOgorICAgIFlhcnJCb3ll
ck1veWVyRGF0YSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQgc2F2ZU1hcHMoVmVjdG9yPFVuaXF1
ZVJlZjxCb3llck1vb3JlQml0bWFwOjpNYXA+PiBtYXBzKQorICAgIHsKKyAgICAgICAgbV9tYXBz
LnJlc2VydmVDYXBhY2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKKyAg
ICAgICAgICAgIG1fbWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOwor
ICAgIH0KKworICAgIHZvaWQgY2xlYXJNYXBzKCkKKyAgICB7CisgICAgICAgIG1fbWFwcy5jbGVh
cigpOworICAgIH0KKworICAgIGNvbnN0IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUq
IHRyeVJldXNlQm95ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1h
cCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgc3RvcmVkIDogbV9tYXBzKSB7Cisg
ICAgICAgICAgICBpZiAoc3RvcmVkLmdldCgpID09IG1hcCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RvcmVkLT5zdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1h
cDo6TWFwPj4gbV9tYXBzOworfTsKKworY2xhc3MgWWFyckNvZGVCbG9jayA6IHB1YmxpYyBZYXJy
Qm95ZXJNb3llckRhdGEgeworICAgIHN0cnVjdCBJbmxpbmVTdGF0cyB7CisgICAgICAgIElubGlu
ZVN0YXRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluc25Db3VudCwgdW5zaWduZWQgc3RhY2tTaXplLCBi
b29sIGNhbklubGluZSwgYm9vbCBuZWVkc1RlbXAyKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2luc25Db3VudD0gaW5zbkNvdW50OworICAgICAgICAgICAgbV9zdGFja1NpemUgPSBzdGFja1Np
emU7CisgICAgICAgICAgICBtX2NhbklubGluZSA9IGNhbklubGluZTsKKyAgICAgICAgICAgIG1f
bmVlZHNUZW1wMiA9IG5lZWRzVGVtcDI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFy
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbnNuQ291bnQgPSAwOworICAgICAgICAgICAg
bV9zdGFja1NpemUgPSAwOworICAgICAgICAgICAgbV9jYW5JbmxpbmUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIG1fbmVlZHNUZW1wMiA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWdu
ZWQgY29kZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc25Db3VudDsgfQorICAgICAgICB1bnNp
Z25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorICAgICAgICBi
b29sIGNhbklubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuSW5saW5lOyB9CisgICAgICAgIGJv
b2wgbmVlZHNUZW1wMigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNUZW1wMjsgfQorCisgICAgICAg
IHVuc2lnbmVkIG1faW5zbkNvdW50OworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZSA6IDMw
OworICAgICAgICBib29sIG1fY2FuSW5saW5lIDogMTsKKyAgICAgICAgYm9vbCBtX25lZWRzVGVt
cDIgOiAxOworICAgIH07CisKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShZYXJyQ29kZUJsb2NrKTsKIApAQCAtMjE5LDE2ICsyODYsMTIgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4
Qml0UHRyVGFnPiByZWYsIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4g
bWFwcykKICAgICB7CiAgICAgICAgIG1fcmVmOCA9IHJlZjsKLSAgICAgICAgbV9tYXBzLnJlc2Vy
dmVDYXBhY2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAg
ICAgIG1fbWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgICAg
ICBzYXZlTWFwcyhXVEZNb3ZlKG1hcHMpKTsKICAgICB9CiAgICAgdm9pZCBzZXQxNkJpdENvZGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJpdFB0clRhZz4gcmVmLCBWZWN0b3I8VW5pcXVl
UmVmPEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4+IG1hcHMpCiAgICAgewogICAgICAgICBtX3JlZjE2
ID0gcmVmOwotICAgICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBt
YXBzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1h
cHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKG1hcHNbaW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwog
ICAgIH0KIAogICAgIGJvb2wgaGFzOEJpdENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNo
T25seTguc2l6ZSgpOyB9CkBAIC0yMzYsMTYgKzI5OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXQ4Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seThC
aXRQdHJUYWc+IG1hdGNoT25seSwgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpN
YXA+PiBtYXBzKQogICAgIHsKICAgICAgICAgbV9tYXRjaE9ubHk4ID0gbWF0Y2hPbmx5OwotICAg
ICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBtYXBzLnNpemUoKSk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHMuc2l6ZSgpOyAr
K2luZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHNb
aW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwogICAgIH0KICAgICB2
b2lkIHNldDE2Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNo
T25seTE2Qml0UHRyVGFnPiBtYXRjaE9ubHksIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJp
dG1hcDo6TWFwPj4gbWFwcykKICAgICB7CiAgICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBtYXRjaE9u
bHk7Ci0gICAgICAgIG1fbWFwcy5yZXNlcnZlQ2FwYWNpdHkobV9tYXBzLnNpemUoKSArIG1hcHMu
c2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcy5z
aXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICBtX21hcHMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUobWFwc1tpbmRleF0pKTsKKyAgICAgICAgc2F2ZU1hcHMoV1RGTW92ZShtYXBzKSk7CiAgICAg
fQogCiAgICAgYm9vbCB1c2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IHJldHVybiBtX3VzZXNQ
YXR0ZXJuQ29udGV4dEJ1ZmZlcjsgfQpAQCAtMjUzLDYgKzMxMiwxOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRVc2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1BhdHRlcm5Db250ZXh0
QnVmZmVyID0gdHJ1ZTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIHNldDhCaXRJbmxpbmVTdGF0cyh1
bnNpZ25lZCBpbnNuQ291bnQsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgYm9vbCBjYW5JbmxpbmUsIGJv
b2wgbmVlZHNUMikKKyAgICB7CisgICAgICAgIG1fbWF0Y2hPbmx5OFN0YXRzLnNldChpbnNuQ291
bnQsIHN0YWNrU2l6ZSwgY2FuSW5saW5lLCBuZWVkc1QyKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dDE2Qml0SW5saW5lU3RhdHModW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25lZCBzdGFja1NpemUs
IGJvb2wgY2FuSW5saW5lLCBib29sIG5lZWRzVDIpCisgICAgeworICAgICAgICBtX21hdGNoT25s
eTE2U3RhdHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUsIG5lZWRzVDIpOwor
ICAgIH0KKworICAgIElubGluZVN0YXRzJiBnZXQ4Qml0SW5saW5lU3RhdHMoKSB7IHJldHVybiBt
X21hdGNoT25seThTdGF0czsgfQorICAgIElubGluZVN0YXRzJiBnZXQxNkJpdElubGluZVN0YXRz
KCkgeyByZXR1cm4gIG1fbWF0Y2hPbmx5MTZTdGF0czsgfQorCiAgICAgTWF0Y2hSZXN1bHQgZXhl
Y3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXImIG1hdGNoaW5nQ29udGV4dCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKQEAgLTMzOCwxNyArNDEwLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9yZWYxNiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZC
aXRQdHJUYWc+KCk7CiAgICAgICAgIG1fbWF0Y2hPbmx5OCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4oKTsKICAgICAgICAgbV9tYXRjaE9ubHkxNiA9IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KCk7Ci0gICAgICAg
IG1fbWFwcy5jbGVhcigpOworICAgICAgICBtX21hdGNoT25seThTdGF0cy5jbGVhcigpOworICAg
ICAgICBtX21hdGNoT25seTE2U3RhdHMuY2xlYXIoKTsKICAgICAgICAgbV9mYWlsdXJlUmVhc29u
ID0gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGNvbnN0IEJveWVyTW9vcmVCaXRtYXA6Ok1h
cDo6V29yZFR5cGUqIHRyeVJldXNlQm95ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0
bWFwOjpNYXAmIG1hcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RvcmVkIDog
bV9tYXBzKSB7Ci0gICAgICAgICAgICBpZiAoc3RvcmVkLmdldCgpID09IG1hcCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RvcmVkLT5zdG9yYWdlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIGNsZWFyTWFwcygpOwogICAgIH0KIAogcHJpdmF0ZToKQEAg
LTM1NiwxNyArNDIxLDI4IEBAIHByaXZhdGU6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlh
cnIxNkJpdFB0clRhZz4gbV9yZWYxNjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1h
dGNoT25seThCaXRQdHJUYWc+IG1fbWF0Y2hPbmx5ODsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPiBtX21hdGNoT25seTE2OwotICAgIFZlY3RvcjxV
bmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbV9tYXBzOworICAgIElubGluZVN0YXRz
IG1fbWF0Y2hPbmx5OFN0YXRzOworICAgIElubGluZVN0YXRzIG1fbWF0Y2hPbmx5MTZTdGF0czsK
KwogICAgIGJvb2wgbV91c2VzUGF0dGVybkNvbnRleHRCdWZmZXIgeyBmYWxzZSB9OwogICAgIHN0
ZDo6b3B0aW9uYWw8SklURmFpbHVyZVJlYXNvbj4gbV9mYWlsdXJlUmVhc29uOwogfTsKIAogZW51
bSBjbGFzcyBKSVRDb21waWxlTW9kZSA6IHVpbnQ4X3QgewogICAgIE1hdGNoT25seSwKLSAgICBJ
bmNsdWRlU3VicGF0dGVybnMKKyAgICBJbmNsdWRlU3VicGF0dGVybnMsCisgICAgSW5saW5lVGVz
dAogfTsKIHZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYsIFN0cmluZyYgcGF0dGVyblN0cmlu
ZywgQ2hhclNpemUsIFZNKiwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBKSVRDb21waWxlTW9k
ZSk7CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorCisKK2NsYXNz
IFlhcnJKSVRSZWdpc3RlcnM7CisKK3ZvaWQgaml0Q29tcGlsZUlubGluZWRUZXN0KFN0YWNrQ2hl
Y2sqLCBjb25zdCBTdHJpbmcmLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+LCBDaGFyU2l6ZSwgY29u
c3QgVk0qLCBZYXJyQm95ZXJNb3llckRhdGEmLCBNYWNyb0Fzc2VtYmxlciYsIFlhcnJKSVRSZWdp
c3RlcnMmKTsKKyNlbmRpZgorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3RlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklUUmVnaXN0ZXJzLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lz
dGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFlBUlJfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2RlZmluZSBZQVJS
X0NBTEwKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBZYXJyIHsKKworc3RydWN0IFlh
cnJKSVREZWZhdWx0UmVnaXN0ZXJzIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CitwdWJsaWM6
CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlu
cHV0ID0gQVJNUmVnaXN0ZXJzOjpyMDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
aW5kZXggPSBBUk1SZWdpc3RlcnM6OnIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBsZW5ndGggPSBBUk1SZWdpc3RlcnM6OnIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBvdXRwdXQgPSBBUk1SZWdpc3RlcnM6OnIzOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIHJlZ1QwID0gQVJNUmVnaXN0ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI1OworICAgIC8vIHI2IGlzIHJlc2Vy
dmVkIGZvciBNYWNyb0Fzc2VtYmxlckFSTXY3LAorICAgIC8vIHI3IGlzIGZwLgorICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTVJlZ2lzdGVyczo6cjg7CisgICAgLy8g
cjkgaXMgc2IgaW4gRUFCSS4KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlh
bFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBh
IHNwZWNpYWwgcmVnaXN0ZXIuCisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0
dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBBUk1SZWdpc3RlcnM6OnIxOworCisjZWxpZiBDUFUo
QVJNNjQpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIGlucHV0ID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0
ZXJzOjp4NDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3Rl
ciA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4
dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQg
ZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJz
Ojp4ODsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3Vu
dCA9IEFSTTY0UmVnaXN0ZXJzOjp4OTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBBUk02NFJlZ2lzdGVyczo6eDEwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdp
c3RlcnM6OngxMTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFy
eVBsYW5lc0Jhc2UgPSBBUk02NFJlZ2lzdGVyczo6eDEyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCBsZWFkaW5nU3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02
NFJlZ2lzdGVyczo6eDE0OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0
cmluZ0FkZHJlc3MgPSBBUk02NFJlZ2lzdGVyczo6eDE1OworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVy
czo6eDE7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdN
YXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2VsaWYgQ1BVKE1JUFMpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJz
OjphMzsKKworICAgIC8vIHQwIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCisg
ICAgLy8gdDEgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBNSVBTUmVnaXN0ZXJzOjp0MjsKKyAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVy
czo6dDU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIg
PSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0
dXJuUmVnaXN0ZXIyID0gTUlQU1JlZ2lzdGVyczo6djE7CisKKyNlbGlmIENQVShYODZfNjQpCisj
aWYgIU9TKFdJTkRPV1MpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplZGk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OworICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVn
aXN0ZXJzOjpyODsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdp
c3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRl
eHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBk
dXJpbmcgaW5pdGlhbGl6YXRpb24uCisjZWxzZQorICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUg
ZG9lc24ndCBmaXQgaW4gNjRiaXRzLCBpdHMgZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3gg
YW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBzaGlmdGVkLgorICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vZW4tdXMvbGlicmFyeS83NTcyenR6NC5hc3B4CisgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoTWF0Y2hSZXN1bHQpID4gc2l6ZW9mKHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90
IGZpdCBpbiA2NGJpdHMiKTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQg
PSBYODZSZWdpc3RlcnM6OmVkeDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5k
ZXggPSBYODZSZWdpc3RlcnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBs
ZW5ndGggPSBYODZSZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OnIxMDsKKyNlbmRpZgorCisgICAgLy8gU2NyYXRjaCBy
ZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdp
c3RlcnM6OmVheDsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6OnI5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVyczo6cjEwOworI2Vsc2UKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIgPSBYODZSZWdpc3RlcnM6OmVkaTsKKyNlbmRpZgor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lz
dGVyczo6ZWJ4OworI2lmICFPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjpyMTI7CisjZWxzZQorICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVn
aXN0ZXJzOjplc2k7CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VW5pY29kZUlucHV0QW5kVHJhaWwgPSBYODZSZWdpc3RlcnM6OnIxMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgdW5pY29kZVRlbXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0
ZXJzOjpyMTU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0
ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmV0dXJuUmVnaXN0ZXIyID0gWDg2UmVnaXN0ZXJzOjplZHg7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2Ug
PSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIHN0YXRpYyBjb25z
dGV4cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0g
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIHN0YXRpYyBjb25zdGV4
cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkYzAwKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDAp
OworI2VuZGlmCit9OworCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkK
K2NsYXNzIFlhcnJKSVRSZWdpc3RlcnMgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKK3B1Ymxp
YzoKKyAgICBZYXJySklUUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0
KQorICAgIC8vIEFyZ3VtZW50IHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgaW5wdXQgeyBBUk02
NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBBUk02
NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgbGVuZ3RoIHsgQVJN
NjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIG91dHB1dCB7IEFS
TTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0Nv
bnRleHQgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQg
ZnJlZWxpc3RSZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAg
UmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlk
R1BSUmVnIH07CisKKyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVn
VDAgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVn
VDEgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVn
VDIgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVt
YWluaW5nTWF0Y2hDb3VudCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAg
UmVnaXN0ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZh
bGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCB7IEFSTTY0UmVnaXN0ZXJz
OjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRy
ZXNzIHsgQVJNNjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMHhkODAwKTsKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
IHRyYWlsaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRj
MDApOworCisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciB7IEFSTTY0UmVnaXN0ZXJzOjpJ
bnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBBUk02NFJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRP
V1MpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJRCBpbnB1dCB7IFg4
NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgaW5kZXggeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGxlbmd0aCB7IFg4NlJl
Z2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgb3V0cHV0IHsgWDg2UmVn
aXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQg
eyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGZyZWVsaXN0
UmVnaXN0ZXIgeyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklE
IGZyZWVsaXN0U2l6ZVJlZ2lzdGVyIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisK
KyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIFJlZ2lzdGVySUQgcmVnVDAgeyBYODZSZWdp
c3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1QxIHsgWDg2UmVnaXN0
ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZWdUMiB7IFg4NlJlZ2lzdGVy
czo6SW52YWxpZEdQUlJlZyB9OworCisgICAgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNo
Q291bnQgeyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJl
Z1VuaWNvZGVJbnB1dEFuZFRyYWlsIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07Cisg
ICAgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9
OworICAgIFJlZ2lzdGVySUQgZW5kT2ZTdHJpbmdBZGRyZXNzIHsgWDg2UmVnaXN0ZXJzOjpJbnZh
bGlkR1BSUmVnIH07CisKKyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyIHsgWDg2UmVnaXN0
ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgeyBY
ODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgbGVhZGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MHhkODAwKTsKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5n
U3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworI2Vs
c2UKKyNlcnJvciAiTm8gc3VwcG9ydCBmb3IgaW5saW5lZCBKSVQnaW5nIG9mIFJlZ0V4cC50ZXN0
IGZvciB0aGlzIENQVSAvIE9TIGNvbWJpbmF0aW9uLiIKKyNlbmRpZgorfTsKKyNlbmRpZgorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6WWFycgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjgzMDg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGV0ZXIg
VmFyZ2EgKHB2YXJnYUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MzA4NSkKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDktMjUgIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgSW5saW5lIFJlZ0V4cC50
ZXN0IEpJVCBjb2RlIGluIERGRyBhbmQgRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzA0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBlbmFibGVtZW50OiBFTkFCTEVfWUFSUl9K
SVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJs
ZS5oOgorCiAyMDIxLTA5LTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIEJ1aWxkIGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVApJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1FbmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUVuYWJsZS5oCShyZXZpc2lvbiAyODMwODUpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDAsNiArNzQwLDcgQEAKIC8qIEVuYWJsZSBKSVQn
aW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgdGhhdCBoYXZlIG5lc3RlZCBwYXJlbnRoZXNpcyAuICov
CiAjaWYgRU5BQkxFKFlBUlJfSklUKSAmJiAoQ1BVKEFSTTY0KSB8fCAoQ1BVKFg4Nl82NCkgJiYg
IU9TKFdJTkRPV1MpKSkKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVT
U0lPTlMgMQorI2RlZmluZSBFTkFCTEVfWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FIDEKICNl
bmRpZgogCiAvKiBFbmFibGUgSklUJ2luZyBSZWd1bGFyIEV4cHJlc3Npb25zIHRoYXQgaGF2ZSBu
ZXN0ZWQgYmFjayByZWZlcmVuY2VzLiAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440102</attachid>
            <date>2021-10-04 14:11:49 -0700</date>
            <delta_ts>2021-10-14 15:00:27 -0700</delta_ts>
            <desc>Patch with changes from review</desc>
            <filename>230469-5.patch</filename>
            <type>text/plain</type>
            <size>261810</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODM1MTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTEwLTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3
IG1pY3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlA
YXBwbGUuY29tPgogCiAgICAgICAgIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UgaW1wbGVtZW50
YXRpb24gb2YgX19wcm90b19fIG5lZWRzIHRvIGhhbmRsZSBnZXRfYnlfaWRfd2l0aF90aGlzCklu
ZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0LWlubGluZWQuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVnZXhwLXRlc3QtaW5s
aW5lZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACisvL0Agc2tpcCBpZiAkbW9k
ZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIgorKGZ1bmN0aW9uKCkgeworICAgIGxldCBzdHJp
bmdzID0gWyAidGhlbSIsICJ0aGVyZSIsICJ0aGV5IiwgImFudGhlbSIsICJhbXBoaXRoZWF0ZXIi
LCAiYm90aGVyIiwgImFub3RoZXIiLCAiYnJvdGhlciIsICJhcG90aGVjYXJ5IiwgImFuYXRoZW1h
Il07CisgICAgbGV0IHJlc3VsdCA9IDA7CisgICAgbGV0IG4gPSAxMDAwMDAwMDsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IC90aGUvLnRlc3Qoc3Ry
aW5nc1tpICUgMTBdKTsKKyAgICBpZiAocmVzdWx0ICE9IG4pCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI4MzUxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NiBAQAorMjAyMS0xMC0wMSAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgUmVnRXhwLnRlc3Qg
SklUIGNvZGUgaW4gREZHIGFuZCBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMDQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlc3RydWN0dXJlZCBZYXJySklUIGZyb20gaW5oZXJpdGluZyBmcm9t
IE1hY3JvQXNzZW1ibGVyIHRvIGhhdmluZyBhIE1hY3JvQXNzZW1ibGVyCisgICAgICAgIG1lbWJl
ci4gIEFkZGVkIGEgbmV3IHBhdGggdG8gWWFyciBKSVQgY29kZSB0byBjb21waWxlIGlubGluZSBj
b2RlIGJ5IGNoYW5naW5nIGhvdyB0aGUKKyAgICAgICAgY29kZSBpcyBlbnRlcmVkIGFuZCBleGl0
ZWQuICBBZGRlZCBzdGF0aXN0aWMgdG8gdGhlIG5vcm1hbCBjb21waWxhdGlvbiBwYXRoIHRvIHJl
Y29yZAorICAgICAgICB0aGUgc2l6ZSBvZiB0aGUgbWF0Y2hpbmcgY29kZSBnZW5lcmF0ZWQsIHRo
ZSBhbW91bnQgb2Ygc3RhY2sgc3BhY2UgbmVlZGVkLCBhbmQgaWYKKyAgICAgICAgdGhlIGNvZGUg
Y2FuIGJlIGlubGluZWQuICBUaGlzIHBhdGNoIG9ubHkgaW5saW5lcyA4Yml0IGNvZGUsIGFzIHRo
aXMgc2VlbXMgdG8gY292ZXIKKyAgICAgICAgdGhlIG1vc3QgY29tbW9uIHBlcmZvcm1hbmNlIHNl
bnNpdGl2ZSBjYXNlcy4gIEFkZGluZyAxNiBiaXQsIG5vbi1Vbmljb2RlIGlubGluaW5nCisgICAg
ICAgIHdvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gIFRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgdG8g
dGFrZSB0aGUgaW5saW5lZCBwYXRoIGZvciB0aGUKKyAgICAgICAgY2FzZSBvZiBub24tcm9wZSBz
dHJpbmcgYXJndW1lbnRzLiAgRm9yIG90aGVyIGNhc2VzLCB3ZSBmYWxsIGJhY2sgdG8gY2FsbGlu
ZyBvdXQKKyAgICAgICAgdG8gQysrIHBhdGhzLgorCisgICAgICAgIEhlcmUgYXJlIHRoZSBwZXJm
IHJlc3VsdHMgcnVubmluZyB0aGUgbmV3bHkgYWRkZWQgcmVnZXhwLXRlc3QtaW5saW5lZCBtaWNy
bworICAgICAgICBiZW5jaG1hcmsgKHRpbWUgaW4gbXNlYyk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBCYXNlbGluZSAgICAgICBXaXRoIHRoaXMgcGF0Y2ggICAgIFJlc3VsdAorICAgICAgICAg
ICAgQVJNNjQgICAxMzcuMzg0OSstMy4wNzQwICAgNjQuOTI4MistMC43MzQ4ICAyLjEyeCBmYXN0
ZXIKKyAgICAgICAgICAgIFg4Ni02NCAgMjIwLjI2MTYrLTE5LjI4MTQgMTA1LjIwMzQrLTYuODcy
MiAgMi4wOXggZmFzdGVyCisKKyAgICAgICAgQXMgcGFydCBvZiB0aGlzIGNoYW5nZSwgZm91bmQg
dGhhdCB0aGUgc3RyZW5ndGggcmVkdWN0aW9uIGRpZG4ndCB3b3JrIHByb3Blcmx5IGZvciB0aGUK
KyAgICAgICAgZXhpc3RpbmcgY2FzZXMgZm9yIFJlZ0V4cEV4ZWMsIFJlZ0V4cFRlc3QgYW5kIHJl
bGF0ZWQgc2luY2Ugd2UgYWRkZWQgdGhhdCBjaGVja3MgZm9yCisgICAgICAgIG92ZXJyaWRpbmcg
dGhlIFJlZ0V4cCBvYmplY3QuICBDbG9iYmVyaXplIGZvciB0cnlHZXRCeUlkIHdhcyBjbG9iYmVy
IHRvcCwgYnV0IGFkZGVkCisgICAgICAgIGFuIGV4Y2VwdGlvbiBmb3IgUmVnRXhwLmxhc3RJbmRl
eC4gIFRoaXMgZml4IGFsbG93ZWQgbWFueSBvZiB0aGUgc3RyZW5ndGggcmVkdWN0aW9ucworICAg
ICAgICBjYXNlcyB0byBzdGFydCB3b3JraW5nIGFnYWluLCBuYW1lbHkgdGhlIGNvc3RhbnQgZm9s
ZGluZyBjYXNlcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRh
Lmg6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGluZSk6CisgICAg
ICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJl
ZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQ2VsbE9wZXJhbmQpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6aGFu
ZGxlTm9kZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RF
cSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9TdGFja0FsaWdubWVudC5oOgorICAgICAgICAo
SlNDOjphcmd1bWVudENvdW50Rm9yU3RhY2tTaXplKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6aml0Q29tcGlsZUlubGluZWRUZXN0KToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckJveWVyTW95ZXJEYXRhOjpzYXZlTWFwcyk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJCb3llck1veWVyRGF0YTo6Y2xlYXJNYXBzKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckJveWVyTW95ZXJEYXRhOjp0cnlSZXVzZUJveWVyTW9vcmVCaXRtYXAgY29u
c3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6SW5s
aW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0
czo6c2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6
OmNsZWFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6
OmNvZGVTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5s
aW5lU3RhdHM6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OklubGluZVN0YXRzOjpjYW5JbmxpbmUgY29uc3QpOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6bmVlZHNUZW1wMiBjb25zdCk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckNvZGVCbG9jazo6c2V0MTZCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckNvZGVCbG9jazo6c2V0OEJpdENvZGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyQ29kZUJsb2NrOjpzZXQxNkJpdENvZGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQ4Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpzZXQxNkJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckNvZGVCbG9jazo6Z2V0OEJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckNvZGVCbG9jazo6Z2V0MTZCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJDb2RlQmxvY2s6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6dHJ5UmV1c2VCb3llck1vb3JlQml0bWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB5YXJyL1lhcnJKSVRSZWdpc3RlcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OllhcnI6
OllhcnJKSVRSZWdpc3RlcnM6OllhcnJKSVRSZWdpc3RlcnMpOgorICAgICAgICAqIHlhcnIvWWFy
clBhdHRlcm4uaDoKKwogMjAyMS0xMC0wNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlIGltcGxlbWVudGF0aW9uIG9m
IF9fcHJvdG9fXyBuZWVkcyB0byBoYW5kbGUgZ2V0X2J5X2lkX3dpdGhfdGhpcwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4MzUxMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjczLDYgKzEyNzMsNyBAQAogCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZF
N0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2NzA0QjQxMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hl
Y2tlci5oICovOyB9OwogCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJl
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njcw
NEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCODcxMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjUzQkM0M0YyNkQwMTNBNjAw
RDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1M0JDNDNFMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVn
aXN0ZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJB
MzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0
ZU5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MjQ4LDYgKzQyNDksNyBAQAogCQk4
NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJJbnRlcnByZXRlci5oOyBwYXRoID0geWFyci9ZYXJy
SW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCN0YxMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gWWFyckpJVC5jcHA7IHBhdGggPSB5YXJyL1lhcnJKSVQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklULmg7IHBhdGggPSB5YXJy
L1lhcnJKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjUzQkM0M0UyNkQwMTNB
NjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gWWFyckpJVFJlZ2lzdGVycy5oOyBwYXRoID0geWFyci9ZYXJySklUUmVnaXN0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQ
YXJzZXIuaDsgcGF0aCA9IHlhcnIvWWFyclBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjcwNEI4MjEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyclBhdHRlcm4uY3BwOyBwYXRoID0g
eWFyci9ZYXJyUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0
QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBZYXJyUGF0dGVybi5oOyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODE1Niw2ICs4MTU4LDcgQEAKIAkJCQk4Njcw
NEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggKi8sCiAJCQkJODY3MDRC
N0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3BwICovLAogCQkJCTg2NzA0QjgwMTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8sCisJCQkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIw
IC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLywKIAkJCQlFM0YwRkM5NDI2QTExQjRBMDA5OUZGQTAg
LyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRlci5oICovLAogCQkJCTg2NzA0QjgxMTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8sCiAJCQkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXR0ZXJuLmNwcCAqLywKQEAgLTEwMjI2LDYgKzEwMjI5LDggQEAKIAkJCQlBMzhE
MjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcx
MkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNG
MjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUwMDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTA5MzEsNyArMTA5MzYsNiBAQAogCQkJCUUzMjgy
QkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJyRXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTNGMEZDOTUyNkExMUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0Nv
bnRleHRIb2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBB
OUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMjgzNTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQzLDYgKzI2
NDMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGlu
ZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2ZSBwcm92ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMg
UmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAgICAgICAgIC8vIGFjY2Vzc2luZyBsYXN0SW5kZXgg
aXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9iYWwgcmVnZXhwLgogICAgICAgICBjbG9iYmVyV29y
bGQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShy
ZXZpc2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3MywxNCArNjczLDI2IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgICAgICAKKworICAgIGNhc2UgVHJ5R2V0QnlJZDoKKyAgICAgICAgcmVhZChXb3Js
ZCk7CisjZGVmaW5lIEFCU1RSQUNUX0hFQVBfTk9UX1JlZ0V4cE9iamVjdF9sYXN0SW5kZXgobmFt
ZSkgaWYgKG5hbWUgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBcCisgICAgbmFtZSAhPSBJbnZh
bGlkQWJzdHJhY3RIZWFwICYmIFwKKyAgICBuYW1lICE9IFdvcmxkICYmIFwKKyAgICBuYW1lICE9
IFN0YWNrICYmIFwKKyAgICBuYW1lICE9IEhlYXAgJiYgXAorICAgIG5hbWUgIT0gUmVnRXhwT2Jq
ZWN0X2xhc3RJbmRleCkgXAorICAgICAgICB3cml0ZShuYW1lKTsKKyAgICBGT1JfRUFDSF9BQlNU
UkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1RfSEVBUF9OT1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleCkK
KyN1bmRlZiBBQlNUUkFDVF9IRUFQX05PVF9SZWdFeHBPYmplY3RfbGFzdEluZGV4CisgICAgICAg
IHJldHVybjsKKwogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAg
ICBjYXNlIEdldEJ5SWRXaXRoVGhpczoKICAgICBjYXNlIEdldEJ5SWREaXJlY3Q6CiAgICAgY2Fz
ZSBHZXRCeUlkRGlyZWN0Rmx1c2g6CiAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgotICAgIGNh
c2UgVHJ5R2V0QnlJZDoKICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgY2FzZSBQdXRCeUlkV2l0aFRo
aXM6CiAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOgpAQCAtMTc1MCw2ICsxNzYyLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBSZWdFeHBF
eGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAg
ICAgICAgIC8vIEV2ZW4gaWYgd2UndmUgcHJvdmVuIGtub3duIGlucHV0IHR5cGVzIGFzIFJlZ0V4
cE9iamVjdCBhbmQgU3RyaW5nLAogICAgICAgICAvLyBhY2Nlc3NpbmcgbGFzdEluZGV4IGlzIGVm
ZmVjdGZ1bCBpZiBpdCdzIGEgZ2xvYmFsIHJlZ2V4cC4KICAgICAgICAgY2xvYmJlclRvcCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9u
IDI4MzUxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5N
YXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3Jk
ZWRTdGF0dXNlcy5oIgorI2luY2x1ZGUgIllhcnJKSVQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTEyMiw2ICsxMjMsNyBAQCBwdWJs
aWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3Jp
Z2luTWFwOwogICAgIFJlY29yZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0
b3I8SnVtcFJlcGxhY2VtZW50PiBtX2p1bXBSZXBsYWNlbWVudHM7CisgICAgWWFycjo6WWFyckJv
eWVyTW95ZXJEYXRhIG1fYm95ZXJNb29yZURhdGE7CiAgICAgCiAgICAgU2NyYXRjaEJ1ZmZlciog
Y2F0Y2hPU1JFbnRyeUJ1ZmZlcjsKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBj
b21waWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHJldmlzaW9uIDI4MzUxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDYgKzMzNSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICBjYXNl
IFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBS
ZWdFeHBUZXN0SW5saW5lOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgogICAgIGNhc2UgUmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJldHVybjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24g
MjgzNTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE0NzIsNyArMTQ3Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgICAg
IGNhc2UgUmVnRXhwVGVzdDogeworICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIGNh
c2UgUmVnRXhwVGVzdElubGluZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVSZWdFeHBPYmplY3QoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIxLDYgKzMy
MSwxNyBAQCB2b2lkIE5vZGU6OmNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAgICAgbV9v
cEluZm8gPSByZWdFeHA7CiB9CiAKK3ZvaWQgTm9kZTo6Y29udmVydFRvUmVnRXhwVGVzdElubGlu
ZShGcm96ZW5WYWx1ZSogZ2xvYmFsT2JqZWN0LCBGcm96ZW5WYWx1ZSogcmVnRXhwKQoreworICAg
IEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKFJl
Z0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShjaGlsZHJlbi5j
aGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hpbGRyZW4uY2hpbGQyKCkgPSBF
ZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2JqZWN0VXNlKTsKKyAgICAvLyBX
ZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcEluZm8gPSBnbG9iYWxPYmplY3Q7
CisgICAgbV9vcEluZm8yID0gcmVnRXhwOworfQorCiBTdHJpbmcgTm9kZTo6dHJ5R2V0U3RyaW5n
KEdyYXBoJiBncmFwaCkKIHsKICAgICBpZiAoaGFzQ29uc3RhbnQoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgyMyw2ICs4MjMsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbnZlcnRUb1JlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNr
eVdpdGhvdXRDaGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4cCk7CiAgICAgdm9pZCBjb252ZXJ0VG9S
ZWdFeHBNYXRjaEZhc3RHbG9iYWxXaXRob3V0Q2hlY2tzKEZyb3plblZhbHVlKiByZWdFeHApOwor
ICAgIHZvaWQgY29udmVydFRvUmVnRXhwVGVzdElubGluZShGcm96ZW5WYWx1ZSogZ2xvYmFsT2Jq
ZWN0LCBGcm96ZW5WYWx1ZSogcmVnRXhwKTsKIAogICAgIHZvaWQgY29udmVydFRvU2V0UmVnRXhw
T2JqZWN0TGFzdEluZGV4KCkKICAgICB7CkBAIC0xODAwLDYgKzE4MDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFs
T3JTdGlja3k6CiAgICAgICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgY2FzZSBSZWdFeHBU
ZXN0SW5saW5lOgogICAgICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICAgICAgY2FzZSBS
ZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgpAQCAtMTg5
Niw2ICsxODk4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBEaXJlY3RUYWlsQ2FsbElubGlu
ZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAg
ICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0
SW5saW5lOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc0Nl
bGxPcGVyYW5kMigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2Fz
ZSBSZWdFeHBUZXN0SW5saW5lOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTA4LDYgKzE5MjEsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8RnJvemVuVmFsdWUqPigpOwogICAg
IH0KICAgICAKKyAgICBGcm96ZW5WYWx1ZSogY2VsbE9wZXJhbmQyKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNDZWxsT3BlcmFuZDIoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzIuYXM8
RnJvemVuVmFsdWUqPigpOworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIFQgY2FzdE9wZXJhbmQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDI4MzUxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxOSw2ICszMTksNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUmVnRXhwRXhlYywgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFJlZ0V4cEV4ZWNOb25H
bG9iYWxPclN0aWNreSwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUmVnRXhwVGVzdCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFJlZ0V4cFRlc3RJbmxp
bmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZWdFeHBN
YXRjaEZhc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhS
ZWdFeHBNYXRjaEZhc3RHbG9iYWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFN0cmluZ1Jl
cGxhY2UsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg2OCw2ICs4NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAg
ICAgIGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAgICAgICBjYXNlIFJlZ0V4
cFRlc3Q6CisgICAgICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgY2FzZSBSZWdF
eHBNYXRjaEZhc3Q6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgogICAgICAg
ICBjYXNlIFN0cmluZ1JlcGxhY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjgzNTEyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NTQsNiAr
NTU0LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgIGNhc2Ug
UmVnRXhwTWF0Y2hGYXN0OgogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgogICAgIGNh
c2UgQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzNTEyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOTQ1
LDcgKzI5NDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBSZWdFeHBUZXN0OiB7Cisg
ICAgY2FzZSBSZWdFeHBUZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZTogewogICAgICAg
ICBjb21waWxlUmVnRXhwVGVzdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1
ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAj
aW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiWWFyckpJVFJlZ2lzdGVycy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTI2OTQsNiArMjY5NSwxOTcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgIH0gfQogfQog
CisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCit7CisgICAgUmVnRXhw
KiByZWdFeHAgPSBqc0Nhc3Q8UmVnRXhwKj4obm9kZS0+Y2VsbE9wZXJhbmQyKCktPnZhbHVlKCkp
OworCisgICAgQVNTRVJUKCFyZWdFeHAtPmdsb2JhbE9yU3RpY2t5KCkpOworCisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZ2xvYmFsT2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gZ2xvYmFsT2JqZWN0LmdwcigpOworICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgYXJndW1lbnRHUFI7CisgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHN0cmluZ0ltcGwodGhpcyk7CisgICAgR1BSVGVtcG9y
YXJ5IHN0cmluZ0RhdGEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHN0ckxlbmd0aCh0aGlzKTsK
KyAgICBHUFJUZW1wb3Jhcnkgb3V0cHV0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQy
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wMCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkg
dGVtcDEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAyOworICAgIEdQUlJlZyBzdHJpbmdJ
bXBsR1BSID0gc3RyaW5nSW1wbC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyaW5nRGF0YUdQUiA9IHN0
cmluZ0RhdGEuZ3ByKCk7CisgICAgR1BSUmVnIG91dHB1dEdQUiA9IG91dHB1dC5ncHIoKTsKKyAg
ICBHUFJSZWcgc3RyTGVuZ3RoR1BSID0gc3RyTGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyByZXN1
bHQyR1BSID0gcmVzdWx0Mi5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDBHUFIgPSB0ZW1wMC5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcDFHUFIgPSB0ZW1wMS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDJH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBzd2FwUmVnID0gSW52YWxpZEdQUlJlZzsK
KworICAgIGF1dG8gaml0Q29kZUJsb2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRDb2RlQmxvY2so
KTsKKyAgICBBU1NFUlQoaml0Q29kZUJsb2NrKTsKKyAgICBhdXRvIGlubGluZUNvZGVTdGF0czhC
aXQgPSBqaXRDb2RlQmxvY2stPmdldDhCaXRJbmxpbmVTdGF0cygpOworCisjaWYgIUNQVShYODZf
NjQpCisgICAgaWYgKGlubGluZUNvZGVTdGF0czhCaXQubmVlZHNUZW1wMigpKSB7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZWFsVGVtcDIodGhpcyk7CisgICAgICAgIHRlbXAyLmFkb3B0KHJlYWxU
ZW1wMik7CisgICAgICAgIHRlbXAyR1BSID0gdGVtcDIuZ3ByKCk7CisgICAgfQorI2VuZGlmCisg
ICAgCisgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KG5vZGUtPmNoaWxkMigpLCBiYXNlR1BSKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKworICAgIGF1dG8gc3dhcFJlZ0lmTmVlZGVkID0g
WyZdIHsKKyAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSByZXN1bHRHUFIpIHsKKyAgICAg
ICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgbV9qaXQubW92ZShnbG9i
YWxPYmplY3RHUFIsIHN3YXBSZWcpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gc3dh
cFJlZzsKKyAgICAgICAgfSBlbHNlIGlmIChiYXNlR1BSID09IHJlc3VsdEdQUikgeworICAgICAg
ICAgICAgc3dhcFJlZyA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGJhc2VH
UFIsIHN3YXBSZWcpOworICAgICAgICAgICAgYmFzZUdQUiA9IHN3YXBSZWc7CisgICAgICAgIH0g
ZWxzZSBpZiAoYXJndW1lbnRHUFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBzd2FwUmVn
ID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoYXJndW1lbnRHUFIsIHN3YXBS
ZWcpOworICAgICAgICAgICAgYXJndW1lbnRHUFIgPSBzd2FwUmVnOworICAgICAgICB9CisgICAg
fTsKKworICAgIGF1dG8gcmVnRXhwVGVzdElubGluZUNhc2UgPSBbJl0geworICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0ltcGxHUFIsIFN0cmluZ0lt
cGw6OmRhdGFPZmZzZXQoKSksIHN0cmluZ0RhdGFHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nSW1wbEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3Ro
TWVtb3J5T2Zmc2V0KCkpLCBzdHJMZW5ndGhHUFIpOworCisgICAgICAgIEdQUlJlZyBpbmRleEdQ
UiA9IHN0cmluZ0ltcGxHUFI7CisKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCks
IGluZGV4R1BSKTsKKworICAgICAgICBZYXJyOjpZYXJySklUUmVnaXN0ZXJzIHlhcnJSZWdpc3Rl
cnM7CisgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOworICAgICAg
ICB5YXJyUmVnaXN0ZXJzLmluZGV4ID0gaW5kZXhHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMu
bGVuZ3RoID0gc3RyTGVuZ3RoR1BSOworICAgICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1dCA9IG91
dHB1dEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5yZWdUMCA9IHRlbXAwR1BSOworICAgICAg
ICB5YXJyUmVnaXN0ZXJzLnJlZ1QxID0gdGVtcDFHUFI7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgdGVtcDJHUFIgPSBnbG9iYWxPYmplY3RHUFI7CisjZW5kaWYKKyAgICAgICAgaWYgKGlubGlu
ZUNvZGVTdGF0czhCaXQubmVlZHNUZW1wMigpKQorICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5y
ZWdUMiA9IHRlbXAyR1BSOworCisgICAgICAgIHlhcnJSZWdpc3RlcnMucmV0dXJuUmVnaXN0ZXIg
PSByZXN1bHRHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMucmV0dXJuUmVnaXN0ZXIyID0gcmVz
dWx0MkdQUjsKKworICAgICAgICBhdXRvIGNvbW1vbkRhdGEgPSBtX2ppdC5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpOworICAgICAgICBZYXJyOjpqaXRDb21waWxlSW5saW5lZFRlc3QoJm1fZ3JhcGgu
bV9zdGFja0NoZWNrZXIsIHJlZ0V4cC0+cGF0dGVybigpLCByZWdFeHAtPmZsYWdzKCksIFlhcnI6
OkNoYXJTaXplOjpDaGFyOCwgJnZtKCksIGNvbW1vbkRhdGEtPm1fYm95ZXJNb29yZURhdGEsIG1f
aml0LCB5YXJyUmVnaXN0ZXJzKTsKKworICAgICAgICBhdXRvIGZhaWxlZE1hdGNoID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0z
MigwKSk7CisKKyAgICAgICAgLy8gIFNhdmVkIGNhY2hlZCByZXN1bHQKKyNpZiBDUFUoWDg2XzY0
KQorICAgICAgICBpZiAoaW5saW5lQ29kZVN0YXRzOEJpdC5uZWVkc1RlbXAyKCkpIHsKKyAgICAg
ICAgICAgIC8vIFNpbmNlIHdlIHJldXNlZCBnbG9iYWxPYmplY3RHUFIgZm9yIHRlbXAyLCBsZXQn
cyByZXN0b3JlIHRoZSBnbG9iYWwgb2JqZWN0LgorICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdENvbnN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4obm9kZS0+Y2VsbE9w
ZXJhbmQoKS0+dmFsdWUoKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3RDb25zdCksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgIH0KKyNlbmRpZgorCisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBKU0dsb2JhbE9iamVj
dDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNldCgpICsgUmVnRXhwR2xvYmFsRGF0YTo6b2Zmc2V0T2ZD
YWNoZWRSZXN1bHQoKTsKKworICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCByZWdFeHApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxP
YmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0UmVnRXhw
KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoYXJndW1lbnRHUFIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZz
ZXRPZkxhc3RJbnB1dCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVzdWx0R1BSLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJl
c3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgc3Rh
cnQpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIocmVzdWx0MkdQUiwgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNl
dE9mUmVzdWx0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIGVuZCkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xv
YmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVpZmll
ZCgpKSk7CisKKyAgICAgICAgaWYgKHN3YXBSZWcgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIHVubG9jayhzd2FwUmVnKTsKKworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAg
ICAgICBmYWlsZWRNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgIH07CisKKyAgICBpZiAobm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1Vz
ZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgIGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CisgICAgICAg
IHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDMoKSwgYXJndW1lbnRHUFIpOworCisgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgc3dhcFJlZ0lmTmVlZGVkKCk7CisKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudEdQUiwgSlNT
dHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0cmluZ0ltcGxHUFIpOworICAgICAgICAvLyBJZiB0
aGUgc3RyaW5nIGlzIGEgcm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAg
ICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwo
c3RyaW5nSW1wbEdQUikpOworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpmbGFn
c09mZnNldCgpKSwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4
Qml0KCkpKSk7CisKKyAgICAgICAgcmVnRXhwVGVzdElubGluZUNhc2UoKTsKKworICAgICAgICBv
cGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25SZWdFeHBUZXN0U3RyaW5nLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdEdQUiwgYmFzZUdQ
UiwgYXJndW1lbnRHUFIpOworCisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1
ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgIGFyZ3VtZW50R1BS
ID0gYXJndW1lbnQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgc3dhcFJl
Z0lmTmVlZGVkKCk7CisKKyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZO
b3RDZWxsKGFyZ3VtZW50R1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaElmTm90U3RyaW5nKGFyZ3VtZW50R1BSKSk7CisKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgc3RyaW5nSW1wbEdQUik7CisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIHJvcGUgb3IgMTYg
Yml0LCB3ZSBjYWxsIHRoZSBvcGVyYXRpb24uCisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaElmUm9wZVN0cmluZ0ltcGwoc3RyaW5nSW1wbEdQUikpOworICAgIG9wZXJhdGlv
bkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdJbXBsR1BSLCBT
dHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKFN0cmluZ0lt
cGw6OmZsYWdJczhCaXQoKSkpKTsKKworICAgIHJlZ0V4cFRlc3RJbmxpbmVDYXNlKCk7CisKKyAg
ICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlZ0V4cFRlc3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBhcmd1
bWVudEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOworCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwor
fQorI2Vsc2UKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKE5v
ZGUqIG5vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBjb21waWxlUmVnRXhwVGVzdChub2RlKTsKK30KKyNlbmRpZgor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5
cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMzgyOCw2ICs0MDIwLDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAg
Y2FzZSBSZWdFeHBUZXN0SW5saW5lOiB7CisgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5l
KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFz
dDogewogICAgICAgICBjb21waWxlUmVnRXhwTWF0Y2hGYXN0KG5vZGUpOwogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDI4MzUxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OTksNiArMTQ5OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVJlZ0V4cE1hdGNoRmFzdEdsb2JhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUmVnRXhw
VGVzdChOb2RlKik7CisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZShOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlU3RyaW5nUmVwbGFjZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNP
YmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVR5cGVPZklzT2JqZWN0KE5vZGUqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjgzNTEyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAyLDYgKzgwMiw0NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfTsKIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUp
CisgICAgICAgICAgICBhdXRvIGNvbnZlcnRUZXN0VG9UZXN0SW5saW5lID0gWyZdIHsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpICE9IFJlZ0V4cFRlc3QpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmIChyZWdFeHAtPmdsb2Jh
bE9yU3RpY2t5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgICAgIGlmIChyZWdFeHAtPnVuaWNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYXV0byBqaXRDb2RlQmxvY2sgPSByZWdFeHAt
PmdldFJlZ0V4cEpJVENvZGVCbG9jaygpOworICAgICAgICAgICAgICAgIGlmICghaml0Q29kZUJs
b2NrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAg
ICBhdXRvIGlubGluZUNvZGVTdGF0czhCaXQgPSBqaXRDb2RlQmxvY2stPmdldDhCaXRJbmxpbmVT
dGF0cygpOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDb2RlU3RhdHM4Qml0LmNhbklu
bGluZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjb2RlU2l6ZSA9IGlubGluZUNvZGVTdGF0czhCaXQuY29kZVNpemUoKTsK
KworICAgICAgICAgICAgICAgIGlmIChjb2RlU2l6ZSA+IE9wdGlvbnM6Om1heGltdW1SZWdFeHBU
ZXN0SW5saW5lQ29kZXNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGlubGluZUNvZGVTdGF0czhCaXQu
c3RhY2tTaXplKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFsaWduZWRGcmFtZVNpemUpCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IHN0ZDo6bWF4KG1f
Z3JhcGgubV9wYXJhbWV0ZXJTbG90cywgYXJndW1lbnRDb3VudEZvclN0YWNrU2l6ZShhbGlnbmVk
RnJhbWVTaXplKSk7CisKKyAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9k
ZS0+b3JpZ2luOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIG1fbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwg
bV9ub2RlLT5jaGlsZHJlbi5qdXN0Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIG1fbm9kZS0+
Y29udmVydFRvUmVnRXhwVGVzdElubGluZShtX2dyYXBoLmZyZWV6ZShnbG9iYWxPYmplY3QpLCBt
X2dyYXBoLmZyZWV6ZShyZWdFeHApKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyNlbmRpZgor
CiAgICAgICAgICAgICBhdXRvIGNvbnZlcnRUb1N0YXRpYyA9IFsmXSB7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBFeGVjKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC04MjAsNiArODU5LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoZm9sZFRvQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmIEVOQUJM
RShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgICAgICBpZiAoY29udmVydFRl
c3RUb1Rlc3RJbmxpbmUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCiAgICAg
ICAgICAgICBpZiAoY29udmVydFRvU3RhdGljKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDI4MzUxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzNyw2ICszMzcsNyBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAg
IGNhc2UgUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5OgogICAgIGNhc2UgUmVnRXhwVGVzdDoK
KyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAg
ICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBOZXdSZWdleHA6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZp
c2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJTdXBlclNh
bXBsZXIuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJZYXJySklUUmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSA8YXRv
bWljPgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3dGYvUmVjdXJzYWJsZUxhbWJk
YS5oPgpAQCAtMTU4MCw2ICsxNTgxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBU
ZXN0OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4cFRlc3QoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6CisgICAgICAgICAgICBjb21waWxlUmVn
RXhwVGVzdElubGluZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVnRXhw
TWF0Y2hGYXN0OgogICAgICAgICAgICAgY29tcGlsZVJlZ0V4cE1hdGNoRmFzdCgpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xNDI2Nyw2ICsxNDI3MSwxNTkgQEAgcHJpdmF0ZToKICAgICAgICAg
c2V0Qm9vbGVhbihyZXN1bHQpOwogICAgIH0KIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBf
VEVTVF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVzdElubGluZSgpCisgICAgewor
ICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihtX25vZGUtPmNlbGxPcGVy
YW5kMigpLT52YWx1ZSgpKTsKKworICAgICAgICBBU1NFUlQoIXJlZ0V4cC0+Z2xvYmFsT3JTdGlj
a3koKSk7CisKKyAgICAgICAgYXV0byBqaXRDb2RlQmxvY2sgPSByZWdFeHAtPmdldFJlZ0V4cEpJ
VENvZGVCbG9jaygpOworICAgICAgICBBU1NFUlQoaml0Q29kZUJsb2NrKTsKKyAgICAgICAgYXV0
byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5nZXQ4Qml0SW5saW5lU3RhdHMo
KTsKKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Q29uc3QgPSBqc0Nhc3Q8
SlNHbG9iYWxPYmplY3QqPihtX25vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGlubGluZUNvZGVTdGF0czhCaXQuc3RhY2tT
aXplKCkpOworCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhh
bGlnbmVkRnJhbWVTaXplKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVjazhCaXRTdHJpbmcg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVDYXNlID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQ2FzZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKKworICAg
ICAgICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dSZWdFeHBPYmplY3QobV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGF2ZVN0cmlu
Z0FyZyA9IG1fbm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1VzZTsKKworICAgICAg
ICBpZiAoaGF2ZVN0cmluZ0FyZykKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gbG93U3RyaW5nKG1f
bm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmd1bWVudCA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgYXV0byB2bSA9ICZ0aGlzLT52
bSgpOworICAgICAgICBhdXRvIHN0YWNrQ2hlY2tlciA9ICZtX2dyYXBoLm1fc3RhY2tDaGVja2Vy
OworCisgICAgICAgIGlmICghaGF2ZVN0cmluZ0FyZykgeworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBpc1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBtX291dC5i
cmFuY2goaXNDZWxsKGFyZ3VtZW50KSwgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5KG9wZXJh
dGlvbkNhc2UpKTsKKworICAgICAgICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0Nl
bGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5n
KGFyZ3VtZW50KSwgdXN1YWxseShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUob3BlcmF0aW9uQ2FzZSkp
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIGNoZWNrOEJpdFN0
cmluZyk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc1JvcGVTdHJpbmcoYXJndW1lbnQs
IG1fbm9kZS0+Y2hpbGQzKCkpLCB1bnN1cmUob3BlcmF0aW9uQ2FzZSksIHVuc3VyZShjaGVjazhC
aXRTdHJpbmcpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2s4Qml0U3RyaW5n
LCBpbmxpbmVDYXNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChpc1JvcGVTdHJpbmcoYXJndW1lbnQsIG1fbm9kZS0+Y2hpbGQzKCkpLCB1bnN1cmUob3BlcmF0
aW9uQ2FzZSksIHVuc3VyZShjaGVjazhCaXRTdHJpbmcpKTsKKworICAgICAgICAgICAgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhjaGVjazhCaXRTdHJpbmcsIGlubGluZUNhc2UpOworICAgICAg
ICB9CisKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGFyZ3VtZW50
LCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihz
dHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAg
ICAgICAgdW5zdXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUoaW5saW5lQ2FzZSkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGlubGluZUNhc2UsIG9wZXJhdGlvbkNhc2UpOworICAgICAgICBM
VmFsdWUgc3RyaW5nTGVuZ3RoID0gbV9vdXQuemVyb0V4dChtX291dC5sb2FkMzIoc3RyaW5nSW1w
bCwgbV9oZWFwcy5TdHJpbmdJbXBsX2xlbmd0aCksIEludDY0KTsKKyAgICAgICAgTFZhbHVlIHN0
cmluZ0RhdGEgPSBtX291dC5sb2FkUHRyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9k
YXRhKTsKKworICAgICAgICBhdXRvIGNvbW1vbkRhdGEgPSBtX2Z0bFN0YXRlLmppdENvZGUtPmRm
Z0NvbW1vbigpOworCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0
LnBhdGNocG9pbnQoSW50MzIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShzdHJpbmdEYXRhLCBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShzdHJpbmdMZW5ndGgsIFZhbHVl
UmVwOjpTb21lTGF0ZVJlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25z
dHJhaW5lZFZhbHVlKGFyZ3VtZW50LCBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAg
ICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBpbmxpbmVDb2RlU3RhdHM4
Qml0Lm5lZWRzVGVtcDIoKSA/IDYgOiA1OworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAg
ICAgICAgICAgR1BSUmVnIHJldHVybkdQUiA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc3RyaW5nRGF0YUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc3RyaW5nTGVuZ3RoR1BSID0gcGFyYW1zWzJdLmdwcigpOworICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdHJpbmdHUFIgPSBwYXJhbXNbM10uZ3ByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGluZGV4R1BSID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgcmV0dXJuMkdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIG91dHB1dEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMik7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHRlbXAwR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgzKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgdGVtcDFHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDQpOworICAgICAgICAgICAgICAg
IEdQUlJlZyB0ZW1wMkdQUiA9IGlubGluZUNvZGVTdGF0czhCaXQubmVlZHNUZW1wMigpID8gcGFy
YW1zLmdwU2NyYXRjaCg1KSA6IEludmFsaWRHUFJSZWc7CisKKyAgICAgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgaW5kZXhHUFIpOworCisgICAgICAg
ICAgICAgICAgWWFycjo6WWFyckpJVFJlZ2lzdGVycyB5YXJyUmVnaXN0ZXJzOworCisgICAgICAg
ICAgICAgICAgeWFyclJlZ2lzdGVycy5pbnB1dCA9IHN0cmluZ0RhdGFHUFI7CisgICAgICAgICAg
ICAgICAgeWFyclJlZ2lzdGVycy5pbmRleCA9IGluZGV4R1BSOworICAgICAgICAgICAgICAgIHlh
cnJSZWdpc3RlcnMubGVuZ3RoID0gc3RyaW5nTGVuZ3RoR1BSOworICAgICAgICAgICAgICAgIHlh
cnJSZWdpc3RlcnMub3V0cHV0ID0gb3V0cHV0R1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdp
c3RlcnMucmVnVDAgPSB0ZW1wMEdQUjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJl
Z1QxID0gdGVtcDFHUFI7CisgICAgICAgICAgICAgICAgaWYgKGlubGluZUNvZGVTdGF0czhCaXQu
bmVlZHNUZW1wMigpKQorICAgICAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QyID0g
dGVtcDJHUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlciA9
IHJldHVybkdQUjsKKyAgICAgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJldHVyblJlZ2lzdGVy
MiA9IHJldHVybjJHUFI7CisKKyAgICAgICAgICAgICAgICBZYXJyOjpqaXRDb21waWxlSW5saW5l
ZFRlc3Qoc3RhY2tDaGVja2VyLCByZWdFeHAtPnBhdHRlcm4oKSwgcmVnRXhwLT5mbGFncygpLCBZ
YXJyOjpDaGFyU2l6ZTo6Q2hhcjgsIHZtLCBjb21tb25EYXRhLT5tX2JveWVyTW9vcmVEYXRhLCBq
aXQsIHlhcnJSZWdpc3RlcnMpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgICAgICAgICAgICAgYXV0byBmYWlsZWRNYXRjaCA9IGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCByZXR1cm5HUFIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDApKTsKKworICAgICAgICAgICAgICAgIC8vIFNhdmVkIGNhY2hlZCByZXN1bHQu
CisgICAgICAgICAgICAgICAgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHRlbXAwR1BSOworICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3RDb25zdCksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICAgICAgcHRyZGlmZl90
IG9mZnNldCA9IEpTR2xvYmFsT2JqZWN0OjpyZWdFeHBHbG9iYWxEYXRhT2Zmc2V0KCkgKyBSZWdF
eHBHbG9iYWxEYXRhOjpvZmZzZXRPZkNhY2hlZFJlc3VsdCgpOworCisgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihyZWdFeHApLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1
bHQ6Om9mZnNldE9mTGFzdFJlZ0V4cCgpKSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRy
KHN0cmluZ0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0
ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RJbnB1dCgpKSk7CisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIocmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVzdWx0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIHN0YXJ0KSkpOworICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHJldHVybjJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9C
SkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgZW5kKSkpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZTgoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZS
ZWlmaWVkKCkpKTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCByZXR1cm5HUFIpOworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGpp
dC5qdW1wKCkpOworCisgICAgICAgICAgICAgICAgZmFpbGVkTWF0Y2gubGluaygmaml0KTsKKyAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgcmV0
dXJuR1BSKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
IH0pOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBpbmxpbmVyZXN1bHQgPSBtX291dC5hbmNob3IocGF0Y2hwb2lu
dCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhvcGVyYXRpb25DYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBvcGVyYXRpb25SZXN1bHQ7CisKKyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcpCisgICAg
ICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDMyLCBvcGVy
YXRpb25SZWdFeHBUZXN0U3RyaW5nLCBnbG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50KSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFuY2hvcih2
bUNhbGwoSW50MzIsIG9wZXJhdGlvblJlZ0V4cFRlc3QsIGdsb2JhbE9iamVjdCwgYmFzZSwgYXJn
dW1lbnQpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgaW5saW5lcmVzdWx0LCBvcGVyYXRpb25SZXN1bHQpKTsKKyAgICB9
CisjZWxzZQorICAgIE5PX1JFVFVSTiB2b2lkIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5lKCkKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorI2VuZGlm
CisKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoKQogICAgIHsKICAgICAgICAgTFZh
bHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzUx
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4Nyw2ICsyODcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSgpOwogICAgIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNo
Q2FzZUxlbmd0aCwgNTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGlt
dW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3RhbExlbmd0aCwgMjAwMCwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihVbnNpZ25lZCwgbWF4aW11bVJlZ0V4cFRlc3RJbmxpbmVDb2Rlc2l6ZSwgNTAwLCBO
b3JtYWwsICJNYXhpbXVtIGNvZGUgc2l6ZSBpbiBieXRlcyBmb3IgaW5saW5lZCBSZWdFeHAudGVz
dCBKSVQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCBqaXRQb2xpY3lTY2FsZSwgMS4w
LCBOb3JtYWwsICJzY2FsZSBKSVQgdGhyZXNob2xkcyB0byB0aGlzIHNwZWNpZmllZCByYXRpbyBi
ZXR3ZWVuIDAuMCAoY29tcGlsZSBBU0FQKSBhbmQgMS4wIChjb21waWxlIGxpa2Ugbm9ybWFsKS4i
KSBcCiAgICAgdihCb29sLCBmb3JjZUVhZ2VyQ29tcGlsYXRpb24sIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZp
c2lvbiAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwxMyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcg
dG9Tb3VyY2VTdHJpbmcoKSBjb25zdDsKIAorI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICBZYXJy
OjpZYXJyQ29kZUJsb2NrKiBnZXRSZWdFeHBKSVRDb2RlQmxvY2soKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fcmVnRXhwSklUQ29kZS5nZXQoKTsKKyAgICB9CisjZW5kaWYKKwogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7CiAgICAgUmVnRXhwKFZNJiwgY29uc3QgU3Ry
aW5nJiwgT3B0aW9uU2V0PFlhcnI6OkZsYWdzPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9uIDI4MzUxMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTMsNiArNTMsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHJvdW5kTG9jYWxSZWdpc3Rl
ckNvdW50RgogICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgbG9jYWxSZWdpc3RlckNvdW50ICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6
ZUluUmVnaXN0ZXJzKSAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKIH0KIAor
aW5saW5lIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRGb3JTdGFja1NpemUodW5zaWduZWQgc2l6ZUlu
Qnl0ZXMpCit7CisgICAgdW5zaWduZWQgc2l6ZUluUmVnaXN0ZXJzID0gc2l6ZUluQnl0ZXMgLyBz
aXplb2YoQ1BVUmVnaXN0ZXIpOworCisgICAgaWYgKHNpemVJblJlZ2lzdGVycyA8PSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gc2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Cit9
CisKIGlubGluZSB1bnNpZ25lZCBsb2dTdGFja0FsaWdubWVudFJlZ2lzdGVycygpCiB7CiAgICAg
cmV0dXJuIFdURjo6ZmFzdExvZzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjgzNTEyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSAiWWFyckNhbm9uaWNh
bGl6ZS5oIgogI2luY2x1ZGUgIllhcnJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJZYXJySklU
UmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAiWWFyck1hdGNoaW5nQ29udGV4dEhvbGRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgpAQCAt
MTgyLDExNSArMTgzLDExIEBAIHN0ZDo6dHVwbGU8Qm95ZXJNb29yZUJpdG1hcDo6TWFwLCBCb3ll
ck0KICAgICByZXR1cm4gc3RkOjp0dXBsZSB7IFdURk1vdmUobWFwKSwgV1RGTW92ZShjaGFyYWN0
ZXJzRmFzdFBhdGgpIH07CiB9CiAKLWNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckpJVEluZm8sIHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewordGVtcGxhdGU8Y2xhc3MgWWFy
ckpJVFJlZ3MgPSBZYXJySklURGVmYXVsdFJlZ2lzdGVycz4KK2NsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckpJVEluZm8gewogCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNUmVnaXN0ZXJzOjpyMDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBBUk1SZWdpc3RlcnM6OnIxOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBBUk1SZWdpc3RlcnM6OnIy
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk1SZWdpc3RlcnM6
OnIzOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QwID0gQVJNUmVnaXN0
ZXJzOjpyNDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdp
c3RlcnM6OnI1OwotICAgIC8vIHI2IGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlckFSTXY3
LAotICAgIC8vIHI3IGlzIGZwLgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdU
MiA9IEFSTVJlZ2lzdGVyczo6cjg7Ci0gICAgLy8gcjkgaXMgc2IgaW4gRUFCSS4KLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7
IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBhIHNwZWNpYWwgcmVnaXN0ZXIuCi0KLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6
OnIwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBB
Uk1SZWdpc3RlcnM6OnIxOwotCi0jZWxpZiBDUFUoQVJNNjQpCi0gICAgLy8gQXJndW1lbnQgcmVn
aXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNNjRSZWdp
c3RlcnM6OngwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTTY0
UmVnaXN0ZXJzOjp4MTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0g
QVJNNjRSZWdpc3RlcnM6OngyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRw
dXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsgLy8g
TG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gQVJN
NjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotCi0g
ICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKLSAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3VudCA9IEFSTTY0UmVnaXN0ZXJzOjp4OTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBB
Uk02NFJlZ2lzdGVyczo6eDEwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmlj
b2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdpc3RlcnM6OngxMTsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBBUk02NFJlZ2lzdGVy
czo6eDEyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZWFkaW5nU3Vycm9nYXRl
VGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6eDE0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgPSBBUk02NFJlZ2lzdGVy
czo6eDE1OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVy
ID0gQVJNNjRSZWdpc3RlcnM6OngwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZj
MDApOwotI2VsaWYgQ1BVKE1JUFMpCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlu
cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKLQotICAgIC8vIHQwIGlzIHJlc2Vy
dmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCi0gICAgLy8gdDEgaXMgcmVzZXJ2ZWQgZm9yIE1h
Y3JvQXNzZW1ibGVyTUlQUy4KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAg
PSBNSVBTUmVnaXN0ZXJzOjp0MjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVyczo6dDU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gTUlQU1JlZ2lzdGVy
czo6djE7Ci0KLSNlbGlmIENQVShYODZfNjQpCi0jaWYgIU9TKFdJTkRPV1MpCi0gICAgLy8gQXJn
dW1lbnQgcmVnaXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0g
WDg2UmVnaXN0ZXJzOjplZGk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4
ID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxl
bmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8v
IExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IFg4
NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0jZWxz
ZQotICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgZG9lc24ndCBmaXQgaW4gNjRiaXRzLCBpdHMg
ZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3ggYW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBzaGlm
dGVkLgotICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS83NTcy
enR6NC5hc3B4Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWF0Y2hSZXN1bHQpID4gc2l6ZW9m
KHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90IGZpdCBpbiA2NGJpdHMiKTsKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVkeDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OnI4OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODZSZWdpc3RlcnM6OnI5Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OnIx
MDsKLSNlbmRpZgotCi0gICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVheDsKLSNpZiAhT1MoV0lORE9X
UykKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6
OnI5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVy
czo6cjEwOwotI2Vsc2UKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBY
ODZSZWdpc3RlcnM6OmVjeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIg
PSBYODZSZWdpc3RlcnM6OmVkaTsKLSNlbmRpZgotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lzdGVyczo6ZWJ4OwotI2lmICFPUyhXSU5ET1dT
KQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0g
WDg2UmVnaXN0ZXJzOjpyMTI7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0jZW5kaWYKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBYODZS
ZWdpc3RlcnM6OnIxMzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdW5pY29kZVRl
bXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
ZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0ZXJzOjpyMTU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gWDg2UmVnaXN0
ZXJzOjplZHg7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSA9IFRydXN0ZWRJbW0zMigweDEwMDAwKTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gVHJ1c3RlZEltbTMyKDB4ZDgw
MCk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVkSW1tMzIgdHJhaWxpbmdTdXJyb2dhdGVU
YWcgPSBUcnVzdGVkSW1tMzIoMHhkYzAwKTsKLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJ
bW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2lmZGVm
ICBKSVRfVU5JQ09ERV9FWFBSRVNTSU9OUworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgc3Vycm9nYXRlVGFnTWFzayA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MHhmZmZmZmMwMCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VY
UFJFU1NJT05TKQpAQCAtMzYwLDggKzI1NywxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAKICAgICB2b2lkIGluaXRQYXJlbkNvbnRleHRGcmVlTGlzdCgpCiAg
ICAgewotICAgICAgICBSZWdpc3RlcklEIHBhcmVuQ29udGV4dFBvaW50ZXIgPSByZWdUMDsKLSAg
ICAgICAgUmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciA9IHJlZ1QyOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRQb2ludGVyID0gbV9yZWdz
LnJlZ1QwOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250
ZXh0UG9pbnRlciA9IG1fcmVncy5yZWdUMjsKKworICAgICAgICBtX3VzZXNUMiA9IHRydWU7CiAK
ICAgICAgICAgc2l6ZV90IHBhcmVuQ29udGV4dFNpemUgPSBQYXJlbkNvbnRleHQ6OnNpemVGb3Io
bV9wYXJlbkNvbnRleHRTaXplcyk7CiAKQEAgLTM3Miw5NCArMjcxLDkzIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdD
b250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgZnJlZWxp
c3RTaXplUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9yZWdzLm1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZz
ZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lz
dGVyKTsKICAgICAgICAgLy8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RS
ZWdpc3RlciBhcmUgbGlrZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0
dGVybkNvbnRleHRCdWZmZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAgICAgICBKdW1wIGVt
cHR5RnJlZUxpc3QgPSBicmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAg
ICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVy
LCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGFkZFB0cihmcmVlbGlzdFJlZ2lz
dGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0gICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIo
cGFyZW5Db250ZXh0U2l6ZSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBN
YXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXIoKSksIG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1w
dHlGcmVlTGlzdCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxp
c3RSZWdpc3RlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7CisgICAgICAgIG1faml0LmFkZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJl
ZWxpc3RSZWdpc3RlciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5h
ZGRQdHIobV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rl
cik7CisgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBh
cmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJlZWxpc3RTaXplUmVnaXN0ZXIpOwogCi0gICAgICAg
IExhYmVsIGxvb3BUb3AodGhpcyk7Ci0gICAgICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2hQdHIo
QWJvdmUsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0g
ICAgICAgIHN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBBZGRyZXNzKHBhcmVuQ29u
dGV4dFBvaW50ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIG1vdmUo
bmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBwYXJlbkNvbnRleHRQb2ludGVy
LCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGp1bXAobG9vcFRvcCk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wVG9wKCZtX2ppdCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGluaXREb25lID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdp
c3Rlcik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6
Om5leHRPZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5tb3ZlKG5leHRQYXJlbkNvbnRleHRQb2lu
dGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBhcmVuQ29udGV4dFBvaW50
ZXIsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuanVtcChsb29wVG9w
KTsKIAotICAgICAgICBpbml0RG9uZS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50ZXIsIFBhcmVuQ29u
dGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIGVtcHR5RnJlZUxpc3QubGluayh0aGlzKTsK
KyAgICAgICAgaW5pdERvbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsK
KyAgICAgICAgZW1wdHlGcmVlTGlzdC5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCBh
bGxvY2F0ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB2b2lkIGFsbG9jYXRl
UGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0g
ICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxp
c3RSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlbWFpbmluZ01h
dGNoQ291bnQpOwotICAgICAgICBtX2hpdE1hdGNoTGltaXQuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVtYWluaW5nTWF0Y2hDb3VudCkpOwotICAgICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0
ZXIsIHJlc3VsdCk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmVlbGlzdFJlZ2lzdGVyLCBQ
YXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBt
X2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlcikpOworICAgICAgICBtX2ppdC5zdWIzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3Vu
dCk7CisgICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MuZnJlZWxpc3RSZWdp
c3RlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3Rl
cik7CiAgICAgfQogCi0gICAgdm9pZCBmcmVlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgaGVhZFB0
clJlZ2lzdGVyLCBSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdpc3RlcikKKyAgICB2b2lkIGZyZWVQ
YXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaGVhZFB0clJlZ2lzdGVyLCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdIZWFkUHRyUmVnaXN0ZXIpCiAgICAgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRP
ZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7Ci0gICAgICAgIHN0b3JlUHRyKGZyZWVsaXN0
UmVnaXN0ZXIsIEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZz
ZXQoKSkpOwotICAgICAgICBtb3ZlKGhlYWRQdHJSZWdpc3RlciwgZnJlZWxpc3RSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaGVhZFB0clJl
Z2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNl
dCgpKSk7CisgICAgICAgIG1faml0Lm1vdmUoaGVhZFB0clJlZ2lzdGVyLCBtX3JlZ3MuZnJlZWxp
c3RSZWdpc3Rlcik7CiAgICAgfQogCi0KLSAgICB2b2lkIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3Vu
dFRvUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91
bnRHUFIsIFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSKQorICAgIHZvaWQgc3RvcmVCZWdpbkFu
ZE1hdGNoQW1vdW50VG9QYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmVn
aW5HUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoQW1vdW50R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSArIDQgPT0gUGFyZW5Db250ZXh0
OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1h
dGNoQW1vdW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6
OmJlZ2luT2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1h
dGNoQW1vdW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBsb2Fk
QmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBwYXJlbkNvbnRl
eHRHUFIsIFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIpCisg
ICAgdm9pZCBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBiZWdpbkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIp
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQo
KSArIDQgPT0gUGFyZW5Db250ZXh0OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgbG9h
ZFBhaXIzMihwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6OmJlZ2lu
T2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UGFpcjMyKHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihQYXJl
bkNvbnRleHQ6OmJlZ2luT2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOwogICAg
IH0KIAotICAgIHZvaWQgc2F2ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHBhcmVuQ29udGV4dFJl
ZywgUmVnaXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVk
IGxhc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCisg
ICAgdm9pZCBzYXZlUGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVu
Q29udGV4dFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgdW5zaWduZWQg
Zmlyc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwgdW5zaWduZWQgc3VicGF0
dGVybkJhc2VGcmFtZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgbG9hZEZyb21GcmFtZShzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNo
QW1vdW50SW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3Vu
dFRvUGFyZW5Db250ZXh0KGluZGV4LCB0ZW1wUmVnLCBwYXJlbkNvbnRleHRSZWcpOworICAgICAg
ICBzdG9yZUJlZ2luQW5kTWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChtX3JlZ3MuaW5kZXgsIHRl
bXBSZWcsIHBhcmVuQ29udGV4dFJlZyk7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUoc3VicGF0dGVy
bkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRy
ZXNzSW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlUHRyKHRlbXBSZWcsIEFkZHJlc3Mo
cGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSkpOwor
ICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSk7CiAg
ICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0
dGVybnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0U3Vi
cGF0dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7CiAg
ICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAgICAg
IGxvYWQ2NChBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWdu
ZWQpKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2NCh0ZW1wUmVnLCBBZGRyZXNz
KHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1YnBhdHRl
cm4pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKHVuc2lnbmVkKSks
IHRlbXBSZWcpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGVtcFJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRl
cm5PZmZzZXQoc3VicGF0dGVybikpKTsKICAgICAgICAgICAgICAgICBjbGVhclN1YnBhdHRlcm5T
dGFydChzdWJwYXR0ZXJuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlvbiA9IHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5Db250ZXh0U2l6
ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKICAgICAgICAgICAgIGxvYWRGcm9t
RnJhbWUoZnJhbWVMb2NhdGlvbiwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzdG9yZVB0cih0ZW1w
UmVnLCBBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zm
c2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRy
X3QpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9mZnNl
dChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0cl90
KSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlUGFyZW5Db250ZXh0KFJl
Z2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZp
cnN0U3VicGF0dGVybiwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRl
cm5CYXNlRnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHJlc3RvcmVQYXJlbkNvbnRleHQoTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RT
dWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewot
ICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQocGFyZW5Db250
ZXh0UmVnLCBpbmRleCwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgc3Vi
cGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdp
bkluZGV4KCkpOworICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRl
eHQocGFyZW5Db250ZXh0UmVnLCBtX3JlZ3MuaW5kZXgsIHRlbXBSZWcpOworICAgICAgICBzdG9y
ZVRvRnJhbWUobV9yZWdzLmluZGV4LCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIHN0b3JlVG9GcmFt
ZSh0ZW1wUmVnLCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwgdGVt
cFJlZyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocGFy
ZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSksIHRlbXBS
ZWcpOwogICAgICAgICBzdG9yZVRvRnJhbWUodGVtcFJlZywgc3VicGF0dGVybkJhc2VGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRyZXNzSW5kZXgoKSk7
CiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3Vi
cGF0dGVybnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0
U3VicGF0dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAg
ICAgIGxvYWQ2NChBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0
ZXJuT2Zmc2V0KHN1YnBhdHRlcm4pKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2
NCh0ZW1wUmVnLCBBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5z
aWduZWQpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1
YnBhdHRlcm4pKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0ZW1w
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3VicGF0dGVybiA8
PCAxKSAqIHNpemVvZih1bnNpZ25lZCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlv
biA9IHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5D
b250ZXh0U2l6ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFt
ZU9mZnNldChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWlu
dHB0cl90KSksIHRlbXBSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9m
ZnNldChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0
cl90KSksIHRlbXBSZWcpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKHRlbXBSZWcsIGZyYW1l
TG9jYXRpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNDg3LDcgKzM4NSw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfQogICAgIH0KIAotICAg
IHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKFJlZ2lzdGVySUQgY2hhcmFjdGVyLCBKdW1w
TGlzdCYgZmFpbHVyZXMsIEp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdl
KiByYW5nZXMsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNo
YXIzMiogbWF0Y2hlcywgdW5zaWduZWQgbWF0Y2hDb3VudCkKKyAgICB2b2lkIG1hdGNoQ2hhcmFj
dGVyQ2xhc3NSYW5nZShNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZXMsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bWF0Y2hEZXN0LCBjb25zdCBDaGFyYWN0ZXJSYW5nZSogcmFuZ2VzLCB1bnNpZ25lZCBjb3VudCwg
dW5zaWduZWQqIG1hdGNoSW5kZXgsIGNvbnN0IFVDaGFyMzIqIG1hdGNoZXMsIHVuc2lnbmVkIG1h
dGNoQ291bnQpCiAgICAgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICAvLyBwaWNrIHdoaWNo
IHJhbmdlIHdlJ3JlIGdvaW5nIHRvIGdlbmVyYXRlCkBAIC00OTgsMzMgKzM5NiwzMyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAvLyBjaGVj
ayBpZiB0aGVyZSBhcmUgYW55IHJhbmdlcyBvciBtYXRjaGVzIGJlbG93IGxvLiAgSWYgbm90LCBq
dXN0IGpsIHRvIGZhaWx1cmUgLQogICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcg
ZWxzZSB0byBjaGVjaywgY2hlY2sgdGhhdCBmaXJzdCwgaWYgaXQgZmFsbHMgdGhyb3VnaCBqbXAg
dG8gZmFpbHVyZS4KICAgICAgICAgICAgIGlmICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAm
JiAobWF0Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGxv
T3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5P
ckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQp
bG8pKTsKIAogICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNvZGUgZm9yIGFsbCByYW5nZXMg
YmVmb3JlIHRoaXMgb25lCiAgICAgICAgICAgICAgICAgaWYgKHdoaWNoKQogICAgICAgICAgICAg
ICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0
Y2hEZXN0LCByYW5nZXMsIHdoaWNoLCBtYXRjaEluZGV4LCBtYXRjaGVzLCBtYXRjaENvdW50KTsK
IAogICAgICAgICAgICAgICAgIHdoaWxlICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAo
bWF0Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hv
cnQpbWF0Y2hlc1sqbWF0Y2hJbmRleF0pKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoRGVz
dC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbWF0Y2hlc1sqbWF0Y2hJbmRl
eF0pKSk7CiAgICAgICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICAgICAg
bG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsoJm1f
aml0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hpY2gpIHsKLSAgICAgICAgICAgICAgICBK
dW1wIGxvT3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJ
bW0zMigodW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRl
clRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQg
c2hvcnQpbG8pKTsKIAogICAgICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShj
aGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgs
IG1hdGNoZXMsIG1hdGNoQ291bnQpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
Ci0gICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
bG9PckFib3ZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWxvKSkpOwogCiAgICAgICAgICAgICB3aGls
ZSAoKCptYXRjaEluZGV4IDwgbWF0Y2hDb3VudCkgJiYgKG1hdGNoZXNbKm1hdGNoSW5kZXhdIDw9
IGhpKSkKICAgICAgICAgICAgICAgICArKyptYXRjaEluZGV4OwogCi0gICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpaGkpKSk7CisgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCloaSkpKTsKICAgICAgICAgICAgIC8v
IGZhbGwgdGhyb3VnaCB0byBoZXJlLCB0aGUgdmFsdWUgaXMgYWJvdmUgaGkuCiAKICAgICAgICAg
ICAgIC8vIHNodWZmbGUgYWxvbmcgJiBsb29wIGFyb3VuZCBpZiB0aGVyZSBhcmUgYW55IG1vcmUg
bWF0Y2hlcyB0byBoYW5kbGUuCkBAIC01MzQsMjQgKzQzMiwyNCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0gd2hpbGUgKGNvdW50KTsKICAgICB9
CiAKLSAgICB2b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoUmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIEp1
bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlckNsYXNzKiBjaGFyQ2xhc3MpCisgICAg
dm9pZCBtYXRjaENoYXJhY3RlckNsYXNzKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJh
Y3RlciwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3Rl
ckNsYXNzKiBjaGFyQ2xhc3MpCiAgICAgewogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX3RhYmxl
ICYmICFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJl
c3MgdGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNoYXJD
bGFzcy0+bV90YWJsZSkpOwotICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2hUZXN0
OChjaGFyQ2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IFplcm8gOiBOb25aZXJvLCB0YWJsZUVudHJ5
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIHRhYmxlRW50
cnkoY2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihjaGFyQ2xhc3MtPm1fdGFi
bGUpKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDgoY2hh
ckNsYXNzLT5tX3RhYmxlSW52ZXJ0ZWQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0YWJsZUVudHJ5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBKdW1wTGlzdCB1bmljb2RlRmFpbDsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHVuaWNvZGVGYWlsOwogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX21h
dGNoZXNVbmljb2RlLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZS5zaXplKCkp
IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGlzQXNjaWk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgaXNBc2NpaTsKICAgICAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0
Y2hlcy5zaXplKCkgfHwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgaXNBc2NpaS5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIFRy
dXN0ZWRJbW0zMigweDdmKSkpOworICAgICAgICAgICAgICAgIGlzQXNjaWkuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDdmKSkpOwogCiAgICAgICAgICAgICBpZiAoY2hh
ckNsYXNzLT5tX21hdGNoZXNVbmljb2RlLnNpemUoKSkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjaCA9IGNoYXJDbGFzcy0+bV9tYXRj
aGVzVW5pY29kZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFu
Y2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNo
YXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApAQCAtNTYwLDI1ICs0NTgsMjUgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGxvID0g
Y2hhckNsYXNzLT5tX3Jhbmdlc1VuaWNvZGVbaV0uYmVnaW47CiAgICAgICAgICAgICAgICAgICAg
IFVDaGFyMzIgaGkgPSBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5lbmQ7CiAKLSAgICAg
ICAgICAgICAgICAgICAgSnVtcCBiZWxvdyA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIs
IEltbTMyKGxvKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGhpKSkpOwotICAgICAgICAgICAg
ICAgICAgICBiZWxvdy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZWxvdyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobG8pKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihoaSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYmVsb3cubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNp
emUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB1bmlj
b2RlRmFpbCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGlzQXNjaWkubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICB1bmljb2RlRmFpbCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGlzQXNj
aWkubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9y
YW5nZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4ID0gMDsKLSAg
ICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1Jhbmdl
KGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5iZWdp
bigpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAg
ICAgICB3aGlsZSAobWF0Y2hJbmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4Kytd
KSkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5z
aWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIAotICAg
ICAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmxpbmso
Jm1faml0KTsKICAgICAgICAgfSBlbHNlIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkp
IHsKICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbjogZ2F0aGVyICdhJywnQScgZXRjIGJhY2sg
dG9nZXRoZXIsIGNhbiBtYXNrICYgdGVzdCBvbmNlLgogICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IG1hdGNoZXNBWmF6OwpAQCAtNTkzLDc4ICs0OTEsODMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVy
KGNoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFy
YWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaCkpKTsKKyAgICAgICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFj
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAodW5zaWduZWQgY291bnRBWmF6ID0gbWF0Y2hlc0Fa
YXouc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50QVphejsgKytpKQotICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJbW0zMihtYXRjaGVzQVph
eltpXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihtYXRjaGVzQVpheltpXSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJD
bGFzcy0+bV9yYW5nZXNVbmljb2RlLnNpemUoKSkKLSAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB1bmljb2RlRmFpbC5saW5rKCZtX2ppdCk7CiAgICAgfQog
CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCi0gICAgdm9pZCBhZHZh
bmNlSW5kZXhBZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKGNvbnN0IFBhdHRlcm5UZXJtKiB0
ZXJtLCBKdW1wTGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBSZWdp
c3RlcklEIGNoYXJhY3RlcikKKyAgICB2b2lkIGFkdmFuY2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xh
c3NUZXJtTWF0Y2goY29uc3QgUGF0dGVyblRlcm0qIHRlcm0sIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQodGVybS0+dHlw
ZSA9PSBQYXR0ZXJuVGVybTo6VHlwZTo6Q2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0
ZXJtLT5pc0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAy
IDogMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/
IDIgOiAxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0g
YnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQk1QQ2hh
ciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBt
X3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwogICAgICAgICAgICAgZmFpbHVyZXNBZnRl
ckluY3JlbWVudGluZ0luZGV4LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5r
KHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2pp
dCk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIEp1bXBzIGlmIGlucHV0IG5v
dCBhdmFpbGFibGU7IHdpbGwgaGF2ZSAoaW5jb3JyZWN0bHkpIGluY3JlbWVudGVkIGFscmVhZHkh
Ci0gICAgSnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9
IDApCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcElmTm9BdmFpbGFibGVJbnB1dCh1bnNp
Z25lZCBjb3VudFRvQ2hlY2sgPSAwKQogICAgIHsKICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykK
LSAgICAgICAgICAgIGFkZDMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2spLCBtX3JlZ3MuaW5kZXgp
OworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBt
X3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykKKyAgICB7
CisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2sp
LCBtX3JlZ3MuaW5kZXgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsKICAgICB9
CiAKLSAgICBKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVja05vdEVub3VnaElucHV0KE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCiAgICAgewotICAgICAgICBhZGQzMihJ
bW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihCZWxv
d09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICBtX2ppdC5hZGQzMihtX3JlZ3MuaW5k
ZXgsIGFkZGl0aW9uYWxBbW91bnQpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlLCBhZGRpdGlvbmFsQW1vdW50LCBtX3JlZ3MubGVuZ3RoKTsKICAg
ICB9CiAKLSAgICBKdW1wIGNoZWNrTm90RW5vdWdoSW5wdXQoUmVnaXN0ZXJJRCBhZGRpdGlvbmFs
QW1vdW50KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrSW5wdXQoKQogICAgIHsKLSAg
ICAgICAgYWRkMzIoaW5kZXgsIGFkZGl0aW9uYWxBbW91bnQpOwotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoQWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgs
IG1fcmVncy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgY2hlY2tJbnB1dCgpCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYXRFbmRPZklucHV0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBi
cmFuY2gzMihCZWxvd09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5s
ZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgYXRFbmRPZklucHV0KCkKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3RBdEVuZE9mSW5wdXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKEVxdWFsLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsK
ICAgICB9CiAKLSAgICBKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+
IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1w
UmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRp
dmVDaGFyYWN0ZXJPZmZzZXQsIHRlbXBSZWcsIG1fcmVncy5pbmRleCk7CiAgICAgfQogCi0gICAg
QmFzZUluZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MoQ2hlY2tlZDx1bnNpZ25lZD4g
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVySUQgdGVtcFJlZywgUmVnaXN0ZXJJRCBp
bmRleFJlZyA9IGluZGV4KQorICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggbmVnYXRpdmVP
ZmZzZXRJbmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9m
ZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgaW5kZXhSZWcpCiAgICAgewotICAgICAgICBSZWdpc3RlcklEIGJhc2UgPSBp
bnB1dDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmFzZSA9IG1fcmVncy5p
bnB1dDsKIAotICAgICAgICAvLyBCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50
MzJfdCBvZmZzZXQuIEdpdmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCi0gICAgICAgIC8v
IGV4cHJlc3Npb24gdGhhdCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIEJhc2VJbmRl
eCdzIHNpZ25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CisgICAgICAgIC8vIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50MzJfdCBvZmZzZXQuIEdp
dmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCisgICAgICAgIC8vIGV4cHJlc3Npb24gdGhh
dCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgncyBzaWduZWQgb2Zmc2V0IGlzIGluc3VmZmljaWVudAogICAgICAgICAvLyBmb3IgYWRkcmVz
c2luZyBpbiBleHRyZW1lIGNhc2VzIHdoZXJlIHdlIG1pZ2h0IHVuZGVyZmxvdy4gVGhlcmVmb3Jl
IHdlIGNoZWNrIHRvIHNlZSBpZgogICAgICAgICAvLyBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCB3
aWxsIHVuZGVyZmxvdyBkaXJlY3RseSBvciBhZnRlciBjb252ZXJ0aW5nIGZvciAxNiBiaXQgY2hh
cmFjdGVycy4KICAgICAgICAgLy8gSWYgc28sIHdlIGRvIG91ciBvd24gYWRkcmVzcyBjYWxjdWxh
dGluZyBieSBhZGp1c3RpbmcgdGhlIGJhc2UsIHVzaW5nIHRoZSByZXN1bHQgcmVnaXN0ZXIKQEAg
LTY3MywxMSArNTc2LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0QWRqdXN0QW1vdW50ID0gMHg0MDAwMDAwMDsKICAg
ICAgICAgaWYgKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0ID4gbWF4aW11bU5lZ2F0aXZlT2Zmc2V0
Rm9yQ2hhcmFjdGVyU2l6ZSkgewogICAgICAgICAgICAgYmFzZSA9IHRlbXBSZWc7Ci0gICAgICAg
ICAgICBtb3ZlKGlucHV0LCBiYXNlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmlu
cHV0LCBiYXNlKTsKICAgICAgICAgICAgIHdoaWxlIChuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCA+
IG1heGltdW1OZWdhdGl2ZU9mZnNldEZvckNoYXJhY3RlclNpemUpIHsKLSAgICAgICAgICAgICAg
ICBzdWJQdHIoVHJ1c3RlZEltbTMyKG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAg
ICAgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG9mZnNl
dEFkanVzdEFtb3VudCksIGJhc2UpOwogICAgICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplICE9
IENoYXJTaXplOjpDaGFyOCkKLSAgICAgICAgICAgICAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0z
MihvZmZzZXRBZGp1c3RBbW91bnQpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwg
YmFzZSk7CiAgICAgICAgICAgICAgICAgbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgLT0gb2Zmc2V0
QWRqdXN0QW1vdW50OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODUsNjcgKzU4OCw3
MiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIENo
ZWNrZWQ8aW50MzJfdD4gY2hhcmFjdGVyT2Zmc2V0KC1zdGF0aWNfY2FzdDxpbnQzMl90PihuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCkpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkKLSAgICAgICAgICAgIHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVn
LCBUaW1lc09uZSwgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KGNoYXIpKSk7CisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCht
X3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIGNoYXJhY3Rl
ck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihjaGFyKSkpOwogCi0gICAgICAg
IHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVnLCBUaW1lc1R3bywgY2hhcmFjdGVyT2Zm
c2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNUd28sIGNoYXJhY3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMy
X3Q+KHNpemVvZihVQ2hhcikpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09E
RV9FWFBSRVNTSU9OUykKLSAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhckltcGwoUmVnaXN0ZXJJ
RCByZXN1bHRSZWcpCisgICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NoYXJT
aXplID09IENoYXJTaXplOjpDaGFyMTYpOwogCi0gICAgICAgIEp1bXBMaXN0IG5vdFVuaWNvZGU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub3RVbmljb2RlOwogCi0gICAgICAg
IGxvYWQxNlVuYWxpZ25lZChyZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgcmVzdWx0UmVnKTsKKyAg
ICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFp
bCwgcmVzdWx0UmVnKTsKIAogICAgICAgICAvLyBJcyB0aGUgY2hhcmFjdGVyIGEgbGVhZGluZyBz
dXJyb2dhdGU/Ci0gICAgICAgIGFuZDMyKHN1cnJvZ2F0ZVRhZ01hc2ssIHJlc3VsdFJlZywgdW5p
Y29kZVRlbXApOwotICAgICAgICBub3RVbmljb2RlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
dW5pY29kZVRlbXAsIGxlYWRpbmdTdXJyb2dhdGVUYWcpKTsKKyAgICAgICAgbV9qaXQuYW5kMzIo
WWFyckpJVERlZmF1bHRSZWdpc3RlcnM6OnN1cnJvZ2F0ZVRhZ01hc2ssIHJlc3VsdFJlZywgbV9y
ZWdzLnVuaWNvZGVUZW1wKTsKKyAgICAgICAgbm90VW5pY29kZS5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MudW5pY29kZVRlbXAsIG1fcmVncy5s
ZWFkaW5nU3Vycm9nYXRlVGFnKSk7CiAKICAgICAgICAgLy8gSXMgdGhlIGlucHV0IGxvbmcgZW5v
dWdoIHRvIHJlYWQgYSB0cmFpbGluZyBzdXJyb2dhdGU/Ci0gICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoMiksIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKTsKLSAgICAgICAgbm90VW5pY29kZS5h
cHBlbmQoYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwsIGVu
ZE9mU3RyaW5nQWRkcmVzcykpOworICAgICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigyKSwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKTsKKyAgICAg
ICAgbm90VW5pY29kZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgbV9yZWdzLmVuZE9mU3Ry
aW5nQWRkcmVzcykpOwogCiAgICAgICAgIC8vIElzIHRoZSBjaGFyYWN0ZXIgYSB0cmFpbGluZyBz
dXJyb2dhdGU/Ci0gICAgICAgIGxvYWQxNlVuYWxpZ25lZChBZGRyZXNzKHJlZ1VuaWNvZGVJbnB1
dEFuZFRyYWlsKSwgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwotICAgICAgICBhbmQzMihzdXJy
b2dhdGVUYWdNYXNrLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgdW5pY29kZVRlbXApOwotICAg
ICAgICBub3RVbmljb2RlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgdW5pY29kZVRlbXAsIHRy
YWlsaW5nU3Vycm9nYXRlVGFnKSk7CisgICAgICAgIG1faml0LmxvYWQxNlVuYWxpZ25lZChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpLCBtX3Jl
Z3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOworICAgICAgICBtX2ppdC5hbmQzMihZYXJySklU
RGVmYXVsdFJlZ2lzdGVyczo6c3Vycm9nYXRlVGFnTWFzaywgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1
dEFuZFRyYWlsLCBtX3JlZ3MudW5pY29kZVRlbXApOworICAgICAgICBub3RVbmljb2RlLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy51bmljb2Rl
VGVtcCwgbV9yZWdzLnRyYWlsaW5nU3Vycm9nYXRlVGFnKSk7CiAKICAgICAgICAgLy8gQ29tYmlu
ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzdXJyb2dhdGVzIHRvIHByb2R1Y2UgYSBjb2RlIHBvaW50
LgotICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoMTApLCByZXN1bHRSZWcpOwotICAgICAg
ICBnZXRFZmZlY3RpdmVBZGRyZXNzKEJhc2VJbmRleChyZXN1bHRSZWcsIHJlZ1VuaWNvZGVJbnB1
dEFuZFRyYWlsLCBUaW1lc09uZSwgLVUxNl9TVVJST0dBVEVfT0ZGU0VUKSwgcmVzdWx0UmVnKTsK
LSAgICAgICAgbm90VW5pY29kZS5saW5rKHRoaXMpOworICAgICAgICBtX2ppdC5sc2hpZnQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEwKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9q
aXQuZ2V0RWZmZWN0aXZlQWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJl
ZywgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNP
bmUsIC1VMTZfU1VSUk9HQVRFX09GRlNFVCksIHJlc3VsdFJlZyk7CisgICAgICAgIG5vdFVuaWNv
ZGUubGluaygmbV9qaXQpOwogICAgIH0KIAotICAgIHZvaWQgdHJ5UmVhZFVuaWNvZGVDaGFyKEJh
c2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIHJlc3VsdFJlZykKKyAgICB2b2lkIHRyeVJlYWRV
bmljb2RlQ2hhcihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFkZHJlc3MsIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NoYXJT
aXplID09IENoYXJTaXplOjpDaGFyMTYpOwogCi0gICAgICAgIGdldEVmZmVjdGl2ZUFkZHJlc3Mo
YWRkcmVzcywgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOworICAgICAgICBtX2ppdC5nZXRFZmZl
Y3RpdmVBZGRyZXNzKGFkZHJlc3MsIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CiAK
LSAgICAgICAgaWYgKHJlc3VsdFJlZyA9PSByZWdUMCkKLSAgICAgICAgICAgIG1fdHJ5UmVhZFVu
aWNvZGVDaGFyYWN0ZXJDYWxscy5hcHBlbmQobmVhckNhbGwoKSk7CisgICAgICAgIGlmIChyZXN1
bHRSZWcgPT0gbV9yZWdzLnJlZ1QwKQorICAgICAgICAgICAgbV90cnlSZWFkVW5pY29kZUNoYXJh
Y3RlckNhbGxzLmFwcGVuZChtX2ppdC5uZWFyQ2FsbCgpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChyZXN1bHRSZWcpOwogICAgIH0KICNlbmRpZgog
ICAgIAotICAgIHZvaWQgcmVhZENoYXJhY3RlcihDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNo
YXJhY3Rlck9mZnNldCwgUmVnaXN0ZXJJRCByZXN1bHRSZWcsIFJlZ2lzdGVySUQgaW5kZXhSZWcg
PSBpbmRleCkKKyAgICB2b2lkIHJlYWRDaGFyYWN0ZXIoQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRp
dmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlc3VsdFJlZykK
ICAgICB7Ci0gICAgICAgIEJhc2VJbmRleCBhZGRyZXNzID0gbmVnYXRpdmVPZmZzZXRJbmRleGVk
QWRkcmVzcyhuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBpbmRleFJlZyk7Cisg
ICAgICAgIHJlYWRDaGFyYWN0ZXIobmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIHJlc3VsdFJlZywg
bV9yZWdzLmluZGV4KTsKKyAgICB9CisKKyAgICB2b2lkIHJlYWRDaGFyYWN0ZXIoQ2hlY2tlZDx1
bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhSZWcpCisgICAg
eworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFkZHJlc3MgPSBuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIGlu
ZGV4UmVnKTsKIAogICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpCi0g
ICAgICAgICAgICBsb2FkOChhZGRyZXNzLCByZXN1bHRSZWcpOworICAgICAgICAgICAgbV9qaXQu
bG9hZDgoYWRkcmVzcywgcmVzdWx0UmVnKTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9F
WFBSRVNTSU9OUykKICAgICAgICAgZWxzZSBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAg
ICAgICAgICAgIHRyeVJlYWRVbmljb2RlQ2hhcihhZGRyZXNzLCByZXN1bHRSZWcpOwogI2VuZGlm
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNlVuYWxpZ25lZChhZGRyZXNzLCByZXN1
bHRSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKGFkZHJlc3MsIHJlc3Vs
dFJlZyk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wSWZDaGFyTm90RXF1YWxzKFVDaGFyMzIgY2gs
IENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBSZWdpc3RlcklEIGNo
YXJhY3RlcikKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wSWZDaGFyTm90RXF1YWxzKFVD
aGFyMzIgY2gsIENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICByZWFkQ2hh
cmFjdGVyKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXIpOwogCkBAIC03NTMsNDMg
KzY2MSw0MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgIC8vIHVwcGVyICYgbG93ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMgYXJlIGNvbnZlcnRlZCB0
byBhIGNoYXJhY3RlciBjbGFzcy4KICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4uaWdub3JlQ2Fz
ZSgpIHx8IGlzQVNDSUlBbHBoYShjaCkgfHwgaXNDYW5vbmljYWxseVVuaXF1ZShjaCwgbV9jYW5v
bmljYWxNb2RlKSk7CiAgICAgICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIGlzQVND
SUlBbHBoYShjaCkpIHsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDB4MjApLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDB4MjApLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgY2ggfD0gMHgyMDsKICAgICAgICAg
fQogCi0gICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihj
aCkpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaCkpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHN0b3JlVG9GcmFtZShSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgZnJhbWVMb2Nh
dGlvbikKKyAgICB2b2lkIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBy
ZWcsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICBwb2tlKHJlZywgZnJh
bWVMb2NhdGlvbik7CisgICAgICAgIG1faml0LnBva2UocmVnLCBmcmFtZUxvY2F0aW9uKTsKICAg
ICB9CiAKLSAgICB2b2lkIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIgaW1tLCB1bnNpZ25lZCBm
cmFtZUxvY2F0aW9uKQorICAgIHZvaWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgaW1tLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAgcG9r
ZShpbW0sIGZyYW1lTG9jYXRpb24pOworICAgICAgICBtX2ppdC5wb2tlKGltbSwgZnJhbWVMb2Nh
dGlvbik7CiAgICAgfQogCiAjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoWDg2XzY0KQotICAgIHZvaWQg
c3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW1QdHIgaW1tLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQor
ICAgIHZvaWQgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyIGltbSwg
dW5zaWduZWQgZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHBva2UoaW1tLCBmcmFtZUxv
Y2F0aW9uKTsKKyAgICAgICAgbV9qaXQucG9rZShpbW0sIGZyYW1lTG9jYXRpb24pOwogICAgIH0K
ICNlbmRpZgogCi0gICAgRGF0YUxhYmVsUHRyIHN0b3JlVG9GcmFtZVdpdGhQYXRjaCh1bnNpZ25l
ZCBmcmFtZUxvY2F0aW9uKQorICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgc3RvcmVU
b0ZyYW1lV2l0aFBhdGNoKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAg
ICAgICAgcmV0dXJuIG1faml0LnN0b3JlUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7
CiAgICAgfQogCi0gICAgdm9pZCBsb2FkRnJvbUZyYW1lKHVuc2lnbmVkIGZyYW1lTG9jYXRpb24s
IFJlZ2lzdGVySUQgcmVnKQorICAgIHZvaWQgbG9hZEZyb21GcmFtZSh1bnNpZ25lZCBmcmFtZUxv
Y2F0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpCiAgICAgewotICAgICAgICBw
ZWVrKHJlZywgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0LnBlZWsocmVnLCBmcmFtZUxv
Y2F0aW9uKTsKICAgICB9CiAKICAgICB2b2lkIGxvYWRGcm9tRnJhbWVBbmRKdW1wKHVuc2lnbmVk
IGZyYW1lTG9jYXRpb24pCiAgICAgewotICAgICAgICBmYXJKdW1wKEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSwgWWFyckJhY2t0cmFj
a1B0clRhZyk7CisgICAgICAgIG1faml0LmZhckp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6
ZW9mKHZvaWQqKSksIFlhcnJCYWNrdHJhY2tQdHJUYWcpOwogICAgIH0KIAogICAgIHVuc2lnbmVk
IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXModW5zaWduZWQgY2FsbEZyYW1lU2l6ZSkKQEAgLTgw
NywxMyArNzE1LDIxIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxs
RnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOwogICAg
ICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpCi0gICAgICAgICAgICBhZGRQdHIoSW1tMzIo
Y2FsbEZyYW1lU2l6ZUluQnl0ZXMpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVz
KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICB9CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFpbFJldHVybigpCiAgICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoKHZvaWQqKVdURjo6bm90Rm91bmQpLCByZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdpc3RlcjIpOworICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilXVEY6Om5vdEZvdW5kKSwgbV9yZWdz
LnJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKKworI2lmIEVOQUJMRShZQVJS
X0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJ
VENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KSB7CisgICAgICAgICAgICBtX2lubGluZWRGYWlsZWRN
YXRjaC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorI2VuZGlmCisKICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKICAgICB9CiAKQEAgLTgyMiw0
OCArNzM4LDQyIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgaWYgKG1fYWJvcnRFeGVjdXRpb24uZW1wdHkoKSAmJiBtX2hpdE1hdGNoTGltaXQuZW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBKdW1wTGlzdCBmaW5pc2hFeGl0
aW5nOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmluaXNoRXhpdGluZzsKICAg
ICAgICAgaWYgKCFtX2Fib3J0RXhlY3V0aW9uLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fYWJv
cnRFeGVjdXRpb24ubGluayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigo
dm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpLCByZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAg
ICAgICBmaW5pc2hFeGl0aW5nLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbV9hYm9ydEV4
ZWN1dGlvbi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSksIG1fcmVn
cy5yZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBmaW5pc2hFeGl0aW5nLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX2hpdE1hdGNoTGltaXQuZW1w
dHkoKSkgewotICAgICAgICAgICAgbV9oaXRNYXRjaExpbWl0LmxpbmsodGhpcyk7Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oLTEpKSwg
cmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9oaXRNYXRjaExpbWl0LmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
KHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oLTEpKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGZpbmlzaEV4aXRpbmcubGluayh0aGlzKTsKKyAgICAgICAg
ZmluaXNoRXhpdGluZy5saW5rKCZtX2ppdCk7CiAgICAgICAgIHJlbW92ZUNhbGxGcmFtZSgpOwot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmV0dXJuUmVnaXN0ZXIyKTsKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBtX3JlZ3MucmV0dXJu
UmVnaXN0ZXIyKTsKICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKICAgICB9CiAKICAgICAvLyBV
c2VkIHRvIHJlY29yZCBzdWJwYXR0ZXJucywgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIG1fY29t
cGlsZU1vZGUgaXMgSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucy4KLSAgICB2b2lk
IHNldFN1YnBhdHRlcm5TdGFydChSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVybikK
KyAgICB2b2lkIHNldFN1YnBhdHRlcm5TdGFydChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBy
ZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCiAgICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVy
bik7CiAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQobV9jb21waWxl
TW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSwgYnV0IHRoZW4gdGhp
cyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IE5PUkVUVVJOLiA6LSgKLSAgICAgICAgc3RvcmUz
MihyZWcsIEFkZHJlc3Mob3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7
CisgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3Jl
Z3Mub3V0cHV0LCAoc3VicGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgfQotICAg
IHZvaWQgc2V0U3VicGF0dGVybkVuZChSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVy
bikKKyAgICB2b2lkIHNldFN1YnBhdHRlcm5FbmQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
cmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJuKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN1YnBhdHRl
cm4pOwogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKG1fY29tcGls
ZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyksIGJ1dCB0aGVuIHRo
aXMgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBOT1JFVFVSTi4gOi0oCi0gICAgICAgIHN0b3Jl
MzIocmVnLCBBZGRyZXNzKG91dHB1dCwgKChzdWJwYXR0ZXJuIDw8IDEpICsgMSkgKiBzaXplb2Yo
aW50KSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9yZWdzLm91dHB1dCwgKChzdWJwYXR0ZXJuIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkp
OwogICAgIH0KICAgICB2b2lkIGNsZWFyU3VicGF0dGVyblN0YXJ0KHVuc2lnbmVkIHN1YnBhdHRl
cm4pCiAgICAgewogICAgICAgICBBU1NFUlQoc3VicGF0dGVybik7CiAgICAgICAgIC8vIEZJWE1F
OiBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9k
ZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSwgYnV0IHRoZW4gdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRp
b25hbGx5IE5PUkVUVVJOLiA6LSgKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoLTEpLCBB
ZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YoaW50KSkpOwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXJNYXRjaGVzKHVuc2lnbmVkIHN1YnBhdHRlcm4sIHVuc2lnbmVkIGxh
c3RTdWJwYXR0ZXJuKQotICAgIHsKLSAgICAgICAgZm9yICg7IHN1YnBhdHRlcm4gPD0gbGFzdFN1
YnBhdHRlcm47IHN1YnBhdHRlcm4rKykKLSAgICAgICAgICAgIGNsZWFyU3VicGF0dGVyblN0YXJ0
KHN1YnBhdHRlcm4pOworICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoLTEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3Vi
cGF0dGVybiA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgfQogCiAgICAgLy8gV2UgdXNlIG9u
ZSBvZiB0aHJlZSBkaWZmZXJlbnQgc3RyYXRlZ2llcyB0byB0cmFjayB0aGUgc3RhcnQgb2YgdGhl
IGN1cnJlbnQgbWF0Y2gsCkBAIC04NzEsMjUgKzc4MSwyNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgLy8gMSkgSWYgdGhlIHBhdHRlcm4gaGFzIGEgZml4
ZWQgc2l6ZSwgZG8gbm90aGluZyEgLSB3ZSBjYWxjdWxhdGUgdGhlIHZhbHVlIGxhemlseQogICAg
IC8vICAgIGF0IHRoZSBlbmQgb2YgbWF0Y2hpbmcuIFRoaXMgaXMgaXJyZXNwZWN0aXZlIG9mIG1f
Y29tcGlsZU1vZGUsIGFuZCBpbiB0aGlzIGNhc2UKICAgICAvLyAgICB0aGVzZSBtZXRob2RzIHNo
b3VsZCBuZXZlciBiZSBjYWxsZWQuCi0gICAgLy8gMikgSWYgd2UncmUgY29tcGlsaW5nIEpJVENv
bXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMsICdvdXRwdXQnIGNvbnRhaW5zIGEgcG9pbnRl
ciB0byBhbiBvdXRwdXQKKyAgICAvLyAyKSBJZiB3ZSdyZSBjb21waWxpbmcgSklUQ29tcGlsZU1v
ZGU6OkluY2x1ZGVTdWJwYXR0ZXJucywgJ21fcmVncy5vdXRwdXQnIGNvbnRhaW5zIGEgcG9pbnRl
ciB0byBhbiBvdXRwdXQKICAgICAvLyAgICB2ZWN0b3IsIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBp
biB0aGUgb3V0cHV0IHZlY3Rvci4KLSAgICAvLyAzKSBJZiB3ZSdyZSBjb21waWxpbmcgTWF0Y2hP
bmx5LCAnb3V0cHV0JyBpcyB1bnVzZWQsIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBkaXJlY3RseQor
ICAgIC8vIDMpIElmIHdlJ3JlIGNvbXBpbGluZyBNYXRjaE9ubHkgb3IgSW5saW5lZFRlc3QsICdt
X3JlZ3Mub3V0cHV0JyBpcyB1bnVzZWQsIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBkaXJlY3RseQog
ICAgIC8vICAgIGluIHRoaXMgcmVnaXN0ZXIuCi0gICAgdm9pZCBzZXRNYXRjaFN0YXJ0KFJlZ2lz
dGVySUQgcmVnKQorICAgIHZvaWQgc2V0TWF0Y2hTdGFydChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1faGFz
Rml4ZWRTaXplKTsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6
OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAgIHN0b3JlMzIocmVnLCBvdXRwdXQpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtb3ZlKHJlZywgb3V0cHV0KTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUocmVnLCBtX3JlZ3Mub3V0cHV0KTsKICAgICB9Ci0gICAgdm9pZCBnZXRNYXRjaFN0YXJ0KFJl
Z2lzdGVySUQgcmVnKQorICAgIHZvaWQgZ2V0TWF0Y2hTdGFydChNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2JvZHktPm1f
aGFzRml4ZWRTaXplKTsKICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1v
ZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAgIGxvYWQzMihvdXRwdXQsIHJlZyk7
CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIobV9yZWdzLm91dHB1dCwgcmVnKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbW92ZShvdXRwdXQsIHJlZyk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKG1fcmVncy5vdXRwdXQsIHJlZyk7CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBZYXJyT3BD
b2RlIDogdWludDhfdCB7CkBAIC05NjUsMTIgKzg3NSwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIC8vIHVzZWQgZm9yIGp1bXBzIG91dCB0byBi
YWNrdHJhY2tpbmcgY29kZSwgYW5kIGEgc2luZ2xlIHJlZW50cnkgYmFjawogICAgICAgICAvLyBp
bnRvIHRoZSBjb2RlIGZvciBhIG5vZGUgKGxpa2VseSB3aGVyZSBhIGJhY2t0cmFjayB3aWxsIHRy
aWdnZXIKICAgICAgICAgLy8gcmVtYXRjaGluZykuCi0gICAgICAgIExhYmVsIG1fcmVlbnRyeTsK
LSAgICAgICAgSnVtcExpc3QgbV9qdW1wczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fcmVlbnRyeTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fanVtcHM7CiAK
ICAgICAgICAgLy8gVXNlZCBmb3IgYmFja3RyYWNraW5nIHdoZW4gdGhlIHByaW9yIGFsdGVybmF0
aXZlIGRpZCBub3QgY29uc3VtZSBhbnkKICAgICAgICAgLy8gY2hhcmFjdGVycyBidXQgbWF0Y2hl
ZC4KLSAgICAgICAgSnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbV96ZXJvTGVuZ3RoTWF0Y2g7CiAKICAgICAgICAgLy8gVGhpcyBmbGFnIGlzIHVz
ZWQgdG8gbnVsbCBvdXQgdGhlIHNlY29uZCBwYXR0ZXJuIGNoYXJhY3Rlciwgd2hlbgogICAgICAg
ICAvLyB0d28gYXJlIGZ1c2VkIHRvIG1hdGNoIGEgcGFpciB0b2dldGhlci4KQEAgLTk4NCw3ICs4
OTQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
IC8vIFVzZWQgYnkgWWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJuYXRpdmVOZXh0L0VuZCB0byBob2xk
IHRoZSBwb2ludGVyIHRvIHRoZQogICAgICAgICAvLyB2YWx1ZSB0aGF0IHdpbGwgYmUgcHVzaGVk
IGludG8gdGhlIHBhdHRlcm4ncyBmcmFtZSB0byByZXR1cm4gdG8sCiAgICAgICAgIC8vIHVwb24g
YmFja3RyYWNraW5nIGJhY2sgaW50byB0aGUgZGlzanVuY3Rpb24uCi0gICAgICAgIERhdGFMYWJl
bFB0ciBtX3JldHVybkFkZHJlc3M7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHIgbV9yZXR1cm5BZGRyZXNzOwogCiAgICAgICAgIEJveWVyTW9vcmVJbmZvKiBtX2JtSW5mbyB7
IG51bGxwdHIgfTsKICAgICB9OwpAQCAtMTAwNiw3ICs5MTYsMjEgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIC8vICAtIEEgZmxhZyBpbmRpY2F0aW5nIHRo
YXQgdGhlIGN1cnJlbnQgc2VxdWVuY2Ugb2YgZ2VuZXJhdGVkIGNvZGUgdXAgdG8KICAgICAvLyAg
ICB0aGlzIHBvaW50IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KICAgICBjbGFzcyBCYWNrdHJhY2tp
bmdTdGF0ZSB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RydWN0IFJldHVybkFkZHJlc3NSZWNv
cmQgeworICAgICAgICAgICAgUmV0dXJuQWRkcmVzc1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsUHRyIGRhdGFMYWJlbCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJhY2t0cmFja0xvY2F0
aW9uKQorICAgICAgICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQorICAgICAgICAg
ICAgICAgICwgbV9iYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbFB0ciBtX2RhdGFMYWJlbDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X2JhY2t0cmFja0xvY2F0aW9uOworICAgICAgICB9OworCiAgICAgcHVibGljOgorICAgICAgICB0
eXBlZGVmIFZlY3RvcjxSZXR1cm5BZGRyZXNzUmVjb3JkLCA0PiBCYWNrdHJhY2tSZWNvcmRzOwor
CiAgICAgICAgIEJhY2t0cmFja2luZ1N0YXRlKCkKICAgICAgICAgICAgIDogbV9wZW5kaW5nRmFs
bHRocm91Z2goZmFsc2UpCiAgICAgICAgIHsKQEAgLTEwMTQsMTUgKzkzOCwxNSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgLy8gQWRkIGEganVt
cCBvciBqdW1wcywgYSByZXR1cm4gYWRkcmVzcywgb3Igc2V0IHRoZSBmbGFnIGluZGljYXRpbmcK
ICAgICAgICAgLy8gdGhhdCB0aGUgY3VycmVudCAnZmFsbHRocm91Z2gnIGNvbnRyb2wgZmxvdyBy
ZXF1aXJlcyBiYWNrdHJhY2tpbmcuCi0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXAmIGp1
bXApCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1w
KQogICAgICAgICB7CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXApOwog
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBqdW1wTGlzdCkKKyAgICAg
ICAgdm9pZCBhcHBlbmQoTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wTGlzdCkKICAgICAg
ICAgewogICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmFwcGVuZChqdW1wTGlzdCk7CiAgICAg
ICAgIH0KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YUxhYmVsUHRyJiByZXR1cm5BZGRy
ZXNzKQorICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyJiByZXR1cm5BZGRyZXNzKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1
cm5zLmFwcGVuZChyZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTAzOSw3ICs5NjMsNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIHZvaWQg
bGluayhNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJl
KGFzc2VtYmxlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUo
YXNzZW1ibGVyKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
ZW5kaW5nUmV0dXJucy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tSZWNvcmRzLmFwcGVuZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0s
IGhlcmUpKTsKICAgICAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0x
MDQ4LDcgKzk3Miw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigpOwogICAgICAgICAgICAgbV9wZW5k
aW5nRmFsbHRocm91Z2ggPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtUbyhM
YWJlbCBsYWJlbCwgTWFjcm9Bc3NlbWJsZXIqIGFzc2VtYmxlcikKKyAgICAgICAgdm9pZCBsaW5r
VG8oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVy
KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJu
cy5zaXplKCk7ICsraSkKQEAgLTEwNjEsMTAgKzk4NSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuY2xlYXIo
KTsKICAgICAgICAgICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgIH0K
LSAgICAgICAgdm9pZCB0YWtlQmFja3RyYWNrc1RvSnVtcExpc3QoSnVtcExpc3QmIGp1bXBMaXN0
LCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQorICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tz
VG9KdW1wTGlzdChNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2Vt
YmxlciogYXNzZW1ibGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0
dXJucy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2VtYmxlcik7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1ibGVyKTsKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5z
aXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVu
ZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUpKTsKICAgICAg
ICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDgyLDYgKzEwMDYsMTcg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAg
cmV0dXJuIG1fbGF0ZXJGYWlsdXJlcy5lbXB0eSgpICYmIG1fcGVuZGluZ1JldHVybnMuaXNFbXB0
eSgpICYmICFtX3BlbmRpbmdGYWxsdGhyb3VnaDsKICAgICAgICAgfQogCisgICAgICAgIEJhY2t0
cmFja1JlY29yZHMmIGJhY2t0cmFja1JlY29yZHMoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9iYWNrdHJhY2tSZWNvcmRzOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZv
aWQgbGlua0JhY2t0cmFja1JlY29yZHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgY29uc3QgQmFj
a3RyYWNrUmVjb3JkcyYgYmFja3RyYWNrUmVjb3JkcykKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhY2t0cmFja1JlY29yZHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5wYXRjaChiYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0
YUxhYmVsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8WWFyckJhY2t0cmFja1B0clRhZz4oYmFja3Ry
YWNrUmVjb3Jkc1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CisgICAgICAgIH0KKwogICAgICAg
ICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGluayBhbGwgcmV0
dXJuIGFkZHJlc3Nlcy4KICAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKQogICAgICAgICB7CkBAIC0xMDkxLDIwICsxMDI2LDkgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICB9CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBzdHJ1Y3QgUmV0dXJuQWRkcmVzc1JlY29yZCB7Ci0gICAgICAgICAgICBSZXR1cm5B
ZGRyZXNzUmVjb3JkKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExhYmVsIGJhY2t0cmFja0xvY2F0
aW9uKQotICAgICAgICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQotICAgICAgICAg
ICAgICAgICwgbV9iYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxh
YmVsOwotICAgICAgICAgICAgTGFiZWwgbV9iYWNrdHJhY2tMb2NhdGlvbjsKLSAgICAgICAgfTsK
LQotICAgICAgICBKdW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7CiAgICAgICAgIGJvb2wgbV9wZW5kaW5nRmFs
bHRocm91Z2g7Ci0gICAgICAgIFZlY3RvcjxEYXRhTGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVy
bnM7CisgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyLCA0PiBtX3Bl
bmRpbmdSZXR1cm5zOwogICAgICAgICBWZWN0b3I8UmV0dXJuQWRkcmVzc1JlY29yZCwgND4gbV9i
YWNrdHJhY2tSZWNvcmRzOwogICAgIH07CiAKQEAgLTExMjcsMjMgKzEwNTEsMjMgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSog
dGVybSA9IG9wLm1fdGVybTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7
Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdz
LnJlZ1QwOwogCi0gICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICAgICAgaWYgKCF0ZXJt
LT5pbnB1dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNo
MzIoRXF1YWwsIGluZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQpKSk7CisgICAgICAgICAgICAg
ICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsK
IAogICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1
dFBvc2l0aW9uICsgMSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xh
c3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3Mo
KSk7Ci0gICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAg
b3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbWF0Y2hEZXN0
LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQg
dGhlc2UgYWx0ZXJuYXRpdmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1
dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbkJPTChzaXplX3Qg
b3BJbmRleCkKQEAgLTExNTcsMjMgKzEwODEsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsK
IAogICAgICAgICBpZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAgICAgICAgICBjb25z
dCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogCi0gICAgICAg
ICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgbWF0Y2hEZXN0OwogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0g
bV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYXRFbmRP
ZklucHV0KCkpOwogCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAt
IHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJh
Y3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3Rl
ckNsYXNzKCkpOwotICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG1h
dGNoRGVzdC5saW5rKHRoaXMpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsoJm1faml0KTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09
IG1fY2hlY2tlZE9mZnNldCkKICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChub3RB
dEVuZE9mSW5wdXQoKSk7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29u
IG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAg
b3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICB2
b2lkIGJhY2t0cmFja0Fzc2VydGlvbkVPTChzaXplX3Qgb3BJbmRleCkKQEAgLTExODIsMTIgKzEx
MDYsMTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIH0K
IAogICAgIC8vIEFsc28gZmFsbHMgdGhvdWdoIG9uIG5leHRJc05vdFdvcmRDaGFyLgotICAgIHZv
aWQgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihzaXplX3Qgb3BJbmRleCwgSnVtcExpc3QmIG5leHRJ
c1dvcmRDaGFyLCBKdW1wTGlzdCYgbmV4dElzTm90V29yZENoYXIpCisgICAgdm9pZCBtYXRjaEFz
c2VydGlvbldvcmRjaGFyKHNpemVfdCBvcEluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
IG5leHRJc1dvcmRDaGFyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJc05vdFdvcmRD
aGFyKQogICAgIHsKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAg
ICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3Rl
cklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAgaWYgKHRlcm0tPmlu
cHV0UG9zaXRpb24gPT0gbV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgbmV4dElzTm90V29y
ZENoYXIuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKQEAgLTEyMDksMTIgKzExMzMsMTIgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9w
ID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJt
OwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdU
MDsKIAotICAgICAgICBKdW1wIGF0QmVnaW47Ci0gICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXRCZWdpbjsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IG1hdGNoRGVzdDsKICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0
aW9uKQotICAgICAgICAgICAgYXRCZWdpbiA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIo
bV9jaGVja2VkT2Zmc2V0KSk7CisgICAgICAgICAgICBhdEJlZ2luID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0z
MihtX2NoZWNrZWRPZmZzZXQpKTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZz
ZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uICsgMSwgY2hhcmFjdGVyKTsKIAogICAgICAgICBDaGFy
YWN0ZXJDbGFzcyogd29yZGNoYXJDaGFyYWN0ZXJDbGFzczsKQEAgLTEyMjYsMjcgKzExNTAsMjcg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIG1h
dGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHdvcmRjaGFyQ2hhcmFjdGVy
Q2xhc3MpOwogICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICBh
dEJlZ2luLmxpbmsodGhpcyk7CisgICAgICAgICAgICBhdEJlZ2luLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICAvLyBXZSBmYWxsIHRocm91Z2ggdG8gaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIg
d2FzIG5vdCBhIHdvcmRjaGFyLgotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3Jk
Q2hhcjsKLSAgICAgICAgSnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFy
OwogICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0
aW9uV29yZGNoYXIob3BJbmRleCwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIsIG5vbldvcmRD
aGFyVGhlbldvcmRDaGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEFzc2Vy
dGlvbldvcmRjaGFyKG9wSW5kZXgsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBub25Xb3JkQ2hh
clRoZW5Ob25Xb3JkQ2hhcik7Ci0gICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hh
ci5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFy
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyKTsKIAogICAgICAgICAvLyBXZSBqdW1wIGhl
cmUgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBhIHdvcmRjaGFyLgotICAgICAgICBtYXRjaERl
c3QubGluayh0aGlzKTsKLSAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENoYXI7Ci0g
ICAgICAgIEp1bXBMaXN0IHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyOworICAgICAgICBtYXRjaERl
c3QubGluaygmbV9qaXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgd29yZENo
YXJUaGVuV29yZENoYXI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCB3b3JkQ2hh
clRoZW5Ob25Xb3JkQ2hhcjsKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKSB7CiAgICAgICAg
ICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbk5vbldvcmRD
aGFyLCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7Ci0gICAgICAgICAgICB3b3JkQ2hhclRoZW5Xb3Jk
Q2hhci5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHdvcmRDaGFyVGhlbldvcmRDaGFyLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWF0Y2hB
c3NlcnRpb25Xb3JkY2hhcihvcEluZGV4LCB3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgd29yZENoYXJU
aGVuTm9uV29yZENoYXIpOwogICAgICAgICAgICAgLy8gVGhpcyBjYW4gZmFsbC10aG91Z2ghCkBA
IC0xMjU0LDggKzExNzgsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAKICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQod29yZENoYXJUaGVuV29yZENoYXIpOwog
Ci0gICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmxpbmsodGhpcyk7Ci0gICAgICAgIHdv
cmRDaGFyVGhlbk5vbldvcmRDaGFyLmxpbmsodGhpcyk7CisgICAgICAgIG5vbldvcmRDaGFyVGhl
bldvcmRDaGFyLmxpbmsoJm1faml0KTsKKyAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIu
bGluaygmbV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbldvcmRCb3Vu
ZGFyeShzaXplX3Qgb3BJbmRleCkKICAgICB7CkBAIC0xMjYzLDQwICsxMTg3LDQwIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICB9CiAKICNpZiBFTkFCTEUo
WUFSUl9KSVRfQkFDS1JFRkVSRU5DRVMpCi0gICAgdm9pZCBtYXRjaEJhY2tyZWZlcmVuY2Uoc2l6
ZV90IG9wSW5kZXgsIEp1bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBSZWdpc3RlcklEIGNo
YXJhY3RlciwgUmVnaXN0ZXJJRCBwYXR0ZXJuSW5kZXgsIFJlZ2lzdGVySUQgcGF0dGVybkNoYXJh
Y3RlcikKKyAgICB2b2lkIG1hdGNoQmFja3JlZmVyZW5jZShzaXplX3Qgb3BJbmRleCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5J
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKICAgICB7
CiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRl
cm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRl
cm0tPmJhY2tSZWZlcmVuY2VTdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlz
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKIAogICAgICAg
ICByZWFkQ2hhcmFjdGVyKDAsIHBhdHRlcm5DaGFyYWN0ZXIsIHBhdHRlcm5JbmRleCk7CiAgICAg
ICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwg
Y2hhcmFjdGVyKTsKICAgICAKICAgICAgICAgaWYgKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpKQot
ICAgICAgICAgICAgY2hhcmFjdGVyTWF0Y2hGYWlscy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IGNoYXJhY3RlciwgcGF0dGVybkNoYXJhY3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyTWF0
Y2hGYWlscy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
aGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBKdW1wIGNoYXJhY3RlcnNNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRl
cm5DaGFyYWN0ZXIpOwotICAgICAgICAgICAgRXh0ZW5kZWRBZGRyZXNzIGNoYXJhY3RlclRhYmxl
RW50cnkoY2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFi
bGVMQ2hhcikpOwotICAgICAgICAgICAgbG9hZDE2KGNoYXJhY3RlclRhYmxlRW50cnksIGNoYXJh
Y3Rlcik7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0
dGVybkNoYXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxl
TENoYXIpKTsKLSAgICAgICAgICAgIGxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNo
YXJhY3Rlcik7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBj
aGFyYWN0ZXJzTWF0Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGNoYXJhY3RlcnNNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgY2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFeHRlbmRlZEFkZHJlc3MgY2hhcmFjdGVyVGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJsZUxDaGFyKSk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkMTYoY2hhcmFjdGVyVGFibGVFbnRyeSwgY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0
dGVybkNoYXJhY3RlciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxl
TENoYXIpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0
dGVybkNoYXJhY3Rlcik7CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgcGF0dGVy
bkNoYXJhY3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyc01hdGNoLmxpbmsoJm1faml0KTsK
ICAgICAgICAgfQogCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7Cisg
ICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhdHRl
cm5JbmRleCk7CiAKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAg
ICAgICAgIEp1bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3Vw
cGxlbWVudGFyeVBsYW5lc0Jhc2UpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRl
eCk7Ci0gICAgICAgICAgICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGlzQk1QQ2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICBpc0JNUENoYXIubGlu
aygmbV9qaXQpOwogICAgICAgICB9CiAKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRl
cm5JbmRleCwgQWRkcmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXpl
b2YoaW50KSkpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5vdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50
KSkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVCYWNr
UmVmZXJlbmNlKHNpemVfdCBvcEluZGV4KQpAQCAtMTMxMiwxMTYgKzEyMzYsMTE2IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgdW5zaWduZWQgc3Vi
cGF0dGVybklkID0gdGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKICAgICAgICAgdW5z
aWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIAot
ICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3Rlck9yVGVtcCA9IHJlZ1QwOwotICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIHBhdHRlcm5JbmRleCA9IHJlZ1QxOwotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIHBhdHRlcm5UZW1wID0gcmVnVDI7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGNoYXJhY3Rlck9yVGVtcCA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gbV9yZWdzLnJl
Z1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuVGVt
cCA9IG1fcmVncy5yZWdUMjsKIAotICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4
KCkpOworICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKICAg
ICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3Vu
dCB8fCB0ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IDEpCi0gICAgICAgICAgICBzdG9yZVRvRnJh
bWUoVHJ1c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgp
KTsKIAotICAgICAgICBKdW1wTGlzdCBtYXRjaGVzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgbWF0Y2hlczsKIAogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1
YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91
dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAg
ICAgIGxvYWRTdWJQYXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1
Y2Nlc3NmdWwgd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgaWYgKHRl
cm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0ZXJtLT5x
dWFudGl0eU1heENvdW50ICE9IDEpIHsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0
dGVyblRlbXApKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEp
LCBwYXR0ZXJuSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSnVtcCB6ZXJvTGVuZ3Ro
TWF0Y2ggPSBicmFuY2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsK
LSAgICAgICAgICAgICAgICBKdW1wIHRyeU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKLSAgICAgICAgICAgICAgICB6ZXJvTGVuZ3Ro
TWF0Y2gubGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZElt
bTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVy
ZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICAgICAgICAgIHRyeU5vblplcm9NYXRjaC5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICB6
ZXJvTGVuZ3RoTWF0Y2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFt
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgIHRyeU5vblplcm9NYXRjaC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBzd2l0Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNl
IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50OiB7Ci0gICAgICAgICAgICBMYWJlbCBvdXRlckxv
b3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgb3V0ZXJMb29wKCZt
X2ppdCk7CiAKICAgICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWluIHBhdHRl
cm4gZW5kIGluZGV4IGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5JbmRl
eCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkluZGV4LCBw
YXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChjaGVja05vdEVub3Vn
aElucHV0KHBhdHRlcm5UZW1wKSk7CiAKICAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5jZShv
cEluZGV4LCBvcC5tX2p1bXBzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVy
blRlbXApOwogCiAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSAxKSB7
CiAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFyYWN0
ZXJPclRlbXApOwotICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFj
dGVyT3JUZW1wKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBjaGFyYWN0ZXJPclRlbXApOwogICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShjaGFyYWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAg
ICAgIG1hdGNoZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1h
eENvdW50KSwgY2hhcmFjdGVyT3JUZW1wKSk7Ci0gICAgICAgICAgICAgICAgbG9hZFN1YlBhdHRl
cm4ob3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAg
ICAgICAgICAgICAgIGp1bXAob3V0ZXJMb29wKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hhcmFjdGVyT3JUZW1wKSk7CisgICAg
ICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0dGVybklkLCBw
YXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG91
dGVyTG9vcCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtYXRjaGVzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5OiB7Ci0gICAg
ICAgICAgICBKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKIAotICAgICAgICAgICAgTGFiZWwg
b3V0ZXJMb29wKHRoaXMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG91dGVy
TG9vcCgmbV9qaXQpOwogCiAgICAgICAgICAgICAvLyBQYXR0ZXJuVGVtcCBzaG91bGQgY29udGFp
biBwYXR0ZXJuIGVuZCBpbmRleCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICBzdWIzMihwYXR0
ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHBhdHRlcm5J
bmRleCwgcGF0dGVyblRlbXApOwogICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoY2hlY2tOb3RF
bm91Z2hJbnB1dChwYXR0ZXJuVGVtcCkpOwogCiAgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVu
Y2Uob3BJbmRleCwgaW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50
SW5kZXgoKSwgY2hhcmFjdGVyT3JUZW1wKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgY2hhcmFjdGVyT3JUZW1wKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAgICAgICAgICBz
dG9yZVRvRnJhbWUoY2hhcmFjdGVyT3JUZW1wLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICAgICAg
ICAgIGlmICh0ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCi0gICAg
ICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1
YW50aXR5TWF4Q291bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAgIGxvYWRTdWJQ
YXR0ZXJuKG91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsK
KyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50
KSwgY2hhcmFjdGVyT3JUZW1wKSk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mu
b3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAgICAg
ICAgICAgICAvLyBTdG9yZSBjdXJyZW50IGluZGV4IGluIGZyYW1lIGZvciByZXN0b3JpbmcgYWZ0
ZXIgYSBwYXJ0aWFsIG1hdGNoCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbklu
ZGV4KCkpOwotICAgICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBtX2ppdC5qdW1w
KG91dGVyTG9vcCk7CiAKLSAgICAgICAgICAgIGluY29tcGxldGVNYXRjaGVzLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAg
ICAgIGluY29tcGxldGVNYXRjaGVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRGcm9t
RnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVu
Y2U6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKIAotICAgICAgICAgICAgbWF0Y2hlcy5s
aW5rKHRoaXMpOwotICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAg
ICAgIG1hdGNoZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9q
aXQubGFiZWwoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBpbmNv
bXBsZXRlTWF0Y2hlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBpbmNv
bXBsZXRlTWF0Y2hlczsKIAotICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG9w
Lm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5s
YWJlbCgpOwogCi0gICAgICAgICAgICBsb2FkU3ViUGF0dGVybihvdXRwdXQsIHN1YnBhdHRlcm5J
ZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVy
bihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
OwogCiAgICAgICAgICAgICAvLyBBbiBlbXB0eSBtYXRjaCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQg
Y29uc3VtaW5nIGNoYXJhY3RlcnMKLSAgICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0g
YnJhbmNoMzIoRXF1YWwsIFRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7Ci0gICAgICAg
ICAgICBKdW1wIHRyeU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKLSAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMp
OwotICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNG
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5k
ZXgoKSk7Ci0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAg
dHJ5Tm9uWmVyb01hdGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCB6ZXJvTGVuZ3RoTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1w
KTsKKyAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50
SW5kZXgoKSk7CisgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
ICAgICAgICAgdHJ5Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgaGF2ZSBpbnB1dCByZW1haW5pbmcgdG8gbWF0Y2gKLSAgICAgICAgICAgIHN1
YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIo
cGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChj
aGVja05vdEVub3VnaElucHV0KHBhdHRlcm5UZW1wKSk7CiAKLSAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tS
ZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdz
LmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVy
ZW5jZTo6YmVnaW5JbmRleCgpKTsKIAogICAgICAgICAgICAgbWF0Y2hCYWNrcmVmZXJlbmNlKG9w
SW5kZXgsIGluY29tcGxldGVNYXRjaGVzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwg
cGF0dGVyblRlbXApOwogCi0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaW5j
b21wbGV0ZU1hdGNoZXMubGluayh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2lu
SW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9q
aXQpOworICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgp
OwogCi0gICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaGVz
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE0MzMsNDkgKzEzNTcsNDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBZYXJySgogCiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZl
cmVuY2VTdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRo
aXMpOwotICAgICAgICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluaygmbV9qaXQpOworICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0KTsK
IAotICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVzOwogCiAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRp
dHlUeXBlKSB7CiAgICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6Ci0gICAg
ICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxv
YWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tS
ZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkdyZWVkeTogewotICAgICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBwYXR0ZXJuU3RhcnRJbmRleCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBwYXR0ZXJuRW5kSW5kZXhPckxlbiA9IHJlZ1QyOworICAgICAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSBtX3JlZ3MucmVnVDA7
CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuU3Rh
cnRJbmRleCA9IG1fcmVncy5yZWdUMTsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIHBhdHRlcm5FbmRJbmRleE9yTGVuID0gbV9yZWdzLnJlZ1QyOwogCiAgICAg
ICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCksIG1hdGNoQW1vdW50KTsKLSAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgbWF0Y2hBbW91bnQp
KTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIG1hdGNoQW1vdW50KSk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0
ZXJuKG91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZElu
ZGV4T3JMZW4pOwotICAgICAgICAgICAgc3ViMzIocGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5F
bmRJbmRleE9yTGVuKTsKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5FbmRJbmRleE9yTGVuLCBp
bmRleCk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0
ZXJuSWQsIHBhdHRlcm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7CisgICAgICAg
ICAgICBtX2ppdC5zdWIzMihwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4p
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkVuZEluZGV4T3JMZW4sIG1fcmVncy5p
bmRleCk7CiAKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQp
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbWF0Y2hBbW91bnQpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1hdGNoQW1vdW50LCBw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0
Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAg
ICAgICAgICBjb25zdCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7CisgICAgICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IG1fcmVncy5y
ZWdUMDsKIAogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAg
ICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOwog
ICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0
ZSkKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgbWF0Y2hBbW91bnQpKTsKLSAgICAgICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgICAg
IGZhaWx1cmVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCksIG1hdGNo
QW1vdW50KSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtYXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hB
bW91bnQsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJl
bmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkp
OworICAgICAgICAgICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOwor
ICAgICAgICBmYWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUuZmFsbHRocm91Z2goKTsKICAgICB9CiAjZW5kaWYKQEAgLTE0OTcsMTEgKzE0MjEsMTEgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIGlmICgh
aXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsKICAgICAg
ICAgICAgIC8vIEhhdmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0
cmluZyAtIHNob3J0IGNpcmN1aXQKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSByZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkK
ICAgICAgICAgdW5zaWduZWQgbWF4Q2hhcmFjdGVyc0F0T25jZSA9IG1fY2hhclNpemUgPT0gQ2hh
clNpemU6OkNoYXI4ID8gOCA6IDQ7CiAjZWxzZQpAQCAtMTU1Miw3ICsxNDc2LDcgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBpZiAoIWlz
TGF0aW4xKGN1cnJlbnRDaGFyYWN0ZXIpICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFy
OCkpIHsKICAgICAgICAgICAgICAgICAvLyBIYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVy
IGFuZCBhbiA4IGJpdCBzdHJpbmcgLSBzaG9ydCBjaXJjdWl0Ci0gICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IApAQCAtMTU3NSwyOSArMTQ5OSwyOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBhdXRvIGNoZWNrMiA9IFsm
XSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1aW50MTZfdCBjaGFyYWN0ZXJzLCB1aW50MTZf
dCBtYXNrKSB7Ci0gICAgICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zmc2V0
SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQxNlVuYWxpZ25lZChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNz
KG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFz
aykKLSAgICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFj
dGVyLCBJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAg
ICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwg
bWFzaykpKTsKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gY2hlY2s0ID0gWyZd
IChDaGVja2VkPHVuc2lnbmVkPiBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IG1hc2spIHsKICAgICAgICAgICAgICAgICBpZiAobWFzaykgewotICAgICAgICAgICAgICAgICAg
ICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJl
c3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFk
ZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNo
YXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayks
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQoYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBuZWdhdGl2ZU9mZnNl
dEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgVHJ1c3RlZEltbTMyKGNoYXJhY3Rl
cnMpKSk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbmVnYXRpdmVP
ZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoY2hhcmFjdGVycykpKTsKICAgICAgICAgICAgIH07CiAKICNpZiBDUFUoWDg2
XzY0KSB8fCBDUFUoQVJNNjQpCiAgICAgICAgICAgICBhdXRvIGNoZWNrOCA9IFsmXSAoQ2hlY2tl
ZDx1bnNpZ25lZD4gb2Zmc2V0LCB1aW50NjRfdCBjaGFyYWN0ZXJzLCB1aW50NjRfdCBtYXNrKSB7
Ci0gICAgICAgICAgICAgICAgbG9hZDY0KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zm
c2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2
NChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFj
dGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgb3I2
NChUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5hcHBlbmQoYnJhbmNoNjQoTm90RXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTY0KGNo
YXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoY2hhcmFjdGVycyB8
IG1hc2spKSk7CiAgICAgICAgICAgICB9OwogI2VuZGlmCiAKQEAgLTE2NDksMjEgKzE1NzMsMjEg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAg
ICBhdXRvIGNoZWNrMiA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1bnNpZ25lZCBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBtYXNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHsK
LSAgICAgICAgICAgICAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2
ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdh
dGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAgICAgICAgICAgICAgICBv
cjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaGFyYWN0ZXJz
IHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNo
YXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RF
cXVhbCwgbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIFRy
dXN0ZWRJbW0zMihjaGFyYWN0ZXJzKSkpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CiAgICAgICAgICAg
ICB9OwogCiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQogICAgICAgICAgICAgYXV0byBj
aGVjazQgPSBbJl0gKENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdWludDY0X3QgY2hhcmFjdGVy
cywgdWludDY0X3QgbWFzaykgewotICAgICAgICAgICAgICAgIGxvYWQ2NChuZWdhdGl2ZU9mZnNl
dEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkNjQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQs
IGNoYXJhY3RlciksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spCi0gICAg
ICAgICAgICAgICAgICAgIG9yNjQoVHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDY0KE5vdEVxdWFsLCBjaGFyYWN0
ZXIsIFRydXN0ZWRJbW02NChjaGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQub3I2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0
ZXIpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgfTsKICNlbmRpZgogCkBA
IC0xNjk4LDM0ICsxNjIyLDM0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVD
aGFyMzIgY2ggPSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lz
dGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAgaWYg
KG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChq
dW1wSWZOb0F2YWlsYWJsZUlucHV0KCkpOwogCiAgICAgICAgIENoZWNrZWQ8dW5zaWduZWQ+IHNj
YWxlZE1heENvdW50ID0gdGVybS0+cXVhbnRpdHlNYXhDb3VudDsKICAgICAgICAgc2NhbGVkTWF4
Q291bnQgKj0gVV9JU19CTVAoY2gpID8gMSA6IDI7Ci0gICAgICAgIHN1YjMyKGluZGV4LCBJbW0z
MihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5zdWIzMiht
X3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50
UmVnaXN0ZXIpOwogCi0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVj
a2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50LCBjaGFyYWN0
ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAvLyBGb3IgY2FzZS1pbnNlc2l0aXZlIGNvbXBh
cmVzLCBub24tYXNjaWkgY2hhcmFjdGVycyB0aGF0IGhhdmUgZGlmZmVyZW50CiAgICAgICAgIC8v
IHVwcGVyICYgbG93ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMgYXJlIGNvbnZlcnRlZCB0byBhIGNo
YXJhY3RlciBjbGFzcy4KICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpIHx8
IGlzQVNDSUlBbHBoYShjaCkgfHwgaXNDYW5vbmljYWxseVVuaXF1ZShjaCwgbV9jYW5vbmljYWxN
b2RlKSk7CiAgICAgICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIGlzQVNDSUlBbHBo
YShjaCkpIHsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0ZXIp
OworICAgICAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4
MjApLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgY2ggfD0gMHgyMDsKICAgICAgICAgfQogCi0g
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIElt
bTMyKGNoKSkpOworICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNo
KSkpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBp
ZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKQotICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDIpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOwog
ICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
Y291bnRSZWdpc3Rlcik7Ci0gICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVy
LCBpbmRleCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgbV9y
ZWdzLmluZGV4KS5saW5rVG8obG9vcCwgJm1faml0KTsKICAgICB9CiAgICAgdm9pZCBiYWNrdHJh
Y2tQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTczOCwz
OCArMTY2MiwzOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAgICBVQ2hhcjMyIGNo
ID0gdGVybS0+cGF0dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBVbmxl
c3MgaGF2ZSBhIDE2IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0g
c2hvcnQgY2lyY3VpdAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXpl
ID09IENoYXJTaXplOjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsK
LSAgICAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bG9vcCgmbV9qaXQpOwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgp
KTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBt
X2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2pp
dC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwog
I2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYg
KG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYgIVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAg
ICAgIEp1bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0g
bm90QXRFbmRPZklucHV0KCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzdXJyb2dhdGVQ
YWlyT2subGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7
CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQgPT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAgICAgICAgICBqdW1wKGxvb3ApOworICAg
ICAgICAgICAgICAgIG1faml0Lmp1bXAobG9vcCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1
YW50aXR5TWF4Q291bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAm
bV9qaXQpOwogCi0gICAgICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ZmFpbHVyZXMubGluaygmbV9qaXQpOwogICAgICAgICB9Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9
IGxhYmVsKCk7CisgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAg
ICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBA
IC0xNzc4LDE4ICsxNzAyLDE4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNv
dW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygm
bV9qaXQpOwogCiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50UmVn
aXN0ZXIpOwotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIo
WmVybywgY291bnRSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNv
dW50UmVnaXN0ZXIpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVnaXN0ZXIpKTsKKyAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdp
c3Rlcik7CiAgICAgICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycyB8fCBVX0lTX0JNUCh0
ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Vi
MzIoVHJ1c3RlZEltbTMyKDIpLCBpbmRleCk7Ci0gICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsK
KyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiks
IG1fcmVncy5pbmRleCk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICB9
CiAKICAgICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShzaXplX3Qgb3BJ
bmRleCkKQEAgLTE3OTcsMTAgKzE3MjEsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAg
ICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lz
dGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgb3AubV9yZWVudHJ5
ID0gbGFiZWwoKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFi
ZWwoKTsKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgp
KTsKICAgICB9CiAgICAgdm9pZCBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNp
emVfdCBvcEluZGV4KQpAQCAtMTgwOSw0MyArMTczMyw0MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90
ZXJtOwogICAgICAgICBVQ2hhcjMyIGNoID0gdGVybS0+cGF0dGVybkNoYXJhY3RlcjsKIAotICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1Qx
OwogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNo
QW1vdW50SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gVW5sZXNzIGhhdmUg
YSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNp
cmN1aXQKICAgICAgICAgaWYgKCEoIWlzTGF0aW4xKGNoKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFy
U2l6ZTo6Q2hhcjgpKSkgewotICAgICAgICAgICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7
CiAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwog
ICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0
ZSkKLSAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CisgICAg
ICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgY291bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRl
cm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CiAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5h
cHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5w
dXRQb3NpdGlvbiwgY2hhcmFjdGVyKSk7CiAKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09E
RV9FWFBSRVNTSU9OUykKICAgICAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYm
ICFVX0lTX0JNUChjaCkpIHsKLSAgICAgICAgICAgICAgICBKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9
IG5vdEF0RW5kT2ZJbnB1dCgpOwotICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgaW5kZXgpOwotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZVBhaXJPay5saW5rKHRoaXMpOwotICAgICAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0RW5kT2ZJbnB1dCgp
OworICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0g
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRS
ZWdpc3Rlcik7CiAKLSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKLSAgICAgICAgICAg
IG5vbkdyZWVkeUZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9w
Lm1fcmVlbnRyeSk7CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKCZtX2ppdCk7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9J
U19CTVAoY2gpKSB7CiAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBjb3VudFJlZ2lzdGVyKjIgZm9y
IG5vbi1CTVAgY2hhcmFjdGVycwotICAgICAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDEp
LCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBtX2ppdC5zdWIzMihjb3Vu
dFJlZ2lzdGVyLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZh
bGx0aHJvdWdoKCk7CiAgICAgfQogCkBAIC0xODU0LDE0ICsxNzc4LDE0IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAg
ICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7Ci0gICAgICAgICAgICBzdG9yZVRv
RnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVy
Q2xhc3M6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmlu
ZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpi
ZWdpbkluZGV4KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICByZWFk
Q2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rl
cik7CiAgICAgICAgIC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1
aWx0aW4gY2xhc3Mgd2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3Rl
ciBhbmQgZG9uJ3QgbmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAt
MTg3MSwxNiArMTc5NSwxNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQobWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKyAgICAgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lP
TlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFj
dGVyQ2xhc3MtPmhhc09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpIHsKLSAg
ICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwg
c3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBj
aGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTE4OTEsOCArMTgxNSw4IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29w
c1tvcEluZGV4XTsKICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwog
Ci0gICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFj
dGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgbV9iYWNrdHJhY2tp
bmdTdGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwg
bV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91
Z2goKTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0xOTA0LDggKzE4MjgsOCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29w
c1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdU
MTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CkBAIC0xOTE1LDEwICsx
ODM5LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMgJiYgdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhh
c09ubHlOb25CTVBDaGFyYWN0ZXJzKCkgJiYgIXRlcm0tPmludmVydCgpKQogICAgICAgICAgICAg
c2NhbGVkTWF4Q291bnQgKj0gMjsKICNlbmRpZgotICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIo
c2NhbGVkTWF4Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3ViMzIobV9y
ZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoc2NhbGVkTWF4Q291bnQpLCBjb3VudFJl
Z2lzdGVyKTsKIAotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCBt
YXRjaERlc3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgIHJlYWRD
aGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1h
eENvdW50LCBjaGFyYWN0ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBhcmUg
bWF0Y2hpbmcgdGhlICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIHdlIG9ubHkgbmVlZCB0
byByZWFkIHRoZQogICAgICAgICAvLyBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2gg
YXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KQEAgLTE5MjgsMjcgKzE4NTIsMjcgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgaWYgKHRlcm0t
PmludmVydCgpKQogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1hdGNoRGVzdCk7
CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOworICAgICAgICAg
ICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAg
bWF0Y2hEZXN0LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYg
RU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hh
cmFjdGVyQ2xhc3MoKSkKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIodGVybS0+
Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAxKSwgY291bnRSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6
IDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc0JNUENoYXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7
CiAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAg
ICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAg
ICAgaXNCTVBDaGFyLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdz
LmluZGV4KTsKKyAgICAgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNv
dW50UmVnaXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBtX2pp
dC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
KyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJl
Z2lzdGVyLCBtX3JlZ3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KICAgICB2
b2lkIGJhY2t0cmFja0NoYXJhY3RlckNsYXNzRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpA
QCAtMTk2MCwxOSArMTg4NCwxOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0
dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBj
aGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVy
ID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJh
Y3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICBpZiAobV9kZWNv
ZGVTdXJyb2dhdGVQYWlycyAmJiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNPbmVDaGFyYWN0
ZXJTaXplKCkgfHwgdGVybS0+aW52ZXJ0KCkpKQotICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGlu
ZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpi
ZWdpbkluZGV4KCkpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdpc3Rl
cik7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5mcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVn
aXN0ZXIpOwogCi0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBKdW1wTGlzdCBm
YWlsdXJlc0RlY3JlbWVudEluZGV4OwotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsdXJlc0RlY3JlbWVudEluZGV4OworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbG9vcCgmbV9qaXQpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VY
UFJFU1NJT05TKQogICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3Mo
KSAmJiB0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpKSB7Ci0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKICAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KGNoYXJhY3Rlcikp
OwogICAgICAgICB9IGVsc2UKICNlbmRpZgpAQCAtMTk4MiwxNSArMTkwNiwxNSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICByZWFkQ2hhcmFj
dGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZmFpbHVyZXMsIHRlcm0t
PmNoYXJhY3RlckNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEp1bXBMaXN0
IG1hdGNoRGVzdDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERl
c3Q7CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlu
cHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hp
bmcgdGhlICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5pY29kZSBwYXR0
ZXJucywKICAgICAgICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIg
YW5kIGRvbid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KICAgICAg
ICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPm1fYW55Q2hhcmFjdGVyKSB7CiAgICAg
ICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVy
bS0+Y2hhcmFjdGVyQ2xhc3MpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1w
KCkpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9K
SVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKQEAgLTE5OTgsMjIgKzE5MjIsMjIgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgYWR2YW5jZUluZGV4
QWZ0ZXJDaGFyYWN0ZXJDbGFzc1Rlcm1NYXRjaCh0ZXJtLCBmYWlsdXJlc0RlY3JlbWVudEluZGV4
LCBjaGFyYWN0ZXIpOwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNv
dW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgaWYg
KHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAg
ICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5
TWF4Q291bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgY291bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50
aXR5TWF4Q291bnQpKS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGp1bXAo
bG9vcCk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKGxvb3ApOwogCiAgICAgICAgIGlmICghZmFp
bHVyZXNEZWNyZW1lbnRJbmRleC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlc0RlY3Jl
bWVudEluZGV4LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4KTsKKyAgICAgICAgICAgIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgubGluaygmbV9qaXQp
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhp
cyk7Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgIGZhaWx1cmVzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAg
ICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBA
IC0yMDIyLDQ1ICsxOTQ2LDQ1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNv
dW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygm
bV9qaXQpOwogCiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lz
dGVyKTsKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQoYnJhbmNoVGVzdDMyKFpl
cm8sIGNvdW50UmVnaXN0ZXIpKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3Vu
dFJlZ2lzdGVyKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CisgICAgICAg
IG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0
ZXIpOwogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsK
IAogICAgICAgICBpZiAoIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVsc2Ug
aWYgKHRlcm0tPmlzRml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMo
KSA/IDIgOiAxKSwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVy
cygpID8gMiA6IDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IC8vIFJlbWF0Y2ggb25lIGxlc3MKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
dGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5J
bmRleCgpLCBpbmRleCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdz
LmluZGV4KTsKIAotICAgICAgICAgICAgTGFiZWwgcmVtYXRjaExvb3AodGhpcyk7Ci0gICAgICAg
ICAgICBKdW1wIGRvbmVSZW1hdGNoaW5nID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0
ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHJlbWF0Y2hMb29wKCZtX2pp
dCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lUmVtYXRjaGluZyA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRSZWdpc3Rlcik7CiAK
ICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQ
b3NpdGlvbiwgY2hhcmFjdGVyKTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogCiAjaWYgRU5BQkxFKFlBUlJf
SklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCi0gICAgICAgICAgICBKdW1wIGlzQk1QQ2hhciA9IGJy
YW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIsIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKLSAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNC
TVBDaGFyLmxpbmsodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0JN
UENoYXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNoYXJhY3Rl
ciwgbV9yZWdzLnN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgIG1faml0LmFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAg
ICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGp1
bXAocmVtYXRjaExvb3ApOwotICAgICAgICAgICAgZG9uZVJlbWF0Y2hpbmcubGluayh0aGlzKTsK
KyAgICAgICAgICAgIG1faml0Lmp1bXAocmVtYXRjaExvb3ApOworICAgICAgICAgICAgZG9uZVJl
bWF0Y2hpbmcubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0t
PmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1hdGNoQW1vdW50
SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIH0KLSAgICAgICAganVtcChvcC5tX3Jl
ZW50cnkpOworICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgfQogCiAgICAg
dm9pZCBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4KQpAQCAt
MjA2OCwxNSArMTk5MiwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVy
blRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3Vu
dFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgp
OworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNv
dW50UmVnaXN0ZXIpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAj
aWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2Rl
Y29kZVN1cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIXRlcm0tPmNoYXJhY3RlckNs
YXNzLT5oYXNPbmVDaGFyYWN0ZXJTaXplKCkgfHwgdGVybS0+aW52ZXJ0KCkpCi0gICAgICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3Jl
VG9GcmFtZShtX3JlZ3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
Q2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0y
MDg4LDI3ICsyMDEyLDI3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJu
VGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJh
Y3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBy
ZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVy
ID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIEp1bXBMaXN0IG5vbkdy
ZWVkeUZhaWx1cmVzOwotICAgICAgICBKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVu
dEluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVy
ZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0Rl
Y3JlbWVudEluZGV4OwogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsK
KyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICNpZiBFTkFCTEUo
WUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9n
YXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09u
ZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkKLSAgICAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xh
c3M6OmJlZ2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
dGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5J
bmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICBsb2Fk
RnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xh
c3M6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgbm9uR3Jl
ZWR5RmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgbm9uR3JlZWR5RmFp
bHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5x
dWFudGl0eU1heENvdW50KSkpOworICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKIAotICAgICAgICBKdW1w
TGlzdCBtYXRjaERlc3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERl
c3Q7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQ
b3NpdGlvbiwgY2hhcmFjdGVyKTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAi
YW55IGNoYXJhY3RlciIgYnVpbHRpbiBjbGFzcyBmb3Igbm9uLXVuaWNvZGUgcGF0dGVybnMsCiAg
ICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRvbid0IG5l
ZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KQEAgLTIxMTgsOCArMjA0Miw4
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
IGlmICh0ZXJtLT5pbnZlcnQoKSkKICAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5h
cHBlbmQobWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5v
bkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgICAgIG1hdGNoRGVz
dC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjEyOCwxNyArMjA1MiwxNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBhZHZhbmNlSW5k
ZXhBZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIG5vbkdyZWVkeUZhaWx1cmVzRGVj
cmVtZW50SW5kZXgsIGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAot
ICAgICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVu
dHJ5KTsKIAogICAgICAgICBpZiAoIW5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXguZW1w
dHkoKSkgewotICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5r
KHRoaXMpOwotICAgICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICAgICAgbm9uR3JlZWR5
RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5i
cmVha3BvaW50KCk7CiAgICAgICAgIH0KLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGluayh0
aGlzKTsKLSAgICAgICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBub25H
cmVlZHlGYWlsdXJlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN1YjMyKGNvdW50UmVn
aXN0ZXIsIG1fcmVncy5pbmRleCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRo
cm91Z2goKTsKICAgICB9CiAKQEAgLTIxNDcsNjIgKzIwNzEsNjIgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJ
bmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lz
dGVySUQgbWF0Y2hQb3MgPSByZWdUMTsKLSAgICAgICAgSnVtcExpc3QgZm91bmRCZWdpbm5pbmdO
ZXdMaW5lOwotICAgICAgICBKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKLSAgICAgICAgSnVtcExp
c3QgZm91bmRFbmRpbmdOZXdMaW5lOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoUG9zID0gbV9yZWdzLnJlZ1QxOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5lOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2F2ZVN0YXJ0SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmb3VuZEVuZGluZ05ld0xpbmU7CiAKICAgICAgICAgaWYgKG1fcGF0dGVy
bi5kb3RBbGwoKSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIG1hdGNoUG9z
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSwgbWF0Y2hQb3MpOwogICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7Ci0gICAg
ICAgICAgICBtb3ZlKGxlbmd0aCwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3Jl
Z3MubGVuZ3RoLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAg
ICAgICAgIGdldE1hdGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIHNhdmVTdGFydEluZGV4
LmFwcGVuZChicmFuY2gzMihCZWxvd09yRXF1YWwsIG1hdGNoUG9zLCBpbml0aWFsU3RhcnQpKTsK
LSAgICAgICAgTGFiZWwgZmluZEJPTExvb3AodGhpcyk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgbWF0Y2hQb3MpOworICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbWF0Y2hQb3MsIG1fcmVncy5p
bml0aWFsU3RhcnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpbmRCT0xMb29w
KCZtX2ppdCk7CisgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIG1hdGNoUG9zKTsKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNo
YXI4KQotICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNP
bmUsIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNPbmUsIDApLCBjaGFyYWN0ZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkMTYo
QmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAg
ICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlu
cHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5kQmVnaW5uaW5nTmV3
TGluZSwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKIAotICAgICAgICBicmFu
Y2gzMihBYm92ZSwgbWF0Y2hQb3MsIGluaXRpYWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCB0
aGlzKTsKLSAgICAgICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbWF0Y2hQb3MsIG1fcmVncy5pbml0
aWFsU3RhcnQpLmxpbmtUbyhmaW5kQk9MTG9vcCwgJm1faml0KTsKKyAgICAgICAgc2F2ZVN0YXJ0
SW5kZXguYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgZm91bmRCZWdpbm5pbmdOZXdM
aW5lLmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3Mp
OyAvLyBBZHZhbmNlIHBhc3QgbmV3bGluZQotICAgICAgICBzYXZlU3RhcnRJbmRleC5saW5rKHRo
aXMpOworICAgICAgICBmb3VuZEJlZ2lubmluZ05ld0xpbmUubGluaygmbV9qaXQpOworICAgICAg
ICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7
IC8vIEFkdmFuY2UgcGFzdCBuZXdsaW5lCisgICAgICAgIHNhdmVTdGFydEluZGV4LmxpbmsoJm1f
aml0KTsKIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0ZXJtLT5hbmNo
b3JzLmJvbEFuY2hvcikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBtYXRjaFBvcykpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtYXRjaFBvcykpOwogCiAg
ICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAg
ICBzZXRNYXRjaFN0YXJ0KG1hdGNoUG9zKTsKIAotICAgICAgICBtb3ZlKGluZGV4LCBtYXRjaFBv
cyk7CisgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtYXRjaFBvcyk7CiAKLSAgICAg
ICAgTGFiZWwgZmluZEVPTExvb3AodGhpcyk7ICAgICAgICAKLSAgICAgICAgZm91bmRFbmRpbmdO
ZXdMaW5lLmFwcGVuZChicmFuY2gzMihFcXVhbCwgbWF0Y2hQb3MsIGxlbmd0aCkpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmluZEVPTExvb3AoJm1faml0KTsKKyAgICAgICAgZm91
bmRFbmRpbmdOZXdMaW5lLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIG1hdGNoUG9zLCBtX3JlZ3MubGVuZ3RoKSk7CiAgICAgICAgIGlmIChtX2NoYXJTaXplID09
IENoYXJTaXplOjpDaGFyOCkKLSAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgbWF0
Y2hQb3MsIFRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzVHdvLCAwKSwgY2hh
cmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KG1fcmVncy5pbnB1dCwgbWF0Y2hQb3MsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCks
IGNoYXJhY3Rlcik7CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmb3Vu
ZEVuZGluZ05ld0xpbmUsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwotICAgICAgICBqdW1wKGZpbmRF
T0xMb29wKTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgbWF0Y2hQb3MpOworICAgICAgICBtX2ppdC5qdW1wKGZpbmRFT0xMb29wKTsKIAotICAg
ICAgICBmb3VuZEVuZGluZ05ld0xpbmUubGluayh0aGlzKTsKKyAgICAgICAgZm91bmRFbmRpbmdO
ZXdMaW5lLmxpbmsoJm1faml0KTsKIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUo
KSAmJiB0ZXJtLT5hbmNob3JzLmVvbEFuY2hvcikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBtYXRjaFBvcywgbGVuZ3RoKSk7CisgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IG1hdGNoUG9zLCBtX3JlZ3MubGVuZ3RoKSk7CiAKLSAgICAgICAgbW92ZShtYXRjaFBvcywgaW5k
ZXgpOworICAgICAgICBtX2ppdC5tb3ZlKG1hdGNoUG9zLCBtX3JlZ3MuaW5kZXgpOwogICAgIH0K
IAogICAgIHZvaWQgYmFja3RyYWNrRG90U3RhckVuY2xvc3VyZShzaXplX3Qgb3BJbmRleCkKQEAg
LTIzNjcsNyArMjI5MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAg
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5kZXgsIGxhYmVs
KCkpOworICAgICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JHZW5lcmF0ZShvcElu
ZGV4LCBtX2ppdC5sYWJlbCgpKTsKIAogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29w
SW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChvcC5tX29wKSB7CkBAIC0yNDA4LDcgKzIzMzIs
NyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAg
ICAgICAgICAvLyBXZSB3aWxsIHJlZW50ZXIgYWZ0ZXIgdGhlIGNoZWNrLCBhbmQgYXNzdW1lIHRo
ZSBpbnB1dCBwb3NpdGlvbiB0byBoYXZlIGJlZW4KICAgICAgICAgICAgICAgICAvLyBzZXQgYXMg
YXBwcm9wcmlhdGUgdG8gdGhpcyBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3Jl
ZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0Lmxh
YmVsKCk7CiAKICAgICAgICAgICAgICAgICAvLyBFbWl0IGZhc3Qgc2tpcCBwYXRoIHdpdGggc3Ry
aWRlIGlmIHdlIGhhdmUgQm95ZXJNb29yZUluZm8uCiAgICAgICAgICAgICAgICAgaWYgKG9wLm1f
Ym1JbmZvKSB7CkBAIC0yNDIwLDggKzIzNDQsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIFttYXAsIGNoYXJh
Y3RlcnNGYXN0UGF0aF0gPSBvcC5tX2JtSW5mby0+Y3JlYXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2lu
SW5kZXgsIGVuZEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1hcENv
dW50ID0gbWFwLmNvdW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW5kaWF0
ZSBjaGFyYWN0ZXJzIGFyZSA8PSAyLCBjaGVja2luZyBlYWNoIGlzIGJldHRlciB0aGFuIHVzaW5n
IHZlY3Rvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG91dE9mTGVuZ3RoRmFp
bHVyZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoZWQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3V0T2ZMZW5ndGhGYWls
dXJlOworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1h
dGNoZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihZYXJySklUSW50ZXJu
YWw6OnZlcmJvc2UsICJCTSBCaXRtYXAgaXMgIiwgbWFwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFBhdHRlcm5zIGxpa2UgL1tdLyBoYXZlIHplcm8gY2FuZGlkYXRlcy4gU2luY2UgaXQg
aXMgcmFyZSwgd2UgZG8gbm90IGRvIG5vdGhpbmcgZm9yIG5vdy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbWFwQ291bnQpCkBAIC0yNDMwLDc1ICsyMzU0LDc1IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KEJveWVyTW9vcmVGYXN0Q2FuZGlkYXRlczo6bWF4U2l6ZSA9PSAyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
UmVnRXhwQ29tcGlsYXRpb24oKSwgIkZvdW5kIGNoYXJhY3RlcnMgZmFzdHBhdGggbG9va2FoZWFk
ICIsIGNoYXJhY3RlcnNGYXN0UGF0aCwgIiByYW5nZTpbIiwgYmVnaW5JbmRleCwgIiwgIiwgZW5k
SW5kZXgsICIpIik7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFk
ID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1f
Y2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGxvb3BIZWFkID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgbV9y
ZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5yZWdUMCwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMCkpKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlcnNGYXN0UGF0aC5zaXplKCkgPiAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMSkpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLnJlZ1QwLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgxKSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxh
YmxlSW5wdXQoZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAganVtcCgpLmxpbmtUbyhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgYXV0byogcG9pbnRlciA9IGdldEJveWVyTW9vcmVCaXRtYXAobWFwKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGls
YXRpb24oKSwgIkZvdW5kIGJpdG1hcCBsb29rYWhlYWQgY291bnQ6KCIsIG1hcENvdW50LCAiKSxy
YW5nZTpbIiwgYmVnaW5JbmRleCwgIiwgIiwgZW5kSW5kZXgsICIpIik7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIHJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFiZWwoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVu
ZEluZGV4ICsgMSwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIG1fcmVncy5yZWdUMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb29wSGVhZCA9IG1faml0LmxhYmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRP
ZmZzZXQgLSBlbmRJbmRleCArIDEsIG1fcmVncy5yZWdUMCk7CiAjaWYgQ1BVKEFSTTY0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJveWVyTW9vcmVC
aXRtYXA6Ok1hcDo6V29yZFR5cGUpID09IHNpemVvZih1aW50NjRfdCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCA2ID09IDY0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDYgKyAxKSA9PSBCb3llck1vb3Jl
Qml0bWFwOjpNYXA6OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFj
dFVuc2lnbmVkQml0ZmllbGQzMihyZWdUMCwgVHJ1c3RlZEltbTMyKDYpLCBUcnVzdGVkSW1tMzIo
MSksIHJlZ1QyKTsgLy8gRXh0cmFjdCAxIGJpdCBmb3IgaW5kZXguCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVzRWlnaHQpLCBy
ZWdUMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDY0KHJlZ1QwLCByZWdU
Mik7IC8vIFdlIGNhbiBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA2Yml0cyBhcmUg
ZWZmZWN0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJy
YW5jaFRlc3Q2NChOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuZXh0cmFjdFVuc2lnbmVkQml0ZmllbGQzMihtX3JlZ3Mu
cmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIG1fcmVncy5yZWdUMik7IC8vIEV4dHJhY3QgMSBiaXQgZm9yIGluZGV4
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KG1fcmVncy5yZWdUMSwgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQudXJzaGlmdDY0KG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsgLy8gV2UgY2FuIGln
bm9yZSB1cHBlciBiaXRzIGFuZCBvbmx5IGxvd2VyIDZiaXRzIGFyZSBlZmZlY3RpdmUuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSkpKTsKICNlbGlmIENQVShYODZfNjQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3Jk
VHlwZSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Fzc2VydCgxIDw8IDYgPT0gNjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoMSA8PCAoNiArIDEpID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMig2KSwgcmVn
VDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDEsIHJlZ1QyLCBUaW1lc0VpZ2h0KSwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaFRlc3RCaXQ2NChOb25aZXJvLCByZWdUMiwgcmVnVDAp
KTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3Jt
ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAs
IG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlm
dDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIG1fcmVncy5yZWdUMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgbV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEsIG1fcmVn
cy5yZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBtX3JlZ3MucmVnVDIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RC
aXQ2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBtX3JlZ3MucmVnVDAp
KTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3Jt
ZWQuCiAjZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUpID09IHNpemVvZih1aW50MzJfdCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCA1ID09IDMy
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDUgKyAy
KSA9PSBCb3llck1vb3JlQml0bWFwOjpNYXA6OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoNSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoMGIxMSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMiwgVGltZXNGb3VyKSwg
cmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hpZnQzMihyZWdUMCwgcmVn
VDIpOyAvLyBXZSBjYW4gaWdub3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNWJpdHMgYXJl
IGVmZmVjdGl2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMigxKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVnVDIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDUpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMGIxMSks
IG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdUMik7
IC8vIFdlIGNhbiBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA1Yml0cyBhcmUgZWZm
ZWN0aXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5w
dXQoZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
anVtcCgpLmxpbmtUbyhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4g
c2l6ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGluZGV4IGZvciB1c2UgaWYg
d2UgbWF0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIGFk
anVzdGluZyBtYXRjaC1zdGFydCB3aGVuIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBzdGFydCB3aXRo
IEJveWVyTW9vcmUgc2VhcmNoLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRl
cm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dE9mTGVuZ3RoRmFpbHVyZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dE9mTGVuZ3RoRmFpbHVyZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5p
bXVtU2l6ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0
Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21p
bmltdW1TaXplKSwgbV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0
KGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1f
cmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG91dE9mTGVuZ3RoRmFpbHVy
ZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZWQubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gc2l6ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUg
dGhlIHN0YXJ0IGluZGV4IGZvciB1c2UgaWYgd2UgbWF0Y2guCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIGFkanVzdGluZyBtYXRjaC1zdGFydCB3aGVuIHdlIHN0
YXJ0IHBhdHRlcm4gbWF0Y2hpbmcgd2l0aCB0aGUgdXBkYXRlZCBpbmRleAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYnkgQm95ZXJNb29yZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRN
YXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0
Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUxNywyMSArMjQ0MSwyMCBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAg
ICAgLy8gTG9hZCBhcHByb3ByaWF0ZSB2YWx1ZXMgaW50byB0aGUgcmV0dXJuIHJlZ2lzdGVyIGFu
ZCB0aGUgZmlyc3Qgb3V0cHV0CiAgICAgICAgICAgICAgICAgLy8gc2xvdCwgYW5kIHJldHVybi4g
SW4gdGhlIGNhc2Ugb2YgcGF0dGVybiB3aXRoIGEgZml4ZWQgc2l6ZSwgd2Ugd2lsbAogICAgICAg
ICAgICAgICAgIC8vIG5vdCBoYXZlIHlldCBzZXQgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCAKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX3JlZ3MuaW5kZXggIT0gbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAg
ICAgICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIocHJpb3JBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHByaW9y
QWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4
LCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG1f
cmVncy5pbmRleCwgbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlUGFpcjMyKHJldHVyblJlZ2lzdGVyLCBpbmRl
eCwgb3V0cHV0LCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQYWlyMzIobV9yZWdzLnJldHVyblJlZ2lzdGVyLCBtX3JlZ3MuaW5kZXgsIG1fcmVn
cy5vdXRwdXQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldE1hdGNoU3RhcnQocmV0dXJuUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBnZXRNYXRjaFN0YXJ0KG1fcmVncy5yZXR1cm5S
ZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENv
bXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1dCwgNCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
cmVncy5vdXRwdXQsIDQpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbW92
ZShpbmRleCwgcmV0dXJuUmVnaXN0ZXIyKTsKLQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
bV9yZWdzLmluZGV4LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKICAgICAgICAgICAgICAgICBn
ZW5lcmF0ZVJldHVybigpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGl2aWRl
IGJldHdlZW4gdGhlIHRhaWwgb2YgdGhlIHByaW9yIGFsdGVybmF0aXZlLCBhYm92ZSwgYW5kCkBA
IC0yNTQyLDE3ICsyNDY1LDE3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckoKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBqdW1wcyBoZXJlIHRvIGRvIHNvIHdp
dGggdGhlIGlucHV0IHBvc2l0aW9uIG1hdGNoaW5nIHRoYXQgb2YgdGhlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIFBSSU9SIGFsdGVyYW5hdGl2ZSwgYW5kIHdlIHdpbGwgb25seSBjaGVjayBpbnB1
dCBhdmFpbGFiaWxpdHkgaWYgd2UKICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBwcm9n
cmVzcyBpdCBmb3J3YXJkcy4KLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFi
ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID4gcHJp
b3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkMzIoSW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmlvckFsdGVybmF0aXZl
LT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0g
cHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0
KCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByaW9yQWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgPiBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YjMyKEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBh
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihwcmlvckFsdGVybmF0aXZlLT5t
X21pbmltdW1TaXplIC0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MuaW5kZXgp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AubV9uZXh0T3AgPT0gbm90Rm91bmQpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVlbnRyeSBwb2ludCBmb3IgdGhl
IEVuZCBvZiAnb25jZSB0aHJvdWdoJyBhbHRlcm5hdGl2ZXMsCiAgICAgICAgICAgICAgICAgICAg
IC8vIGp1bXBlZCB0byB3aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZlIGZhaWxzIHRvIG1hdGNoLgot
ICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAg
ICAgICAgICBzdWIzMihJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIocHJp
b3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gWWFyck9wQ29kZTo6Qm9k
eUFsdGVybmF0aXZlTmV4dCkKQEAgLTI2MDgsNyArMjUzMSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICFtX29wc1tvcC5tX3ByZXZp
b3VzT3BdLm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25zdW1p
bmcgY2hhcmFjdGVycyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2t0cmFjayB0byB0
cnkgdG8gbWF0Y2ggd2hpbGUgY29uc3VtbWluZyBzb21lIGlucHV0LgotICAgICAgICAgICAgICAg
ICAgICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lk
KikpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0Y2ggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5m
cmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoIGhlcmUgdGhlbiB0aGUgbGFzdCBhbHRlcm5hdGl2
ZSBoYXMgbWF0Y2hlZCAtIGp1bXAgdG8gdGhlCkBAIC0yNjI1LDEwICsyNTQ4LDEwIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAg
ZW5kT3AgPSAmbV9vcHNbZW5kT3AtPm1fbmV4dE9wXTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGVuZE9wLT5tX29wID09IFlhcnJPcENvZGU6OlNpbXBsZU5lc3Rl
ZEFsdGVybmF0aXZlRW5kIHx8IGVuZE9wLT5tX29wID09IFlhcnJPcENvZGU6Ok5lc3RlZEFsdGVy
bmF0aXZlRW5kKTsKLSAgICAgICAgICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
IAogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbmV4
dCBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwor
ICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAgICAg
ICAgICAgICAvLyBDYWxjdWxhdGUgaG93IG11Y2ggaW5wdXQgd2UgbmVlZCB0byBjaGVjayBmb3Is
IGFuZCBpZiBub24temVybyBjaGVjay4KICAgICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRqdXN0
ID0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CkBAIC0yNjU1LDEzICsyNTc4LDEzIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBp
ZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICFt
X29wc1tvcC5tX3ByZXZpb3VzT3BdLm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlIG1hdGNoZWQg
d2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJhY2t0cmFjayB0byB0cnkgdG8gbWF0Y2ggd2hpbGUgY29uc3VtbWluZyBzb21lIGlucHV0Lgot
ICAgICAgICAgICAgICAgICAgICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFs
LCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlv
biAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3Ro
TWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgc2V0IG9mIGFsdGVybmF0aXZl
cyBjb250YWlucyBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlLAogICAgICAgICAgICAgICAgIC8v
IHRoZW4gdGhlIE5leHQgbm9kZXMgd2lsbCBoYXZlIHBsYW50ZWQganVtcHMgdG8gdGhlIEVuZCwg
YW5kIGFkZGVkCiAgICAgICAgICAgICAgICAgLy8gdGhlbSB0byB0aGlzIG5vZGUncyBtX2p1bXBz
IGxpc3QuCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAg
ICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMuY2xlYXIoKTsKIAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3Au
bV9wcmV2aW91c09wXTsKQEAgLTI2NzYsNyArMjU5OSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50
aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luOiB7CiAgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0q
IHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNG
cmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBjb25z
dCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVn
VDA7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gMSk7
CiAKICAgICAgICAgICAgICAgICAvLyBVcG9uIGVudHJ5IHRvIGEgR3JlZWR5IHF1YW50aWZpZWQg
c2V0IG9mIHBhcmVudGhlc2Ugc3RvcmUgdGhlIGluZGV4LgpAQCAtMjY5NCwxMiArMjYxNywxMiBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIGNhcHR1cmluZyBwYXJlbnMsIGNv
dWxkIHVzZSB0aGUgaW5kZXggaW4gdGhlIGNhcHR1cmUgYXJyYXk/CiAgICAgICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAg
ICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJU
eXBlOjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0
ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxh
YmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3Jl
ZW50cnkgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUo
bV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBz
dGFydGluZyBpbmRleCB2YWx1ZSB0byB0aGUKQEAgLTI3MTMsMjMgKzI2MzYsMjMgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBp
ZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50KQogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5wdXRPZmZzZXQgKz0gdGVybS0+cGFyZW50aGVzZXMuZGlz
anVuY3Rpb24tPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9m
ZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0
T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBp
bmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3Rh
cnQoaW5kZXhUZW1wb3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0
dGVyblN0YXJ0KGluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KG1fcmVncy5pbmRleCwgdGVybS0+
cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFlhcnJPcENvZGU6
OlBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VFbmQ6IHsKICAgICAgICAgICAgICAgICBQYXR0ZXJu
VGVybSogdGVybSA9IG9wLm1fdGVybTsKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklE
IGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gMSk7CiAKICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgbmVzdGVkIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25z
dW1pbmcgYW55IGNoYXJhY3RlcnMsIHB1bnQgdGhpcyBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4K
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFSUiBKSVQgdG8gcHJvcGVy
bHkKICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJlc3Npb25zIHRoYXQgY2Fu
IG1hdGNoIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICBpZiAo
dGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICF0ZXJt
LT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZv
aWQqKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVy
bS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4
IHZhbHVlIHRvIHRoZQogICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVzIGFycmF5LCBvZmZzZXR0
aW5nIGFzIG5lY2Vzc2FyeS4KQEAgLTI3NDAsMjAgKzI2NjMsMjAgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0
dXJlKCkgJiYgbV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRl
cm5zKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlucHV0T2Zmc2V0ID0gbV9jaGVj
a2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGlucHV0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1t
MzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9m
ZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBh
dHRlcm5FbmQoaW5kZXhUZW1wb3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0
U3VicGF0dGVybkVuZChpbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQobV9yZWdzLmluZGV4LCB0ZXJt
LT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlcyBhcmUgcXVhbnRpZmllZCBHcmVlZHkgdGhl
biBhZGQgYSBsYWJlbCB0byBqdW1wIGJhY2sKICAgICAgICAgICAgICAgICAvLyB0byBpZiB3ZSBn
ZXQgYSBmYWlsZWQgbWF0Y2ggZnJvbSBhZnRlciB0aGUgcGFyZW50aGVzZXMuIEZvciBOb25HcmVl
ZHkKICAgICAgICAgICAgICAgICAvLyBwYXJlbnRoZXNlcywgbGluayB0aGUganVtcCBmcm9tIGJl
Zm9yZSB0aGUgc3VicGF0dGVybiB0byBoZXJlLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5x
dWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAg
ICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVu
dHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewogICAgICAgICAgICAgICAg
ICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAg
ICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgYmVnaW5PcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yNzY2LDExICsyNjg5LDExIEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICBBU1NFUlQoIXRlcm0tPmNhcHR1cmUoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBVcG9uIGVu
dHJ5IHNldCBhIGxhYmVsIHRvIGxvb3AgYmFjayB0by4KLSAgICAgICAgICAgICAgICBvcC5tX3Jl
ZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0Lmxh
YmVsKCk7CiAKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgc3RhcnQgaW5kZXggb2YgdGhl
IGN1cnJlbnQgbWF0Y2g7IHdlIG5lZWQgdG8gcmVqZWN0IHplcm8KICAgICAgICAgICAgICAgICAv
LyBsZW5ndGggbWF0Y2hlcy4KLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDo6YmVn
aW5JbmRleCgpKTsKKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0
ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzVGVybWluYWw6OmJl
Z2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIFlhcnJPcENvZGU6OlBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5k
OiB7CkBAIC0yNzgxLDE1ICsyNzA0LDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFSUiBK
SVQgdG8gcHJvcGVybHkKICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJlc3Np
b25zIHRoYXQgY2FuIG1hdGNoIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAgICAg
ICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENv
dW50ICYmICF0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1YWws
IGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9u
ICogc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlv
bi5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAg
ICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhlIG1hdGNoIGlzIG5vbi16ZXJvLCB3ZSBjYW4g
YWNjZXB0IGl0IGFuZAogICAgICAgICAgICAgICAgIC8vIGxvb3AgYmFjayB1cCB0byB0aGUgaGVh
ZCBvZiB0aGUgc3VicGF0dGVybi4KLSAgICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AubV9yZWVu
dHJ5KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKIAog
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIGp1bXAgdG8gd2hl
biB3ZSBzdG9wIG1hdGNoaW5nIC0gd2Ugd2lsbAogICAgICAgICAgICAgICAgIC8vIGRvIHNvIG9u
Y2UgdGhlIHN1YnBhdHRlcm4gY2Fubm90IG1hdGNoIGFueSBtb3JlLgotICAgICAgICAgICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0g
bV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApA
QCAtMjgxNiwyNCArMjczOSwyNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IFlhcnJKCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZm9y
IGNhcHR1cmluZyBwYXJlbnMsIGNvdWxkIHVzZSB0aGUgaW5kZXggaW4gdGhlIGNhcHR1cmUgYXJy
YXk/CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVy
VHlwZTo6R3JlZWR5IHx8IHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9u
R3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIo
MCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6
bWF0Y2hBbW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOworICAgICAgICAgICAg
ICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFt
b3VudEluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAr
IEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOwogCiAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6Ok5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRy
dXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQg
Y3VyclBhcmVuQ29udGV4dFJlZyA9IHJlZ1QwOwotICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl
cklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICBvcC5t
X3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0UmVnID0gbV9yZWdzLnJlZ1QwOworICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRl
eHRSZWcgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFt
ZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBh
cmVuQ29udGV4dEhlYWRJbmRleCgpLCBjdXJyUGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAg
ICAgICAgICAgYWxsb2NhdGVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RvcmVQdHIoY3VyclBhcmVuQ29udGV4dFJlZywgbmV3UGFyZW5Db250
ZXh0UmVnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY3VyclBhcmVuQ29u
dGV4dFJlZywgbmV3UGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKG5ld1BhcmVuQ29udGV4dFJlZywgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNhdmVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnLCByZWdUMiwg
dGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRoZXNlcy5sYXN0U3Vi
cGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2F2
ZVBhcmVuQ29udGV4dChuZXdQYXJlbkNvbnRleHRSZWcsIG1fcmVncy5yZWdUMiwgdGVybS0+cGFy
ZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRoZXNlcy5sYXN0U3VicGF0dGVybklk
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRv
RnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2UgYXJlIGNhcHR1cmluZywgc3RvcmUgdGhl
IHN0YXJ0aW5nIGluZGV4IHZhbHVlIHRvIHRoZQpAQCAtMjg0MywxNSArMjc2NiwxNSBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8g
b2Zmc2V0cyBvbmx5IGFmdGVyd2FyZHMsIGF0IHRoZSBwb2ludCB0aGUgcmVzdWx0cyBhcnJheSBp
cwogICAgICAgICAgICAgICAgIC8vIGJlaW5nIGFjY2Vzc2VkLgogICAgICAgICAgICAgICAgIGlm
ICh0ZXJtLT5jYXB0dXJlKCkgJiYgbV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5j
bHVkZVN1YnBhdHRlcm5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQg
aW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlucHV0T2Zmc2V0ID0gbV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0T2Zmc2V0ICs9IHRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21p
bmltdW1TaXplOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihpbnB1dE9mZnNldCksIGluZGV4
VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5p
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGlucHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3Jhcnkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KGluZGV4VGVtcG9y
YXJ5LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5TdGFydChpbmRl
eCwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNldFN1YnBhdHRlcm5TdGFydChtX3JlZ3MuaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1
YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgfQogI2Vsc2UgLy8gIVlBUlJfSklUX0FMTF9Q
QVJFTlNfRVhQUkVTU0lPTlMKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjg2NywxMyArMjc5MCwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNzg2PiBBZGQgYWJpbGl0eSBmb3IgdGhlIFlB
UlIgSklUIHRvIHByb3Blcmx5CiAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIG5lc3RlZCBleHBy
ZXNzaW9ucyB0aGF0IGNhbiBtYXRjaCB3aXRob3V0IGNvbnN1bWluZyBjaGFyYWN0ZXJzCiAgICAg
ICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4
ZWRDb3VudCAmJiAhdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUp
Ci0gICAgICAgICAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKGJyYW5jaDMyKEVx
dWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hYm9y
dEV4ZWN1dGlvbi5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBt
X3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQq
KSkpKTsKIAotICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRUZW1wb3Jhcnkg
PSByZWdUMTsKKyAgICAgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjb3VudFRlbXBvcmFyeSA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgIFlhcnJP
cCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CiAgICAgICAgICAgICAgICAgbG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRUZW1wb3JhcnkpOworICAgICAgICAgICAg
ICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVt
cG9yYXJ5KTsKICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRUZW1wb3JhcnksIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hB
bW91bnRJbmRleCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFy
ZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBlbmRpbmcgaW5kZXggdmFsdWUgdG8gdGhlCkBAIC0yODgz
LDE0ICsyODA2LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAvLyBvZmZzZXRzIG9ubHkgYWZ0ZXJ3YXJkcywgYXQgdGhlIHBvaW50
IHRoZSByZXN1bHRzIGFycmF5IGlzCiAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYWNjZXNzZWQu
CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSAmJiBtX2NvbXBpbGVNb2RlID09
IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9
IG1fcmVncy5yZWdUMDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGlucHV0T2Zmc2V0ID0gbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3Np
dGlvbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBv
cmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQoaW5kZXhUZW1wb3JhcnksIHRl
cm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVuZChpbmRleCwgdGVybS0+
cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1
YnBhdHRlcm5FbmQobV9yZWdzLmluZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQp
OwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRo
ZXNlcyBhcmUgcXVhbnRpZmllZCBHcmVlZHkgdGhlbiBhZGQgYSBsYWJlbCB0byBqdW1wIGJhY2sK
QEAgLTI4OTgsMTUgKzI4MjEsMTUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBZYXJySgogICAgICAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzLCBsaW5rIHRoZSBqdW1wIGZy
b20gYmVmb3JlIHRoZSBzdWJwYXR0ZXJuIHRvIGhlcmUuCiAgICAgICAgICAgICAgICAgaWYgKHRl
cm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eU1heENvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gzMihCZWxvdywgY291bnRUZW1wb3Jhcnks
IEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKS5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnks
IHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBjb3VudFRlbXBvcmFyeSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0t
PnF1YW50aXR5TWF4Q291bnQpKS5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnksICZtX2ppdCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAoYmVn
aW5PcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChiZWdp
bk9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50
cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS0+cXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpIHsKICAgICAgICAgICAgICAg
ICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKLSAgICAgICAg
ICAgICAgICAgICAgYmVnaW5PcC5tX2p1bXBzLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGJlZ2luT3Au
bV9qdW1wcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9
IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgfQogI2Vsc2UgLy8gIVlBUlJfSklUX0FM
TF9QQVJFTlNfRVhQUkVTU0lPTlMKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjkyMSwxMiArMjg0NCwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQg
aW5kZXggLSBhc3NlcnRpb25zIHNob3VsZCBub3QgdXBkYXRlIGluZGV4LCBzbwogICAgICAgICAg
ICAgICAgIC8vIHdlIHdpbGwgbmVlZCB0byByZXN0b3JlIGl0IHVwb24gYSBzdWNjZXNzZnVsIG1h
dGNoLgogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9
IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGV0aWNhbEFz
c2VydGlvbjo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9y
ZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50
aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIENo
ZWNrIAogICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgPSBtX2NoZWNrZWRPZmZzZXQg
LSB0ZXJtLT5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRq
dXN0KQotICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwg
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIob3AubV9jaGVja0FkanVzdCksIG1fcmVncy5pbmRleCk7CiAKICAgICAgICAgICAgICAg
ICBtX2NoZWNrZWRPZmZzZXQgLT0gb3AubV9jaGVja0FkanVzdDsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTI5MzYsMTMgKzI4NTksMTMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW5wdXQgaW5k
ZXggdmFsdWUuCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1l
KHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2FsQXNz
ZXJ0aW9uOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICBsb2FkRnJvbUZy
YW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXRpY2Fs
QXNzZXJ0aW9uOjpiZWdpbkluZGV4KCksIG1fcmVncy5pbmRleCk7CiAKICAgICAgICAgICAgICAg
ICAvLyBJZiBpbnZlcnRlZCwgYSBzdWNjZXNzZnVsIG1hdGNoIG9mIHRoZSBhc3NlcnRpb24gbXVz
dCBiZSB0cmVhdGVkCiAgICAgICAgICAgICAgICAgLy8gYXMgYSBmYWlsdXJlLCBzbyBqdW1wIHRv
IGJhY2t0cmFja2luZy4KICAgICAgICAgICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9y
ZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CkBAIC0yOTcwLDcg
KzI4OTMsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAtLW9wSW5kZXg7CiAKICAgICAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAg
ICAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQmFja3RyYWNrKG9wSW5kZXgsIGxh
YmVsKCkpOworICAgICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCYWNrdHJhY2so
b3BJbmRleCwgbV9qaXQubGFiZWwoKSk7CiAKICAgICAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29w
c1tvcEluZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAob3AubV9vcCkgewpAQCAtMzAxNSw3ICsy
OTM4LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgIC8vIElzIHRoaXMgdGhlIGxhc3QgYWx0ZXJuYXRpdmU/IElmIG5vdCwgdGhlbiBp
ZiB3ZSBiYWNrdHJhY2sgdG8gdGhpcyBwb2ludCB3ZSBqdXN0CiAgICAgICAgICAgICAgICAgLy8g
bmVlZCB0byBqdW1wIHRvIHRyeSB0byBtYXRjaCB0aGUgbmV4dCBhbHRlcm5hdGl2ZS4KICAgICAg
ICAgICAgICAgICBpZiAobV9vcHNbb3AubV9uZXh0T3BdLm1fb3AgIT0gWWFyck9wQ29kZTo6Qm9k
eUFsdGVybmF0aXZlRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUubGlua1RvKG1fb3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhtX29wc1tvcC5tX25leHRPcF0u
bV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1fbmV4
dE9wXTsKQEAgLTMwMjksMTcgKzI5NTIsMTcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICAgICAgYm9vbCBvbmNlVGhyb3VnaCA9IGVuZE9w
Lm1fbmV4dE9wID09IG5vdEZvdW5kOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEp1bXBMaXN0IGxhc3RTdGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzOworICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJlczsK
IAogICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBnZW5lcmF0ZSBjb2RlIHRvIGhhbmRsZSBjYXNl
cyB3aGVyZSB3ZSBiYWNrdHJhY2sgb3V0IG9mIGFuIGF0dGVtcHRlZCBtYXRjaAogICAgICAgICAg
ICAgICAgIC8vIG9mIHRoZSBsYXN0IGFsdGVybmF0aXZlLiBJZiB0aGlzIGlzIGEgJ29uY2UgdGhy
b3VnaCcgc2V0IG9mIGFsdGVybmF0aXZlcyB0aGVuIHdlCiAgICAgICAgICAgICAgICAgLy8gaGF2
ZSBub3RoaW5nIHRvIGRvIC0gbGluayB0aGlzIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIEVuZC4K
ICAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpCi0gICAgICAgICAgICAgICAgICAgIG1f
YmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVuZE9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVuZE9wLm1fcmVlbnRyeSwg
Jm1faml0KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fcGF0dGVybi5zdGlja3koKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMg
YSBzdGlja3kgcGF0dGVybiBhbmQgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFpbGVkLCBqdW1wIHRv
IHRoZSBlbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRh
a2VCYWNrdHJhY2tzVG9KdW1wTGlzdChsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJlcywgdGhp
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNr
dHJhY2tzVG9KdW1wTGlzdChsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJlcywgJm1faml0KTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0Zp
eGVkU2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplID4gYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGJlZ2luT3At
Pm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gMSkpIHsKQEAgLTMwNDcsMTEgKzI5NzAs
MTEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gKGluIHdoaWNoIGNhc2Ugd2Ugb21pdCB0aGUgc3RvcmUgb2YgdGhl
IHN0YXJ0IGluZGV4IHVudGlsIHRoZSBwYXR0ZXJuIGhhcyBtYXRjaGVkKQogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4ganVzdCBsaW5rIHRoZSBiYWNrdHJhY2sgb3V0IG9m
IHRoZSBsYXN0IGFsdGVybmF0aXZlIHN0cmFpZ2h0IHRvIHRoZQogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaGVhZCBvZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksIHRo
aXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8o
YmVnaW5PcC0+bV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnZW5lcmF0ZSBhIHRyYW1w
b2xpbmUgb2YgY29kZSB0byBleGVjdXRlIGJlZm9yZSBsb29waW5nIGJhY2sKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFyb3VuZCB0byB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBhZHZhbmNlIGFuZCByZXRyeSBmb3Ig
YSBzdGlja3kgcGF0dGVybi4gQW5kIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBiZWZvcmUgdGhpcyBi
cmFuY2guCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5zdGlja3ko
KSk7CkBAIC0zMDU5LDEzICsyOTgyLDEzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXR0ZXJuIHNp
emUgaXMgbm90IGZpeGVkLCB0aGVuIHN0b3JlIHRoZSBzdGFydCBpbmRleCBmb3IgdXNlIGlmIHdl
IG1hdGNoLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5t
X2hhc0ZpeGVkU2l6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIz
MihpbmRleCwgSW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSAxKSwgcmVnVDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmlu
ZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSAx
KSwgbV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBpbmRleCwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRj
aFN0YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCwgbV9y
ZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFy
dChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIApAQCAtMzA3NywxNiArMzAwMCwxNiBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZGVsdGEgPSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIGJlZ2luT3AtPm1f
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGRlbHRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgIT0g
MSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoZGVsdGEgLSAx
KSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAoYmVnaW5PcC0+bV9y
ZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKGRlbHRhIC0gMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChiZWdpbk9wLT5tX3JlZW50cnkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUgaGFzIG1pbmltdW0gc2l6ZSAweEZGRkZGRkZGdSwg
dGhlbiB0aGVyZSBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZSBzdWZm
aWNlbnQgaW5wdXQgYXZhaWxhYmxlIHRvIGhhbmRsZSB0aGlzLCBzbyBqdXN0IGZhbGwgdGhyb3Vn
aC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWx0YSA9IGJlZ2luT3At
Pm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgIT0gMHhGRkZGRkZGRnUp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBp
bnB1dCBiZWNhdXNlIHdlIGFyZSBpbmNyZW1lbnRpbmcgdGhlIGlucHV0LgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihkZWx0YSArIDEpLCBpbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5PcC0+
bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGRlbHRhICsgMSksIG1fcmVncy5pbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5P
cC0+bV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzA5OSw3
ICszMDIyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
ICAgICAgICAgICAgIC8vICAgIGZvbGxvd2luZyBhIGZhaWxlZCBpbnB1dCBjaGVjay4KICAgICAg
ICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIGhhdmUganVz
dCBmYWlsZWQgdGhlIGlucHV0IGNoZWNrIGZvciB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCi0gICAg
ICAgICAgICAgICAgTGFiZWwgZmlyc3RJbnB1dENoZWNrRmFpbGVkKHRoaXMpOworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBmaXJzdElucHV0Q2hlY2tGYWlsZWQoJm1faml0
KTsKIAogICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGNvZGUgdG8gaGFuZGxlIGlucHV0IGNo
ZWNrIGZhaWx1cmVzIGZyb20gYWx0ZXJuYXRpdmVzIGV4Y2VwdCB0aGUgbGFzdC4KICAgICAgICAg
ICAgICAgICAvLyBwcmV2T3AgaXMgdGhlIGFsdGVybmF0aXZlIHdlJ3JlIGhhbmRsaW5nIGEgYmFp
bCBvdXQgZnJvbSAoaW5pdGlhbGx5IEJlZ2luKSwgYW5kCkBAIC0zMTEwLDcgKzMwMzMsNyBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAg
WWFyck9wKiBwcmV2T3AgPSBiZWdpbk9wOwogICAgICAgICAgICAgICAgIFlhcnJPcCogbmV4dE9w
ID0gJm1fb3BzW2JlZ2luT3AtPm1fbmV4dE9wXTsKICAgICAgICAgICAgICAgICB3aGlsZSAobmV4
dE9wLT5tX29wICE9IFlhcnJPcENvZGU6OkJvZHlBbHRlcm5hdGl2ZUVuZCkgewotICAgICAgICAg
ICAgICAgICAgICBwcmV2T3AtPm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJldk9wLT5tX2p1bXBzLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgICAgICAgICAv
LyBXZSBvbmx5IGdldCBoZXJlIGlmIGFuIGlucHV0IGNoZWNrIGZhaWxzLCBpdCBpcyBvbmx5IHdv
cnRoIGNoZWNraW5nIGFnYWluCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBuZXh0IGFs
dGVybmF0aXZlIGhhcyBhIG1pbmltdW0gc2l6ZSBsZXNzIHRoYW4gdGhlIGxhc3QuCkBAIC0zMTE5
LDEzICszMDQyLDEzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnRyYWN0IGRlbHRhIGJhY2sgb3V0LCBhbmQg
cmVkdWNlIHRoaXMgY29kZS4gU2hvdWxkIHBlcmZvcm1hbmNlIHRlc3QKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZSBiZW5lZml0IG9mIHRoaXMuCiAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBkZWx0YSA9IHByZXZPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAt
IG5leHRPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YjMyKEltbTMyKGRlbHRhKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgSnVtcCBmYWlsID0ganVtcElmTm9BdmFpbGFibGVJbnB1dCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkMzIoSW1tMzIoZGVsdGEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKG5leHRPcC0+bV9yZWVudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZh
aWwubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsID0ganVtcElmTm9BdmFpbGFibGVJbnB1
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKGRlbHRhKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0Lmp1bXAobmV4dE9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldk9wLT5t
X2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIDwgbmV4dE9wLT5tX2FsdGVybmF0aXZlLT5tX21p
bmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIobmV4dE9wLT5t
X2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21p
bmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKG5leHRPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6
ZSAtIHByZXZPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIHByZXZPcCA9IG5leHRPcDsKICAgICAgICAgICAgICAgICAg
ICAgbmV4dE9wID0gJm1fb3BzW25leHRPcC0+bV9uZXh0T3BdOwogICAgICAgICAgICAgICAgIH0K
QEAgLTMxMzUsMTQgKzMwNTgsMTQgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBZYXJySgogICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGluc3VmZmljaWVudCBpbnB1
dCB0byBydW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUsIHRoZW4gZm9yICdvbmNlIHRocm91Z2gnCiAg
ICAgICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmVzIHdlIGFyZSBkb25lIC0ganVzdCBqdW1wIGJh
Y2sgdXAgaW50byB0aGUgZm9yd2FyZHMgbWF0Y2hpbmcgcGF0aCBhdCB0aGUgRW5kLgogICAgICAg
ICAgICAgICAgIGlmIChvbmNlVGhyb3VnaCkgewotICAgICAgICAgICAgICAgICAgICBvcC5tX2p1
bXBzLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBq
dW1wKGVuZE9wLm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGlu
a1RvKGVuZE9wLm1fcmVlbnRyeSwgJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
anVtcChlbmRPcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBGb3IgcmVwZWF0aW5nIGFsdGVybmF0
aXZlcywgbGluayBhbnkgaW5wdXQgY2hlY2sgZmFpbHVyZSBmcm9tIHRoZSBsYXN0IGFsdGVybmF0
aXZlIHRvCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgICAgICAgICBib29sIG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ID0g
IW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplOwogCkBAIC0zMTUxLDcgKzMwNzQsNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAg
ICAgLy8gZGlzanVuY3Rpb24gaXMgMCwgZS5nLiAvYSp8Yi8pLgogICAgICAgICAgICAgICAgIGlm
IChuZWVkc1RvVXBkYXRlTWF0Y2hTdGFydCAmJiBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9
PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4IGlzIGFscmVhZHkgaW5jcmVtZW50
ZWQgYnkgMSwgc28ganVzdCBzdG9yZSBpdCBub3chCi0gICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVn
cy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0zMTY0LDIyICszMDg3LDIyIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAg
aWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IG1fcGF0dGVybi5tX2JvZHktPm1fbWlu
aW11bVNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsYXN0IGFsdGVy
bmF0aXZlIGhhZCB0aGUgc2FtZSBtaW5pbXVtIHNpemUgYXMgdGhlIGRpc2p1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBzaW1wbHkgaW5jcmVtZW50IGlucHV0IHBvcyBi
eSAxLCBubyBhZGp1c3RtZW50IGJhc2VkIG9uIG1pbmltdW0gc2l6ZS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9y
ZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBtaW51bXVtIGZvciB0aGUgbGFzdCBhbHRlcm5hdGl2ZSB3YXMg
b25lIGdyZWF0ZXIgdGhhbiB0aGFuIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZv
ciB0aGUgZGlzanVuY3Rpb24sIHdlJ3JlIGFscmVhZHkgcHJvZ3Jlc3NlZCBieSAxLCBub3RoaW5n
IHRvIGRvIQogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsdGEgPSAoYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUgLSBtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSAt
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ViMzIoSW1tMzIoZGVsdGEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGRlbHRhKSwgbV9y
ZWdzLmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBK
dW1wIG1hdGNoRmFpbGVkID0ganVtcElmTm9BdmFpbGFibGVJbnB1dCgpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtYXRjaEZhaWxlZCA9IGp1bXBJZk5vQXZhaWxh
YmxlSW5wdXQoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAobmVlZHNUb1VwZGF0ZU1hdGNo
U3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+
bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0
KGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVn
cy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9taW5p
bXVtU2l6ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0
YXJ0KHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihtX3Jl
Z3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmlt
dW1TaXplKSwgbV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRN
YXRjaFN0YXJ0KG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KIApAQCAtMzE4NywyMiArMzExMCwyMiBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0
aGUgYm9keSBhcyBhIHdob2xlLiBJZiBubyBtb3JlIGlzIG5lZWRlZCB0aGVuIHdlIGRvbnQgbmVl
ZCBhbiBhZGRpdGlvbmFsCiAgICAgICAgICAgICAgICAgICAgIC8vIGlucHV0IGNoZWNrIGhlcmUg
LSBqdW1wIHN0cmFpZ2h0IGJhY2sgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBhbHRlcm5h
dGl2ZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgPT0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXAoYmVnaW5PcC0+bV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5PcC0+bV9yZWVudHJ5KTsKICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5PcC0+bV9hbHRl
cm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA+IG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoYmVnaW5PcC0+bV9hbHRl
cm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUp
LCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBt
X3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJ
bW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplIC0gYmVnaW5PcC0+bV9hbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5PcC0+bV9yZWVudHJ5LCB0aGlzKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGp1bXAoZmlyc3RJbnB1dENoZWNrRmFpbGVkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9wYXR0ZXJu
Lm1fYm9keS0+bV9taW5pbXVtU2l6ZSAtIGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnB1
dCgpLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksICZtX2ppdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5qdW1wKGZpcnN0SW5wdXRDaGVja0ZhaWxlZCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAvLyBXZSBqdW1wIHRvIGhlcmUgaWYgd2Ug
aXRlcmF0ZSB0byB0aGUgcG9pbnQgdGhhdCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8K
ICAgICAgICAgICAgICAgICAgICAgLy8gcnVuIGFueSBtYXRjaGVzLCBhbmQgbmVlZCB0byByZXR1
cm4gYSBmYWlsdXJlIHN0YXRlIGZyb20gSklUIGNvZGUuCi0gICAgICAgICAgICAgICAgICAgIG1h
dGNoRmFpbGVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoRmFpbGVkLmxp
bmsoJm1faml0KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBsYXN0U3Rp
Y2t5QWx0ZXJuYXRpdmVGYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIGxhc3RT
dGlja3lBbHRlcm5hdGl2ZUZhaWx1cmVzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICBy
ZW1vdmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZhaWxSZXR1cm4oKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMyNjIsMTQgKzMxODUsMTQgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIGxpbmsg
dGhlIGJhY2t0cmFja3MgZGlyZWN0bHkgdG8gdGhlaXIgZGVzdGluYXRpb24uCiAgICAgICAgICAg
ICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1c3QpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGxpbmsgdGhlIGJhY2t0cmFja3MgaGVyZS4K
LSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgaW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG9wLm1f
Y2hlY2tBZGp1c3QpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
TGFzdEFsdGVybmF0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBhbHRlcm5h
dGl2ZSB0aGF0IGlzIG5vdCB0aGUgbGFzdCBzaG91bGQganVtcCB0byBpdHMgc3VjY2Vzc29yLgot
ICAgICAgICAgICAgICAgICAgICAgICAganVtcChuZXh0T3AubV9yZWVudHJ5KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0Lmp1bXAobmV4dE9wLm1fcmVlbnRyeSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWlzQmVnaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZSBsYXN0IG9mIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmVzIG11c3QganVtcCBiYWNr
IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0T3AubV9qdW1w
cy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRPcC5tX2p1bXBz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQSBzaW5nbGUgYWx0ZXJuYXRpdmUgb24gaXRzIG93biBj
YW4gZmFsbCB0aHJvdWdoLgogICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5mYWxsdGhyb3VnaCgpOwpAQCAtMzI3OCwxMCArMzIwMSwxMCBAQCBjbGFzcyBZYXJyR2Vu
ZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRs
ZSB0aGUgY2FzZXMgd2hlcmUgd2UgY2FuIGxpbmsgdGhlIGJhY2t0cmFja3MgZGlyZWN0bHkgdG8g
dGhlaXIgZGVzdGluYXRpb25zLgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTGFzdEFsdGVy
bmF0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBhbHRlcm5hdGl2ZSB0aGF0
IGlzIG5vdCB0aGUgbGFzdCBzaG91bGQganVtcCB0byBpdHMgc3VjY2Vzc29yLgotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8obmV4dE9wLm1fcmVlbnRy
eSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmtUbyhuZXh0T3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFpc0JlZ2luKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBv
ZiBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlcyBtdXN0IGp1bXAgYmFjayB0byB0aGUgYmVnaW5u
aW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFj
a3RyYWNrc1RvSnVtcExpc3QobmV4dE9wLm1fanVtcHMsIHRoaXMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobmV4
dE9wLm1fanVtcHMsICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBzaW5nbGUgYWx0ZXJuYXRpdmUgb24gaXRzIG93
biBkbyBub3RoaW5nIC0gaXQgY2FuIGZhbGwgdGhyb3VnaC4KICAgICAgICAgICAgICAgICB9CkBA
IC0zMzMxLDcgKzMyNTQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgZW5kIG9mIGEgbm9uLXNpbXBsZSBzZXQg
b2YgYWx0ZXJudGl2ZXMgd2UgbmVlZCB0byBqdW1wCiAgICAgICAgICAgICAgICAgLy8gdG8gdGhl
IGJhY2t0cmFja2luZyByZXR1cm4gYWRkcmVzcyBzZXQgdXAgZHVyaW5nIGdlbmVyYXRpb24uCiAg
ICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gWWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJuYXRp
dmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0
KTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBQbGFudCBhIGp1bXAgdG8gdGhlIHJldHVybiBh
ZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwpAQCAtMzM2OCw3ICszMjkxLDcgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICAgICAgLy8g
V2Ugb25seSBuZWVkIHRvIGJhY2t0cmFjayB0byB0aGlzIHBvaW50IGlmIGNhcHR1cmluZyBvciBn
cmVlZHkuCiAgICAgICAgICAgICAgICAgaWYgKCh0ZXJtLT5jYXB0dXJlKCkgJiYgbV9jb21waWxl
TW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSB8fCB0ZXJtLT5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkgewotICAgICAgICAgICAgICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1f
YmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IElmIGNhcHR1cmluZywgY2xlYXIgdGhlIGNhcHR1cmUgKHdlIG9ubHkgbmVlZCB0byByZXNldCBz
dGFydCkuCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkgJiYgbV9jb21w
aWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQpAQCAtMzM3OCwx
MiArMzMwMSwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5
cGU6OkdyZWVkeSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGZsYWcg
aW4gdGhlIHN0YWNrZnJhbWUgaW5kaWNhdGluZyB3ZSByYW4gdGhyb3VnaCB0aGUgc3VicGF0dGVy
bi4KICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9y
ZVRvRnJhbWUoVHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6
YmVnaW5JbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1bXAgdG8gYWZ0ZXIg
dGhlIHBhcmVudGhlc2VzLCBza2lwcGluZyB0aGUgc3VicGF0dGVybi4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5qdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrdHJhY2sgZnJvbSBhZnRlciB0aGUgcGFy
ZW50aGVzZXMsIHdoZW4gc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3aWxsIGp1bXAgYmFjayB0byBoZXJlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zMzk0LDEzICsz
MzE3LDEzIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAogICAgICAgICAgICAg
ICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBiYWNrdHJhY2sg
YmFjayBpbnRvIHRoZSBwYXJlbnRoZXNlcywgb3IgaWYgd2UKICAgICAgICAgICAgICAgICAgICAg
Ly8gYXJlIGN1cnJlbnRseSBpbiBhIHN0YXRlIHdoZXJlIHdlIGhhZCBza2lwcGVkIG92ZXIgdGhl
IHN1YnBhdHRlcm4KICAgICAgICAgICAgICAgICAgICAgLy8gKGluIHdoaWNoIGNhc2UgdGhlIGZs
YWcgdmFsdWUgb24gdGhlIHN0YWNrIHdpbGwgYmUgLTEpLgogICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwot
ICAgICAgICAgICAgICAgICAgICBKdW1wIGhhZFNraXBwZWQgPSBicmFuY2gzMihFcXVhbCwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSkgKiBzaXplb2Yodm9pZCop
KSwgVHJ1c3RlZEltbTMyKC0xKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGhhZFNraXBwZWQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNl
c09uY2U6OmJlZ2luSW5kZXgoKSkgKiBzaXplb2Yodm9pZCopKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigtMSkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0
eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRm9yIEdyZWVkeSBwYXJlbnRoZXNlcywgd2Ugc2tpcCBhZnRlciBoYXZpbmcgYWxyZWFk
eSB0cmllZCBnb2luZwpAQCAtMzQxNCw3ICszMzM3LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcg
cGF0aC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJtLT5xdWFudGl0eVR5cGUg
PT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBZ
YXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaGFkU2tpcHBlZC5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnksIHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaGFkU2tpcHBlZC5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnks
ICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBt
X2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNDM1LDcgKzMzNTgsNyBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAg
Ly8gcXVhbnRpZmllZCB3aXRoIGEgbWluaW11bSBvZiB6ZXJvKSBqdW1wIGJhY2sgdG8gdGhlIGZv
cndhcmRzIG1hdGNoaW5nCiAgICAgICAgICAgICAgICAgLy8gcGF0aCBhdCB0aGUgZW5kLgogICAg
ICAgICAgICAgICAgIFlhcnJPcCYgZW5kT3AgPSBtX29wc1tvcC5tX25leHRPcF07Ci0gICAgICAg
ICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlz
KTsKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3Jl
ZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIFlhcnJPcENvZGU6OlBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFs
RW5kOgpAQCAtMzQ2NSw0MCArMzM4OCw0MCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIAogICAgICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAotICAgICAgICAgICAg
ICAgICAgICBSZWdpc3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSByZWdUMDsKLSAgICAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSByZWdUMTsKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VyclBhcmVuQ29udGV4
dFJlZyA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbmV3UGFyZW5Db250ZXh0UmVnID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAg
ICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzOjpwYXJlbkNvbnRleHRIZWFkSW5kZXgoKSwgY3VyclBhcmVu
Q29udGV4dFJlZyk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBy
ZXN0b3JlUGFyZW5Db250ZXh0KGN1cnJQYXJlbkNvbnRleHRSZWcsIHJlZ1QyLCB0ZXJtLT5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVQ
YXJlbkNvbnRleHQoY3VyclBhcmVuQ29udGV4dFJlZywgbV9yZWdzLnJlZ1QyLCB0ZXJtLT5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0tPnBhcmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBmcmVlUGFyZW5Db250ZXh0KGN1cnJQYXJlbkNvbnRleHRSZWcsIG5ld1Bh
cmVuQ29udGV4dFJlZyk7CiAgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShuZXdQYXJl
bkNvbnRleHRSZWcsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOwogCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgY291bnRUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRUZW1wb3JhcnkgPSBt
X3JlZ3MucmVnVDA7CiAgICAgICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudElu
ZGV4KCksIGNvdW50VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgSnVtcCB6ZXJvTGVu
Z3RoTWF0Y2ggPSBicmFuY2hUZXN0MzIoWmVybywgY291bnRUZW1wb3JhcnkpOworICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB6ZXJvTGVuZ3RoTWF0Y2ggPSBtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50VGVtcG9yYXJ5KTsKIAotICAg
ICAgICAgICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVtcG9yYXJ5KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgY291bnRUZW1wb3JhcnkpOwogICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoY291bnRUZW1wb3JhcnksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAotICAgICAgICAgICAgICAgICAg
ICBqdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5qdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnkpOwogCi0gICAgICAgICAg
ICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICB6ZXJvTGVuZ3RoTWF0Y2gubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IENsZWFyIHRoZSBmbGFnIGluIHRoZSBzdGFja2ZyYW1lIGluZGljYXRpbmcgd2UgZGlkbid0IHJ1
biB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJuLgotICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoVHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNr
SW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9y
ZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKIAog
ICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJU
eXBlOjpHcmVlZHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG1fb3BzW29wLm1fbmV4
dE9wXS5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29w
c1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBH
cmVlZHksIGp1bXAgdG8gdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBIGJhY2t0cmFjayBmcm9tIGFmdGVyIHRoZSBwYXJlbnRoZXNlcywgd2hlbiBz
a2lwcGluZyB0aGUgc3VicGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwg
anVtcCBiYWNrIHRvIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTM1MTMsNyArMzQzNiw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBQYXR0ZXJu
VGVybSogdGVybSA9IG9wLm1fdGVybTsKIAogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFu
dGl0eVR5cGUgIT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9u
OwogCkBAIC0zNTIxLDcgKzM0NDQsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHNo
b3VsZCBiYWNrdHJhY2sgYmFjayBpbnRvIHRoZSBwYXJlbnRoZXNlcywgb3IgaWYgd2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gYSBzdGF0ZSB3aGVyZSB3ZSBo
YWQgc2tpcHBlZCBvdmVyIHRoZSBzdWJwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAoaW4gd2hpY2ggY2FzZSB0aGUgZmxhZyB2YWx1ZSBvbiB0aGUgc3RhY2sgd2lsbCBiZSAtMSku
Ci0gICAgICAgICAgICAgICAgICAgICAgICBKdW1wIGhhZFNraXBwZWQgPSBicmFuY2gzMihFcXVh
bCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biAgKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSkgKiBzaXplb2Yodm9p
ZCopKSwgVHJ1c3RlZEltbTMyKC0xKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBoYWRTa2lwcGVkID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gICsgQmFja1RyYWNrSW5mb1Bh
cmVudGhlc2VzOjpiZWdpbkluZGV4KCkpICogc2l6ZW9mKHZvaWQqKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoLTEpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEdy
ZWVkeSBwYXJlbnRoZXNlcywgd2Ugc2tpcCBhZnRlciBoYXZpbmcgYWxyZWFkeSB0cmllZCBnb2lu
ZwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgc3VicGF0dGVybiwgc28g
aWYgd2UgZ2V0IGhlcmUgd2UncmUgZG9uZS4KQEAgLTM1MzQsMjQgKzM0NTcsMjQgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbWF0Y2hpbmcgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJt
LT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgYmVnaW5UZW1wb3JhcnkgPSByZWdUMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRUZW1wb3Jhcnkg
PSByZWdUMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGJlZ2luVGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QwOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRUZW1wb3Jhcnkg
PSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5P
cCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGxv
YWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzOjpiZWdpbkluZGV4KCksIGJlZ2luVGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyYW5jaDMyKEVxdWFsLCBiZWdpblRlbXBvcmFyeSwgVHJ1c3RlZEltbTMyKC0xKSku
bGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYmVnaW5UZW1wb3JhcnksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpKS5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnks
ICZtX2ppdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IGV4Y2VlZGVkTWF0
Y2hMaW1pdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBleGNlZWRlZE1hdGNoTGltaXQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eU1heENvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFy
eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWVkZWRNYXRjaExpbWl0LmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIGNvdW50VGVtcG9yYXJ5LCBJbW0zMih0ZXJtLT5xdWFu
dGl0eU1heENvdW50KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VlZGVkTWF0
Y2hMaW1pdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgY291bnRUZW1wb3JhcnksIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1h
eENvdW50KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmFuY2gzMihBYm92ZSwgaW5kZXgsIGJlZ2luVGVtcG9yYXJ5KS5saW5rVG8oYmVn
aW5PcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBtX3JlZ3MuaW5kZXgsIGJlZ2luVGVtcG9yYXJ5
KS5saW5rVG8oYmVnaW5PcC5tX3JlZW50cnksICZtX2ppdCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Y2VlZGVkTWF0Y2hMaW1pdC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZWVkZWRNYXRjaExpbWl0LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91
Z2goKTsKQEAgLTM1NzMsMTcgKzM0OTYsMTcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIG9mIGEgcGFyZW50aGV0aWNhbCBhc3Nl
cnRpb24gaWYgZWl0aGVyIHdlIG5lZWQgdG8gY29ycmVjdAogICAgICAgICAgICAgICAgIC8vIHRo
ZSBpbnB1dCBpbmRleCwgb3IgdGhlIGFzc2VydGlvbiB3YXMgaW52ZXJ0ZWQuCiAgICAgICAgICAg
ICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1c3QgfHwgdGVybS0+aW52ZXJ0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1c3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGQzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG9wLm1fY2hlY2tBZGp1c3Qp
LCBtX3JlZ3MuaW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIEluIGFuIGludmVydGVk
IGFzc2VydGlvbiBmYWlsdXJlIHRvIG1hdGNoIHRoZSBzdWJwYXR0ZXJuCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGlzIHRyZWF0ZWQgYXMgYSBzdWNjZXNzZnVsIG1hdGNoIC0ganVtcCB0byB0aGUg
ZW5kIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBzdWJwYXR0ZXJuLiBXZSBhbHJlYWR5
IGhhdmUgYWRqdXN0ZWQgdGhlIGlucHV0IHBvc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJhY2sgdG8gdGhhdCBiZWZvcmUgdGhlIGFzc2VydGlvbiwgd2hpY2ggaXMgY29ycmVjdC4KICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuanVtcChlbmRPcC5tX3JlZW50cnkpOwogCiAgICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKICAgICAgICAgICAgICAgICB9CkBAIC0zNjAyLDcg
KzM1MjUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgLy8gdGhpcyBidWcgdG9vIChwcmVzdW1hYmx5IGJlY2F1c2UgdGhleSB1c2Ug
WUFSUiEpCiAKICAgICAgICAgICAgICAgICAvLyBOZXZlciBiYWNrdHJhY2sgaW50byBhbiBhc3Nl
cnRpb247IGxhdGVyIGZhaWx1cmVzIGJhaWwgdG8gYmVmb3JlIHRoZSBiZWdpbi4KLSAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChvcC5t
X2p1bXBzLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VC
YWNrdHJhY2tzVG9KdW1wTGlzdChvcC5tX2p1bXBzLCAmbV9qaXQpOwogCiAgICAgICAgICAgICAg
ICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwogICAgICAgICAgICAg
ICAgIG1fY2hlY2tlZE9mZnNldCAtPSBsYXN0T3AubV9jaGVja0FkanVzdDsKQEAgLTM2MzcsNyAr
MzU2MCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgWWFyck9wQ29kZSBhbHRlcm5hdGl2ZU5leHRPcENvZGUgPSBZYXJyT3BDb2RlOjpTaW1wbGVO
ZXN0ZWRBbHRlcm5hdGl2ZU5leHQ7CiAgICAgICAgIFlhcnJPcENvZGUgYWx0ZXJuYXRpdmVFbmRP
cENvZGUgPSBZYXJyT3BDb2RlOjpTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZDsKIAotICAgICAg
ICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSkgeworICAgICAgICBpZiAo
VU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAgICAgICAgICAgbV9mYWlsdXJlUmVh
c29uID0gSklURmFpbHVyZVJlYXNvbjo6UGFyZW50aGVzaXNOZXN0ZWRUb29EZWVwOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zNzQ4LDcgKzM2NzEsNyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgLy8gb25jZSwgYW5kIHdpbGwgbmV2
ZXIgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgYXNzZXJ0aW9uLgogICAgIHZvaWQgb3BDb21waWxl
UGFyZW50aGV0aWNhbEFzc2VydGlvbihQYXR0ZXJuVGVybSogdGVybSkKICAgICB7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghaXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFz
b24gPSBKSVRGYWlsdXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3RlZFRvb0RlZXA7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM4MzMsNyArMzc1Niw3IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAvLyB0byByZXR1cm4gdGhlIGZhaWxp
bmcgcmVzdWx0LgogICAgIHZvaWQgb3BDb21waWxlQm9keShQYXR0ZXJuRGlzanVuY3Rpb24qIGRp
c2p1bmN0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1Jl
Y3Vyc2UoKSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsK
ICAgICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhl
c2lzTmVzdGVkVG9vRGVlcDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzg5
Miw2ICszODE1LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgICAgICAgICAgaWYgKGNvbGxlY3RCb3llck1vb3JlSW5mbyhkaXNqdW5jdGlvbiwgY3VycmVu
dEFsdGVybmF0aXZlSW5kZXgsIGJtSW5mby5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICBtX29w
cy5sYXN0KCkubV9ibUluZm8gPSBibUluZm8ucHRyKCk7CiAgICAgICAgICAgICAgICAgbV9ibUlu
Zm9zLmFwcGVuZChXVEZNb3ZlKGJtSW5mbykpOworICAgICAgICAgICAgICAgIG1fdXNlc1QyID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC00MDA4LDggKzM5MzIsOSBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICBjb25zdCBCb3ll
ck1vb3JlQml0bWFwOjpNYXA6OldvcmRUeXBlKiBnZXRCb3llck1vb3JlQml0bWFwKGNvbnN0IEJv
eWVyTW9vcmVCaXRtYXA6Ok1hcCYgbWFwKQogICAgIHsKLSAgICAgICAgaWYgKGNvbnN0IGF1dG8q
IGV4aXN0aW5nUG9pbnRlciA9IG1fY29kZUJsb2NrLnRyeVJldXNlQm95ZXJNb29yZUJpdG1hcCht
YXApKQotICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQb2ludGVyOworICAgICAgICBpZiAoY29u
c3QgYXV0byogZXhpc3RpbmdQb2ludGVyID0gbV9ib3llck1vb3JlRGF0YS0+dHJ5UmV1c2VCb3ll
ck1vb3JlQml0bWFwKG1hcCkpCisgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQb2ludGVyOwor
CiAgICAgICAgIGF1dG8gaGVhcE1hcCA9IG1ha2VVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6
TWFwPihtYXApOwogICAgICAgICBjb25zdCBhdXRvKiBwb2ludGVyID0gaGVhcE1hcC0+c3RvcmFn
ZSgpOwogICAgICAgICBtX2JtTWFwcy5hcHBlbmQoV1RGTW92ZShoZWFwTWFwKSk7CkBAIC00MDI0
LDY0ICszOTQ5LDY0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
IAogICAgICAgICBBU1NFUlQobV9kZWNvZGVTdXJyb2dhdGVQYWlycyk7CiAKLSAgICAgICAgbV90
cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgbV90cnlSZWFk
VW5pY29kZUNoYXJhY3RlckVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAotICAgICAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgICAgIG1faml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgICAg
ICB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKHJlZ1QwKTsKKyAgICAgICAgdHJ5UmVhZFVuaWNvZGVD
aGFySW1wbChtX3JlZ3MucmVnVDApOwogCi0gICAgICAgIHJldCgpOworICAgICAgICBtX2ppdC5y
ZXQoKTsKICNlbmRpZgogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVFbnRlcigpCiAgICAgewog
I2lmIENQVShYODZfNjQpCi0gICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwotICAgICAg
ICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVicCk7CisgICAgICAg
IG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplYnApOwogCiAg
ICAgICAgIGlmIChtX3BhdHRlcm4ubV9zYXZlSW5pdGlhbFN0YXJ0VmFsdWUpCi0gICAgICAgICAg
ICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVn
aXN0ZXJzOjplYngpOwogCiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAgcHVzaChYODZSZWdpc3Rl
cnM6OmVkaSk7CisgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjplZGkpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlm
IChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpIHsKICNpZiBPUyhXSU5ET1dTKQotICAgICAg
ICAgICAgcHVzaChYODZSZWdpc3RlcnM6OmVzaSk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZXNpKTsKICNlbmRpZgotICAgICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6
OnIxMik7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6cjEyKTsKICAgICAg
ICAgfQogI2VuZGlmCiAKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAg
ICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTMpOwotICAgICAgICAgICAgcHVzaChYODZS
ZWdpc3RlcnM6OnIxNCk7Ci0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6cjE1KTsKKyAg
ICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjpyMTMpOworICAgICAgICAgICAgbV9q
aXQucHVzaChYODZSZWdpc3RlcnM6OnIxNCk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6cjE1KTsKICAgICAgICAgfQogI2lmIE9TKFdJTkRPV1MpCiAgICAgICAgIGlmICht
X2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCi0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDYgKiBzaXplb2Yodm9p
ZCopKSwgb3V0cHV0KTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDYgKiBzaXplb2Yodm9pZCopKSwgbV9yZWdzLm91
dHB1dCk7CiAgICAgICAgIC8vIHJjeCBpcyB0aGUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIHNw
YWNlIGZvciByZXN1bHQgaW4geDY0IFdpbmRvd3MuCi0gICAgICAgIHB1c2goWDg2UmVnaXN0ZXJz
OjplY3gpOworICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWN4KTsKICNlbmRpZgog
I2VsaWYgQ1BVKEFSTTY0KQogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAg
ICAgICAgICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICAgICAgICAgIG1faml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAg
ICAgICAgIGlmICghT3B0aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgICAgIHB1c2hQ
YWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMHgxMDAwMCksIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZDgwMCksIGxlYWRpbmdTdXJyb2dhdGVUYWcpOwot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhkYzAwKSwgdHJhaWxpbmdTdXJyb2dhdGVU
YWcpOworICAgICAgICAgICAgICAgIG1faml0LnB1c2hQYWlyKE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OmxpbmtSZWdpc3Rlcik7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgxMDAwMCksIG1f
cmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkODAwKSwgbV9yZWdzLmxlYWRpbmdTdXJyb2dh
dGVUYWcpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDB4ZGMwMCksIG1fcmVncy50cmFpbGluZ1N1cnJvZ2F0ZVRhZyk7CiAgICAgICAgIH0KICNl
bGlmIENQVShBUk1fVEhVTUIyKQotICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjQpOwotICAg
ICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjUpOwotICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6
cjYpOwotICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjgpOwotICAgICAgICBwdXNoKEFSTVJl
Z2lzdGVyczo6cjEwKTsKKyAgICAgICAgbV9qaXQucHVzaChBUk1SZWdpc3RlcnM6OnI0KTsKKyAg
ICAgICAgbV9qaXQucHVzaChBUk1SZWdpc3RlcnM6OnI1KTsKKyAgICAgICAgbV9qaXQucHVzaChB
Uk1SZWdpc3RlcnM6OnI2KTsKKyAgICAgICAgbV9qaXQucHVzaChBUk1SZWdpc3RlcnM6OnI4KTsK
KyAgICAgICAgbV9qaXQucHVzaChBUk1SZWdpc3RlcnM6OnIxMCk7CiAjZWxpZiBDUFUoTUlQUykK
ICAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgpAQCAtNDA4OSw3MCArNDAxNCw3OSBAQCBj
bGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICB2b2lkIGdlbmVy
YXRlUmV0dXJuKCkKICAgICB7CisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElO
RSkKKyAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OklubGluZVRl
c3QpIHsKKyAgICAgICAgICAgIG1faW5saW5lZE1hdGNoZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorCiAjaWYgQ1BVKFg4Nl82
NCkKICNpZiBPUyhXSU5ET1dTKQogICAgICAgICAvLyBTdG9yZSB0aGUgcmV0dXJuIHZhbHVlIGlu
IHRoZSBhbGxvY2F0ZWQgc3BhY2UgcG9pbnRlZCBieSByY3guCi0gICAgICAgIHBvcChYODZSZWdp
c3RlcnM6OmVjeCk7Ci0gICAgICAgIHN0b3JlNjQocmV0dXJuUmVnaXN0ZXIsIEFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjplY3gpKTsKLSAgICAgICAgc3RvcmU2NChyZXR1cm5SZWdpc3RlcjIsIEFkZHJl
c3MoWDg2UmVnaXN0ZXJzOjplY3gsIHNpemVvZih2b2lkKikpKTsKLSAgICAgICAgbW92ZShYODZS
ZWdpc3RlcnM6OmVjeCwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5wb3AoWDg2UmVn
aXN0ZXJzOjplY3gpOworICAgICAgICBtX2ppdC5zdG9yZTY0KG1fcmVncy5yZXR1cm5SZWdpc3Rl
ciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplY3gpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmU2NChtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhYODZSZWdpc3RlcnM6OmVjeCwgc2l6ZW9mKHZvaWQqKSkpOworICAgICAgICBtX2ppdC5t
b3ZlKFg4NlJlZ2lzdGVyczo6ZWN4LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogI2VuZGlmCiAg
ICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBwb3AoWDg2
UmVnaXN0ZXJzOjpyMTUpOwotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjE0KTsKLSAg
ICAgICAgICAgIHBvcChYODZSZWdpc3RlcnM6OnIxMyk7CisgICAgICAgICAgICBtX2ppdC5wb3Ao
WDg2UmVnaXN0ZXJzOjpyMTUpOworICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6
cjE0KTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OnIxMyk7CiAgICAgICAg
IH0KIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgICAg
ICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKSB7Ci0gICAgICAgICAgICBwb3AoWDg2
UmVnaXN0ZXJzOjpyMTIpOworICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjEy
KTsKICNpZiBPUyhXSU5ET1dTKQotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZXNpKTsK
KyAgICAgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OmVzaSk7CiAjZW5kaWYKICAgICAg
ICAgfQogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6
ZWRpKTsKKyAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWRpKTsKICNlbmRpZgogCiAg
ICAgICAgIGlmIChtX3BhdHRlcm4ubV9zYXZlSW5pdGlhbFN0YXJ0VmFsdWUpCi0gICAgICAgICAg
ICBwb3AoWDg2UmVnaXN0ZXJzOjplYngpOwotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplYnAp
OworICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKyAgICAgICAgbV9q
aXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlmIENQVShBUk02NCkKICAgICAgICAgaWYg
KG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIGlmICghT3B0aW9uczo6dXNl
SklUQ2FnZSgpKQotICAgICAgICAgICAgICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IGxpbmtSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQucG9wUGFpcihNYWNyb0Fzc2Vt
Ymxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIp
OwogICAgICAgICB9CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgcG9wKEFSTVJlZ2lz
dGVyczo6cjEwKTsKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjgpOwotICAgICAgICBwb3Ao
QVJNUmVnaXN0ZXJzOjpyNik7Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI1KTsKLSAgICAg
ICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJz
OjpyMTApOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyOCk7CisgICAgICAgIG1f
aml0LnBvcChBUk1SZWdpc3RlcnM6OnI2KTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJlZ2lzdGVy
czo6cjUpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyNCk7CiAjZWxpZiBDUFUo
TUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCiAjaWYgQ1BVKEFSTTY0RSkKICAg
ICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgIGZhckp1bXAoVHJ1
c3RlZEltbVB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgT3BlcmF0aW9u
UHRyVGFnPigmdm1FbnRyeVRvWWFyckpJVEFmdGVyKSksIE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgICAgICBtX2ppdC5mYXJKdW1wKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBPcGVyYXRpb25QdHJUYWc+KCZ2bUVudHJ5
VG9ZYXJySklUQWZ0ZXIpKSwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmV0KCk7CisgICAgICAgICAgICBtX2ppdC5yZXQoKTsKICNlbHNlCi0gICAgICAgIHJl
dCgpOworICAgICAgICBtX2ppdC5yZXQoKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgbG9h
ZFN1YlBhdHRlcm4oUmVnaXN0ZXJJRCBvdXRwdXRHUFIsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwg
UmVnaXN0ZXJJRCBzdGFydEluZGV4R1BSLCBSZWdpc3RlcklEIGVuZEluZGV4T3JMZW5HUFIpCisg
ICAgdm9pZCBsb2FkU3ViUGF0dGVybihNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBvdXRwdXRH
UFIsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgc3Rh
cnRJbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZW5kSW5kZXhPckxlbkdQUikK
ICAgICB7Ci0gICAgICAgIGxvYWRQYWlyMzIob3V0cHV0R1BSLCBUcnVzdGVkSW1tMzIoKHN1YnBh
dHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSwgc3RhcnRJbmRleEdQUiwgZW5kSW5kZXhPckxl
bkdQUik7CisgICAgICAgIG1faml0LmxvYWRQYWlyMzIob3V0cHV0R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHN0YXJ0
SW5kZXhHUFIsIGVuZEluZGV4T3JMZW5HUFIpOwogICAgIH0KIAogcHVibGljOgotICAgIFlhcnJH
ZW5lcmF0b3IoVk0qIHZtLCBZYXJyUGF0dGVybiYgcGF0dGVybiwgU3RyaW5nJiBwYXR0ZXJuU3Ry
aW5nLCBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2ssIENoYXJTaXplIGNoYXJTaXplLCBKSVRDb21w
aWxlTW9kZSBjb21waWxlTW9kZSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIFlhcnJHZW5lcmF0
b3IoTWFjcm9Bc3NlbWJsZXImIGppdCwgY29uc3QgVk0qIHZtLCBZYXJyQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IFlhcnJKSVRSZWdzJiByZWdzLCBZYXJyUGF0dGVybiYgcGF0dGVybiwgY29u
c3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBDaGFyU2l6ZSBjaGFyU2l6ZSwgSklUQ29tcGlsZU1v
ZGUgY29tcGlsZU1vZGUpCisgICAgICAgIDogbV9qaXQoaml0KQorICAgICAgICAsIG1fdm0odm0p
CisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fcmVncyhyZWdz
KQogICAgICAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQogICAgICAgICAsIG1fcGF0dGVyblN0cmlu
ZyhwYXR0ZXJuU3RyaW5nKQotICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAg
ICAgLCBtX2NoYXJTaXplKGNoYXJTaXplKQogICAgICAgICAsIG1fY29tcGlsZU1vZGUoY29tcGls
ZU1vZGUpCiAgICAgICAgICwgbV9kZWNvZGVTdXJyb2dhdGVQYWlycyhtX2NoYXJTaXplID09IENo
YXJTaXplOjpDaGFyMTYgJiYgbV9wYXR0ZXJuLnVuaWNvZGUoKSkKQEAgLTQxNjMsMTEgKzQwOTcs
NDcgQEAgcHVibGljOgogICAgICAgICAsIG1fcGFyZW5Db250ZXh0U2l6ZXMoY29tcGlsZU1vZGUg
PT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyA/IG1fcGF0dGVybi5tX251bVN1
YnBhdHRlcm5zIDogMCwgbV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKQogI2VuZGlm
CiAgICAgeworICAgICAgICBtX2JveWVyTW9vcmVEYXRhID0gZHluYW1pY19jYXN0PFlhcnJCb3ll
ck1veWVyRGF0YSo+KG1fY29kZUJsb2NrKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGUoKQor
ICAgIFlhcnJHZW5lcmF0b3IoTWFjcm9Bc3NlbWJsZXImIGppdCwgY29uc3QgVk0qIHZtLCBZYXJy
Qm95ZXJNb3llckRhdGEqIHlhcnJCTURhdGEsIGNvbnN0IFlhcnJKSVRSZWdzJiByZWdzLCBZYXJy
UGF0dGVybiYgcGF0dGVybiwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBDaGFyU2l6ZSBj
aGFyU2l6ZSwgSklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUpCisgICAgICAgIDogbV9qaXQoaml0
KQorICAgICAgICAsIG1fdm0odm0pCisgICAgICAgICwgbV9jb2RlQmxvY2sobnVsbHB0cikKKyAg
ICAgICAgLCBtX2JveWVyTW9vcmVEYXRhKHlhcnJCTURhdGEpCisgICAgICAgICwgbV9yZWdzKHJl
Z3MpCisgICAgICAgICwgbV9wYXR0ZXJuKHBhdHRlcm4pCisgICAgICAgICwgbV9wYXR0ZXJuU3Ry
aW5nKHBhdHRlcm5TdHJpbmcpCisgICAgICAgICwgbV9jaGFyU2l6ZShjaGFyU2l6ZSkKKyAgICAg
ICAgLCBtX2NvbXBpbGVNb2RlKGNvbXBpbGVNb2RlKQorICAgICAgICAsIG1fZGVjb2RlU3Vycm9n
YXRlUGFpcnMobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjE2ICYmIG1fcGF0dGVybi51bmlj
b2RlKCkpCisgICAgICAgICwgbV91bmljb2RlSWdub3JlQ2FzZShtX3BhdHRlcm4udW5pY29kZSgp
ICYmIG1fcGF0dGVybi5pZ25vcmVDYXNlKCkpCisgICAgICAgICwgbV9jYW5vbmljYWxNb2RlKG1f
cGF0dGVybi51bmljb2RlKCkgPyBDYW5vbmljYWxNb2RlOjpVbmljb2RlIDogQ2Fub25pY2FsTW9k
ZTo6VUNTMikKKyNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAg
ICAgICAgLCBtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMoZmFsc2UpCisgICAgICAgICwgbV9w
YXJlbkNvbnRleHRTaXplcyhjb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1
YnBhdHRlcm5zID8gbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMgOiAwLCBtX3BhdHRlcm4ubV9i
b2R5LT5tX2NhbGxGcmFtZVNpemUpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9jb250YWluc0JhY2tyZWZlcmVuY2VzKQorICAgICAgICAgICAgbV91c2VzVDIgPSB0cnVl
OworICAgIH0KKworICAgIGJvb2wgaXNTYWZlVG9SZWN1cnNlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyKQorICAgICAgICAgICAgcmV0
dXJuIG1fY29tcGlsYXRpb25UaHJlYWRTdGFja0NoZWNrZXItPmlzU2FmZVRvUmVjdXJzZSgpOwor
CisgICAgICAgIHJldHVybiBtX3ZtLT5pc1NhZmVUb1JlY3Vyc2UoKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFN0YWNrQ2hlY2tlcihTdGFja0NoZWNrKiBzdGFja0NoZWNrZXIpCiAgICAgewotICAg
ICAgICBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICAgICAgbV9j
b21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciA9IHN0YWNrQ2hlY2tlcjsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbXBpbGUoWWFyckNvZGVCbG9jayYgY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0T2ZNYWluQ29kZTsKIAogI2lmICFFTkFCTEUoWUFS
Ul9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRl
UGFpcnMpIHsKQEAgLTQxOTgsNyArNDE2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZGlz
YXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxZYXJyRGlzYXNzZW1ibGVyPih0aGlzKTsKIAogICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3Rh
cnRPZkNvZGUobGFiZWwoKSk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRP
ZkNvZGUobV9qaXQubGFiZWwoKSk7CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19F
WFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykKQEAg
LTQyMDcsNDIgKzQxNzcsNDYgQEAgcHVibGljOgogCiAgICAgICAgIGdlbmVyYXRlRW50ZXIoKTsK
IAotICAgICAgICBKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOworICAgICAgICBzdGFydE9m
TWFpbkNvZGUgPSBtX2ppdC5sYWJlbCgpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOwogICAgICAgICBnZW5lcmF0ZUZhaWxSZXR1cm4oKTsK
LSAgICAgICAgaGFzSW5wdXQubGluayh0aGlzKTsKKyAgICAgICAgaGFzSW5wdXQubGluaygmbV9q
aXQpOwogCiAgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxs
RnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOwogICAg
ICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHN0
YWNrIHNpemUKLSAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJ
bkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRl
cyksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9yZWdzLnJlZ1QwKTsK
ICNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQogICAgICAgICAgICAgLy8gbWF0Y2hpbmdD
b250ZXh0IGlzIHRoZSA1dGggYXJndW1lbnQsIGl0IGlzIGZvdW5kIG9uIHRoZSBzdGFjay4KLSAg
ICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gcmVnVDE7Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDcgKiBzaXplb2Yodm9pZCopKSwg
bWF0Y2hpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5yZWdUMTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDcgKiBzaXplb2Yo
dm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKICNlbGlmIENQVShBUk1fVEhVTUIyKSB8fCBDUFUo
TUlQUykKICAgICAgICAgICAgIC8vIG1hdGNoaW5nQ29udGV4dCBpcyB0aGUgNXRoIGFyZ3VtZW50
LCBpdCBpcyBmb3VuZCBvbiB0aGUgc3RhY2suCi0gICAgICAgICAgICBSZWdpc3RlcklEIG1hdGNo
aW5nQ29udGV4dCA9IHJlZ1QxOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQqKSksIG1hdGNoaW5nQ29udGV4dCk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBtX3Jl
Z3MucmVnVDE7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgNCAqIHNpemVvZih2b2lk
KikpLCBtYXRjaGluZ0NvbnRleHQpOworI2Vsc2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5tYXRjaGluZ0NvbnRleHQ7CiAj
ZW5kaWYKLSAgICAgICAgICAgIEp1bXAgc3RhY2tPayA9IGJyYW5jaFB0cihCZWxvd09yRXF1YWws
IEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9m
U3RhY2tMaW1pdCgpKSwgcmVnVDApOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3RhY2tPayA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhv
bGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkpLCBtX3JlZ3MucmVnVDApOwogCiAgICAgICAgICAg
ICAvLyBFeGNlZWRlZCBzdGFjayBsaW1pdCwgcHVudCB0byB0aGUgaW50ZXJwcmV0ZXIuCi0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oSlNS
ZWdFeHBSZXN1bHQ6OkpJVENvZGVGYWlsdXJlKSksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdpc3RlcjIpOworICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nh
c3Q8c2l6ZV90PihKU1JlZ0V4cFJlc3VsdDo6SklUQ29kZUZhaWx1cmUpKSwgbV9yZWdzLnJldHVy
blJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyMik7CiAgICAgICAgICAgICBnZW5lcmF0
ZVJldHVybigpOwogCi0gICAgICAgICAgICBzdGFja09rLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICBtb3ZlKHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBzdGFja09r
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLnJlZ1QwLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICB9CiAKICNpZiBFTkFC
TEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vy
cm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBnZXRFZmZlY3RpdmVBZGRyZXNzKEJhc2VJbmRleChp
bnB1dCwgbGVuZ3RoLCBUaW1lc1R3byksIGVuZE9mU3RyaW5nQWRkcmVzcyk7CisgICAgICAgICAg
ICBtX2ppdC5nZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9y
ZWdzLmlucHV0LCBtX3JlZ3MubGVuZ3RoLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCBtX3Jl
Z3MuZW5kT2ZTdHJpbmdBZGRyZXNzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FM
TF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0
dGVybnMpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihtYXRjaExpbWl0KSwgcmVtYWlu
aW5nTWF0Y2hDb3VudCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIobWF0Y2hMaW1pdCksIG1fcmVncy5yZW1haW5pbmdNYXRjaENvdW50KTsKICNl
bmRpZgogCiAgICAgICAgIC8vIEluaXRpYWxpemUgc3VicGF0dGVybnMnIHN0YXJ0cy4gQW5kIGlu
aXRpYWxpemUgbWF0Y2hTdGFydCBpZiBgIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXpl
YC4KQEAgLTQyNTEsMTQgKzQyMjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgdW5zaWduZWQg
c3VicGF0dGVybklkID0gMDsKICAgICAgICAgICAgIC8vIEZpcnN0IHN1YnBhdHRlcm5JZCdzIHN0
YXJ0IGlzIGNvbmZpZ3VyZWQgdG8gYGluZGV4YCBpZiAhbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNG
aXhlZFNpemUuCiAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRT
aXplKSB7Ci0gICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAg
ICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICsrc3Vi
cGF0dGVybklkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yICg7IHN1YnBhdHRlcm5J
ZCA8IG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zICsgMTsgKytzdWJwYXR0ZXJuSWQpCi0gICAg
ICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoLTEpLCBBZGRyZXNzKG91dHB1dCwgKHN1
YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHkt
Pm1faGFzRml4ZWRTaXplKQotICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCkBAIC00MjcyLDQ1
ICs0MjQ2LDYzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAKICAgICAgICAgaWYgKG1fcGF0
dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAgICAgICAgIG1vdmUoaW5kZXgsIGlu
aXRpYWxTdGFydCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwgbV9yZWdz
LmluaXRpYWxTdGFydCk7CiAKICAgICAgICAgZ2VuZXJhdGUoKTsKICAgICAgICAgaWYgKG1fZGlz
YXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mR2VuZXJhdGUo
bGFiZWwoKSk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZHZW5lcmF0ZSht
X2ppdC5sYWJlbCgpKTsKICAgICAgICAgYmFja3RyYWNrKCk7CiAgICAgICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkJhY2t0cmFjayhs
YWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkJhY2t0cmFjayht
X2ppdC5sYWJlbCgpKTsKKworICAgICAgICBwdHJkaWZmX3QgY29kZVNpemUgPSBNYWNyb0Fzc2Vt
Ymxlcjo6ZGlmZmVyZW5jZUJldHdlZW4oc3RhcnRPZk1haW5Db2RlLCBtX2ppdC5sYWJlbCgpKTsK
KyAgICAgICAgYm9vbCBjYW5JbmxpbmUgPSBtX2NvbXBpbGVNb2RlICE9IEpJVENvbXBpbGVNb2Rl
OjpJbmNsdWRlU3VicGF0dGVybnMKKyAgICAgICAgICAgICYmICFtX3BhdHRlcm4uZ2xvYmFsKCkg
JiYgIW1fcGF0dGVybi5zdGlja3koKSAmJiAhbV9wYXR0ZXJuLnVuaWNvZGUoKQorI2lmIEVOQUJM
RShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgICAgICAgICAgJiYgIW1fY29u
dGFpbnNOZXN0ZWRTdWJwYXR0ZXJucworI2VuZGlmCisgICAgICAgICAgICAmJiAhbV9wYXR0ZXJu
Lm1fY29udGFpbnNCYWNrcmVmZXJlbmNlczsKIAogICAgICAgICBnZW5lcmF0ZVRyeVJlYWRVbmlj
b2RlQ2hhcmFjdGVySGVscGVyKCk7CiAKICAgICAgICAgZ2VuZXJhdGVKSVRGYWlsUmV0dXJuKCk7
CiAKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRFbmRPZkNvZGUobV9qaXQubGFiZWwoKSk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6WWFyckpJVCwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRv
QWxsb2NhdGUoKSkgewotICAgICAgICAgICAgY29kZUJsb2NrLnNldEZhbGxCYWNrV2l0aEZhaWx1
cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWls
dXJlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBiYWNrdHJhY2tSZWNvcmRz
ID0gbV9iYWNrdHJhY2tpbmdTdGF0ZS5iYWNrdHJhY2tSZWNvcmRzKCk7CisgICAgICAgIGlmICgh
YmFja3RyYWNrUmVjb3Jkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIEJhY2t0
cmFja2luZ1N0YXRlOjpsaW5rQmFja3RyYWNrUmVjb3JkcyhsaW5rQnVmZmVyLCBiYWNrdHJhY2tS
ZWNvcmRzKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3Ry
eVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxOb1B0clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJF
bnRyeSk7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4g
dHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9Q
dHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSk7CiAKLSAgICAgICAgICAgIGZv
ciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzKQotICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBl
cik7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2RlQ2hh
cmFjdGVyQ2FsbHMpCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcik7CisgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZl
cik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihtX2ppdCwgUkVHRVhQX0NPREVfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OllhcnJKSVQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgICAg
IGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKEpJVEZhaWx1cmVSZWFzb246
OkV4ZWN1dGFibGVNZW1vcnlBbGxvY2F0aW9uRmFpbHVyZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+ZHVtcChsaW5rQnVmZmVyKTsKIAogICAgICAgICBpZiAobV9jb21waWxl
TW9kZSA9PSBKSVRDb21waWxlTW9kZTo6TWF0Y2hPbmx5KSB7Ci0gICAgICAgICAgICBpZiAobV9j
aGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpCisgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9
PSBDaGFyU2l6ZTo6Q2hhcjgpIHsKICAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENv
ZGVNYXRjaE9ubHkoRklOQUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlciwgWWFyck1hdGNoT25s
eThCaXRQdHJUYWcsICJNYXRjaC1vbmx5IDgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCBXVEZN
b3ZlKG1fYm1NYXBzKSk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29kZUJs
b2NrLnNldDhCaXRJbmxpbmVTdGF0cyhjb2RlU2l6ZSwgY2FsbEZyYW1lU2l6ZUluQnl0ZXMsIGNh
bklubGluZSwgbV91c2VzVDIpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBjb2RlQmxvY2suc2V0MTZCaXRDb2RlTWF0Y2hPbmx5KEZJTkFMSVpFX1JFR0VYUF9DT0RFKGxp
bmtCdWZmZXIsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZywgIk1hdGNoLW9ubHkgMTYtYml0IHJl
Z3VsYXIgZXhwcmVzc2lvbiIpLCBXVEZNb3ZlKG1fYm1NYXBzKSk7CisgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLnNldDE2Qml0SW5saW5lU3RhdHMoY29kZVNpemUsIGNhbGxGcmFtZVNpemVJbkJ5
dGVzLCBjYW5JbmxpbmUsIG1fdXNlc1QyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkKICAgICAg
ICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklOQUxJWkVfUkVHRVhQX0NPREUobGlu
a0J1ZmZlciwgWWFycjhCaXRQdHJUYWcsICI4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSwgV1RG
TW92ZShtX2JtTWFwcykpOwpAQCAtNDMyMSw2ICs0MzEzLDEwMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbigqbV9mYWlsdXJlUmVh
c29uKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQor
ICAgIHZvaWQgY29tcGlsZUlubGluZShZYXJyQm95ZXJNb3llckRhdGEmIGJveWVyTW9vcmVEYXRh
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGF0dGVybi5tX2NvbnRhaW5zQmFj
a3JlZmVyZW5jZXMpOworCisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSBiZWZvcmUgZ2Vu
ZXJhdGluZyBjb2RlIHNpbmNlIHdlIHNldCBmbGFncyBiYXNlZCBvbiBjb21waWxhdGlvbiB0aGF0
CisgICAgICAgIC8vIGFyZSB1c2VkIGR1cmluZyBnZW5lcmF0aW9uLgorICAgICAgICBvcENvbXBp
bGVCb2R5KG1fcGF0dGVybi5tX2JvZHkpOworCisjaWZuZGVmIEpJVF9VTklDT0RFX0VYUFJFU1NJ
T05TCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpOworI2VuZGlm
CisKKyAgICAgICAgQVNTRVJUKCFtX2ZhaWx1cmVSZWFzb24pOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fdXNlc1QyKQorICAgICAgICAgICAgQVNTRVJUKG1fcmVncy5yZWdUMiAhPSBNYWNyb0Fz
c2VtYmxlcjo6SW52YWxpZEdQUlJlZyk7CisKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBSZWdFeHBEaXNhc3NlbWJseSgpKSkK
KyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxZYXJyRGlzYXNzZW1ibGVy
Pih0aGlzKTsKKworICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobV9qaXQubGFiZWwoKSk7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaGFzSW5wdXQgPSBjaGVja0lucHV0KCk7CisgICAgICAgIGdlbmVy
YXRlRmFpbFJldHVybigpOworICAgICAgICBoYXNJbnB1dC5saW5rKCZtX2ppdCk7CisKKyAgICAg
ICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5
dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CisgICAgICAgIGlmIChjYWxs
RnJhbWVTaXplSW5CeXRlcykgeworICAgICAgICAgICAgLy8gQ3JlYXRlIHNwYWNlIG9uIHN0YWNr
IGZvciBtYXRjaGluZyBjb250ZXh0IGRhdGEuCisgICAgICAgICAgICBtX2ppdC5hZGRQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtY2FsbEZyYW1lU2l6ZUluQnl0ZXMpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgICAgIH0KKworI2lmZGVmIEpJVF9VTklDT0RFX0VYUFJFU1NJT05T
CisgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKQorICAgICAgICAgICAgbV9qaXQu
Z2V0RWZmZWN0aXZlQWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5pbnB1
dCwgbV9yZWdzLmxlbmd0aCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgbV9yZWdzLmVuZE9m
U3RyaW5nQWRkcmVzcyk7CisjZW5kaWYKKworI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5T
X0VYUFJFU1NJT05TKQorICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKQor
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1hdGNo
TGltaXQpLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3VudCk7CisjZW5kaWYKKworICAgICAgICBp
ZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXR0ZXJuLm1fbnVtU3Vi
cGF0dGVybnMgKyAxOyArK2kpCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZWdz
Lm91dHB1dCwgKGkgPDwgMSkgKiBzaXplb2YoaW50KSkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkKKyAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQobV9yZWdzLmluZGV4KTsKKworICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUlu
aXRpYWxTdGFydFZhbHVlKQorICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuaW5kZXgsIG1f
cmVncy5pbml0aWFsU3RhcnQpOworCisgICAgICAgIGdlbmVyYXRlKCk7CisgICAgICAgIGlmICht
X2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkdlbmVy
YXRlKG1faml0LmxhYmVsKCkpOworICAgICAgICBiYWNrdHJhY2soKTsKKyAgICAgICAgaWYgKG1f
ZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQmFja3Ry
YWNrKG1faml0LmxhYmVsKCkpOworCisgICAgICAgIGdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFy
YWN0ZXJIZWxwZXIoKTsKKworICAgICAgICBnZW5lcmF0ZUpJVEZhaWxSZXR1cm4oKTsKKworICAg
ICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZDb2RlKG1faml0LmxhYmVsKCkpOworCisgICAgICAgIG1faW5saW5lZEZhaWxlZE1hdGNo
LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9pbmxpbmVkTWF0Y2hlZC5saW5rKCZtX2ppdCk7CisK
KyAgICAgICAgYXV0byBiYWNrdHJhY2tSZWNvcmRzID0gbV9iYWNrdHJhY2tpbmdTdGF0ZS5iYWNr
dHJhY2tSZWNvcmRzKCk7CisgICAgICAgIGlmICghYmFja3RyYWNrUmVjb3Jkcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIEJhY2t0cmFja2luZ1N0YXRlOjpsaW5rQmFja3RyYWNr
UmVjb3JkcyhsaW5rQnVmZmVyLCBiYWNrdHJhY2tSZWNvcmRzKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0
clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8gY2FsbCA6IG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscykK
KyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2Rl
Q2hhcmFjdGVySGVscGVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
Ym95ZXJNb29yZURhdGEuc2F2ZU1hcHMoV1RGTW92ZShtX2JtTWFwcykpOworICAgIH0KKyNlbmRp
ZgorCiAgICAgY29uc3QgY2hhciogdmFyaWFudCgpIGZpbmFsCiAgICAgewogICAgICAgICBpZiAo
bV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6TWF0Y2hPbmx5KSB7CkBAIC00NTI2LDEy
ICs0NjE0LDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVk0qIG1fdm07Cisg
ICAgTWFjcm9Bc3NlbWJsZXImIG1faml0OworICAgIGNvbnN0IFZNKiBtX3ZtOworICAgIFlhcnJD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFlhcnJCb3llck1veWVyRGF0YSogbV9ib3llck1v
b3JlRGF0YTsKKyAgICBjb25zdCBZYXJySklUUmVncyYgbV9yZWdzOwogCisgICAgU3RhY2tDaGVj
ayogbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciB7IG51bGxwdHIgfTsKICAgICBZYXJy
UGF0dGVybiYgbV9wYXR0ZXJuOwotICAgIFN0cmluZyYgbV9wYXR0ZXJuU3RyaW5nOworICAgIGNv
bnN0IFN0cmluZyYgbV9wYXR0ZXJuU3RyaW5nOwogCi0gICAgWWFyckNvZGVCbG9jayYgbV9jb2Rl
QmxvY2s7CiAgICAgQ2hhclNpemUgbV9jaGFyU2l6ZTsKICAgICBKSVRDb21waWxlTW9kZSBtX2Nv
bXBpbGVNb2RlOwogCkBAIC00NTQxLDE1ICs0NjMzLDE5IEBAIHByaXZhdGU6CiAKICAgICBib29s
IG1fZGVjb2RlU3Vycm9nYXRlUGFpcnM7CiAgICAgYm9vbCBtX3VuaWNvZGVJZ25vcmVDYXNlOwor
ICAgIGJvb2wgbV91c2VzVDI7CiAgICAgQ2Fub25pY2FsTW9kZSBtX2Nhbm9uaWNhbE1vZGU7CiAj
aWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgYm9vbCBtX2Nv
bnRhaW5zTmVzdGVkU3VicGF0dGVybnM7CiAgICAgUGFyZW5Db250ZXh0U2l6ZXMgbV9wYXJlbkNv
bnRleHRTaXplczsKICNlbmRpZgotICAgIEp1bXBMaXN0IG1fYWJvcnRFeGVjdXRpb247Ci0gICAg
SnVtcExpc3QgbV9oaXRNYXRjaExpbWl0OwotICAgIFZlY3RvcjxDYWxsPiBtX3RyeVJlYWRVbmlj
b2RlQ2hhcmFjdGVyQ2FsbHM7Ci0gICAgTGFiZWwgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVu
dHJ5OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Fib3J0RXhlY3V0aW9uOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2hpdE1hdGNoTGltaXQ7CisgICAgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyOjpDYWxsPiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHM7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeTsKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2lubGluZWRNYXRjaGVkOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBtX2lubGluZWRGYWlsZWRNYXRjaDsKIAogICAgIC8vIFRoZSBy
ZWd1bGFyIGV4cHJlc3Npb24gZXhwcmVzc2VkIGFzIGEgbGluZWFyIHNlcXVlbmNlIG9mIG9wZXJh
dGlvbnMuCiAgICAgVmVjdG9yPFlhcnJPcCwgMTI4PiBtX29wczsKQEAgLTQ2MDYsNyArNDcwMiwx
MyBAQCBzdGF0aWMgdm9pZCBkdW1wQ29tcGlsZUZhaWx1cmUoSklURmFpbHVyCiAKIHZvaWQgaml0
Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBDaGFy
U2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2ssIEpJVENvbXBp
bGVNb2RlIG1vZGUpCiB7Ci0gICAgWWFyckdlbmVyYXRvcih2bSwgcGF0dGVybiwgcGF0dGVyblN0
cmluZywgY29kZUJsb2NrLCBjaGFyU2l6ZSwgbW9kZSkuY29tcGlsZSgpOworICAgIE1hY3JvQXNz
ZW1ibGVyIG1hc207CisKKyAgICBBU1NFUlQobW9kZSA9PSBKSVRDb21waWxlTW9kZTo6TWF0Y2hP
bmx5IHx8IG1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyk7CisKKyAg
ICBZYXJySklURGVmYXVsdFJlZ2lzdGVycyBqaXRSZWdpc3RlcnM7CisgICAgWWFyckdlbmVyYXRv
cjxZYXJySklURGVmYXVsdFJlZ2lzdGVycz4obWFzbSwgdm0sICZjb2RlQmxvY2ssIGppdFJlZ2lz
dGVycywgcGF0dGVybiwgcGF0dGVyblN0cmluZywgY2hhclNpemUsIG1vZGUpLmNvbXBpbGUoY29k
ZUJsb2NrKTsKKwogICAgIGlmIChhdXRvIGZhaWx1cmVSZWFzb24gPSBjb2RlQmxvY2suZmFpbHVy
ZVJlYXNvbigpKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wQ29tcGlsZWRS
ZWdFeHBQYXR0ZXJucygpKSkgewogICAgICAgICAgICAgcGF0dGVybi5kdW1wUGF0dGVyblN0cmlu
ZyhXVEY6OmRhdGFGaWxlKCksIHBhdHRlcm5TdHJpbmcpOwpAQCAtNDYxNiw2ICs0NzE4LDE4IEBA
IHZvaWQgaml0Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgU3QKICAgICB9CiB9CiAKKyNp
ZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQordm9pZCBqaXRDb21waWxlSW5s
aW5lZFRlc3QoU3RhY2tDaGVjayogbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciwgY29u
c3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBPcHRpb25TZXQ8WWFycjo6RmxhZ3M+IGZsYWdzLCBD
aGFyU2l6ZSBjaGFyU2l6ZSwgY29uc3QgVk0qIHZtLCBZYXJyQm95ZXJNb3llckRhdGEmIGJveWVy
TW9vcmVEYXRhLCBNYWNyb0Fzc2VtYmxlciYgaml0LCBZYXJySklUUmVnaXN0ZXJzJiBqaXRSZWdp
c3RlcnMpCit7CisgICAgWWFycjo6RXJyb3JDb2RlIGVycm9yQ29kZTsKKyAgICBZYXJyOjpZYXJy
UGF0dGVybiBwYXR0ZXJuKHBhdHRlcm5TdHJpbmcsIGZsYWdzLCBlcnJvckNvZGUpOworCisgICAg
WWFyckdlbmVyYXRvcjxZYXJySklUUmVnaXN0ZXJzPiB5YXJyR2VuZXJhdG9yKGppdCwgdm0sICZi
b3llck1vb3JlRGF0YSwgaml0UmVnaXN0ZXJzLCBwYXR0ZXJuLCBwYXR0ZXJuU3RyaW5nLCBjaGFy
U2l6ZSwgSklUQ29tcGlsZU1vZGU6OklubGluZVRlc3QpOworICAgIHlhcnJHZW5lcmF0b3Iuc2V0
U3RhY2tDaGVja2VyKG1fY29tcGlsYXRpb25UaHJlYWRTdGFja0NoZWNrZXIpOworICAgIHlhcnJH
ZW5lcmF0b3IuY29tcGlsZUlubGluZShib3llck1vb3JlRGF0YSk7Cit9CisjZW5kaWYKKwogfX0K
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lv
biAyODM1MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDggKzMzLDEwIEBACiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJZ
YXJyLmgiCiAjaW5jbHVkZSAiWWFyclBhdHRlcm4uaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRml4ZWRWZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvU3RhY2tDaGVjay5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
IAogI2RlZmluZSBZQVJSX0NBTEwKQEAgLTQzLDYgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFZNOwogY2xhc3MgRXhlY3V0YWJsZVBvb2w7CitjbGFzcyBNYWNyb0Fzc2VtYmxlcjsK
IAogbmFtZXNwYWNlIFlhcnIgewogCkBAIC0xOTksNyArMjAyLDcyIEBAIGV4dGVybiAiQyIgRW5j
b2RlZE1hdGNoUmVzdWx0IHZtRW50cnlUb1kKIGV4dGVybiAiQyIgdm9pZCB2bUVudHJ5VG9ZYXJy
SklUQWZ0ZXIodm9pZCk7CiAjZW5kaWYKIAotY2xhc3MgWWFyckNvZGVCbG9jayB7CitjbGFzcyBZ
YXJyQm95ZXJNb3llckRhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFlhcnJCb3llck1veWVyRGF0YSk7CisKK3B1YmxpYzoKKyAgICBZ
YXJyQm95ZXJNb3llckRhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHNhdmVNYXBzKFZlY3Rv
cjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbWFwcykKKyAgICB7CisgICAgICAg
IG1fbWFwcy5yZXNlcnZlQ2FwYWNpdHkobV9tYXBzLnNpemUoKSArIG1hcHMuc2l6ZSgpKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcy5zaXplKCk7ICsraW5k
ZXgpCisgICAgICAgICAgICBtX21hcHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFwc1tpbmRl
eF0pKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyTWFwcygpCisgICAgeworICAgICAgICBtX21h
cHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXA6Oldv
cmRUeXBlKiB0cnlSZXVzZUJveWVyTW9vcmVCaXRtYXAoY29uc3QgQm95ZXJNb29yZUJpdG1hcDo6
TWFwJiBtYXApIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHN0b3JlZCA6IG1fbWFw
cykgeworICAgICAgICAgICAgaWYgKHN0b3JlZC5nZXQoKSA9PSBtYXApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0b3JlZC0+c3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJveWVyTW9v
cmVCaXRtYXA6Ok1hcD4+IG1fbWFwczsKK307CisKK2NsYXNzIFlhcnJDb2RlQmxvY2sgOiBwdWJs
aWMgWWFyckJveWVyTW95ZXJEYXRhIHsKKyAgICBzdHJ1Y3QgSW5saW5lU3RhdHMgeworICAgICAg
ICBJbmxpbmVTdGF0cygpCisgICAgICAgICAgICA6IG1faW5zbkNvdW50KDApCisgICAgICAgICAg
ICAsIG1fc3RhY2tTaXplKDApCisgICAgICAgICAgICAsIG1fbmVlZHNUZW1wMihmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9jYW5JbmxpbmUoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluc25Db3VudCwgdW5zaWduZWQgc3RhY2tTaXplLCBi
b29sIGNhbklubGluZSwgYm9vbCBuZWVkc1RlbXAyKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2luc25Db3VudD0gaW5zbkNvdW50OworICAgICAgICAgICAgbV9zdGFja1NpemUgPSBzdGFja1Np
emU7CisgICAgICAgICAgICBtX25lZWRzVGVtcDIgPSBuZWVkc1RlbXAyOworICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FuSW5saW5lID0gY2FuSW5s
aW5lOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHVuc2lnbmVkIGNvZGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnNu
Q291bnQ7IH0KKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFja1NpemU7IH0KKyAgICAgICAgYm9vbCBjYW5JbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bklubGluZTsgfQorICAgICAgICBib29sIG5lZWRzVGVtcDIoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzVGVtcDI7IH0KKworICAgICAgICB1bnNpZ25lZCBtX2luc25Db3VudDsKKyAgICAgICAgdW5z
aWduZWQgbV9zdGFja1NpemUgOiAzMDsKKyAgICAgICAgYm9vbCBtX25lZWRzVGVtcDIgOiAxOwor
ICAgICAgICBib29sIG1fY2FuSW5saW5lIDogMTsKKyAgICB9OworCiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWWFyckNvZGVCbG9jayk7CiAK
QEAgLTIxOSwxNiArMjg3LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldDhCaXRDb2RlKE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxZYXJyOEJpdFB0clRhZz4gcmVmLCBWZWN0b3I8VW5pcXVlUmVmPEJv
eWVyTW9vcmVCaXRtYXA6Ok1hcD4+IG1hcHMpCiAgICAgewogICAgICAgICBtX3JlZjggPSByZWY7
Ci0gICAgICAgIG1fbWFwcy5yZXNlcnZlQ2FwYWNpdHkobV9tYXBzLnNpemUoKSArIG1hcHMuc2l6
ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcy5zaXpl
KCk7ICsraW5kZXgpCi0gICAgICAgICAgICBtX21hcHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
bWFwc1tpbmRleF0pKTsKKyAgICAgICAgc2F2ZU1hcHMoV1RGTW92ZShtYXBzKSk7CiAgICAgfQog
ICAgIHZvaWQgc2V0MTZCaXRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQdHJU
YWc+IHJlZiwgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpNYXA+PiBtYXBzKQog
ICAgIHsKICAgICAgICAgbV9yZWYxNiA9IHJlZjsKLSAgICAgICAgbV9tYXBzLnJlc2VydmVDYXBh
Y2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIG1f
bWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgICAgICBzYXZl
TWFwcyhXVEZNb3ZlKG1hcHMpKTsKICAgICB9CiAKICAgICBib29sIGhhczhCaXRDb2RlTWF0Y2hP
bmx5KCkgeyByZXR1cm4gbV9tYXRjaE9ubHk4LnNpemUoKTsgfQpAQCAtMjM2LDE2ICszMDAsMTIg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0OEJpdENvZGVNYXRjaE9ubHkoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPiBtYXRjaE9ubHksIFZlY3RvcjxVbmlxdWVS
ZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbWFwcykKICAgICB7CiAgICAgICAgIG1fbWF0Y2hP
bmx5OCA9IG1hdGNoT25seTsKLSAgICAgICAgbV9tYXBzLnJlc2VydmVDYXBhY2l0eShtX21hcHMu
c2l6ZSgpICsgbWFwcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAgIG1fbWFwcy51bmNoZWNr
ZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgICAgICBzYXZlTWFwcyhXVEZNb3Zl
KG1hcHMpKTsKICAgICB9CiAgICAgdm9pZCBzZXQxNkJpdENvZGVNYXRjaE9ubHkoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4gbWF0Y2hPbmx5LCBWZWN0b3I8
VW5pcXVlUmVmPEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4+IG1hcHMpCiAgICAgewogICAgICAgICBt
X21hdGNoT25seTE2ID0gbWF0Y2hPbmx5OwotICAgICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5
KG1fbWFwcy5zaXplKCkgKyBtYXBzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IG1hcHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgbV9tYXBz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHNbaW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBz
KFdURk1vdmUobWFwcykpOwogICAgIH0KIAogICAgIGJvb2wgdXNlc1BhdHRlcm5Db250ZXh0QnVm
ZmVyKCkgeyByZXR1cm4gbV91c2VzUGF0dGVybkNvbnRleHRCdWZmZXI7IH0KQEAgLTI1Myw2ICsz
MTMsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkg
eyBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlciA9IHRydWU7IH0KICNlbmRpZgogCisgICAgdm9p
ZCBzZXQ4Qml0SW5saW5lU3RhdHModW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25lZCBzdGFja1Np
emUsIGJvb2wgY2FuSW5saW5lLCBib29sIG5lZWRzVDIpCisgICAgeworICAgICAgICBtX21hdGNo
T25seThTdGF0cy5zZXQoaW5zbkNvdW50LCBzdGFja1NpemUsIGNhbklubGluZSwgbmVlZHNUMik7
CisgICAgfQorCisgICAgdm9pZCBzZXQxNkJpdElubGluZVN0YXRzKHVuc2lnbmVkIGluc25Db3Vu
dCwgdW5zaWduZWQgc3RhY2tTaXplLCBib29sIGNhbklubGluZSwgYm9vbCBuZWVkc1QyKQorICAg
IHsKKyAgICAgICAgbV9tYXRjaE9ubHkxNlN0YXRzLnNldChpbnNuQ291bnQsIHN0YWNrU2l6ZSwg
Y2FuSW5saW5lLCBuZWVkc1QyKTsKKyAgICB9CisKKyAgICBJbmxpbmVTdGF0cyYgZ2V0OEJpdElu
bGluZVN0YXRzKCkgeyByZXR1cm4gbV9tYXRjaE9ubHk4U3RhdHM7IH0KKyAgICBJbmxpbmVTdGF0
cyYgZ2V0MTZCaXRJbmxpbmVTdGF0cygpIHsgcmV0dXJuICBtX21hdGNoT25seTE2U3RhdHM7IH0K
KwogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVy
JiBtYXRjaGluZ0NvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGUoKSk7
CkBAIC0zMzgsMTcgKzQxMSw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWYxNiA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQdHJUYWc+KCk7CiAgICAgICAgIG1fbWF0Y2hPbmx5OCA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4oKTsKICAgICAg
ICAgbV9tYXRjaE9ubHkxNiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZC
aXRQdHJUYWc+KCk7Ci0gICAgICAgIG1fbWFwcy5jbGVhcigpOwogICAgICAgICBtX2ZhaWx1cmVS
ZWFzb24gPSBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgY29uc3QgQm95ZXJNb29yZUJpdG1h
cDo6TWFwOjpXb3JkVHlwZSogdHJ5UmV1c2VCb3llck1vb3JlQml0bWFwKGNvbnN0IEJveWVyTW9v
cmVCaXRtYXA6Ok1hcCYgbWFwKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdG9y
ZWQgOiBtX21hcHMpIHsKLSAgICAgICAgICAgIGlmIChzdG9yZWQuZ2V0KCkgPT0gbWFwKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdG9yZWQtPnN0b3JhZ2UoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgY2xlYXJNYXBzKCk7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtMzU2LDE3ICs0MjAsMjggQEAgcHJpdmF0ZToKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8WWFycjE2Qml0UHRyVGFnPiBtX3JlZjE2OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZ
YXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4gbV9tYXRjaE9ubHk4OwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+IG1fbWF0Y2hPbmx5MTY7Ci0gICAgVmVj
dG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpNYXA+PiBtX21hcHM7CisgICAgSW5saW5l
U3RhdHMgbV9tYXRjaE9ubHk4U3RhdHM7CisgICAgSW5saW5lU3RhdHMgbV9tYXRjaE9ubHkxNlN0
YXRzOworCiAgICAgYm9vbCBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlciB7IGZhbHNlIH07CiAg
ICAgc3RkOjpvcHRpb25hbDxKSVRGYWlsdXJlUmVhc29uPiBtX2ZhaWx1cmVSZWFzb247CiB9Owog
CiBlbnVtIGNsYXNzIEpJVENvbXBpbGVNb2RlIDogdWludDhfdCB7CiAgICAgTWF0Y2hPbmx5LAot
ICAgIEluY2x1ZGVTdWJwYXR0ZXJucworICAgIEluY2x1ZGVTdWJwYXR0ZXJucywKKyAgICBJbmxp
bmVUZXN0CiB9Owogdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiwgU3RyaW5nJiBwYXR0ZXJu
U3RyaW5nLCBDaGFyU2l6ZSwgVk0qLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIEpJVENvbXBp
bGVNb2RlKTsKIAorI2lmIEVOQUJMRShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisKKwor
Y2xhc3MgWWFyckpJVFJlZ2lzdGVyczsKKwordm9pZCBqaXRDb21waWxlSW5saW5lZFRlc3QoU3Rh
Y2tDaGVjayosIGNvbnN0IFN0cmluZyYsIE9wdGlvblNldDxZYXJyOjpGbGFncz4sIENoYXJTaXpl
LCBjb25zdCBWTSosIFlhcnJCb3llck1veWVyRGF0YSYsIE1hY3JvQXNzZW1ibGVyJiwgWWFyckpJ
VFJlZ2lzdGVycyYpOworI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCiAKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lzdGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3Rl
cnMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklU
UmVnaXN0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoWUFSUl9KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCisjZGVmaW5l
IFlBUlJfQ0FMTAorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFlhcnIgeworCitzdHJ1
Y3QgWWFyckpJVERlZmF1bHRSZWdpc3RlcnMgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKK3B1
YmxpYzoKKyNpZiBDUFUoQVJNX1RIVU1CMikKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCBpbmRleCA9IEFSTVJlZ2lzdGVyczo6cjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGxlbmd0aCA9IEFSTVJlZ2lzdGVyczo6cjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIG91dHB1dCA9IEFSTVJlZ2lzdGVyczo6cjM7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmVnVDAgPSBBUk1SZWdpc3RlcnM6OnI0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IEFSTVJlZ2lzdGVyczo6cjU7CisgICAgLy8gcjYgaXMg
cmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyQVJNdjcsCisgICAgLy8gcjcgaXMgZnAuCisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gQVJNUmVnaXN0ZXJzOjpyODsKKyAg
ICAvLyByOSBpcyBzYiBpbiBFQUJJLgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBp
bml0aWFsU3RhcnQgPSBBUk1SZWdpc3RlcnM6OnIxMDsgLy8gcjEwIGlzIFNMLCBidXQgbm8gbG9u
Z2VyIGEgc3BlY2lhbCByZWdpc3Rlci4KKworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZXR1cm5SZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IEFSTVJlZ2lzdGVyczo6cjE7CisKKyNlbGlm
IENQVShBUk02NCkKKyAgICAvLyBBcmd1bWVudCByZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgaW5wdXQgPSBBUk02NFJlZ2lzdGVyczo6eDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIGluZGV4ID0gQVJNNjRSZWdpc3RlcnM6OngxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBBUk02NFJlZ2lzdGVyczo6eDI7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gQVJNNjRS
ZWdpc3RlcnM6Ong0OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFJl
Z2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OyAvLyBMb2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdD
b250ZXh0SG9sZGVyIGluIHRoZSBwcm9sb2d1ZS4KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDU7IC8vIE9ubHkg
dXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisKKyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IEFSTTY0UmVnaXN0ZXJzOjp4
NjsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBBUk02NFJlZ2lzdGVy
czo6eDc7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QyID0gQVJNNjRSZWdp
c3RlcnM6Ong4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRj
aENvdW50ID0gQVJNNjRSZWdpc3RlcnM6Ong5OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCA9IEFSTTY0UmVnaXN0ZXJzOjp4MTA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHVuaWNvZGVUZW1wID0gQVJNNjRSZWdpc3RlcnM6
Ong1OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgPSBBUk02
NFJlZ2lzdGVyczo6eDExOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBzdXBwbGVt
ZW50YXJ5UGxhbmVzQmFzZSA9IEFSTTY0UmVnaXN0ZXJzOjp4MTI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBSZWdpc3RlcklEIGxlYWRpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6eDEz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9
IEFSTTY0UmVnaXN0ZXJzOjp4MTQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGVu
ZE9mU3RyaW5nQWRkcmVzcyA9IEFSTTY0UmVnaXN0ZXJzOjp4MTU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiA9IEFSTTY0UmVn
aXN0ZXJzOjp4MTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgVHJ1c3RlZEltbTMyIHN1cnJvZ2F0
ZVRhZ01hc2sgPSBUcnVzdGVkSW1tMzIoMHhmZmZmZmMwMCk7CisjZWxpZiBDUFUoTUlQUykKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjph
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gTUlQU1JlZ2lzdGVy
czo6YTI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IE1JUFNSZWdp
c3RlcnM6OmEzOworCisgICAgLy8gdDAgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQ
Uy4KKyAgICAvLyB0MSBpcyByZXNlcnZlZCBmb3IgTWFjcm9Bc3NlbWJsZXJNSVBTLgorICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQyOworICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IE1JUFNSZWdpc3RlcnM6OnQ0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbml0aWFsU3RhcnQgPSBNSVBTUmVn
aXN0ZXJzOjp0NTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdp
c3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZXR1cm5SZWdpc3RlcjIgPSBNSVBTUmVnaXN0ZXJzOjp2MTsKKworI2VsaWYgQ1BVKFg4Nl82
NCkKKyNpZiAhT1MoV0lORE9XUykKKyAgICAvLyBBcmd1bWVudCByZWdpc3RlcnMKKyAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVkaTsKKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVzaTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6
ZWN4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBY
ODZSZWdpc3RlcnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlz
dFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyODsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5n
Q29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyOTsgLy8gT25seSB1
c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyNlbHNlCisgICAgLy8gSWYgdGhlIHJldHVybiB2
YWx1ZSBkb2Vzbid0IGZpdCBpbiA2NGJpdHMsIGl0cyBkZXN0aW5hdGlvbiBpcyBwb2ludGVkIGJ5
IHJjeCBhbmQgdGhlIHBhcmFtZXRlcnMgYXJlIHNoaWZ0ZWQuCisgICAgLy8gaHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5Lzc1NzJ6dHo0LmFzcHgKKyAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihNYXRjaFJlc3VsdCkgPiBzaXplb2Yodm9pZCopLCAiTWF0Y2hSZXN1bHQgZG9l
cyBub3QgZml0IGluIDY0Yml0cyIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBp
bnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6cjg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6cjk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6cjEwOworI2VuZGlmCisKKyAgICAvLyBTY3Jh
dGNoIHJlZ2lzdGVycworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMCA9IFg4
NlJlZ2lzdGVyczo6ZWF4OworI2lmICFPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBjb25zdGV4cHIg
UmVnaXN0ZXJJRCByZWdUMSA9IFg4NlJlZ2lzdGVyczo6cjk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBSZWdpc3RlcklEIHJlZ1QyID0gWDg2UmVnaXN0ZXJzOjpyMTA7CisjZWxzZQorICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMSA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIHN0
YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVyczo6ZWRpOworI2Vu
ZGlmCisKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gWDg2
UmVnaXN0ZXJzOjplYng7CisjaWYgIU9TKFdJTkRPV1MpCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgPSBYODZSZWdpc3RlcnM6OnIxMjsKKyNlbHNl
CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlbWFpbmluZ01hdGNoQ291bnQgPSBY
ODZSZWdpc3RlcnM6OmVzaTsKKyNlbmRpZgorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCA9IFg4NlJlZ2lzdGVyczo6cjEzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmljb2RlVGVtcCA9IFg4NlJlZ2lzdGVyczo6cjE0Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgPSBYODZS
ZWdpc3RlcnM6OnIxNTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5S
ZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZWF4OworICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0
ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBYODZSZWdpc3RlcnM6OmVkeDsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBzdXBwbGVtZW50YXJ5UGxhbmVz
QmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgxMDAwMCk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGxlYWRpbmdTdXJyb2dhdGVU
YWcgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZDgwMCk7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIHRyYWlsaW5nU3Vycm9nYXRlVGFn
ID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApOworICAgIHN0YXRpYyBjb25z
dGV4cHIgVHJ1c3RlZEltbTMyIHN1cnJvZ2F0ZVRhZ01hc2sgPSBUcnVzdGVkSW1tMzIoMHhmZmZm
ZmMwMCk7CisjZW5kaWYKK307CisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5M
SU5FKQorY2xhc3MgWWFyckpJVFJlZ2lzdGVycyA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewor
cHVibGljOgorICAgIFlhcnJKSVRSZWdpc3RlcnMoKQorICAgIHsKKyAgICB9CisKKyNpZiBDUFUo
QVJNNjQpCisgICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJRCBpbnB1dCB7
IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBpbmRleCB7
IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBsZW5ndGgg
eyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgb3V0cHV0
IHsgQVJNNjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIG1hdGNo
aW5nQ29udGV4dCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0
ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyIHsgQVJNNjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsK
KyAgICBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyIHsgQVJNNjRSZWdpc3RlcnM6Oklu
dmFsaWRHUFJSZWcgfTsKKworICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJ
RCByZWdUMCB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJ
RCByZWdUMSB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJ
RCByZWdUMiB7IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJ
RCByZW1haW5pbmdNYXRjaENvdW50IHsgQVJNNjRSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsK
KyAgICBSZWdpc3RlcklEIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsIHsgQVJNNjRSZWdpc3RlcnM6
OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHVuaWNvZGVUZW1wIHsgQVJNNjRSZWdp
c3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIGluaXRpYWxTdGFydCB7IEFS
TTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBlbmRPZlN0cmlu
Z0FkZHJlc3MgeyBBUk02NFJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworCisgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSA9IE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHgxMDAwMCk7CisgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDB4ZGMwMCk7CisKKyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyIHsgQVJNNjRSZWdpc3Rl
cnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyMiB7IEFS
TTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisjZWxpZiBDUFUoWDg2XzY0KSAmJiAhT1Mo
V0lORE9XUykKKyAgICAvLyBBcmd1bWVudCByZWdpc3RlcnMKKyAgICBSZWdpc3RlcklEIGlucHV0
IHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBpbmRleCB7
IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgbGVuZ3RoIHsg
WDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisgICAgUmVnaXN0ZXJJRCBvdXRwdXQgeyBY
ODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIG1hdGNoaW5nQ29u
dGV4dCB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgZnJl
ZWxpc3RSZWdpc3RlciB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lz
dGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgeyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcg
fTsKKworICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCisgICAgUmVnaXN0ZXJJRCByZWdUMCB7IFg4
NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVnVDEgeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJlZ1QyIHsgWDg2UmVn
aXN0ZXJzOjpJbnZhbGlkR1BSUmVnIH07CisKKyAgICBSZWdpc3RlcklEIGluaXRpYWxTdGFydCB7
IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVySUQgcmVtYWluaW5n
TWF0Y2hDb3VudCB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworICAgIFJlZ2lzdGVy
SUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgeyBYODZSZWdpc3RlcnM6OkludmFsaWRHUFJSZWcg
fTsKKyAgICBSZWdpc3RlcklEIHVuaWNvZGVUZW1wIHsgWDg2UmVnaXN0ZXJzOjpJbnZhbGlkR1BS
UmVnIH07CisgICAgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgeyBYODZSZWdpc3RlcnM6
OkludmFsaWRHUFJSZWcgfTsKKworICAgIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgeyBYODZS
ZWdpc3RlcnM6OkludmFsaWRHUFJSZWcgfTsKKyAgICBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVy
MiB7IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZyB9OworCisgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSA9IE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMHgxMDAwMCk7CisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigweGQ4MDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgdHJh
aWxpbmdTdXJyb2dhdGVUYWcgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZGMwMCk7
CisjZWxzZQorI2Vycm9yICJObyBzdXBwb3J0IGZvciBpbmxpbmVkIEpJVCdpbmcgb2YgUmVnRXhw
LnRlc3QgZm9yIHRoaXMgQ1BVIC8gT1MgY29tYmluYXRpb24uIgorI2VuZGlmCit9OworI2VuZGlm
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCisKKyNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCShyZXZpc2lvbiAyODM1MTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQ
ZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzNTEyKQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0xMC0wMSAg
TWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgUmVn
RXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGVuYWJsZW1lbnQ6IEVOQUJMRV9Z
QVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TLgorCisgICAgICAgICogd3RmL1BsYXRmb3Jt
RW5hYmxlLmg6CisKIDIwMjEtMTAtMDQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgog
CiAgICAgICAgIFNwbGl0IFdlYlhSIGV4dGVuc2lvbiBtb2R1bGUgSURMcyBpbnRvIHRoZWlyIG93
biBmaWxlcyBhbmQgc2V0dGluZ3MKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAkocmV2aXNp
b24gMjgzNTEyKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzQwLDYgKzc0MCw3IEBACiAvKiBFbmFibGUgSklUJ2luZyBSZWd1bGFyIEV4cHJl
c3Npb25zIHRoYXQgaGF2ZSBuZXN0ZWQgcGFyZW50aGVzaXMgLiAqLwogI2lmIEVOQUJMRShZQVJS
X0pJVCkgJiYgKENQVShBUk02NCkgfHwgKENQVShYODZfNjQpICYmICFPUyhXSU5ET1dTKSkpCiAj
ZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TIDEKKyNkZWZpbmUg
RU5BQkxFX1lBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSAxCiAjZW5kaWYKIAogLyogRW5hYmxl
IEpJVCdpbmcgUmVndWxhciBFeHByZXNzaW9ucyB0aGF0IGhhdmUgbmVzdGVkIGJhY2sgcmVmZXJl
bmNlcy4gKi8K
</data>
<flag name="review"
          id="463931"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441749</attachid>
            <date>2021-10-19 10:15:28 -0700</date>
            <delta_ts>2021-10-19 11:05:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>230469-6.patch</filename>
            <type>text/plain</type>
            <size>258722</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODQ0NjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTEwLTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgTmV3IG1p
Y3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0LWlu
bGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTEwLTE4ICBQaGlsbGlwIE1hdGVzICA8cG1hdGVzQGln
YWxpYS5jb20+CiAKICAgICAgICAgVGVzdCBjb3ZlcmFnZSBmb3IgSlNDIHNoYWRvdyByZWFsbXMg
aW1wbGVtZW50YXRpb24KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVnZXhw
LXRlc3QtaW5saW5lZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
Ky8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2VyaWVzIDMiCisoZnVuY3Rpb24o
KSB7CisgICAgbGV0IHN0cmluZ3MgPSBbICJ0aGVtIiwgInRoZXJlIiwgInRoZXkiLCAiYW50aGVt
IiwgImFtcGhpdGhlYXRlciIsICJib3RoZXIiLCAiYW5vdGhlciIsICJicm90aGVyIiwgImFwb3Ro
ZWNhcnkiLCAiYW5hdGhlbWEiXTsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAgICBsZXQgbiA9IDEw
MDAwMDAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICByZXN1bHQg
Kz0gL3RoZS8udGVzdChzdHJpbmdzW2kgJSAxMF0pOworICAgIGlmIChyZXN1bHQgIT0gbikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIx
LTEwLTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIElu
bGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNDY5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgUmVzdHJ1Y3R1cmVkIFlhcnJKSVQgZnJvbSBp
bmhlcml0aW5nIGZyb20gTWFjcm9Bc3NlbWJsZXIgdG8gaGF2aW5nIGEgTWFjcm9Bc3NlbWJsZXIK
KyAgICAgICAgbWVtYmVyLiAgQWRkZWQgYSBuZXcgcGF0aCB0byBZYXJyIEpJVCBjb2RlIHRvIGNv
bXBpbGUgaW5saW5lIGNvZGUgYnkgY2hhbmdpbmcgaG93IHRoZQorICAgICAgICBjb2RlIGlzIGVu
dGVyZWQgYW5kIGV4aXRlZC4gIEFkZGVkIHN0YXRpc3RpYyB0byB0aGUgbm9ybWFsIGNvbXBpbGF0
aW9uIHBhdGggdG8gcmVjb3JkCisgICAgICAgIHRoZSBzaXplIG9mIHRoZSBtYXRjaGluZyBjb2Rl
IGdlbmVyYXRlZCwgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBuZWVkZWQsIGFuZCBpZgorICAg
ICAgICB0aGUgY29kZSBjYW4gYmUgaW5saW5lZC4gIFRoaXMgcGF0Y2ggb25seSBpbmxpbmVzIDhi
aXQgY29kZSwgYXMgdGhpcyBzZWVtcyB0byBjb3ZlcgorICAgICAgICB0aGUgbW9zdCBjb21tb24g
cGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNhc2VzLiAgQWRkaW5nIDE2IGJpdCwgbm9uLVVuaWNvZGUg
aW5saW5pbmcKKyAgICAgICAgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIGNvZGUgaXMg
c3RydWN0dXJlZCB0byB0YWtlIHRoZSBpbmxpbmVkIHBhdGggZm9yIHRoZQorICAgICAgICBjYXNl
IG9mIG5vbi1yb3BlIHN0cmluZyBhcmd1bWVudHMuICBGb3Igb3RoZXIgY2FzZXMsIHdlIGZhbGwg
YmFjayB0byBjYWxsaW5nIG91dAorICAgICAgICB0byBDKysgcGF0aHMuCisKKyAgICAgICAgSGVy
ZSBhcmUgdGhlIHBlcmYgcmVzdWx0cyBydW5uaW5nIHRoZSBuZXdseSBhZGRlZCByZWdleHAtdGVz
dC1pbmxpbmVkIG1pY3JvCisgICAgICAgIGJlbmNobWFyayAodGltZSBpbiBtc2VjKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lICAgICAgIFdpdGggdGhpcyBwYXRjaCAgICAgUmVz
dWx0CisgICAgICAgICAgICBBUk02NCAgIDEzNy4zODQ5Ky0zLjA3NDAgICA2NC45MjgyKy0wLjcz
NDggIDIuMTJ4IGZhc3RlcgorICAgICAgICAgICAgWDg2LTY0ICAyMjAuMjYxNistMTkuMjgxNCAx
MDUuMjAzNCstNi44NzIyICAyLjA5eCBmYXN0ZXIKKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMg
Y2hhbmdlLCBmb3VuZCB0aGF0IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24gZGlkbid0IHdvcmsgcHJv
cGVybHkgZm9yIHRoZQorICAgICAgICBleGlzdGluZyBjYXNlcyBmb3IgUmVnRXhwRXhlYywgUmVn
RXhwVGVzdCBhbmQgcmVsYXRlZCBzaW5jZSB3ZSBhZGRlZCB0aGF0IGNoZWNrcyBmb3IKKyAgICAg
ICAgb3ZlcnJpZGluZyB0aGUgUmVnRXhwIG9iamVjdC4gIENsb2JiZXJpemUgZm9yIHRyeUdldEJ5
SWQgd2FzIGNsb2JiZXIgdG9wLCBidXQgYWRkZWQKKyAgICAgICAgYW4gZXhjZXB0aW9uIGZvciBS
ZWdFeHAubGFzdEluZGV4LiAgVGhpcyBmaXggYWxsb3dlZCBtYW55IG9mIHRoZSBzdHJlbmd0aCBy
ZWR1Y3Rpb25zCisgICAgICAgIGNhc2VzIHRvIHN0YXJ0IHdvcmtpbmcgYWdhaW4sIG5hbWVseSB0
aGUgY29zdGFudCBmb2xkaW5nIGNhc2VzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9SZWdFeHBUZXN0
SW5saW5lKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNDZWxs
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQ2VsbE9wZXJhbmQyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpjZWxsT3BlcmFuZDIpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJl
Z0V4cFRlc3RJbmxpbmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6aGFuZGxlTm9kZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAg
ICAgICogcnVudGltZS9TdGFja0FsaWdubWVudC5oOgorICAgICAgICAoSlNDOjphcmd1bWVudENv
dW50Rm9yU3RhY2tTaXplKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAo
SlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGlsZUlu
bGluZWRUZXN0KToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFy
cjo6WWFyckJveWVyTW95ZXJEYXRhOjpzYXZlTWFwcyk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJCb3llck1veWVyRGF0YTo6Y2xlYXJNYXBzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckJv
eWVyTW95ZXJEYXRhOjp0cnlSZXVzZUJveWVyTW9vcmVCaXRtYXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6SW5saW5lU3RhdHMpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6c2V0KToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OmNsZWFyKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OmNvZGVTaXplIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OnN0YWNr
U2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0
YXRzOjpjYW5JbmxpbmUgY29uc3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2Nr
OjpJbmxpbmVTdGF0czo6bmVlZHNUZW1wMiBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6c2V0MTZCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6
c2V0OEJpdENvZGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2Nr
OjpzZXQxNkJpdENvZGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJs
b2NrOjpzZXQ4Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJs
b2NrOjpzZXQxNkJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6Z2V0OEJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6Z2V0MTZCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6dHJ5UmV1
c2VCb3llck1vb3JlQml0bWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB5YXJyL1lhcnJK
SVRSZWdpc3RlcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OllhcnI6OllhcnJKSVRSZWdpc3Rl
cnM6OllhcnJKSVRSZWdpc3RlcnMpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKwog
MjAyMS0xMC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg1LDYgKzEyODUs
NyBAQAogCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjQxMTJE
QjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQk4NjcwNEI4NTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgwMTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJySklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1M0JDNDNF
MjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCOEExMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njg5
MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQ
cml2YXRlTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00Mjg3LDYgKzQyODgsNyBAQAogCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyckludGVycHJldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJJ
bnRlcnByZXRlci5oOyBwYXRoID0geWFyci9ZYXJySW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyckpJVC5jcHA7IHBhdGgg
PSB5YXJyL1lhcnJKSVQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4
MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBZYXJySklULmg7IHBhdGggPSB5YXJyL1lhcnJKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3Rl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckpJVFJlZ2lzdGVycy5o
OyBwYXRoID0geWFyci9ZYXJySklUUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXJzZXIuaDsgcGF0aCA9IHlhcnIvWWFyclBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MjEyREJBMzM3MDBB
OUZFN0IgLyogWWFyclBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gWWFyclBhdHRlcm4uY3BwOyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJy
UGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyUGF0dGVybi5o
OyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODIxMyw2ICs4MjE1LDcgQEAKIAkJCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi8sCiAJCQkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJK
SVQuY3BwICovLAogCQkJCTg2NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8s
CisJCQkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLywK
IAkJCQlFM0YwRkM5NDI2QTExQjRBMDA5OUZGQTAgLyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRl
ci5oICovLAogCQkJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8s
CiAJCQkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLywKQEAg
LTEwMjk2LDYgKzEwMjk5LDggQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklU
UmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEg
LyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUw
MDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRF
MURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTEwMTcsNyArMTEwMjIsNiBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJy
RXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIg
LyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjcwNEI4NzEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNGMEZDOTUyNkEx
MUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjg0NDYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjI4LDYgKzI2MjgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBU
ZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2
ZSBwcm92ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAg
ICAgICAgIC8vIGFjY2Vzc2luZyBsYXN0SW5kZXggaXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9i
YWwgcmVnZXhwLgogICAgICAgICBjbG9iYmVyV29ybGQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNjc1
LDE0ICs2NzUsMjYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBU
cnlHZXRCeUlkOgorICAgICAgICByZWFkKFdvcmxkKTsKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9O
T1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleChuYW1lKSBpZiAobmFtZSAhPSBJbnZhbGlkQWJzdHJh
Y3RIZWFwICYmIFwKKyAgICBuYW1lICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYgXAorICAgIG5h
bWUgIT0gV29ybGQgJiYgXAorICAgIG5hbWUgIT0gU3RhY2sgJiYgXAorICAgIG5hbWUgIT0gSGVh
cCAmJiBcCisgICAgbmFtZSAhPSBSZWdFeHBPYmplY3RfbGFzdEluZGV4KSBcCisgICAgICAgIHdy
aXRlKG5hbWUpOworICAgIEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChBQlNUUkFDVF9IRUFQ
X05PVF9SZWdFeHBPYmplY3RfbGFzdEluZGV4KQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfTk9UX1Jl
Z0V4cE9iamVjdF9sYXN0SW5kZXgKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBHZXRCeUlk
OgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2UgR2V0QnlJZFdpdGhUaGlzOgogICAg
IGNhc2UgR2V0QnlJZERpcmVjdDoKICAgICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICBj
YXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBUcnlHZXRCeUlkOgogICAgIGNhc2UgUHV0
QnlJZDoKICAgICBjYXNlIFB1dEJ5SWRXaXRoVGhpczoKICAgICBjYXNlIFB1dEJ5VmFsV2l0aFRo
aXM6CkBAIC0xNzY1LDYgKzE3NzcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0Ogor
ICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2ZSBwcm92
ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAgICAgICAg
IC8vIGFjY2Vzc2luZyBsYXN0SW5kZXggaXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9iYWwgcmVn
ZXhwLgogICAgICAgICBjbG9iYmVyVG9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29t
cGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCisjaW5jbHVkZSAiWWFy
ckpJVC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtMTIyLDcgKzEyMyw4IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgUmVjb3JkZWRTdGF0dXNl
cyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJl
cGxhY2VtZW50czsKLSAgICAKKyAgICBZYXJyOjpZYXJyQm95ZXJNb3llckRhdGEgbV9ib3llck1v
b3JlRGF0YTsKKwogICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZmZXI7CiAgICAg
UmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CiAgICAgYm9vbCBpc1N0
aWxsVmFsaWQgeyB0cnVlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsNyBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAg
ICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAg
IGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICBjYXNlIFJlc29sdmVTY29wZToKICAgICBjYXNl
IFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXR1cm46
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODYsNyArMTQ4Niw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0g
ICAgICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAg
ICAgIGNhc2UgUmVnRXhwVGVzdElubGluZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVSZWdFeHBPYmplY3QoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIx
LDYgKzMyMSwxNyBAQCB2b2lkIE5vZGU6OmNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAg
ICAgbV9vcEluZm8gPSByZWdFeHA7CiB9CiAKK3ZvaWQgTm9kZTo6Y29udmVydFRvUmVnRXhwVGVz
dElubGluZShGcm96ZW5WYWx1ZSogZ2xvYmFsT2JqZWN0LCBGcm96ZW5WYWx1ZSogcmVnRXhwKQor
eworICAgIEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9wQW5kRGVmYXVsdEZs
YWdzKFJlZ0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShjaGls
ZHJlbi5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hpbGRyZW4uY2hpbGQy
KCkgPSBFZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2JqZWN0VXNlKTsKKyAg
ICAvLyBXZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcEluZm8gPSBnbG9iYWxP
YmplY3Q7CisgICAgbV9vcEluZm8yID0gcmVnRXhwOworfQorCiBTdHJpbmcgTm9kZTo6dHJ5R2V0
U3RyaW5nKEdyYXBoJiBncmFwaCkKIHsKICAgICBpZiAoaGFzQ29uc3RhbnQoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIzLDYgKzgy
Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udmVydFRvUmVnRXhwRXhlY05vbkdsb2JhbE9y
U3RpY2t5V2l0aG91dENoZWNrcyhGcm96ZW5WYWx1ZSogcmVnRXhwKTsKICAgICB2b2lkIGNvbnZl
cnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhbFdpdGhvdXRDaGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4
cCk7CisgICAgdm9pZCBjb252ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKEZyb3plblZhbHVlKiBnbG9i
YWxPYmplY3QsIEZyb3plblZhbHVlKiByZWdFeHApOwogCiAgICAgdm9pZCBjb252ZXJ0VG9TZXRS
ZWdFeHBPYmplY3RMYXN0SW5kZXgoKQogICAgIHsKQEAgLTE4MDAsNiArMTgwMSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25H
bG9iYWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBjYXNlIFJl
Z0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICBj
YXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkBA
IC0xODk2LDYgKzE4OTgsMTggQEAgcHVibGljOgogICAgICAgICBjYXNlIERpcmVjdFRhaWxDYWxs
SW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6
CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgorICAgICAgICBjYXNlIFJlZ0V4
cFRlc3RJbmxpbmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBoYXNDZWxsT3BlcmFuZDIoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkwNyw3ICsxOTIx
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0NlbGxPcGVyYW5kKCkpOwogICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8RnJvemVuVmFsdWUqPigpOwogICAgIH0KLSAgICAKKworICAg
IEZyb3plblZhbHVlKiBjZWxsT3BlcmFuZDIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0Nl
bGxPcGVyYW5kMigpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMi5hczxGcm96ZW5WYWx1ZSo+
KCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUIGNhc3RPcGVyYW5k
KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShy
ZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMjQsNiArMzI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKFJlZ0V4cEV4ZWMsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3ksIE5v
ZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFJlZ0V4cFRlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhSZWdFeHBUZXN0SW5saW5lLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwTWF0Y2hGYXN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwTWF0Y2hGYXN0R2xv
YmFsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTdHJpbmdSZXBsYWNlLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NjgsNiArODY4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cEV4
ZWNOb25HbG9iYWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBj
YXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAg
ICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBs
YWNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU3LDYgKzU1Nyw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAg
ICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6CiAgICAgY2FzZSBSZWdFeHBUZXN0
OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoK
ICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICBjYXNlIENhbGw6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjk0OCw3ICsyOTQ4LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgIGNhc2UgUmVnRXhwVGVz
dDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6IHsKICAgICAgICAgY29tcGlsZVJlZ0V4cFRl
c3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjg0NDYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJz
TW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1w
bGVyLmgiCisjaW5jbHVkZSAiWWFyckpJVFJlZ2lzdGVycy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKQEAgLTI2OTQsNiArMjY5NSwxOTcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgIH0gfQogfQogCisjaWYgRU5BQkxFKFlBUlJf
SklUX1JFR0VYUF9URVNUX0lOTElORSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdF
eHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCit7CisgICAgUmVnRXhwKiByZWdFeHAgPSBqc0Nhc3Q8
UmVnRXhwKj4obm9kZS0+Y2VsbE9wZXJhbmQyKCktPnZhbHVlKCkpOworCisgICAgQVNTRVJUKCFy
ZWdFeHAtPmdsb2JhbE9yU3RpY2t5KCkpOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZ2xv
YmFsT2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gZ2xvYmFsT2JqZWN0LmdwcigpOworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
KyAgICBHUFJSZWcgYXJndW1lbnRHUFI7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSVGVt
cG9yYXJ5IHN0cmluZ0ltcGwodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHN0cmluZ0RhdGEodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHN0ckxlbmd0aCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkg
b3V0cHV0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQyKHRoaXMpOworICAgIEdQUlRl
bXBvcmFyeSB0ZW1wMCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDEodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IHRlbXAyOworICAgIEdQUlJlZyBzdHJpbmdJbXBsR1BSID0gc3RyaW5nSW1w
bC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyaW5nRGF0YUdQUiA9IHN0cmluZ0RhdGEuZ3ByKCk7Cisg
ICAgR1BSUmVnIG91dHB1dEdQUiA9IG91dHB1dC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyTGVuZ3Ro
R1BSID0gc3RyTGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyByZXN1bHQyR1BSID0gcmVzdWx0Mi5n
cHIoKTsKKyAgICBHUFJSZWcgdGVtcDBHUFIgPSB0ZW1wMC5ncHIoKTsKKyAgICBHUFJSZWcgdGVt
cDFHUFIgPSB0ZW1wMS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDJHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgIEdQUlJlZyBzd2FwUmVnID0gSW52YWxpZEdQUlJlZzsKKworICAgIGF1dG8gaml0Q29k
ZUJsb2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRDb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoaml0
Q29kZUJsb2NrKTsKKyAgICBhdXRvIGlubGluZUNvZGVTdGF0czhCaXQgPSBqaXRDb2RlQmxvY2st
PmdldDhCaXRJbmxpbmVTdGF0cygpOworCisjaWYgIUNQVShYODZfNjQpCisgICAgaWYgKGlubGlu
ZUNvZGVTdGF0czhCaXQubmVlZHNUZW1wMigpKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZWFs
VGVtcDIodGhpcyk7CisgICAgICAgIHRlbXAyLmFkb3B0KHJlYWxUZW1wMik7CisgICAgICAgIHRl
bXAyR1BSID0gdGVtcDIuZ3ByKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBzcGVjdWxhdGVSZWdF
eHBPYmplY3Qobm9kZS0+Y2hpbGQyKCksIGJhc2VHUFIpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG9wZXJhdGlvbkNh
c2VzOworCisgICAgYXV0byBzd2FwUmVnSWZOZWVkZWQgPSBbJl0geworICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0R1BSID09IHJlc3VsdEdQUikgeworICAgICAgICAgICAgc3dhcFJlZyA9IGFsbG9j
YXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdsb2JhbE9iamVjdEdQUiwgc3dhcFJlZyk7
CisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSBzd2FwUmVnOworICAgICAgICB9IGVsc2Ug
aWYgKGJhc2VHUFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBzd2FwUmVnID0gYWxsb2Nh
dGUoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoYmFzZUdQUiwgc3dhcFJlZyk7CisgICAgICAg
ICAgICBiYXNlR1BSID0gc3dhcFJlZzsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudEdQUiA9
PSByZXN1bHRHUFIpIHsKKyAgICAgICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShhcmd1bWVudEdQUiwgc3dhcFJlZyk7CisgICAgICAgICAgICBhcmd1
bWVudEdQUiA9IHN3YXBSZWc7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byByZWdFeHBU
ZXN0SW5saW5lQ2FzZSA9IFsmXSB7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RyaW5nSW1wbEdQUiwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3Ry
aW5nRGF0YUdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksIHN0ckxl
bmd0aEdQUik7CisKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gc3RyaW5nSW1wbEdQUjsKKwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgaW5kZXhHUFIpOworCisgICAgICAg
IFlhcnI6OllhcnJKSVRSZWdpc3RlcnMgeWFyclJlZ2lzdGVyczsKKyAgICAgICAgeWFyclJlZ2lz
dGVycy5pbnB1dCA9IHN0cmluZ0RhdGFHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXgg
PSBpbmRleEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5sZW5ndGggPSBzdHJMZW5ndGhHUFI7
CisgICAgICAgIHlhcnJSZWdpc3RlcnMub3V0cHV0ID0gb3V0cHV0R1BSOworICAgICAgICB5YXJy
UmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMucmVnVDEg
PSB0ZW1wMUdQUjsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICB0ZW1wMkdQUiA9IGdsb2JhbE9i
amVjdEdQUjsKKyNlbmRpZgorICAgICAgICBpZiAoaW5saW5lQ29kZVN0YXRzOEJpdC5uZWVkc1Rl
bXAyKCkpCisgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QyID0gdGVtcDJHUFI7CisKKyAg
ICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlciA9IHJlc3VsdEdQUjsKKyAgICAgICAg
eWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlcjIgPSByZXN1bHQyR1BSOworCisgICAgICAgIGF1
dG8gY29tbW9uRGF0YSA9IG1faml0LmppdENvZGUoKS0+ZGZnQ29tbW9uKCk7CisgICAgICAgIFlh
cnI6OmppdENvbXBpbGVJbmxpbmVkVGVzdCgmbV9ncmFwaC5tX3N0YWNrQ2hlY2tlciwgcmVnRXhw
LT5wYXR0ZXJuKCksIHJlZ0V4cC0+ZmxhZ3MoKSwgWWFycjo6Q2hhclNpemU6OkNoYXI4LCAmdm0o
KSwgY29tbW9uRGF0YS0+bV9ib3llck1vb3JlRGF0YSwgbV9qaXQsIHlhcnJSZWdpc3RlcnMpOwor
CisgICAgICAgIGF1dG8gZmFpbGVkTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICAvLyAg
U2F2ZWQgY2FjaGVkIHJlc3VsdAorI2lmIENQVShYODZfNjQpCisgICAgICAgIGlmIChpbmxpbmVD
b2RlU3RhdHM4Qml0Lm5lZWRzVGVtcDIoKSkgeworICAgICAgICAgICAgLy8gU2luY2Ugd2UgcmV1
c2VkIGdsb2JhbE9iamVjdEdQUiBmb3IgdGVtcDIsIGxldCdzIHJlc3RvcmUgdGhlIGdsb2JhbCBv
YmplY3QuCisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Q29uc3QgPSBq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdENvbnN0KSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IEpTR2xvYmFsT2JqZWN0OjpyZWdFeHBHbG9iYWxEYXRhT2Zm
c2V0KCkgKyBSZWdFeHBHbG9iYWxEYXRhOjpvZmZzZXRPZkNhY2hlZFJlc3VsdCgpOworCisgICAg
ICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHJl
Z0V4cCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVn
RXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RSZWdFeHAoKSkpOworICAgICAgICBtX2ppdC5z
dG9yZVB0cihhcmd1bWVudEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mTGFzdElucHV0KCkpKTsKKyAg
ICAgICAgbV9qaXQuc3RvcmUzMihyZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZlJlc3VsdCgp
ICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBzdGFydCkpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihyZXN1bHQyR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9P
RkZTRVRPRihNYXRjaFJlc3VsdCwgZW5kKSkpOworICAgICAgICBtX2ppdC5zdG9yZTgoVHJ1c3Rl
ZEltbTMyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCAr
IFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZWlmaWVkKCkpKTsKKworICAgICAgICBpZiAo
c3dhcFJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgdW5sb2NrKHN3YXBSZWcpOwor
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGZhaWxlZE1hdGNoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgfTsKKworICAgIGlmIChu
b2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgYXJn
dW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUt
PmNoaWxkMygpLCBhcmd1bWVudEdQUik7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKwor
ICAgICAgICBzd2FwUmVnSWZOZWVkZWQoKTsKKworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgc3RyaW5nSW1wbEdQUik7CisgICAgICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgYSByb3BlIG9y
IDE2IGJpdCwgd2UgY2FsbCB0aGUgb3BlcmF0aW9uLgorICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZSb3BlU3RyaW5nSW1wbChzdHJpbmdJbXBsR1BSKSk7CisgICAg
ICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cmluZ0ltcGxHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKworICAgICAgICBy
ZWdFeHBUZXN0SW5saW5lQ2FzZSgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1f
aml0KTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcs
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisKKyAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudCh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7CisgICAgYXJndW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKKwor
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBzd2FwUmVnSWZOZWVkZWQoKTsKKworICAgIG9w
ZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYXJndW1lbnRHUFIpKTsK
KyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoYXJndW1l
bnRHUFIpKTsKKworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJn
dW1lbnRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdHJpbmdJbXBsR1BSKTsKKyAg
ICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgcm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhlIG9wZXJh
dGlvbi4KKyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZSb3BlU3RyaW5n
SW1wbChzdHJpbmdJbXBsR1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0ltcGxHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0
KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOwor
CisgICAgcmVnRXhwVGVzdElubGluZUNhc2UoKTsKKworICAgIG9wZXJhdGlvbkNhc2VzLmxpbmso
Jm1faml0KTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVnRXhwVGVzdCwgcmVzdWx0
R1BSLCBnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIGFyZ3VtZW50R1BSKTsKKworICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICB1bmJsZXNz
ZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisjZWxzZQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSogbm9kZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0obm9kZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGNv
bXBpbGVSZWdFeHBUZXN0KG5vZGUpOworfQorI2VuZGlmCisKICNpZiBVU0UoTEFSR0VfVFlQRURf
QVJSQVlTKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoSW50
NTJTaXplKE5vZGUqIG5vZGUpCiB7CkBAIC0zOTE1LDYgKzQxMDcsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAg
ICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6IHsKKyAgICAgICAgY29tcGlsZVJlZ0V4cFRlc3RJbmxp
bmUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgUmVnRXhwTWF0Y2hG
YXN0OiB7CiAgICAgICAgIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3Qobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA5LDYgKzE1MDksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21waWxlUmVnRXhwTWF0Y2hGYXN0KE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVSZWdFeHBNYXRjaEZhc3RHbG9iYWwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlZ0V4
cFRlc3QoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVN0cmluZ1JlcGxhY2UoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlz
T2JqZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2ZJc09iamVjdChOb2RlKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxNiw2ICs4MTYsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH07CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5F
KQorICAgICAgICAgICAgYXV0byBjb252ZXJ0VGVzdFRvVGVzdElubGluZSA9IFsmXSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBUZXN0KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAocmVnRXhwLT5nbG9i
YWxPclN0aWNreSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGF1dG8gaml0Q29kZUJsb2NrID0gcmVnRXhw
LT5nZXRSZWdFeHBKSVRDb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoIWppdENvZGVC
bG9jaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAg
ICAgYXV0byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5nZXQ4Qml0SW5saW5l
U3RhdHMoKTsKKworICAgICAgICAgICAgICAgIGlmICghaW5saW5lQ29kZVN0YXRzOEJpdC5jYW5J
bmxpbmUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY29kZVNpemUgPSBpbmxpbmVDb2RlU3RhdHM4Qml0LmNvZGVTaXplKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoY29kZVNpemUgPiBPcHRpb25zOjptYXhpbXVtUmVnRXhw
VGVzdElubGluZUNvZGVzaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBpbmxpbmVDb2RlU3RhdHM4Qml0
LnN0YWNrU2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIGlmIChhbGlnbmVkRnJhbWVTaXplKQor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBzdGQ6Om1heCht
X2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMsIGFyZ3VtZW50Q291bnRGb3JTdGFja1NpemUoYWxpZ25l
ZEZyYW1lU2l6ZSkpOworCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX25v
ZGUtPm9yaWdpbjsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICBtX25vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4s
IG1fbm9kZS0+Y2hpbGRyZW4uanVzdENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBtX25vZGUt
PmNvbnZlcnRUb1JlZ0V4cFRlc3RJbmxpbmUobV9ncmFwaC5mcmVlemUoZ2xvYmFsT2JqZWN0KSwg
bV9ncmFwaC5mcmVlemUocmVnRXhwKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisjZW5kaWYK
KwogICAgICAgICAgICAgYXV0byBjb252ZXJ0VG9TdGF0aWMgPSBbJl0gewogICAgICAgICAgICAg
ICAgIGlmIChtX25vZGUtPm9wKCkgIT0gUmVnRXhwRXhlYykKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODM0LDYgKzg3MywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKGZvbGRUb0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyNpZiBFTkFC
TEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorICAgICAgICAgICAgaWYgKGNvbnZlcnRU
ZXN0VG9UZXN0SW5saW5lKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKwogICAg
ICAgICAgICAgaWYgKGNvbnZlcnRUb1N0YXRpYygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzksNiArMzM5LDcgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAgICBjYXNlIFJlZ0V4cFRlc3Q6
CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0Ogog
ICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgogICAgIGNhc2UgTmV3UmVnZXhwOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBACiAjaW5jbHVkZSAiU3VwZXJT
YW1wbGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiWWFyckpJVFJlZ2lzdGVycy5oIgogI2luY2x1ZGUgPGF0
b21pYz4KICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1JlY3Vyc2FibGVMYW1i
ZGEuaD4KQEAgLTE1OTEsNiArMTU5Miw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhw
VGVzdDoKICAgICAgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0KCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgorICAgICAgICAgICAgY29tcGlsZVJl
Z0V4cFRlc3RJbmxpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZ0V4
cE1hdGNoRmFzdDoKICAgICAgICAgICAgIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTQzNTUsNiArMTQzNTksMTYzIEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwogICAgIH0KIAorI2lmIEVOQUJM
RShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVz
dElubGluZSgpCisgICAgeworICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAq
PihtX25vZGUtPmNlbGxPcGVyYW5kMigpLT52YWx1ZSgpKTsKKworICAgICAgICBBU1NFUlQoIXJl
Z0V4cC0+Z2xvYmFsT3JTdGlja3koKSk7CisKKyAgICAgICAgYXV0byBqaXRDb2RlQmxvY2sgPSBy
ZWdFeHAtPmdldFJlZ0V4cEpJVENvZGVCbG9jaygpOworICAgICAgICBBU1NFUlQoaml0Q29kZUJs
b2NrKTsKKyAgICAgICAgYXV0byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5n
ZXQ4Qml0SW5saW5lU3RhdHMoKTsKKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0Q29uc3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihtX25vZGUtPmNlbGxPcGVyYW5kKCkt
PnZhbHVlKCkpOworCisgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBpbmxpbmVDb2RlU3RhdHM4
Qml0LnN0YWNrU2l6ZSgpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6
ZUluQnl0ZXMoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2s4
Qml0U3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5l
Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlvbkNh
c2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxw
dHI7CisKKyAgICAgICAgTFZhbHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93UmVnRXhwT2JqZWN0KG1fbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBudWxscHRyOworICAgICAgICBib29s
IGhhdmVTdHJpbmdBcmcgPSBtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2U7
CisKKyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcpCisgICAgICAgICAgICBhcmd1bWVudCA9IGxv
d1N0cmluZyhtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJn
dW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIGF1dG8gdm0g
PSAmdGhpcy0+dm0oKTsKKyAgICAgICAgYXV0byBzdGFja0NoZWNrZXIgPSAmbV9ncmFwaC5tX3N0
YWNrQ2hlY2tlcjsKKworICAgICAgICBpZiAoIWhhdmVTdHJpbmdBcmcpIHsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChhcmd1bWVudCksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJh
cmVseShvcGVyYXRpb25DYXNlKSk7CisKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChpc1N0cmluZyhhcmd1bWVudCksIHVzdWFsbHkoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKG9wZXJh
dGlvbkNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBj
aGVjazhCaXRTdHJpbmcpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNSb3BlU3RyaW5n
KGFyZ3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5zdXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1
cmUoY2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNr
OEJpdFN0cmluZywgaW5saW5lQ2FzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNSb3BlU3RyaW5nKGFyZ3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5z
dXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUoY2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAg
ICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2s4Qml0U3RyaW5nLCBpbmxpbmVDYXNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0
cihhcmd1bWVudCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkp
KSwKKyAgICAgICAgICAgIHVuc3VyZShvcGVyYXRpb25DYXNlKSwgdW5zdXJlKGlubGluZUNhc2Up
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVDYXNlLCBvcGVyYXRpb25DYXNlKTsK
KyAgICAgICAgTFZhbHVlIHN0cmluZ0xlbmd0aCA9IG1fb3V0Lnplcm9FeHQobV9vdXQubG9hZDMy
KHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9sZW5ndGgpLCBJbnQ2NCk7CisgICAgICAg
IExWYWx1ZSBzdHJpbmdEYXRhID0gbV9vdXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0
cmluZ0ltcGxfZGF0YSk7CisKKyAgICAgICAgYXV0byBjb21tb25EYXRhID0gbV9mdGxTdGF0ZS5q
aXRDb2RlLT5kZmdDb21tb24oKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KEludDMyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KENvbnN0cmFpbmVkVmFsdWUoc3RyaW5nRGF0YSwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc3RyaW5nTGVu
Z3RoLCBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmd1bWVudCwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0
ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gaW5saW5l
Q29kZVN0YXRzOEJpdC5uZWVkc1RlbXAyKCkgPyA2IDogNTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KworICAgICAgICAgICAgICAgIEdQUlJlZyByZXR1cm5HUFIgPSBwYXJhbXNbMF0uZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0xlbmd0aEdQUiA9IHBhcmFtc1syXS5ncHIoKTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgc3RyaW5nR1BSID0gcGFyYW1zWzNdLmdwcigpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHJldHVybjJHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyB0ZW1wMEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMyk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHRlbXAxR1BSID0gcGFyYW1zLmdwU2NyYXRjaCg0KTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgdGVtcDJHUFIgPSBpbmxpbmVDb2RlU3RhdHM4Qml0Lm5lZWRzVGVt
cDIoKSA/IHBhcmFtcy5ncFNjcmF0Y2goNSkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIGluZGV4R1BSKTsK
KworICAgICAgICAgICAgICAgIFlhcnI6OllhcnJKSVRSZWdpc3RlcnMgeWFyclJlZ2lzdGVyczsK
KworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOwor
ICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXggPSBpbmRleEdQUjsKKyAgICAgICAg
ICAgICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0cmluZ0xlbmd0aEdQUjsKKyAgICAgICAg
ICAgICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1dCA9IG91dHB1dEdQUjsKKyAgICAgICAgICAgICAg
ICB5YXJyUmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAgICAgICAgICAgICAgeWFyclJl
Z2lzdGVycy5yZWdUMSA9IHRlbXAxR1BSOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDb2Rl
U3RhdHM4Qml0Lm5lZWRzVGVtcDIoKSkKKyAgICAgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVy
cy5yZWdUMiA9IHRlbXAyR1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMucmV0dXJu
UmVnaXN0ZXIgPSByZXR1cm5HUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZXR1
cm5SZWdpc3RlcjIgPSByZXR1cm4yR1BSOworCisgICAgICAgICAgICAgICAgWWFycjo6aml0Q29t
cGlsZUlubGluZWRUZXN0KHN0YWNrQ2hlY2tlciwgcmVnRXhwLT5wYXR0ZXJuKCksIHJlZ0V4cC0+
ZmxhZ3MoKSwgWWFycjo6Q2hhclNpemU6OkNoYXI4LCB2bSwgY29tbW9uRGF0YS0+bV9ib3llck1v
b3JlRGF0YSwgaml0LCB5YXJyUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAgIGF1dG8gZmFpbGVkTWF0Y2gg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgcmV0dXJuR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlZCBjYWNo
ZWQgcmVzdWx0LgorICAgICAgICAgICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSB0ZW1w
MEdQUjsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0Q29uc3QpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgICAg
IHB0cmRpZmZfdCBvZmZzZXQgPSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNl
dCgpICsgUmVnRXhwR2xvYmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsKKworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVnRXhw
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhw
Q2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RSZWdFeHAoKSkpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihzdHJpbmdHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0SW5wdXQoKSkpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRP
ZlJlc3VsdCgpICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBzdGFydCkpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmUzMihyZXR1cm4yR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVz
dWx0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIGVuZCkpKTsKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6
Om9mZnNldE9mUmVpZmllZCgpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcmV0dXJuR1BSKTsKKyAgICAgICAgICAgICAgICBkb25l
LmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGZhaWxlZE1hdGNoLmxpbmso
JmppdCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMCksIHJldHVybkdQUik7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1
ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7
CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlOjp0b3AoKTsK
KworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmxpbmVyZXN1bHQgPSBtX291dC5hbmNob3IocGF0
Y2hwb2ludCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhvcGVyYXRpb25DYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1
ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQ7CisKKyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcp
CisgICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDMy
LCBvcGVyYXRpb25SZWdFeHBUZXN0U3RyaW5nLCBnbG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFu
Y2hvcih2bUNhbGwoSW50MzIsIG9wZXJhdGlvblJlZ0V4cFRlc3QsIGdsb2JhbE9iamVjdCwgYmFz
ZSwgYXJndW1lbnQpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRC
b29sZWFuKG1fb3V0LnBoaShJbnQzMiwgaW5saW5lcmVzdWx0LCBvcGVyYXRpb25SZXN1bHQpKTsK
KyAgICB9CisjZWxzZQorICAgIE5PX1JFVFVSTiB2b2lkIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5l
KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
I2VuZGlmCisKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoKQogICAgIHsKICAgICAg
ICAgTFZhbHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9u
IDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2ICsyODcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSgpOwogICAgIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5n
U3dpdGNoQ2FzZUxlbmd0aCwgNTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQs
IG1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3RhbExlbmd0aCwgMjAwMCwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdihVbnNpZ25lZCwgbWF4aW11bVJlZ0V4cFRlc3RJbmxpbmVDb2Rlc2l6ZSwg
NTAwLCBOb3JtYWwsICJNYXhpbXVtIGNvZGUgc2l6ZSBpbiBieXRlcyBmb3IgaW5saW5lZCBSZWdF
eHAudGVzdCBKSVQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCBqaXRQb2xpY3lTY2Fs
ZSwgMS4wLCBOb3JtYWwsICJzY2FsZSBKSVQgdGhyZXNob2xkcyB0byB0aGlzIHNwZWNpZmllZCBy
YXRpbyBiZXR3ZWVuIDAuMCAoY29tcGlsZSBBU0FQKSBhbmQgMS4wIChjb21waWxlIGxpa2Ugbm9y
bWFsKS4iKSBcCiAgICAgdihCb29sLCBmb3JjZUVhZ2VyQ29tcGlsYXRpb24sIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
CShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHAuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwxMyBAQCBwdWJsaWM6CiAKICAgICBT
dHJpbmcgdG9Tb3VyY2VTdHJpbmcoKSBjb25zdDsKIAorI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAg
ICBZYXJyOjpZYXJyQ29kZUJsb2NrKiBnZXRSZWdFeHBKSVRDb2RlQmxvY2soKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcmVnRXhwSklUQ29kZS5nZXQoKTsKKyAgICB9CisjZW5kaWYKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7CiAgICAgUmVnRXhwKFZNJiwgY29u
c3QgU3RyaW5nJiwgT3B0aW9uU2V0PFlhcnI6OkZsYWdzPik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9uIDI4NDQ2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHJvdW5kTG9jYWxS
ZWdpc3RlckNvdW50RgogICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSwgbG9jYWxSZWdpc3RlckNvdW50ICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzKSAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
IH0KIAoraW5saW5lIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRGb3JTdGFja1NpemUodW5zaWduZWQg
c2l6ZUluQnl0ZXMpCit7CisgICAgdW5zaWduZWQgc2l6ZUluUmVnaXN0ZXJzID0gc2l6ZUluQnl0
ZXMgLyBzaXplb2Yodm9pZCopOworCisgICAgaWYgKHNpemVJblJlZ2lzdGVycyA8PSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gc2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Cit9
CisKIGlubGluZSB1bnNpZ25lZCBsb2dTdGFja0FsaWdubWVudFJlZ2lzdGVycygpCiB7CiAgICAg
cmV0dXJuIFdURjo6ZmFzdExvZzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjg0NDYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSAiWWFyckNhbm9uaWNh
bGl6ZS5oIgogI2luY2x1ZGUgIllhcnJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJZYXJySklU
UmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAiWWFyck1hdGNoaW5nQ29udGV4dEhvbGRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgpAQCAt
MTgyLDExNSArMTgzLDExIEBAIHN0ZDo6dHVwbGU8Qm95ZXJNb29yZUJpdG1hcDo6TWFwLCBCb3ll
ck0KICAgICByZXR1cm4gc3RkOjp0dXBsZSB7IFdURk1vdmUobWFwKSwgV1RGTW92ZShjaGFyYWN0
ZXJzRmFzdFBhdGgpIH07CiB9CiAKLWNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckpJVEluZm8sIHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewordGVtcGxhdGU8Y2xhc3MgWWFy
ckpJVFJlZ3MgPSBZYXJySklURGVmYXVsdFJlZ2lzdGVycz4KK2NsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckpJVEluZm8gewogCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNUmVnaXN0ZXJzOjpyMDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBBUk1SZWdpc3RlcnM6OnIxOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBBUk1SZWdpc3RlcnM6OnIy
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk1SZWdpc3RlcnM6
OnIzOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QwID0gQVJNUmVnaXN0
ZXJzOjpyNDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdp
c3RlcnM6OnI1OwotICAgIC8vIHI2IGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlckFSTXY3
LAotICAgIC8vIHI3IGlzIGZwLgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdU
MiA9IEFSTVJlZ2lzdGVyczo6cjg7Ci0gICAgLy8gcjkgaXMgc2IgaW4gRUFCSS4KLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7
IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBhIHNwZWNpYWwgcmVnaXN0ZXIuCi0KLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6
OnIwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBB
Uk1SZWdpc3RlcnM6OnIxOwotCi0jZWxpZiBDUFUoQVJNNjQpCi0gICAgLy8gQXJndW1lbnQgcmVn
aXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNNjRSZWdp
c3RlcnM6OngwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTTY0
UmVnaXN0ZXJzOjp4MTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0g
QVJNNjRSZWdpc3RlcnM6OngyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRw
dXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsgLy8g
TG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gQVJN
NjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotCi0g
ICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKLSAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3VudCA9IEFSTTY0UmVnaXN0ZXJzOjp4OTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBB
Uk02NFJlZ2lzdGVyczo6eDEwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmlj
b2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdpc3RlcnM6OngxMTsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBBUk02NFJlZ2lzdGVy
czo6eDEyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZWFkaW5nU3Vycm9nYXRl
VGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6eDE0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgPSBBUk02NFJlZ2lzdGVy
czo6eDE1OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVy
ID0gQVJNNjRSZWdpc3RlcnM6OngwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZj
MDApOwotI2VsaWYgQ1BVKE1JUFMpCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlu
cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKLQotICAgIC8vIHQwIGlzIHJlc2Vy
dmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCi0gICAgLy8gdDEgaXMgcmVzZXJ2ZWQgZm9yIE1h
Y3JvQXNzZW1ibGVyTUlQUy4KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAg
PSBNSVBTUmVnaXN0ZXJzOjp0MjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVyczo6dDU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gTUlQU1JlZ2lzdGVy
czo6djE7Ci0KLSNlbGlmIENQVShYODZfNjQpCi0jaWYgIU9TKFdJTkRPV1MpCi0gICAgLy8gQXJn
dW1lbnQgcmVnaXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0g
WDg2UmVnaXN0ZXJzOjplZGk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4
ID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxl
bmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8v
IExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IFg4
NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0jZWxz
ZQotICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgZG9lc24ndCBmaXQgaW4gNjRiaXRzLCBpdHMg
ZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3ggYW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBzaGlm
dGVkLgotICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS83NTcy
enR6NC5hc3B4Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWF0Y2hSZXN1bHQpID4gc2l6ZW9m
KHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90IGZpdCBpbiA2NGJpdHMiKTsKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVkeDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OnI4OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODZSZWdpc3RlcnM6OnI5Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OnIx
MDsKLSNlbmRpZgotCi0gICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVheDsKLSNpZiAhT1MoV0lORE9X
UykKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6
OnI5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVy
czo6cjEwOwotI2Vsc2UKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBY
ODZSZWdpc3RlcnM6OmVjeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIg
PSBYODZSZWdpc3RlcnM6OmVkaTsKLSNlbmRpZgotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lzdGVyczo6ZWJ4OwotI2lmICFPUyhXSU5ET1dT
KQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0g
WDg2UmVnaXN0ZXJzOjpyMTI7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0jZW5kaWYKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBYODZS
ZWdpc3RlcnM6OnIxMzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdW5pY29kZVRl
bXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
ZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0ZXJzOjpyMTU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gWDg2UmVnaXN0
ZXJzOjplZHg7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSA9IFRydXN0ZWRJbW0zMigweDEwMDAwKTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gVHJ1c3RlZEltbTMyKDB4ZDgw
MCk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVkSW1tMzIgdHJhaWxpbmdTdXJyb2dhdGVU
YWcgPSBUcnVzdGVkSW1tMzIoMHhkYzAwKTsKLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJ
bW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2lmZGVm
ICBKSVRfVU5JQ09ERV9FWFBSRVNTSU9OUworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgc3Vycm9nYXRlVGFnTWFzayA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MHhmZmZmZmMwMCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VY
UFJFU1NJT05TKQpAQCAtMzYwLDggKzI1NywxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAKICAgICB2b2lkIGluaXRQYXJlbkNvbnRleHRGcmVlTGlzdCgpCiAg
ICAgewotICAgICAgICBSZWdpc3RlcklEIHBhcmVuQ29udGV4dFBvaW50ZXIgPSByZWdUMDsKLSAg
ICAgICAgUmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciA9IHJlZ1QyOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRQb2ludGVyID0gbV9yZWdz
LnJlZ1QwOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250
ZXh0UG9pbnRlciA9IG1fcmVncy5yZWdUMjsKKworICAgICAgICBtX3VzZXNUMiA9IHRydWU7CiAK
ICAgICAgICAgc2l6ZV90IHBhcmVuQ29udGV4dFNpemUgPSBQYXJlbkNvbnRleHQ6OnNpemVGb3Io
bV9wYXJlbkNvbnRleHRTaXplcyk7CiAKQEAgLTM3Miw5NCArMjcxLDkzIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdD
b250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgZnJlZWxp
c3RTaXplUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9yZWdzLm1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZz
ZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lz
dGVyKTsKICAgICAgICAgLy8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RS
ZWdpc3RlciBhcmUgbGlrZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0
dGVybkNvbnRleHRCdWZmZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAgICAgICBKdW1wIGVt
cHR5RnJlZUxpc3QgPSBicmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAg
ICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVy
LCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGFkZFB0cihmcmVlbGlzdFJlZ2lz
dGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0gICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIo
cGFyZW5Db250ZXh0U2l6ZSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBN
YXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXIoKSksIG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1w
dHlGcmVlTGlzdCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxp
c3RSZWdpc3RlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7CisgICAgICAgIG1faml0LmFkZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJl
ZWxpc3RSZWdpc3RlciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5h
ZGRQdHIobV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rl
cik7CisgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBh
cmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJlZWxpc3RTaXplUmVnaXN0ZXIpOwogCi0gICAgICAg
IExhYmVsIGxvb3BUb3AodGhpcyk7Ci0gICAgICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2hQdHIo
QWJvdmUsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0g
ICAgICAgIHN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBBZGRyZXNzKHBhcmVuQ29u
dGV4dFBvaW50ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIG1vdmUo
bmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBwYXJlbkNvbnRleHRQb2ludGVy
LCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGp1bXAobG9vcFRvcCk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wVG9wKCZtX2ppdCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGluaXREb25lID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdp
c3Rlcik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6
Om5leHRPZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5tb3ZlKG5leHRQYXJlbkNvbnRleHRQb2lu
dGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBhcmVuQ29udGV4dFBvaW50
ZXIsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuanVtcChsb29wVG9w
KTsKIAotICAgICAgICBpbml0RG9uZS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50ZXIsIFBhcmVuQ29u
dGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIGVtcHR5RnJlZUxpc3QubGluayh0aGlzKTsK
KyAgICAgICAgaW5pdERvbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsK
KyAgICAgICAgZW1wdHlGcmVlTGlzdC5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCBh
bGxvY2F0ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB2b2lkIGFsbG9jYXRl
UGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0g
ICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxp
c3RSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlbWFpbmluZ01h
dGNoQ291bnQpOwotICAgICAgICBtX2hpdE1hdGNoTGltaXQuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVtYWluaW5nTWF0Y2hDb3VudCkpOwotICAgICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0
ZXIsIHJlc3VsdCk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmVlbGlzdFJlZ2lzdGVyLCBQ
YXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBt
X2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlcikpOworICAgICAgICBtX2ppdC5zdWIzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3Vu
dCk7CisgICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MuZnJlZWxpc3RSZWdp
c3RlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3Rl
cik7CiAgICAgfQogCi0gICAgdm9pZCBmcmVlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgaGVhZFB0
clJlZ2lzdGVyLCBSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdpc3RlcikKKyAgICB2b2lkIGZyZWVQ
YXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaGVhZFB0clJlZ2lzdGVyLCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdIZWFkUHRyUmVnaXN0ZXIpCiAgICAgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRP
ZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7Ci0gICAgICAgIHN0b3JlUHRyKGZyZWVsaXN0
UmVnaXN0ZXIsIEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZz
ZXQoKSkpOwotICAgICAgICBtb3ZlKGhlYWRQdHJSZWdpc3RlciwgZnJlZWxpc3RSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaGVhZFB0clJl
Z2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNl
dCgpKSk7CisgICAgICAgIG1faml0Lm1vdmUoaGVhZFB0clJlZ2lzdGVyLCBtX3JlZ3MuZnJlZWxp
c3RSZWdpc3Rlcik7CiAgICAgfQogCi0KLSAgICB2b2lkIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3Vu
dFRvUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91
bnRHUFIsIFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSKQorICAgIHZvaWQgc3RvcmVCZWdpbkFu
ZE1hdGNoQW1vdW50VG9QYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmVn
aW5HUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoQW1vdW50R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSArIDQgPT0gUGFyZW5Db250ZXh0
OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1h
dGNoQW1vdW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6
OmJlZ2luT2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1h
dGNoQW1vdW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBsb2Fk
QmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBwYXJlbkNvbnRl
eHRHUFIsIFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIpCisg
ICAgdm9pZCBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBiZWdpbkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIp
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQo
KSArIDQgPT0gUGFyZW5Db250ZXh0OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgbG9h
ZFBhaXIzMihwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6OmJlZ2lu
T2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UGFpcjMyKHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihQYXJl
bkNvbnRleHQ6OmJlZ2luT2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOwogICAg
IH0KIAotICAgIHZvaWQgc2F2ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHBhcmVuQ29udGV4dFJl
ZywgUmVnaXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVk
IGxhc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCisg
ICAgdm9pZCBzYXZlUGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVu
Q29udGV4dFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgdW5zaWduZWQg
Zmlyc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwgdW5zaWduZWQgc3VicGF0
dGVybkJhc2VGcmFtZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgbG9hZEZyb21GcmFtZShzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNo
QW1vdW50SW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3Vu
dFRvUGFyZW5Db250ZXh0KGluZGV4LCB0ZW1wUmVnLCBwYXJlbkNvbnRleHRSZWcpOworICAgICAg
ICBzdG9yZUJlZ2luQW5kTWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChtX3JlZ3MuaW5kZXgsIHRl
bXBSZWcsIHBhcmVuQ29udGV4dFJlZyk7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUoc3VicGF0dGVy
bkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRy
ZXNzSW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlUHRyKHRlbXBSZWcsIEFkZHJlc3Mo
cGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSkpOwor
ICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSk7CiAg
ICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0
dGVybnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0U3Vi
cGF0dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7CiAg
ICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAgICAg
IGxvYWQ2NChBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWdu
ZWQpKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2NCh0ZW1wUmVnLCBBZGRyZXNz
KHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1YnBhdHRl
cm4pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKHVuc2lnbmVkKSks
IHRlbXBSZWcpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGVtcFJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRl
cm5PZmZzZXQoc3VicGF0dGVybikpKTsKICAgICAgICAgICAgICAgICBjbGVhclN1YnBhdHRlcm5T
dGFydChzdWJwYXR0ZXJuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlvbiA9IHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5Db250ZXh0U2l6
ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKICAgICAgICAgICAgIGxvYWRGcm9t
RnJhbWUoZnJhbWVMb2NhdGlvbiwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzdG9yZVB0cih0ZW1w
UmVnLCBBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zm
c2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRy
X3QpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9mZnNl
dChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0cl90
KSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlUGFyZW5Db250ZXh0KFJl
Z2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZp
cnN0U3VicGF0dGVybiwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRl
cm5CYXNlRnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHJlc3RvcmVQYXJlbkNvbnRleHQoTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RT
dWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewot
ICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQocGFyZW5Db250
ZXh0UmVnLCBpbmRleCwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgc3Vi
cGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdp
bkluZGV4KCkpOworICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRl
eHQocGFyZW5Db250ZXh0UmVnLCBtX3JlZ3MuaW5kZXgsIHRlbXBSZWcpOworICAgICAgICBzdG9y
ZVRvRnJhbWUobV9yZWdzLmluZGV4LCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIHN0b3JlVG9GcmFt
ZSh0ZW1wUmVnLCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwgdGVt
cFJlZyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocGFy
ZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSksIHRlbXBS
ZWcpOwogICAgICAgICBzdG9yZVRvRnJhbWUodGVtcFJlZywgc3VicGF0dGVybkJhc2VGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRyZXNzSW5kZXgoKSk7
CiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3Vi
cGF0dGVybnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0
U3VicGF0dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAg
ICAgIGxvYWQ2NChBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0
ZXJuT2Zmc2V0KHN1YnBhdHRlcm4pKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2
NCh0ZW1wUmVnLCBBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5z
aWduZWQpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1
YnBhdHRlcm4pKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0ZW1w
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3VicGF0dGVybiA8
PCAxKSAqIHNpemVvZih1bnNpZ25lZCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlv
biA9IHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5D
b250ZXh0U2l6ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFt
ZU9mZnNldChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWlu
dHB0cl90KSksIHRlbXBSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9m
ZnNldChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0
cl90KSksIHRlbXBSZWcpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKHRlbXBSZWcsIGZyYW1l
TG9jYXRpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNDg3LDcgKzM4NSw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfQogICAgIH0KIAotICAg
IHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKFJlZ2lzdGVySUQgY2hhcmFjdGVyLCBKdW1w
TGlzdCYgZmFpbHVyZXMsIEp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdl
KiByYW5nZXMsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNo
YXIzMiogbWF0Y2hlcywgdW5zaWduZWQgbWF0Y2hDb3VudCkKKyAgICB2b2lkIG1hdGNoQ2hhcmFj
dGVyQ2xhc3NSYW5nZShNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZXMsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bWF0Y2hEZXN0LCBjb25zdCBDaGFyYWN0ZXJSYW5nZSogcmFuZ2VzLCB1bnNpZ25lZCBjb3VudCwg
dW5zaWduZWQqIG1hdGNoSW5kZXgsIGNvbnN0IFVDaGFyMzIqIG1hdGNoZXMsIHVuc2lnbmVkIG1h
dGNoQ291bnQpCiAgICAgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICAvLyBwaWNrIHdoaWNo
IHJhbmdlIHdlJ3JlIGdvaW5nIHRvIGdlbmVyYXRlCkBAIC00OTgsMzMgKzM5NiwzMyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAvLyBjaGVj
ayBpZiB0aGVyZSBhcmUgYW55IHJhbmdlcyBvciBtYXRjaGVzIGJlbG93IGxvLiAgSWYgbm90LCBq
dXN0IGpsIHRvIGZhaWx1cmUgLQogICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcg
ZWxzZSB0byBjaGVjaywgY2hlY2sgdGhhdCBmaXJzdCwgaWYgaXQgZmFsbHMgdGhyb3VnaCBqbXAg
dG8gZmFpbHVyZS4KICAgICAgICAgICAgIGlmICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAm
JiAobWF0Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGxv
T3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5P
ckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQp
bG8pKTsKIAogICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNvZGUgZm9yIGFsbCByYW5nZXMg
YmVmb3JlIHRoaXMgb25lCiAgICAgICAgICAgICAgICAgaWYgKHdoaWNoKQogICAgICAgICAgICAg
ICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0
Y2hEZXN0LCByYW5nZXMsIHdoaWNoLCBtYXRjaEluZGV4LCBtYXRjaGVzLCBtYXRjaENvdW50KTsK
IAogICAgICAgICAgICAgICAgIHdoaWxlICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAo
bWF0Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hv
cnQpbWF0Y2hlc1sqbWF0Y2hJbmRleF0pKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoRGVz
dC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbWF0Y2hlc1sqbWF0Y2hJbmRl
eF0pKSk7CiAgICAgICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICAgICAg
bG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsoJm1f
aml0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hpY2gpIHsKLSAgICAgICAgICAgICAgICBK
dW1wIGxvT3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJ
bW0zMigodW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRl
clRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQg
c2hvcnQpbG8pKTsKIAogICAgICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShj
aGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgs
IG1hdGNoZXMsIG1hdGNoQ291bnQpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
Ci0gICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
bG9PckFib3ZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWxvKSkpOwogCiAgICAgICAgICAgICB3aGls
ZSAoKCptYXRjaEluZGV4IDwgbWF0Y2hDb3VudCkgJiYgKG1hdGNoZXNbKm1hdGNoSW5kZXhdIDw9
IGhpKSkKICAgICAgICAgICAgICAgICArKyptYXRjaEluZGV4OwogCi0gICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpaGkpKSk7CisgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCloaSkpKTsKICAgICAgICAgICAgIC8v
IGZhbGwgdGhyb3VnaCB0byBoZXJlLCB0aGUgdmFsdWUgaXMgYWJvdmUgaGkuCiAKICAgICAgICAg
ICAgIC8vIHNodWZmbGUgYWxvbmcgJiBsb29wIGFyb3VuZCBpZiB0aGVyZSBhcmUgYW55IG1vcmUg
bWF0Y2hlcyB0byBoYW5kbGUuCkBAIC01MzQsMjQgKzQzMiwyNCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0gd2hpbGUgKGNvdW50KTsKICAgICB9
CiAKLSAgICB2b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoUmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIEp1
bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlckNsYXNzKiBjaGFyQ2xhc3MpCisgICAg
dm9pZCBtYXRjaENoYXJhY3RlckNsYXNzKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJh
Y3RlciwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3Rl
ckNsYXNzKiBjaGFyQ2xhc3MpCiAgICAgewogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX3RhYmxl
ICYmICFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJl
c3MgdGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNoYXJD
bGFzcy0+bV90YWJsZSkpOwotICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2hUZXN0
OChjaGFyQ2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IFplcm8gOiBOb25aZXJvLCB0YWJsZUVudHJ5
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIHRhYmxlRW50
cnkoY2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihjaGFyQ2xhc3MtPm1fdGFi
bGUpKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDgoY2hh
ckNsYXNzLT5tX3RhYmxlSW52ZXJ0ZWQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0YWJsZUVudHJ5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBKdW1wTGlzdCB1bmljb2RlRmFpbDsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHVuaWNvZGVGYWlsOwogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX21h
dGNoZXNVbmljb2RlLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZS5zaXplKCkp
IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGlzQXNjaWk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgaXNBc2NpaTsKICAgICAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0
Y2hlcy5zaXplKCkgfHwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgaXNBc2NpaS5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIFRy
dXN0ZWRJbW0zMigweDdmKSkpOworICAgICAgICAgICAgICAgIGlzQXNjaWkuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDdmKSkpOwogCiAgICAgICAgICAgICBpZiAoY2hh
ckNsYXNzLT5tX21hdGNoZXNVbmljb2RlLnNpemUoKSkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjaCA9IGNoYXJDbGFzcy0+bV9tYXRj
aGVzVW5pY29kZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFu
Y2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNo
YXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApAQCAtNTYwLDI1ICs0NTgsMjUgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGxvID0g
Y2hhckNsYXNzLT5tX3Jhbmdlc1VuaWNvZGVbaV0uYmVnaW47CiAgICAgICAgICAgICAgICAgICAg
IFVDaGFyMzIgaGkgPSBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5lbmQ7CiAKLSAgICAg
ICAgICAgICAgICAgICAgSnVtcCBiZWxvdyA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIs
IEltbTMyKGxvKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGhpKSkpOwotICAgICAgICAgICAg
ICAgICAgICBiZWxvdy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZWxvdyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobG8pKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihoaSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYmVsb3cubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNp
emUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB1bmlj
b2RlRmFpbCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGlzQXNjaWkubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICB1bmljb2RlRmFpbCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGlzQXNj
aWkubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9y
YW5nZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4ID0gMDsKLSAg
ICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1Jhbmdl
KGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5iZWdp
bigpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAg
ICAgICB3aGlsZSAobWF0Y2hJbmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4Kytd
KSkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5z
aWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIAotICAg
ICAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmxpbmso
Jm1faml0KTsKICAgICAgICAgfSBlbHNlIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkp
IHsKICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbjogZ2F0aGVyICdhJywnQScgZXRjIGJhY2sg
dG9nZXRoZXIsIGNhbiBtYXNrICYgdGVzdCBvbmNlLgogICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IG1hdGNoZXNBWmF6OwpAQCAtNTkzLDc4ICs0OTEsODMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVy
KGNoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFy
YWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaCkpKTsKKyAgICAgICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFj
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAodW5zaWduZWQgY291bnRBWmF6ID0gbWF0Y2hlc0Fa
YXouc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50QVphejsgKytpKQotICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJbW0zMihtYXRjaGVzQVph
eltpXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihtYXRjaGVzQVpheltpXSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJD
bGFzcy0+bV9yYW5nZXNVbmljb2RlLnNpemUoKSkKLSAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB1bmljb2RlRmFpbC5saW5rKCZtX2ppdCk7CiAgICAgfQog
CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCi0gICAgdm9pZCBhZHZh
bmNlSW5kZXhBZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKGNvbnN0IFBhdHRlcm5UZXJtKiB0
ZXJtLCBKdW1wTGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBSZWdp
c3RlcklEIGNoYXJhY3RlcikKKyAgICB2b2lkIGFkdmFuY2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xh
c3NUZXJtTWF0Y2goY29uc3QgUGF0dGVyblRlcm0qIHRlcm0sIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQodGVybS0+dHlw
ZSA9PSBQYXR0ZXJuVGVybTo6VHlwZTo6Q2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0
ZXJtLT5pc0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAy
IDogMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/
IDIgOiAxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0g
YnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQk1QQ2hh
ciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBt
X3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwogICAgICAgICAgICAgZmFpbHVyZXNBZnRl
ckluY3JlbWVudGluZ0luZGV4LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5r
KHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2pp
dCk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIEp1bXBzIGlmIGlucHV0IG5v
dCBhdmFpbGFibGU7IHdpbGwgaGF2ZSAoaW5jb3JyZWN0bHkpIGluY3JlbWVudGVkIGFscmVhZHkh
Ci0gICAgSnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9
IDApCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcElmTm9BdmFpbGFibGVJbnB1dCh1bnNp
Z25lZCBjb3VudFRvQ2hlY2sgPSAwKQogICAgIHsKICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykK
LSAgICAgICAgICAgIGFkZDMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2spLCBtX3JlZ3MuaW5kZXgp
OworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBt
X3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykKKyAgICB7
CisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2sp
LCBtX3JlZ3MuaW5kZXgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsKICAgICB9
CiAKLSAgICBKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVja05vdEVub3VnaElucHV0KE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCiAgICAgewotICAgICAgICBhZGQzMihJ
bW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihCZWxv
d09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICBtX2ppdC5hZGQzMihtX3JlZ3MuaW5k
ZXgsIGFkZGl0aW9uYWxBbW91bnQpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlLCBhZGRpdGlvbmFsQW1vdW50LCBtX3JlZ3MubGVuZ3RoKTsKICAg
ICB9CiAKLSAgICBKdW1wIGNoZWNrTm90RW5vdWdoSW5wdXQoUmVnaXN0ZXJJRCBhZGRpdGlvbmFs
QW1vdW50KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrSW5wdXQoKQogICAgIHsKLSAg
ICAgICAgYWRkMzIoaW5kZXgsIGFkZGl0aW9uYWxBbW91bnQpOwotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoQWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgs
IG1fcmVncy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgY2hlY2tJbnB1dCgpCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYXRFbmRPZklucHV0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBi
cmFuY2gzMihCZWxvd09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5s
ZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgYXRFbmRPZklucHV0KCkKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3RBdEVuZE9mSW5wdXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKEVxdWFsLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsK
ICAgICB9CiAKLSAgICBKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+
IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1w
UmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRp
dmVDaGFyYWN0ZXJPZmZzZXQsIHRlbXBSZWcsIG1fcmVncy5pbmRleCk7CiAgICAgfQogCi0gICAg
QmFzZUluZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MoQ2hlY2tlZDx1bnNpZ25lZD4g
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVySUQgdGVtcFJlZywgUmVnaXN0ZXJJRCBp
bmRleFJlZyA9IGluZGV4KQorICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggbmVnYXRpdmVP
ZmZzZXRJbmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9m
ZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgaW5kZXhSZWcpCiAgICAgewotICAgICAgICBSZWdpc3RlcklEIGJhc2UgPSBp
bnB1dDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmFzZSA9IG1fcmVncy5p
bnB1dDsKIAotICAgICAgICAvLyBCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50
MzJfdCBvZmZzZXQuIEdpdmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCi0gICAgICAgIC8v
IGV4cHJlc3Npb24gdGhhdCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIEJhc2VJbmRl
eCdzIHNpZ25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CisgICAgICAgIC8vIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50MzJfdCBvZmZzZXQuIEdp
dmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCisgICAgICAgIC8vIGV4cHJlc3Npb24gdGhh
dCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgncyBzaWduZWQgb2Zmc2V0IGlzIGluc3VmZmljaWVudAogICAgICAgICAvLyBmb3IgYWRkcmVz
c2luZyBpbiBleHRyZW1lIGNhc2VzIHdoZXJlIHdlIG1pZ2h0IHVuZGVyZmxvdy4gVGhlcmVmb3Jl
IHdlIGNoZWNrIHRvIHNlZSBpZgogICAgICAgICAvLyBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCB3
aWxsIHVuZGVyZmxvdyBkaXJlY3RseSBvciBhZnRlciBjb252ZXJ0aW5nIGZvciAxNiBiaXQgY2hh
cmFjdGVycy4KICAgICAgICAgLy8gSWYgc28sIHdlIGRvIG91ciBvd24gYWRkcmVzcyBjYWxjdWxh
dGluZyBieSBhZGp1c3RpbmcgdGhlIGJhc2UsIHVzaW5nIHRoZSByZXN1bHQgcmVnaXN0ZXIKQEAg
LTY3MywxMSArNTc2LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0QWRqdXN0QW1vdW50ID0gMHg0MDAwMDAwMDsKICAg
ICAgICAgaWYgKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0ID4gbWF4aW11bU5lZ2F0aXZlT2Zmc2V0
Rm9yQ2hhcmFjdGVyU2l6ZSkgewogICAgICAgICAgICAgYmFzZSA9IHRlbXBSZWc7Ci0gICAgICAg
ICAgICBtb3ZlKGlucHV0LCBiYXNlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmlu
cHV0LCBiYXNlKTsKICAgICAgICAgICAgIHdoaWxlIChuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCA+
IG1heGltdW1OZWdhdGl2ZU9mZnNldEZvckNoYXJhY3RlclNpemUpIHsKLSAgICAgICAgICAgICAg
ICBzdWJQdHIoVHJ1c3RlZEltbTMyKG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAg
ICAgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG9mZnNl
dEFkanVzdEFtb3VudCksIGJhc2UpOwogICAgICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplICE9
IENoYXJTaXplOjpDaGFyOCkKLSAgICAgICAgICAgICAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0z
MihvZmZzZXRBZGp1c3RBbW91bnQpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwg
YmFzZSk7CiAgICAgICAgICAgICAgICAgbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgLT0gb2Zmc2V0
QWRqdXN0QW1vdW50OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODUsNjcgKzU4OCw3
MiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIENo
ZWNrZWQ8aW50MzJfdD4gY2hhcmFjdGVyT2Zmc2V0KC1zdGF0aWNfY2FzdDxpbnQzMl90PihuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCkpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkKLSAgICAgICAgICAgIHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVn
LCBUaW1lc09uZSwgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KGNoYXIpKSk7CisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCht
X3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIGNoYXJhY3Rl
ck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihjaGFyKSkpOwogCi0gICAgICAg
IHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVnLCBUaW1lc1R3bywgY2hhcmFjdGVyT2Zm
c2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNUd28sIGNoYXJhY3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMy
X3Q+KHNpemVvZihVQ2hhcikpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09E
RV9FWFBSRVNTSU9OUykKLSAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhckltcGwoUmVnaXN0ZXJJ
RCByZXN1bHRSZWcpCisgICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NoYXJT
aXplID09IENoYXJTaXplOjpDaGFyMTYpOwogCi0gICAgICAgIEp1bXBMaXN0IG5vdFVuaWNvZGU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub3RVbmljb2RlOwogCi0gICAgICAg
IGxvYWQxNlVuYWxpZ25lZChBZGRyZXNzKHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKSwgcmVzdWx0
UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCksIHJlc3VsdFJlZyk7CiAKICAgICAg
ICAgLy8gSXMgdGhlIGNoYXJhY3RlciBhIGxlYWRpbmcgc3Vycm9nYXRlPwotICAgICAgICBhbmQz
MihzdXJyb2dhdGVUYWdNYXNrLCByZXN1bHRSZWcsIHVuaWNvZGVUZW1wKTsKLSAgICAgICAgbm90
VW5pY29kZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHVuaWNvZGVUZW1wLCBsZWFkaW5nU3Vy
cm9nYXRlVGFnKSk7CisgICAgICAgIG1faml0LmFuZDMyKFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJz
OjpzdXJyb2dhdGVUYWdNYXNrLCByZXN1bHRSZWcsIG1fcmVncy51bmljb2RlVGVtcCk7CisgICAg
ICAgIG5vdFVuaWNvZGUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgbV9yZWdzLnVuaWNvZGVUZW1wLCBtX3JlZ3MubGVhZGluZ1N1cnJvZ2F0ZVRhZykpOwog
CiAgICAgICAgIC8vIElzIHRoZSBpbnB1dCBsb25nIGVub3VnaCB0byByZWFkIGEgdHJhaWxpbmcg
c3Vycm9nYXRlPwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDIpLCByZWdVbmljb2RlSW5w
dXRBbmRUcmFpbCk7Ci0gICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaFB0cihBYm92ZU9y
RXF1YWwsIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCBlbmRPZlN0cmluZ0FkZHJlc3MpKTsKKyAg
ICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIG1fcmVn
cy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBtX3JlZ3MucmVnVW5p
Y29kZUlucHV0QW5kVHJhaWwsIG1fcmVncy5lbmRPZlN0cmluZ0FkZHJlc3MpKTsKIAogICAgICAg
ICAvLyBJcyB0aGUgY2hhcmFjdGVyIGEgdHJhaWxpbmcgc3Vycm9nYXRlPwotICAgICAgICBsb2Fk
MTZVbmFsaWduZWQoQWRkcmVzcyhyZWdVbmljb2RlSW5wdXRBbmRUcmFpbCksIHJlZ1VuaWNvZGVJ
bnB1dEFuZFRyYWlsKTsKLSAgICAgICAgYW5kMzIoc3Vycm9nYXRlVGFnTWFzaywgcmVnVW5pY29k
ZUlucHV0QW5kVHJhaWwsIHVuaWNvZGVUZW1wKTsKLSAgICAgICAgbm90VW5pY29kZS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIHVuaWNvZGVUZW1wLCB0cmFpbGluZ1N1cnJvZ2F0ZVRhZykpOwor
ICAgICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9y
ZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKSwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRy
YWlsKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoWWFyckpJVERlZmF1bHRSZWdpc3RlcnM6OnN1cnJv
Z2F0ZVRhZ01hc2ssIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgbV9yZWdzLnVuaWNv
ZGVUZW1wKTsKKyAgICAgICAgbm90VW5pY29kZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MudW5pY29kZVRlbXAsIG1fcmVncy50cmFpbGluZ1N1
cnJvZ2F0ZVRhZykpOwogCiAgICAgICAgIC8vIENvbWJpbmUgbGVhZGluZyBhbmQgdHJhaWxpbmcg
c3Vycm9nYXRlcyB0byBwcm9kdWNlIGEgY29kZSBwb2ludC4KLSAgICAgICAgbHNoaWZ0MzIoVHJ1
c3RlZEltbTMyKDEwKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgZ2V0RWZmZWN0aXZlQWRkcmVzcyhC
YXNlSW5kZXgocmVzdWx0UmVnLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgVGltZXNPbmUsIC1V
MTZfU1VSUk9HQVRFX09GRlNFVCksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG5vdFVuaWNvZGUubGlu
ayh0aGlzKTsKKyAgICAgICAgbV9qaXQubHNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxMCksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmdldEVmZmVjdGl2ZUFkZHJlc3Mo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRSZWcsIG1fcmVncy5yZWdVbmljb2RlSW5w
dXRBbmRUcmFpbCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCAtVTE2X1NVUlJPR0FURV9PRkZT
RVQpLCByZXN1bHRSZWcpOworICAgICAgICBub3RVbmljb2RlLmxpbmsoJm1faml0KTsKICAgICB9
CiAKLSAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhcihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0
ZXJJRCByZXN1bHRSZWcpCisgICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCBhZGRyZXNzLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXN1bHRS
ZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjE2
KTsKIAotICAgICAgICBnZXRFZmZlY3RpdmVBZGRyZXNzKGFkZHJlc3MsIHJlZ1VuaWNvZGVJbnB1
dEFuZFRyYWlsKTsKKyAgICAgICAgbV9qaXQuZ2V0RWZmZWN0aXZlQWRkcmVzcyhhZGRyZXNzLCBt
X3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwogCi0gICAgICAgIGlmIChyZXN1bHRSZWcg
PT0gcmVnVDApCi0gICAgICAgICAgICBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuYXBw
ZW5kKG5lYXJDYWxsKCkpOworICAgICAgICBpZiAocmVzdWx0UmVnID09IG1fcmVncy5yZWdUMCkK
KyAgICAgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5hcHBlbmQobV9qaXQu
bmVhckNhbGwoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRyeVJlYWRVbmljb2RlQ2hh
ckltcGwocmVzdWx0UmVnKTsKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICB2b2lkIHJlYWRDaGFy
YWN0ZXIoQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVy
SUQgcmVzdWx0UmVnLCBSZWdpc3RlcklEIGluZGV4UmVnID0gaW5kZXgpCisgICAgdm9pZCByZWFk
Q2hhcmFjdGVyKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXN1bHRSZWcpCiAgICAgewotICAgICAgICBCYXNlSW5k
ZXggYWRkcmVzcyA9IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRpdmVDaGFyYWN0
ZXJPZmZzZXQsIHJlc3VsdFJlZywgaW5kZXhSZWcpOworICAgICAgICByZWFkQ2hhcmFjdGVyKG5l
Z2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIG1fcmVncy5pbmRleCk7CisgICAgfQor
CisgICAgdm9pZCByZWFkQ2hhcmFjdGVyKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFj
dGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXN1bHRSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4UmVnKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCBhZGRyZXNzID0gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBpbmRleFJlZyk7CiAKICAgICAgICAgaWYg
KG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgbG9hZDgoYWRkcmVz
cywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KGFkZHJlc3MsIHJlc3VsdFJl
Zyk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGVs
c2UgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCiAgICAgICAgICAgICB0cnlSZWFkVW5pY29k
ZUNoYXIoYWRkcmVzcywgcmVzdWx0UmVnKTsKICNlbmRpZgogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkMTZVbmFsaWduZWQoYWRkcmVzcywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQxNlVuYWxpZ25lZChhZGRyZXNzLCByZXN1bHRSZWcpOwogICAgIH0KIAotICAgIEp1
bXAganVtcElmQ2hhck5vdEVxdWFscyhVQ2hhcjMyIGNoLCBDaGVja2VkPHVuc2lnbmVkPiBuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCwgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcElmQ2hhck5vdEVxdWFscyhVQ2hhcjMyIGNoLCBDaGVja2VkPHVuc2ln
bmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgcmVhZENoYXJhY3RlcihuZWdhdGl2ZUNoYXJhY3Rl
ck9mZnNldCwgY2hhcmFjdGVyKTsKIApAQCAtNzUzLDQzICs2NjEsNDMgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAvLyB1cHBlciAmIGxvd2VyIGNh
c2UgcmVwcmVzZW50YXRpb25zIGFyZSBjb252ZXJ0ZWQgdG8gYSBjaGFyYWN0ZXIgY2xhc3MuCiAg
ICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSB8fCBpc0FTQ0lJQWxwaGEoY2gp
IHx8IGlzQ2Fub25pY2FsbHlVbmlxdWUoY2gsIG1fY2Fub25pY2FsTW9kZSkpOwogICAgICAgICBp
ZiAobV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAg
ICAgICBvcjMyKFRydXN0ZWRJbW0zMigweDIwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1f
aml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDIwKSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgIGNoIHw9IDB4MjA7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2gpKTsKKyAgICAgICAgcmV0dXJuIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoY2gpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzdG9yZVRvRnJhbWUo
UmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisgICAgdm9pZCBzdG9yZVRv
RnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uKQogICAgIHsKLSAgICAgICAgcG9rZShyZWcsIGZyYW1lTG9jYXRpb24pOworICAgICAgICBt
X2ppdC5wb2tlKHJlZywgZnJhbWVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBzdG9yZVRv
RnJhbWUoVHJ1c3RlZEltbTMyIGltbSwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKKyAgICB2b2lk
IHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgdW5zaWduZWQg
ZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHBva2UoaW1tLCBmcmFtZUxvY2F0aW9uKTsK
KyAgICAgICAgbV9qaXQucG9rZShpbW0sIGZyYW1lTG9jYXRpb24pOwogICAgIH0KIAogI2lmIENQ
VShBUk02NCkgfHwgQ1BVKFg4Nl82NCkKLSAgICB2b2lkIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1t
UHRyIGltbSwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHN0b3JlVG9GcmFtZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24p
CiAgICAgewotICAgICAgICBwb2tlKGltbSwgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0
LnBva2UoaW1tLCBmcmFtZUxvY2F0aW9uKTsKICAgICB9CiAjZW5kaWYKIAotICAgIERhdGFMYWJl
bFB0ciBzdG9yZVRvRnJhbWVXaXRoUGF0Y2godW5zaWduZWQgZnJhbWVMb2NhdGlvbikKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0b3JlVG9GcmFtZVdpdGhQYXRjaCh1bnNpZ25l
ZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0b3JlUHRyV2l0aFBhdGNo
KFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZy
YW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CisgICAgICAgIHJldHVybiBtX2ppdC5zdG9y
ZVB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgIH0KIAotICAgIHZvaWQgbG9h
ZEZyb21GcmFtZSh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBSZWdpc3RlcklEIHJlZykKKyAgICB2
b2lkIGxvYWRGcm9tRnJhbWUodW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcmVnKQogICAgIHsKLSAgICAgICAgcGVlayhyZWcsIGZyYW1lTG9jYXRpb24p
OworICAgICAgICBtX2ppdC5wZWVrKHJlZywgZnJhbWVMb2NhdGlvbik7CiAgICAgfQogCiAgICAg
dm9pZCBsb2FkRnJvbUZyYW1lQW5kSnVtcCh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsK
LSAgICAgICAgZmFySnVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0
aW9uICogc2l6ZW9mKHZvaWQqKSksIFlhcnJCYWNrdHJhY2tQdHJUYWcpOworICAgICAgICBtX2pp
dC5mYXJKdW1wKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBZYXJyQmFja3Ry
YWNrUHRyVGFnKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5
dGVzKHVuc2lnbmVkIGNhbGxGcmFtZVNpemUpCkBAIC04MDcsMTMgKzcxNSwyMSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgewogICAgICAgICB1bnNpZ25l
ZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0
ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKICAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJ
bkJ5dGVzKQotICAgICAgICAgICAgYWRkUHRyKEltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMihjYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUZhaWxSZXR1cm4o
KQogICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCh2b2lkKilXVEY6Om5vdEZvdW5k
KSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmV0dXJu
UmVnaXN0ZXIyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigodm9pZCopV1RGOjpub3RGb3VuZCksIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbV9yZWdzLnJl
dHVyblJlZ2lzdGVyMik7CisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5F
KQorICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5saW5lVGVz
dCkgeworICAgICAgICAgICAgbV9pbmxpbmVkRmFpbGVkTWF0Y2guYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CiAgICAgfQogCkBAIC04MjIsNDggKzczOCw0MiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIGlmIChtX2Fib3J0RXhlY3V0
aW9uLmVtcHR5KCkgJiYgbV9oaXRNYXRjaExpbWl0LmVtcHR5KCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgSnVtcExpc3QgZmluaXNoRXhpdGluZzsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZpbmlzaEV4aXRpbmc7CiAgICAgICAgIGlmICghbV9hYm9ydEV4ZWN1
dGlvbi5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVf
dD4oLTIpKSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICAgICAgZmluaXNoRXhpdGluZy5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24ubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigodm9p
ZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAgICAgZmluaXNoRXhpdGluZy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghbV9oaXRNYXRjaExpbWl0LmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG1f
aGl0TWF0Y2hMaW1pdC5saW5rKHRoaXMpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIG1faGl0TWF0Y2hMaW1pdC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXpl
X3Q+KC0xKSksIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAgICAgICAgIH0KIAotICAgICAgICBm
aW5pc2hFeGl0aW5nLmxpbmsodGhpcyk7CisgICAgICAgIGZpbmlzaEV4aXRpbmcubGluaygmbV9q
aXQpOwogICAgICAgICByZW1vdmVDYWxsRnJhbWUoKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyMik7CiAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byByZWNvcmQgc3VicGF0dGVy
bnMsIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBtX2NvbXBpbGVNb2RlIGlzIEpJVENvbXBpbGVN
b2RlOjpJbmNsdWRlU3VicGF0dGVybnMuCi0gICAgdm9pZCBzZXRTdWJwYXR0ZXJuU3RhcnQoUmVn
aXN0ZXJJRCByZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCisgICAgdm9pZCBzZXRTdWJwYXR0ZXJu
U3RhcnQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJu
KQogICAgIHsKICAgICAgICAgQVNTRVJUKHN1YnBhdHRlcm4pOwogICAgICAgICAvLyBGSVhNRTog
c2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6
OkluY2x1ZGVTdWJwYXR0ZXJucyksIGJ1dCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY29uZGl0aW9u
YWxseSBOT1JFVFVSTi4gOi0oCi0gICAgICAgIHN0b3JlMzIocmVnLCBBZGRyZXNzKG91dHB1dCwg
KHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YoaW50KSkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KHJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4g
PDwgMSkgKiBzaXplb2YoaW50KSkpOwogICAgIH0KLSAgICB2b2lkIHNldFN1YnBhdHRlcm5FbmQo
UmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCisgICAgdm9pZCBzZXRTdWJwYXR0
ZXJuRW5kKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVy
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJuKTsKICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2Rl
OjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlv
bmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMyKHJlZywgQWRkcmVzcyhvdXRwdXQs
ICgoc3VicGF0dGVybiA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihyZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsICgoc3Vi
cGF0dGVybiA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9CiAgICAgdm9pZCBjbGVh
clN1YnBhdHRlcm5TdGFydCh1bnNpZ25lZCBzdWJwYXR0ZXJuKQogICAgIHsKICAgICAgICAgQVNT
RVJUKHN1YnBhdHRlcm4pOwogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUgdG8gQVNT
RVJUKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyks
IGJ1dCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBOT1JFVFVSTi4gOi0oCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0
ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTWF0Y2hl
cyh1bnNpZ25lZCBzdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybikKLSAgICB7Ci0g
ICAgICAgIGZvciAoOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuKysp
Ci0gICAgICAgICAgICBjbGVhclN1YnBhdHRlcm5TdGFydChzdWJwYXR0ZXJuKTsKKyAgICAgICAg
bV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2Yo
aW50KSkpOwogICAgIH0KIAogICAgIC8vIFdlIHVzZSBvbmUgb2YgdGhyZWUgZGlmZmVyZW50IHN0
cmF0ZWdpZXMgdG8gdHJhY2sgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IG1hdGNoLApAQCAtODcx
LDI1ICs3ODEsMjUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgIC8vIDEpIElmIHRoZSBwYXR0ZXJuIGhhcyBhIGZpeGVkIHNpemUsIGRvIG5vdGhpbmchIC0g
d2UgY2FsY3VsYXRlIHRoZSB2YWx1ZSBsYXppbHkKICAgICAvLyAgICBhdCB0aGUgZW5kIG9mIG1h
dGNoaW5nLiBUaGlzIGlzIGlycmVzcGVjdGl2ZSBvZiBtX2NvbXBpbGVNb2RlLCBhbmQgaW4gdGhp
cyBjYXNlCiAgICAgLy8gICAgdGhlc2UgbWV0aG9kcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLgot
ICAgIC8vIDIpIElmIHdlJ3JlIGNvbXBpbGluZyBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBh
dHRlcm5zLCAnb3V0cHV0JyBjb250YWlucyBhIHBvaW50ZXIgdG8gYW4gb3V0cHV0CisgICAgLy8g
MikgSWYgd2UncmUgY29tcGlsaW5nIEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMs
ICdtX3JlZ3Mub3V0cHV0JyBjb250YWlucyBhIHBvaW50ZXIgdG8gYW4gb3V0cHV0CiAgICAgLy8g
ICAgdmVjdG9yLCBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW4gdGhlIG91dHB1dCB2ZWN0b3IuCi0g
ICAgLy8gMykgSWYgd2UncmUgY29tcGlsaW5nIE1hdGNoT25seSwgJ291dHB1dCcgaXMgdW51c2Vk
LCBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgZGlyZWN0bHkKKyAgICAvLyAzKSBJZiB3ZSdyZSBjb21w
aWxpbmcgTWF0Y2hPbmx5IG9yIElubGluZWRUZXN0LCAnbV9yZWdzLm91dHB1dCcgaXMgdW51c2Vk
LCBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgZGlyZWN0bHkKICAgICAvLyAgICBpbiB0aGlzIHJlZ2lz
dGVyLgotICAgIHZvaWQgc2V0TWF0Y2hTdGFydChSZWdpc3RlcklEIHJlZykKKyAgICB2b2lkIHNl
dE1hdGNoU3RhcnQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAgIGlm
IChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCi0g
ICAgICAgICAgICBzdG9yZTMyKHJlZywgQWRkcmVzcyhvdXRwdXQpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0KSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1vdmUocmVnLCBvdXRwdXQpOworICAgICAgICAg
ICAgbV9qaXQubW92ZShyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgIH0KLSAgICB2b2lkIGdldE1h
dGNoU3RhcnQoUmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBnZXRNYXRjaFN0YXJ0KE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJu
Lm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBK
SVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3Mob3V0cHV0KSwgcmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0KSwgcmVnKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbW92ZShvdXRwdXQsIHJlZyk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5v
dXRwdXQsIHJlZyk7CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBZYXJyT3BDb2RlIDogdWludDhf
dCB7CkBAIC05NjUsMTIgKzg3NSwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgIC8vIHVzZWQgZm9yIGp1bXBzIG91dCB0byBiYWNrdHJhY2tpbmcg
Y29kZSwgYW5kIGEgc2luZ2xlIHJlZW50cnkgYmFjawogICAgICAgICAvLyBpbnRvIHRoZSBjb2Rl
IGZvciBhIG5vZGUgKGxpa2VseSB3aGVyZSBhIGJhY2t0cmFjayB3aWxsIHRyaWdnZXIKICAgICAg
ICAgLy8gcmVtYXRjaGluZykuCi0gICAgICAgIExhYmVsIG1fcmVlbnRyeTsKLSAgICAgICAgSnVt
cExpc3QgbV9qdW1wczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fcmVlbnRyeTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fanVtcHM7CiAKICAgICAgICAgLy8g
VXNlZCBmb3IgYmFja3RyYWNraW5nIHdoZW4gdGhlIHByaW9yIGFsdGVybmF0aXZlIGRpZCBub3Qg
Y29uc3VtZSBhbnkKICAgICAgICAgLy8gY2hhcmFjdGVycyBidXQgbWF0Y2hlZC4KLSAgICAgICAg
SnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV96
ZXJvTGVuZ3RoTWF0Y2g7CiAKICAgICAgICAgLy8gVGhpcyBmbGFnIGlzIHVzZWQgdG8gbnVsbCBv
dXQgdGhlIHNlY29uZCBwYXR0ZXJuIGNoYXJhY3Rlciwgd2hlbgogICAgICAgICAvLyB0d28gYXJl
IGZ1c2VkIHRvIG1hdGNoIGEgcGFpciB0b2dldGhlci4KQEAgLTk4NCw3ICs4OTQsNyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIC8vIFVzZWQgYnkg
WWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJuYXRpdmVOZXh0L0VuZCB0byBob2xkIHRoZSBwb2ludGVy
IHRvIHRoZQogICAgICAgICAvLyB2YWx1ZSB0aGF0IHdpbGwgYmUgcHVzaGVkIGludG8gdGhlIHBh
dHRlcm4ncyBmcmFtZSB0byByZXR1cm4gdG8sCiAgICAgICAgIC8vIHVwb24gYmFja3RyYWNraW5n
IGJhY2sgaW50byB0aGUgZGlzanVuY3Rpb24uCi0gICAgICAgIERhdGFMYWJlbFB0ciBtX3JldHVy
bkFkZHJlc3M7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9yZXR1cm5B
ZGRyZXNzOwogCiAgICAgICAgIEJveWVyTW9vcmVJbmZvKiBtX2JtSW5mbyB7IG51bGxwdHIgfTsK
ICAgICB9OwpAQCAtMTAwNiw3ICs5MTYsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgIC8vICAtIEEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGN1cnJl
bnQgc2VxdWVuY2Ugb2YgZ2VuZXJhdGVkIGNvZGUgdXAgdG8KICAgICAvLyAgICB0aGlzIHBvaW50
IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KICAgICBjbGFzcyBCYWNrdHJhY2tpbmdTdGF0ZSB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgc3RydWN0IFJldHVybkFkZHJlc3NSZWNvcmQgeworICAgICAg
ICAgICAgUmV0dXJuQWRkcmVzc1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRh
dGFMYWJlbCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJhY2t0cmFja0xvY2F0aW9uKQorICAgICAg
ICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQorICAgICAgICAgICAgICAgICwgbV9i
YWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX2Rh
dGFMYWJlbDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2JhY2t0cmFja0xv
Y2F0aW9uOworICAgICAgICB9OworCiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIFZlY3Rv
cjxSZXR1cm5BZGRyZXNzUmVjb3JkLCA0PiBCYWNrdHJhY2tSZWNvcmRzOworCiAgICAgICAgIEJh
Y2t0cmFja2luZ1N0YXRlKCkKICAgICAgICAgICAgIDogbV9wZW5kaW5nRmFsbHRocm91Z2goZmFs
c2UpCiAgICAgICAgIHsKQEAgLTEwMTQsMTUgKzkzOCwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgLy8gQWRkIGEganVtcCBvciBqdW1wcywg
YSByZXR1cm4gYWRkcmVzcywgb3Igc2V0IHRoZSBmbGFnIGluZGljYXRpbmcKICAgICAgICAgLy8g
dGhhdCB0aGUgY3VycmVudCAnZmFsbHRocm91Z2gnIGNvbnRyb2wgZmxvdyByZXF1aXJlcyBiYWNr
dHJhY2tpbmcuCi0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXAmIGp1bXApCisgICAgICAg
IHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXApOwogICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBqdW1wTGlzdCkKKyAgICAgICAgdm9pZCBhcHBl
bmQoTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wTGlzdCkKICAgICAgICAgewogICAgICAg
ICAgICAgbV9sYXRlckZhaWx1cmVzLmFwcGVuZChqdW1wTGlzdCk7CiAgICAgICAgIH0KLSAgICAg
ICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YUxhYmVsUHRyJiByZXR1cm5BZGRyZXNzKQorICAgICAg
ICB2b2lkIGFwcGVuZChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyJiByZXR1cm5B
ZGRyZXNzKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmFwcGVuZChy
ZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTAzOSw3ICs5NjMsNyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIHZvaWQgbGluayhNYWNyb0Fz
c2VtYmxlciogYXNzZW1ibGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5n
UmV0dXJucy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2VtYmxlcik7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1ibGVyKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJu
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFw
cGVuZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUpKTsKICAg
ICAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDQ4LDcgKzk3Miw3
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
IG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigpOwogICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91
Z2ggPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtUbyhMYWJlbCBsYWJlbCwg
TWFjcm9Bc3NlbWJsZXIqIGFzc2VtYmxlcikKKyAgICAgICAgdm9pZCBsaW5rVG8oTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5zaXplKCk7ICsr
aSkKQEAgLTEwNjEsMTAgKzk4NSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuY2xlYXIoKTsKICAgICAgICAg
ICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgdm9p
ZCB0YWtlQmFja3RyYWNrc1RvSnVtcExpc3QoSnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2Vt
YmxlciogYXNzZW1ibGVyKQorICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2VtYmxlciogYXNzZW1i
bGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkp
IHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2VtYmxlcik7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1ibGVyKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChSZXR1cm5BZGRy
ZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUpKTsKICAgICAgICAgICAgICAgICBt
X3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDgyLDYgKzEwMDYsMTcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgcmV0dXJuIG1fbGF0
ZXJGYWlsdXJlcy5lbXB0eSgpICYmIG1fcGVuZGluZ1JldHVybnMuaXNFbXB0eSgpICYmICFtX3Bl
bmRpbmdGYWxsdGhyb3VnaDsKICAgICAgICAgfQogCisgICAgICAgIEJhY2t0cmFja1JlY29yZHMm
IGJhY2t0cmFja1JlY29yZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNr
dHJhY2tSZWNvcmRzOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0JhY2t0
cmFja1JlY29yZHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgY29uc3QgQmFja3RyYWNrUmVjb3Jk
cyYgYmFja3RyYWNrUmVjb3JkcykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhY2t0cmFja1JlY29yZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5wYXRjaChiYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxhYmVsLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8WWFyckJhY2t0cmFja1B0clRhZz4oYmFja3RyYWNrUmVjb3Jkc1tp
XS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBDYWxsZWQg
YXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGluayBhbGwgcmV0dXJuIGFkZHJlc3Nl
cy4KICAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQog
ICAgICAgICB7CkBAIC0xMDkxLDIwICsxMDI2LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdHJ1
Y3QgUmV0dXJuQWRkcmVzc1JlY29yZCB7Ci0gICAgICAgICAgICBSZXR1cm5BZGRyZXNzUmVjb3Jk
KERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExhYmVsIGJhY2t0cmFja0xvY2F0aW9uKQotICAgICAg
ICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQotICAgICAgICAgICAgICAgICwgbV9i
YWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsOwotICAgICAg
ICAgICAgTGFiZWwgbV9iYWNrdHJhY2tMb2NhdGlvbjsKLSAgICAgICAgfTsKLQotICAgICAgICBK
dW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBtX2xhdGVyRmFpbHVyZXM7CiAgICAgICAgIGJvb2wgbV9wZW5kaW5nRmFsbHRocm91Z2g7Ci0g
ICAgICAgIFZlY3RvcjxEYXRhTGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVybnM7CisgICAgICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyLCA0PiBtX3BlbmRpbmdSZXR1cm5z
OwogICAgICAgICBWZWN0b3I8UmV0dXJuQWRkcmVzc1JlY29yZCwgND4gbV9iYWNrdHJhY2tSZWNv
cmRzOwogICAgIH07CiAKQEAgLTExMjcsMjMgKzEwNTEsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1f
dGVybTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogCi0g
ICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0
aW9uKQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGlu
ZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKIAogICAgICAgICAg
ICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uICsg
MSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVy
LCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQgdGhlc2UgYWx0ZXJu
YXRpdmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uKQot
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgs
IEltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbkJPTChzaXplX3Qgb3BJbmRleCkKQEAg
LTExNTcsMjMgKzEwODEsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAogICAgICAgICBp
ZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcklE
IGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogCi0gICAgICAgICAgICBKdW1wTGlz
dCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hE
ZXN0OwogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0gbV9jaGVja2VkT2Zm
c2V0KQogICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwog
CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0
UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNo
YXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkpOwot
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG1hdGNoRGVzdC5saW5r
KHRoaXMpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsoJm1faml0KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tlZE9m
ZnNldCkKICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChub3RBdEVuZE9mSW5wdXQo
KSk7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBh
bHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGJhY2t0cmFj
a0Fzc2VydGlvbkVPTChzaXplX3Qgb3BJbmRleCkKQEAgLTExODIsMTIgKzExMDYsMTIgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIH0KIAogICAgIC8vIEFs
c28gZmFsbHMgdGhvdWdoIG9uIG5leHRJc05vdFdvcmRDaGFyLgotICAgIHZvaWQgbWF0Y2hBc3Nl
cnRpb25Xb3JkY2hhcihzaXplX3Qgb3BJbmRleCwgSnVtcExpc3QmIG5leHRJc1dvcmRDaGFyLCBK
dW1wTGlzdCYgbmV4dElzTm90V29yZENoYXIpCisgICAgdm9pZCBtYXRjaEFzc2VydGlvbldvcmRj
aGFyKHNpemVfdCBvcEluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJc1dvcmRD
aGFyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJc05vdFdvcmRDaGFyKQogICAgIHsK
ICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3Rl
ciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24g
PT0gbV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgbmV4dElzTm90V29yZENoYXIuYXBwZW5k
KGF0RW5kT2ZJbnB1dCgpKTsKQEAgLTEyMDksMTIgKzExMzMsMTIgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJ
bmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAotICAgICAg
ICBKdW1wIGF0QmVnaW47Ci0gICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYXRCZWdpbjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IG1hdGNoRGVzdDsKICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQotICAgICAg
ICAgICAgYXRCZWdpbiA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkT2Zm
c2V0KSk7CisgICAgICAgICAgICBhdEJlZ2luID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtX2NoZWNrZWRP
ZmZzZXQpKTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5p
bnB1dFBvc2l0aW9uICsgMSwgY2hhcmFjdGVyKTsKIAogICAgICAgICBDaGFyYWN0ZXJDbGFzcyog
d29yZGNoYXJDaGFyYWN0ZXJDbGFzczsKQEAgLTEyMjYsMjcgKzExNTAsMjcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIG1hdGNoQ2hhcmFjdGVy
Q2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHdvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MpOwogICAg
ICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICBhdEJlZ2luLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBhdEJlZ2luLmxpbmsoJm1faml0KTsKIAogICAgICAgICAvLyBX
ZSBmYWxsIHRocm91Z2ggdG8gaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIG5vdCBhIHdv
cmRjaGFyLgotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKLSAgICAg
ICAgSnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyOwogICAgICAgICBp
ZiAodGVybS0+aW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIo
b3BJbmRleCwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIsIG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFy
KG9wSW5kZXgsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5Ob25Xb3Jk
Q2hhcik7Ci0gICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG5vbldvcmRD
aGFyVGhlbk5vbldvcmRDaGFyKTsKIAogICAgICAgICAvLyBXZSBqdW1wIGhlcmUgaWYgdGhlIGxh
c3QgY2hhcmFjdGVyIHdhcyBhIHdvcmRjaGFyLgotICAgICAgICBtYXRjaERlc3QubGluayh0aGlz
KTsKLSAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENoYXI7Ci0gICAgICAgIEp1bXBM
aXN0IHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyOworICAgICAgICBtYXRjaERlc3QubGluaygmbV9q
aXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENo
YXI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCB3b3JkQ2hhclRoZW5Ob25Xb3Jk
Q2hhcjsKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKSB7CiAgICAgICAgICAgICBtYXRjaEFz
c2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCB3b3JkQ2hh
clRoZW5Xb3JkQ2hhcik7Ci0gICAgICAgICAgICB3b3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgICAgIHdvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3Jk
Y2hhcihvcEluZGV4LCB3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgd29yZENoYXJUaGVuTm9uV29yZENo
YXIpOwogICAgICAgICAgICAgLy8gVGhpcyBjYW4gZmFsbC10aG91Z2ghCkBAIC0xMjU0LDggKzEx
NzgsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQod29yZENoYXJUaGVuV29yZENoYXIpOwogCi0gICAgICAgIG5v
bldvcmRDaGFyVGhlbldvcmRDaGFyLmxpbmsodGhpcyk7Ci0gICAgICAgIHdvcmRDaGFyVGhlbk5v
bldvcmRDaGFyLmxpbmsodGhpcyk7CisgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmxp
bmsoJm1faml0KTsKKyAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIubGluaygmbV9qaXQp
OwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbldvcmRCb3VuZGFyeShzaXplX3Qg
b3BJbmRleCkKICAgICB7CkBAIC0xMjYzLDQwICsxMTg3LDQwIEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQkFD
S1JFRkVSRU5DRVMpCi0gICAgdm9pZCBtYXRjaEJhY2tyZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgs
IEp1bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBSZWdpc3RlcklEIGNoYXJhY3RlciwgUmVn
aXN0ZXJJRCBwYXR0ZXJuSW5kZXgsIFJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKKyAgICB2
b2lkIG1hdGNoQmFja3JlZmVyZW5jZShzaXplX3Qgb3BJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5JbmRleCwgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIFlh
cnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBv
cC5tX3Rlcm07CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZl
cmVuY2VTdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKIAogICAgICAgICByZWFkQ2hhcmFj
dGVyKDAsIHBhdHRlcm5DaGFyYWN0ZXIsIHBhdHRlcm5JbmRleCk7CiAgICAgICAgIHJlYWRDaGFy
YWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsK
ICAgICAKICAgICAgICAgaWYgKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpKQotICAgICAgICAgICAg
Y2hhcmFjdGVyTWF0Y2hGYWlscy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3Rlciwg
cGF0dGVybkNoYXJhY3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyTWF0Y2hGYWlscy5hcHBl
bmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIHBh
dHRlcm5DaGFyYWN0ZXIpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKdW1wIGNoYXJh
Y3RlcnNNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIp
OwotICAgICAgICAgICAgRXh0ZW5kZWRBZGRyZXNzIGNoYXJhY3RlclRhYmxlRW50cnkoY2hhcmFj
dGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVMQ2hhcikpOwot
ICAgICAgICAgICAgbG9hZDE2KGNoYXJhY3RlclRhYmxlRW50cnksIGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICBFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNoYXJhY3Rl
ciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKLSAg
ICAgICAgICAgIGxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
Y2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzTWF0
Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoYXJhY3Rl
cnNNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVy
LCBwYXR0ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRl
ZEFkZHJlc3MgY2hhcmFjdGVyVGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJsZUxDaGFyKSk7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
MTYoY2hhcmFjdGVyVGFibGVFbnRyeSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNoYXJhY3Rl
ciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNoYXJhY3Rl
cik7CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgcGF0dGVybkNoYXJhY3Rlcikp
OworICAgICAgICAgICAgY2hhcmFjdGVyc01hdGNoLmxpbmsoJm1faml0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CiAK
ICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIEp1bXAg
aXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBs
YW5lc0Jhc2UpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0g
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7Ci0gICAgICAg
ICAgICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGlzQk1QQ2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
Y2hhcmFjdGVyLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4
KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRleCwgQWRk
cmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpLmxp
bmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5v
dXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpLmxpbmtUbyhs
b29wLCAmbV9qaXQpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVCYWNrUmVmZXJlbmNlKHNp
emVfdCBvcEluZGV4KQpAQCAtMTMxMiwxMTYgKzEyMzYsMTE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0g
dGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKICAgICAgICAgdW5zaWduZWQgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIAotICAgICAgICBjb25z
dCBSZWdpc3RlcklEIGNoYXJhY3Rlck9yVGVtcCA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdp
c3RlcklEIHBhdHRlcm5JbmRleCA9IHJlZ1QxOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIHBh
dHRlcm5UZW1wID0gcmVnVDI7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNoYXJhY3Rlck9yVGVtcCA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gbV9yZWdzLnJlZ1QxOworICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuVGVtcCA9IG1fcmVncy5y
ZWdUMjsKIAotICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOworICAgICAg
ICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgaWYgKHRl
cm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0ZXJtLT5x
dWFudGl0eU1heENvdW50ICE9IDEpCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZElt
bTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVy
ZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAotICAgICAg
ICBKdW1wTGlzdCBtYXRjaGVzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0
Y2hlczsKIAogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBl
OjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwgc3VicGF0
dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIGxvYWRTdWJQ
YXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1Y2Nlc3NmdWwgd2l0
aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5
VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0ZXJtLT5xdWFudGl0eU1heENv
dW50ICE9IDEpIHsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbWF0
Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApKTsK
KyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoTWF0Y2ggPSBicmFu
Y2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKLSAgICAgICAgICAg
ICAgICBKdW1wIHRyeU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKLSAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0Y2gubGluayh0
aGlzKTsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKDEpLCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hB
bW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICAgICAgICAgIHRyeU5vblplcm9NYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSks
IHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ5
Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBw
YXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0
Y2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHRyeU5vblpl
cm9NYXRjaC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBzd2l0Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZpZXJU
eXBlOjpGaXhlZENvdW50OiB7Ci0gICAgICAgICAgICBMYWJlbCBvdXRlckxvb3AodGhpcyk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgb3V0ZXJMb29wKCZtX2ppdCk7CiAKICAg
ICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWluIHBhdHRlcm4gZW5kIGluZGV4
IGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRl
bXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7
CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KHBhdHRl
cm5UZW1wKSk7CiAKICAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5jZShvcEluZGV4LCBvcC5t
X2p1bXBzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSAxKSB7CiAgICAgICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFyYWN0ZXJPclRlbXApOwot
ICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1wKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBjaGFyYWN0ZXJPclRlbXApOwogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjaGFy
YWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNr
UmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1hdGNoZXMu
YXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hh
cmFjdGVyT3JUZW1wKSk7Ci0gICAgICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0cHV0LCBz
dWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgICAg
IGp1bXAob3V0ZXJMb29wKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJt
LT5xdWFudGl0eU1heENvdW50KSwgY2hhcmFjdGVyT3JUZW1wKSk7CisgICAgICAgICAgICAgICAg
bG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgs
IHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG91dGVyTG9vcCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtYXRjaGVzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5OiB7Ci0gICAgICAgICAgICBKdW1w
TGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKIAotICAgICAgICAgICAgTGFiZWwgb3V0ZXJMb29wKHRo
aXMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG91dGVyTG9vcCgmbV9qaXQp
OwogCiAgICAgICAgICAgICAvLyBQYXR0ZXJuVGVtcCBzaG91bGQgY29udGFpbiBwYXR0ZXJuIGVu
ZCBpbmRleCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICBzdWIzMihwYXR0ZXJuSW5kZXgsIHBh
dHRlcm5UZW1wKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVy
blRlbXApOwogICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoY2hlY2tOb3RFbm91Z2hJbnB1dChw
YXR0ZXJuVGVtcCkpOwogCiAgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJbmRleCwg
aW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgY2hh
cmFjdGVyT3JUZW1wKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFj
dGVyT3JUZW1wKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUo
Y2hhcmFjdGVyT3JUZW1wLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
QmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eU1heENvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCi0gICAgICAgICAgICAgICAg
bWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1
dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAg
ICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hhcmFjdGVy
T3JUZW1wKSk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJw
YXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAgICAgICAgICAgICAvLyBT
dG9yZSBjdXJyZW50IGluZGV4IGluIGZyYW1lIGZvciByZXN0b3JpbmcgYWZ0ZXIgYSBwYXJ0aWFs
IG1hdGNoCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOwotICAg
ICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVn
cy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZl
cmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG91dGVyTG9vcCk7
CiAKLSAgICAgICAgICAgIGluY29tcGxldGVNYXRjaGVzLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9C
YWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGluY29tcGxl
dGVNYXRjaGVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5k
ZXgoKSwgbV9yZWdzLmluZGV4KTsKIAotICAgICAgICAgICAgbWF0Y2hlcy5saW5rKHRoaXMpOwot
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIG1hdGNoZXMu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVy
VHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hl
czsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hl
czsKIAotICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG1h
dGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9
IGxhYmVsKCk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCi0g
ICAgICAgICAgICBsb2FkU3ViUGF0dGVybihvdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0
cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAgICAgICAg
ICAgICAvLyBBbiBlbXB0eSBtYXRjaCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgY29uc3VtaW5nIGNo
YXJhY3RlcnMKLSAgICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1
YWwsIFRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7Ci0gICAgICAgICAgICBKdW1wIHRy
eU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5U
ZW1wKTsKLSAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMpOwotICAgICAgICAg
ICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgdHJ5Tm9uWmVyb01h
dGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB6ZXJvTGVu
Z3RoTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAg
ICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Cisg
ICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgdHJ5
Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
aGF2ZSBpbnB1dCByZW1haW5pbmcgdG8gbWF0Y2gKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5J
bmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkluZGV4
LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChjaGVja05vdEVub3Vn
aElucHV0KHBhdHRlcm5UZW1wKSk7CiAKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJl
Z2luSW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5J
bmRleCgpKTsKIAogICAgICAgICAgICAgbWF0Y2hCYWNrcmVmZXJlbmNlKG9wSW5kZXgsIGluY29t
cGxldGVNYXRjaGVzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
OwogCi0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbWF0
Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNo
ZXMubGluayh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5k
ZXgpOworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0gICAgICAg
ICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaGVzLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0MzMsNDkg
KzEzNTcsNDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAg
ICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZlcmVuY2VTdWJwYXR0
ZXJuSWQ7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwotICAgICAg
ICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
aygmbV9qaXQpOworICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKIAotICAgICAgICBK
dW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVzOwogCiAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0t
PmZyYW1lTG9jYXRpb247CiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CiAg
ICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6Ci0gICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVm
ZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJl
Z2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgUXVhbnRpZmllclR5cGU6OkdyZWVkeTogewotICAgICAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBtYXRjaEFtb3VudCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBw
YXR0ZXJuU3RhcnRJbmRleCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBw
YXR0ZXJuRW5kSW5kZXhPckxlbiA9IHJlZ1QyOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuU3RhcnRJbmRleCA9IG1f
cmVncy5yZWdUMTsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IHBhdHRlcm5FbmRJbmRleE9yTGVuID0gbV9yZWdzLnJlZ1QyOwogCiAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVm
ZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCksIG1hdGNoQW1vdW50KTsKLSAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgbWF0Y2hBbW91bnQpKTsKKyAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIG1hdGNoQW1vdW50KSk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwg
c3VicGF0dGVybklkLCBwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOwot
ICAgICAgICAgICAgc3ViMzIocGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRleE9yTGVu
KTsKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5FbmRJbmRleE9yTGVuLCBpbmRleCk7CisgICAg
ICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRl
cm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7CisgICAgICAgICAgICBtX2ppdC5z
dWIzMihwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIocGF0dGVybkVuZEluZGV4T3JMZW4sIG1fcmVncy5pbmRleCk7CiAKLSAg
ICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91
bnQpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1hdGNoQW1vdW50LCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRl
eCgpKTsKLSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgIG1faml0
Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAgICBjb25z
dCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IG1fcmVncy5yZWdUMDsKIAogICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgICAgIGxv
YWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tS
ZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOwogICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBJbW0zMih0ZXJt
LT5xdWFudGl0eU1heENvdW50KSwgbWF0Y2hBbW91bnQpKTsKLSAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCksIG1hdGNoQW1vdW50KSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
YXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQsIHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFt
b3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAgICAgICAg
ICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICBmYWls
dXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91
Z2goKTsKICAgICB9CiAjZW5kaWYKQEAgLTE0OTcsMTEgKzE0MjEsMTEgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIGlmICghaXNMYXRpbjEoY2gp
ICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsKICAgICAgICAgICAgIC8vIEhh
dmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0
IGNpcmN1aXQKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdU
MDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0g
bV9yZWdzLnJlZ1QwOwogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKICAgICAgICAgdW5z
aWduZWQgbWF4Q2hhcmFjdGVyc0F0T25jZSA9IG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4
ID8gOCA6IDQ7CiAjZWxzZQpAQCAtMTU1Miw3ICsxNDc2LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBpZiAoIWlzTGF0aW4xKGN1cnJl
bnRDaGFyYWN0ZXIpICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBIYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVyIGFuZCBhbiA4IGJp
dCBzdHJpbmcgLSBzaG9ydCBjaXJjdWl0Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMTU3NSwy
OSArMTQ5OSwyOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBhdXRvIGNoZWNrMiA9IFsmXSAoQ2hlY2tlZDx1
bnNpZ25lZD4gb2Zmc2V0LCB1aW50MTZfdCBjaGFyYWN0ZXJzLCB1aW50MTZfdCBtYXNrKSB7Ci0g
ICAgICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJl
c3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0
LmxvYWQxNlVuYWxpZ25lZChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hh
cmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAg
ICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihj
aGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKICAg
ICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gY2hlY2s0ID0gWyZdIChDaGVja2VkPHVu
c2lnbmVkPiBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlcnMsIHVuc2lnbmVkIG1hc2spIHsKICAg
ICAgICAgICAgICAgICBpZiAobWFzaykgewotICAgICAgICAgICAgICAgICAgICBsb2FkMzJXaXRo
VW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBj
aGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0
LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
Y2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRy
ZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CisgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzJXaXRoVW5hbGlnbmVk
SGFsZldvcmRzKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbmVnYXRpdmVPZmZzZXRJbmRleGVk
QWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
Y2hhcmFjdGVycykpKTsKICAgICAgICAgICAgIH07CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNNjQpCiAgICAgICAgICAgICBhdXRvIGNoZWNrOCA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4g
b2Zmc2V0LCB1aW50NjRfdCBjaGFyYWN0ZXJzLCB1aW50NjRfdCBtYXNrKSB7Ci0gICAgICAgICAg
ICAgICAgbG9hZDY0KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0
ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgb3I2NChUcnVzdGVkSW1t
NjQobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQo
YnJhbmNoNjQoTm90RXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTY0KGNoYXJhY3RlcnMgfCBt
YXNrKSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAg
ICAgICAgICAgICB9OwogI2VuZGlmCiAKQEAgLTE2NDksMjEgKzE1NzMsMjEgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBhdXRvIGNoZWNr
MiA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBtYXNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9mZnNldEluZGV4
ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9mZnNldElu
ZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1h
c2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgbmVnYXRp
dmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIFRydXN0ZWRJbW0zMihj
aGFyYWN0ZXJzKSkpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJy
YW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG5l
Z2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CiAgICAgICAgICAgICB9OwogCiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQogICAgICAgICAgICAgYXV0byBjaGVjazQgPSBbJl0g
KENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdWludDY0X3QgY2hhcmFjdGVycywgdWludDY0X3Qg
bWFzaykgewotICAgICAgICAgICAgICAgIGxvYWQ2NChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRy
ZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkNjQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3Rlciks
IGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAgICAgICAg
ICAgIG9yNjQoVHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDY0KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJ
bW02NChjaGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3I2
NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KGNoYXJh
Y3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgfTsKICNlbmRpZgogCkBAIC0xNjk4LDM0ICsx
NjIyLDM0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyMzIgY2ggPSB0
ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJl
Z1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vy
cm9nYXRlUGFpcnMpCiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWls
YWJsZUlucHV0KCkpOwogCiAgICAgICAgIENoZWNrZWQ8dW5zaWduZWQ+IHNjYWxlZE1heENvdW50
ID0gdGVybS0+cXVhbnRpdHlNYXhDb3VudDsKICAgICAgICAgc2NhbGVkTWF4Q291bnQgKj0gVV9J
U19CTVAoY2gpID8gMSA6IDI7Ci0gICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihzY2FsZWRNYXhD
b3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOwog
Ci0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBsb29wKCZtX2ppdCk7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50LCBjaGFyYWN0ZXIsIGNvdW50UmVn
aXN0ZXIpOwogICAgICAgICAvLyBGb3IgY2FzZS1pbnNlc2l0aXZlIGNvbXBhcmVzLCBub24tYXNj
aWkgY2hhcmFjdGVycyB0aGF0IGhhdmUgZGlmZmVyZW50CiAgICAgICAgIC8vIHVwcGVyICYgbG93
ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMgYXJlIGNvbnZlcnRlZCB0byBhIGNoYXJhY3RlciBjbGFz
cy4KICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpIHx8IGlzQVNDSUlBbHBo
YShjaCkgfHwgaXNDYW5vbmljYWxseVVuaXF1ZShjaCwgbV9jYW5vbmljYWxNb2RlKSk7CiAgICAg
ICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIGlzQVNDSUlBbHBoYShjaCkpIHsKLSAg
ICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY2ggfD0gMHgyMDsKICAgICAgICAgfQogCi0gICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoKSkpOwor
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwogI2lmIEVO
QUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVT
dXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKQotICAgICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDIpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBlbHNl
CiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7Ci0gICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBpbmRleCkubGlu
a1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgbV9yZWdzLmluZGV4KS5s
aW5rVG8obG9vcCwgJm1faml0KTsKICAgICB9CiAgICAgdm9pZCBiYWNrdHJhY2tQYXR0ZXJuQ2hh
cmFjdGVyRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTczOCwzOCArMTY2MiwzOCBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAgICBVQ2hhcjMyIGNoID0gdGVybS0+cGF0
dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJl
Z1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdz
LnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJl
Z2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBj
b3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBVbmxlc3MgaGF2ZSBhIDE2
IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQgY2lyY3Vp
dAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXplID09IENoYXJTaXpl
OjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgICAg
IExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgmbV9qaXQp
OwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBtX2NoZWNrZWRPZmZz
ZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAgICAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogI2lmIEVOQUJMRShZ
QVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYgKG1fZGVjb2RlU3Vy
cm9nYXRlUGFpcnMgJiYgIVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAgICAgIEp1bXAgc3Vy
cm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklu
cHV0KCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2subGluaygm
bV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gcXVhbnRp
ZnlJbmZpbml0ZSkKLSAgICAgICAgICAgICAgICBqdW1wKGxvb3ApOworICAgICAgICAgICAgICAg
IG1faml0Lmp1bXAobG9vcCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJh
bmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogCi0g
ICAgICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbHVyZXMubGlu
aygmbV9qaXQpOwogICAgICAgICB9Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Cisg
ICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAgICAgc3RvcmVUb0Zy
YW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGF0
dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBAIC0xNzc4LDE4ICsx
NzAyLDE4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50UmVnaXN0ZXIpOwotICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgY291bnRS
ZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIp
OworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVnaXN0ZXIpKTsKKyAgICAgICAgbV9qaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAg
ICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycyB8fCBVX0lTX0JNUCh0ZXJtLT5wYXR0ZXJu
Q2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDIpLCBpbmRleCk7Ci0gICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAg
IG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIG1fcmVncy5pbmRl
eCk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICB9CiAKICAgICB2b2lk
IGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShzaXplX3Qgb3BJbmRleCkKQEAgLTE3
OTcsMTAgKzE3MjEsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsK
KyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBjb3Vu
dFJlZ2lzdGVyKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAg
ICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CiAg
ICAgdm9pZCBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4
KQpAQCAtMTgwOSw0MyArMTczMyw0MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAg
ICBVQ2hhcjMyIGNoID0gdGVybS0+cGF0dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNv
dW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNoQW1vdW50SW5kZXgo
KSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gVW5sZXNzIGhhdmUgYSAxNiBiaXQgcGF0
dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQKICAgICAg
ICAgaWYgKCEoIWlzTGF0aW4xKGNoKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgp
KSkgewotICAgICAgICAgICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CiAgICAgICAgICAg
ICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAg
ICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVn
aXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgICAgICAgICAg
bm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgY291bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5
TWF4Q291bnQpKSk7CiAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVtcElm
Q2hhck5vdEVxdWFscyhjaCwgbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwg
Y2hhcmFjdGVyKSk7CiAKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbV9yZWdzLmluZGV4KTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9O
UykKICAgICAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lTX0JNUChj
aCkpIHsKLSAgICAgICAgICAgICAgICBKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0RW5kT2ZJ
bnB1dCgpOwotICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwot
ICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICAgICAgICAgIHN1cnJvZ2F0ZVBhaXJPay5saW5rKHRoaXMpOwotICAgICAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0RW5kT2ZJbnB1dCgpOworICAgICAgICAg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVn
cy5pbmRleCk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAK
LSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKLSAgICAgICAgICAgIG5vbkdyZWVkeUZh
aWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7
CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKSB7
CiAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBjb3VudFJlZ2lzdGVyKjIgZm9yIG5vbi1CTVAgY2hh
cmFjdGVycwotICAgICAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3ViMzIoY291
bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBtX2ppdC5zdWIzMihjb3VudFJlZ2lzdGVyLCBt
X3JlZ3MuaW5kZXgpOwogICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7
CiAgICAgfQogCkBAIC0xODU0LDE0ICsxNzc4LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwog
ICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAgaWYgKG1f
ZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7Ci0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgs
IHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2lu
SW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICByZWFkQ2hhcmFjdGVyKG1f
Y2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAg
IC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3Mg
d2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3RlciBhbmQgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMTg3MSwxNiArMTc5
NSwxNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
ICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAg
IGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhh
c09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpIHsKLSAgICAgICAgICAgIEp1
bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFy
eVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFy
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1f
cmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4
KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KICNlbmRp
ZgogICAgIH0KQEAgLTE4OTEsOCArMTgxNSw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsK
ICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBsb2FkRnJvbUZy
YW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4
KTsKICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKICAgICAg
ICAgfQogI2VuZGlmCkBAIC0xOTA0LDggKzE4MjgsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsK
ICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBj
b3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAg
ICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CkBAIC0xOTE1LDEwICsxODM5LDEwIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgaWYgKG1fZGVj
b2RlU3Vycm9nYXRlUGFpcnMgJiYgdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09ubHlOb25CTVBD
aGFyYWN0ZXJzKCkgJiYgIXRlcm0tPmludmVydCgpKQogICAgICAgICAgICAgc2NhbGVkTWF4Q291
bnQgKj0gMjsKICNlbmRpZgotICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoc2NhbGVkTWF4Q291
bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIoc2NhbGVkTWF4Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKIAot
ICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9j
aGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50LCBjaGFy
YWN0ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhl
ICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZQog
ICAgICAgICAvLyBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBh
bHdheXMgc3VjY2VlZC4KQEAgLTE5MjgsMjcgKzE4NTIsMjcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQog
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1hdGNoRGVzdCk7CiAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0Lmxp
bmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJf
SklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBh
aXJzKSB7CiAgICAgICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3Mo
KSkKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xh
c3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAxKSwgY291bnRSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0ZXJt
LT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBjb3VudFJl
Z2lzdGVyKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc0JNUENo
YXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFz
ZSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAgICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaXNCTVBDaGFy
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBj
b3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIs
IGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBtX3Jl
Z3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTk2MCwxOSAr
MTg4NCwxOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRl
cm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBy
ZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7Cisg
ICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVn
cy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQ
YWlycyAmJiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNPbmVDaGFyYWN0ZXJTaXplKCkgfHwg
dGVybS0+aW52ZXJ0KCkpKQotICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCB0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAg
ICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwogCi0g
ICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJlc0RlY3Jl
bWVudEluZGV4OwotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBmYWlsdXJlc0RlY3JlbWVudEluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bG9vcCgmbV9qaXQpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQog
ICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3MoKSAmJiB0ZXJtLT5j
aGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KGNoYXJhY3RlcikpOwogICAgICAgICB9
IGVsc2UKICNlbmRpZgpAQCAtMTk4MiwxNSArMTkwNiwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tl
ZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBt
YXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZmFpbHVyZXMsIHRlcm0tPmNoYXJhY3RlckNs
YXNzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAg
ICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24s
IGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhlICJhbnkg
Y2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5pY29kZSBwYXR0ZXJucywKICAgICAg
ICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRvbid0IG5l
ZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KICAgICAgICAgICAgIGlmICgh
dGVybS0+Y2hhcmFjdGVyQ2xhc3MtPm1fYW55Q2hhcmFjdGVyKSB7CiAgICAgICAgICAgICAgICAg
bWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVy
Q2xhc3MpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaERlc3Qu
bGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9F
WFBSRVNTSU9OUykKQEAgLTE5OTgsMjIgKzE5MjIsMjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgYWR2YW5jZUluZGV4QWZ0ZXJDaGFyYWN0
ZXJDbGFzc1Rlcm1NYXRjaCh0ZXJtLCBmYWlsdXJlc0RlY3JlbWVudEluZGV4LCBjaGFyYWN0ZXIp
OwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgaW5kZXgpOwotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAgICAgYnJhbmNoMzIo
Tm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKS5s
aW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY291
bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQp
KS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAg
ICAgICAgICBtX2ppdC5qdW1wKGxvb3ApOwogCiAgICAgICAgIGlmICghZmFpbHVyZXNEZWNyZW1l
bnRJbmRleC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlc0RlY3JlbWVudEluZGV4Lmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAg
ICAgICAgICAgIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmlu
ZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7Ci0gICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgIGZhaWx1cmVzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICBzdG9yZVRv
RnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9D
aGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBAIC0yMDIyLDQ1ICsx
OTQ2LDQ1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9D
aGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVn
aXN0ZXIpKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
KyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CisgICAgICAgIG1faml0LnN1YjMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAg
ICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAogICAgICAgICBp
ZiAoIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVsc2UgaWYgKHRlcm0tPmlz
Rml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAxKSwg
aW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEp
LCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFJlbWF0Y2gg
b25lIGxlc3MKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7
CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBpbmRl
eCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKIAot
ICAgICAgICAgICAgTGFiZWwgcmVtYXRjaExvb3AodGhpcyk7Ci0gICAgICAgICAgICBKdW1wIGRv
bmVSZW1hdGNoaW5nID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHJlbWF0Y2hMb29wKCZtX2ppdCk7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lUmVtYXRjaGluZyA9IG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgICAg
IHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hh
cmFjdGVyKTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRS
ZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogCiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVf
RVhQUkVTU0lPTlMpCi0gICAgICAgICAgICBKdW1wIGlzQk1QQ2hhciA9IGJyYW5jaDMyKExlc3NU
aGFuLCBjaGFyYWN0ZXIsIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9yZWdzLnN1
cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICBpc0JN
UENoYXIubGluaygmbV9qaXQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGp1bXAocmVtYXRjaExv
b3ApOwotICAgICAgICAgICAgZG9uZVJlbWF0Y2hpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1faml0Lmp1bXAocmVtYXRjaExvb3ApOworICAgICAgICAgICAgZG9uZVJlbWF0Y2hpbmcubGlu
aygmbV9qaXQpOwogCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291
bnRSZWdpc3Rlcik7CiAgICAgICAgIH0KLSAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAg
ICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0
ZUNoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4KQpAQCAtMjA2OCwxNSArMTk5
MiwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
IFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0g
PSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0g
cmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVn
aXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIGNv
dW50UmVnaXN0ZXIpOwotICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIp
OworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAjaWYgRU5BQkxFKFlB
UlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0
ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNPbmVD
aGFyYWN0ZXJTaXplKCkgfHwgdGVybS0+aW52ZXJ0KCkpCi0gICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKGluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3Rl
ckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3Jl
Z3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xh
c3M6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yMDg4LDI3ICsyMDEy
LDI3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAg
WWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9
IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1Qw
OwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJl
Z1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lz
dGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIEp1bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVz
OwotICAgICAgICBKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4OworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4
OwogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5J
Q09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsK
ICAgICAgICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09uZUNoYXJhY3RlclNp
emUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkKLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5k
ZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1hdGNoQW1v
dW50SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMu
YXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5k
KGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENv
dW50KSkpOworICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKIAotICAgICAgICBKdW1wTGlzdCBtYXRjaERl
c3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAg
IHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hh
cmFjdGVyKTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAiYW55IGNoYXJhY3Rl
ciIgYnVpbHRpbiBjbGFzcyBmb3Igbm9uLXVuaWNvZGUgcGF0dGVybnMsCiAgICAgICAgIC8vIHdl
IG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2gg
YXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KQEAgLTIxMTgsOCArMjA0Miw4IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGlmICh0ZXJtLT5p
bnZlcnQoKSkKICAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobWF0Y2hE
ZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1
cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApAQCAtMjEyOCwxNyArMjA1MiwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBhZHZhbmNlSW5kZXhBZnRlckNoYXJh
Y3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIG5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXgs
IGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAotICAgICAgICBqdW1w
KG9wLm1fcmVlbnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKIAogICAg
ICAgICBpZiAoIW5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXguZW1wdHkoKSkgewotICAg
ICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXNEZWNy
ZW1lbnRJbmRleC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CiAgICAgICAgIH0KLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsKLSAgICAg
ICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBub25HcmVlZHlGYWlsdXJl
cy5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN1YjMyKGNvdW50UmVnaXN0ZXIsIG1fcmVn
cy5pbmRleCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKICAg
ICB9CiAKQEAgLTIxNDcsNjIgKzIwNzEsNjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAg
ICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lz
dGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hQ
b3MgPSByZWdUMTsKLSAgICAgICAgSnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5lOwotICAg
ICAgICBKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKLSAgICAgICAgSnVtcExpc3QgZm91bmRFbmRp
bmdOZXdMaW5lOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIG1hdGNoUG9zID0gbV9yZWdzLnJlZ1QxOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2F2ZVN0YXJ0SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBmb3VuZEVuZGluZ05ld0xpbmU7CiAKICAgICAgICAgaWYgKG1fcGF0dGVybi5kb3RBbGwoKSkg
ewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIG1hdGNoUG9zKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbWF0Y2hQb3Mp
OwogICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7Ci0gICAgICAgICAgICBtb3Zl
KGxlbmd0aCwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MubGVuZ3RoLCBt
X3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
QVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAgIGdldE1h
dGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChicmFu
Y2gzMihCZWxvd09yRXF1YWwsIG1hdGNoUG9zLCBpbml0aWFsU3RhcnQpKTsKLSAgICAgICAgTGFi
ZWwgZmluZEJPTExvb3AodGhpcyk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0
Y2hQb3MpOworICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbWF0Y2hQb3MsIG1fcmVncy5pbml0aWFsU3RhcnQp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpbmRCT0xMb29wKCZtX2ppdCk7Cisg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1hdGNo
UG9zKTsKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAg
ICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNPbmUsIDApLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIDApLCBj
aGFyYWN0ZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlu
cHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9q
aXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBv
cywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5kQmVnaW5uaW5nTmV3TGluZSwgbV9wYXR0
ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKIAotICAgICAgICBicmFuY2gzMihBYm92ZSwg
bWF0Y2hQb3MsIGluaXRpYWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCB0aGlzKTsKLSAgICAg
ICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbWF0Y2hQb3MsIG1fcmVncy5pbml0aWFsU3RhcnQpLmxp
bmtUbyhmaW5kQk9MTG9vcCwgJm1faml0KTsKKyAgICAgICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgZm91bmRCZWdpbm5pbmdOZXdMaW5lLmxpbmsodGhp
cyk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOyAvLyBBZHZhbmNl
IHBhc3QgbmV3bGluZQotICAgICAgICBzYXZlU3RhcnRJbmRleC5saW5rKHRoaXMpOworICAgICAg
ICBmb3VuZEJlZ2lubmluZ05ld0xpbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7IC8vIEFkdmFuY2Ug
cGFzdCBuZXdsaW5lCisgICAgICAgIHNhdmVTdGFydEluZGV4LmxpbmsoJm1faml0KTsKIAogICAg
ICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0ZXJtLT5hbmNob3JzLmJvbEFuY2hv
cikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBt
YXRjaFBvcykpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtYXRjaFBvcykpOwogCiAgICAgICAgIEFTU0VS
VCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBzZXRNYXRjaFN0
YXJ0KG1hdGNoUG9zKTsKIAotICAgICAgICBtb3ZlKGluZGV4LCBtYXRjaFBvcyk7CisgICAgICAg
IG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtYXRjaFBvcyk7CiAKLSAgICAgICAgTGFiZWwgZmlu
ZEVPTExvb3AodGhpcyk7ICAgICAgICAKLSAgICAgICAgZm91bmRFbmRpbmdOZXdMaW5lLmFwcGVu
ZChicmFuY2gzMihFcXVhbCwgbWF0Y2hQb3MsIGxlbmd0aCkpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZmluZEVPTExvb3AoJm1faml0KTsKKyAgICAgICAgZm91bmRFbmRpbmdOZXdM
aW5lLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1hdGNoUG9z
LCBtX3JlZ3MubGVuZ3RoKSk7CiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpD
aGFyOCkKLSAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVz
T25lLCAwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDE2
KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5p
bnB1dCwgbWF0Y2hQb3MsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIGNoYXJhY3Rlcik7
CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmb3VuZEVuZGluZ05ld0xp
bmUsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwotICAgICAgICBqdW1wKGZpbmRFT0xMb29wKTsKKyAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQ
b3MpOworICAgICAgICBtX2ppdC5qdW1wKGZpbmRFT0xMb29wKTsKIAotICAgICAgICBmb3VuZEVu
ZGluZ05ld0xpbmUubGluayh0aGlzKTsKKyAgICAgICAgZm91bmRFbmRpbmdOZXdMaW5lLmxpbmso
Jm1faml0KTsKIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0ZXJtLT5h
bmNob3JzLmVvbEFuY2hvcikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBtYXRjaFBvcywgbGVuZ3RoKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1hdGNoUG9zLCBt
X3JlZ3MubGVuZ3RoKSk7CiAKLSAgICAgICAgbW92ZShtYXRjaFBvcywgaW5kZXgpOworICAgICAg
ICBtX2ppdC5tb3ZlKG1hdGNoUG9zLCBtX3JlZ3MuaW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQg
YmFja3RyYWNrRG90U3RhckVuY2xvc3VyZShzaXplX3Qgb3BJbmRleCkKQEAgLTIzNjcsNyArMjI5
MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICAgICAg
bV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5kZXgsIGxhYmVsKCkpOworICAgICAg
ICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JHZW5lcmF0ZShvcEluZGV4LCBtX2ppdC5s
YWJlbCgpKTsKIAogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAg
ICAgICAgICAgc3dpdGNoIChvcC5tX29wKSB7CkBAIC0yNDA4LDcgKzIzMzIsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBX
ZSB3aWxsIHJlZW50ZXIgYWZ0ZXIgdGhlIGNoZWNrLCBhbmQgYXNzdW1lIHRoZSBpbnB1dCBwb3Np
dGlvbiB0byBoYXZlIGJlZW4KICAgICAgICAgICAgICAgICAvLyBzZXQgYXMgYXBwcm9wcmlhdGUg
dG8gdGhpcyBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAg
ICAgICAgICAgICAgICAvLyBFbWl0IGZhc3Qgc2tpcCBwYXRoIHdpdGggc3RyaWRlIGlmIHdlIGhh
dmUgQm95ZXJNb29yZUluZm8uCiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fYm1JbmZvKSB7CkBA
IC0yNDIwLDggKzIzNDQsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIFttYXAsIGNoYXJhY3RlcnNGYXN0UGF0
aF0gPSBvcC5tX2JtSW5mby0+Y3JlYXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgsIGVuZElu
ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1hcENvdW50ID0gbWFwLmNv
dW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW5kaWF0ZSBjaGFyYWN0ZXJz
IGFyZSA8PSAyLCBjaGVja2luZyBlYWNoIGlzIGJldHRlciB0aGFuIHVzaW5nIHZlY3Rvci4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG91dE9mTGVuZ3RoRmFpbHVyZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoZWQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3V0T2ZMZW5ndGhGYWlsdXJlOworICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoZWQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihZYXJySklUSW50ZXJuYWw6OnZlcmJvc2Us
ICJCTSBCaXRtYXAgaXMgIiwgbWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhdHRl
cm5zIGxpa2UgL1tdLyBoYXZlIHplcm8gY2FuZGlkYXRlcy4gU2luY2UgaXQgaXMgcmFyZSwgd2Ug
ZG8gbm90IGRvIG5vdGhpbmcgZm9yIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWFwQ291bnQpCkBAIC0yNDMwLDc1ICsyMzU0LDc1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KEJveWVyTW9vcmVGYXN0Q2FuZGlkYXRlczo6bWF4U2l6ZSA9PSAyKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGls
YXRpb24oKSwgIkZvdW5kIGNoYXJhY3RlcnMgZmFzdHBhdGggbG9va2FoZWFkICIsIGNoYXJhY3Rl
cnNGYXN0UGF0aCwgIiByYW5nZTpbIiwgYmVnaW5JbmRleCwgIiwgIiwgZW5kSW5kZXgsICIpIik7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFiZWwoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNl
dCAtIGVuZEluZGV4ICsgMSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWQuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKGNoYXJhY3Rl
cnNGYXN0UGF0aC5hdCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxv
b3BIZWFkID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFk
Q2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgbV9yZWdzLnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5yZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMCkpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoYXJhY3RlcnNGYXN0UGF0aC5zaXplKCkgPiAxKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMSkpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgxKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoZW5k
SW5kZXggLSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcCgp
LmxpbmtUbyhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuanVtcCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byogcG9p
bnRlciA9IGdldEJveWVyTW9vcmVCaXRtYXAobWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24oKSwgIkZv
dW5kIGJpdG1hcCBsb29rYWhlYWQgY291bnQ6KCIsIG1hcENvdW50LCAiKSxyYW5nZTpbIiwgYmVn
aW5JbmRleCwgIiwgIiwgZW5kSW5kZXgsICIpIik7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIHJlZ1QxKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwg
cmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIG1fcmVncy5yZWdUMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBsb29wSGVhZCA9IG1faml0LmxhYmVsKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSBlbmRJ
bmRleCArIDEsIG1fcmVncy5yZWdUMCk7CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6
V29yZFR5cGUpID09IHNpemVvZih1aW50NjRfdCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoMSA8PCA2ID09IDY0KTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDYgKyAxKSA9PSBCb3llck1vb3JlQml0bWFwOjpNYXA6
OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdFVuc2lnbmVkQml0
ZmllbGQzMihyZWdUMCwgVHJ1c3RlZEltbTMyKDYpLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsg
Ly8gRXh0cmFjdCAxIGJpdCBmb3IgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVzRWlnaHQpLCByZWdUMik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDY0KHJlZ1QwLCByZWdUMik7IC8vIFdlIGNh
biBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA2Yml0cyBhcmUgZWZmZWN0aXZlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaFRlc3Q2NChO
b25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuZXh0cmFjdFVuc2lnbmVkQml0ZmllbGQzMihtX3JlZ3MucmVnVDAsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSksIG1fcmVncy5yZWdUMik7IC8vIEV4dHJhY3QgMSBiaXQgZm9yIGluZGV4LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KG1fcmVncy5yZWdUMSwgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCks
IG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlm
dDY0KG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBi
aXRzIGFuZCBvbmx5IGxvd2VyIDZiaXRzIGFyZSBlZmZlY3RpdmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSkpKTsKICNlbGlmIENQVShYODZfNjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6
ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgxIDw8IDYgPT0gNjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3Nl
cnQoMSA8PCAoNiArIDEpID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMig2KSwgcmVnVDIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QyLCBU
aW1lc0VpZ2h0KSwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQu
YXBwZW5kKGJyYW5jaFRlc3RCaXQ2NChOb25aZXJvLCByZWdUMiwgcmVnVDApKTsgLy8gV2UgY2Fu
IGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3JtZWQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdU
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEsIG1fcmVncy5yZWdUMiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RCaXQ2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBtX3JlZ3MucmVnVDApKTsgLy8gV2UgY2Fu
IGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3JtZWQuCiAjZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJveWVyTW9v
cmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUpID09IHNpemVvZih1aW50MzJfdCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCA1ID09IDMyKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDUgKyAyKSA9PSBCb3llck1v
b3JlQml0bWFwOjpNYXA6OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hpZnQzMihU
cnVzdGVkSW1tMzIoNSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoMGIxMSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMiwgVGltZXNGb3VyKSwgcmVnVDIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hpZnQzMihyZWdUMCwgcmVnVDIpOyAvLyBXZSBj
YW4gaWdub3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNWJpdHMgYXJlIGVmZmVjdGl2ZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMigxKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDUpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMGIxMSksIG1fcmVncy5yZWdU
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0ZvdXIpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnVyc2hpZnQzMihtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdUMik7IC8vIFdlIGNhbiBp
Z25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA1Yml0cyBhcmUgZWZmZWN0aXZlLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoZW5kSW5kZXgg
LSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcCgpLmxpbmtU
byhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVt
cCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gc2l6ZSBpcyBub3Qg
Zml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGluZGV4IGZvciB1c2UgaWYgd2UgbWF0Y2guCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIGFkanVzdGluZyBtYXRj
aC1zdGFydCB3aGVuIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBzdGFydCB3aXRoIEJveWVyTW9vcmUg
c2VhcmNoLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5t
X2hhc0ZpeGVkU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVuZ3Ro
RmFpbHVyZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVu
Z3RoRmFpbHVyZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIHJl
Z1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdU
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5p
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwg
bV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hT
dGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG91dE9mTGVuZ3RoRmFpbHVyZSk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZWQubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHBhdHRlcm4gc2l6ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGlu
ZGV4IGZvciB1c2UgaWYgd2UgbWF0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHVzZWQgZm9yIGFkanVzdGluZyBtYXRjaC1zdGFydCB3aGVuIHdlIHN0YXJ0IHBhdHRlcm4g
bWF0Y2hpbmcgd2l0aCB0aGUgdXBkYXRlZCBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYnkgQm95ZXJNb29yZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
cGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hT
dGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMy
KG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKSwgbV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUxNywyMSArMjQ0MSwyMCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gTG9hZCBh
cHByb3ByaWF0ZSB2YWx1ZXMgaW50byB0aGUgcmV0dXJuIHJlZ2lzdGVyIGFuZCB0aGUgZmlyc3Qg
b3V0cHV0CiAgICAgICAgICAgICAgICAgLy8gc2xvdCwgYW5kIHJldHVybi4gSW4gdGhlIGNhc2Ug
b2YgcGF0dGVybiB3aXRoIGEgZml4ZWQgc2l6ZSwgd2Ugd2lsbAogICAgICAgICAgICAgICAgIC8v
IG5vdCBoYXZlIHlldCBzZXQgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggIT0gcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX3JlZ3MuaW5kZXggIT0gbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAg
ICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHByaW9yQWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCByZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwg
bV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29tcGls
ZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JlUGFpcjMyKHJldHVyblJlZ2lzdGVyLCBpbmRleCwgb3V0cHV0LCBU
cnVzdGVkSW1tMzIoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQYWly
MzIobV9yZWdzLnJldHVyblJlZ2lzdGVyLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5vdXRwdXQsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldE1hdGNoU3RhcnQocmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBnZXRNYXRjaFN0YXJ0KG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJ
bmNsdWRlU3VicGF0dGVybnMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4
LCBBZGRyZXNzKG91dHB1dCwgNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQs
IDQpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbW92ZShpbmRleCwgcmV0
dXJuUmVnaXN0ZXIyKTsKLQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4
LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZVJldHVy
bigpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGl2aWRlIGJldHdlZW4gdGhl
IHRhaWwgb2YgdGhlIHByaW9yIGFsdGVybmF0aXZlLCBhYm92ZSwgYW5kCkBAIC0yNTQyLDE3ICsy
NDY1LDE3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhhdCBqdW1wcyBoZXJlIHRvIGRvIHNvIHdpdGggdGhlIGlucHV0
IHBvc2l0aW9uIG1hdGNoaW5nIHRoYXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIFBS
SU9SIGFsdGVyYW5hdGl2ZSwgYW5kIHdlIHdpbGwgb25seSBjaGVjayBpbnB1dCBhdmFpbGFiaWxp
dHkgaWYgd2UKICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBwcm9ncmVzcyBpdCBmb3J3
YXJkcy4KLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID4gcHJpb3JBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIo
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1T
aXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gcHJpb3JBbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCkpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUg
PiBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1
YjMyKEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
IC0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAob3AubV9uZXh0T3AgPT0gbm90Rm91bmQpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVlbnRyeSBwb2ludCBmb3IgdGhlIEVuZCBvZiAnb25j
ZSB0aHJvdWdoJyBhbHRlcm5hdGl2ZXMsCiAgICAgICAgICAgICAgICAgICAgIC8vIGp1bXBlZCB0
byB3aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZlIGZhaWxzIHRvIG1hdGNoLgotICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBzdWIz
MihJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIocHJpb3JBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gWWFyck9wQ29kZTo6Qm9keUFsdGVybmF0aXZl
TmV4dCkKQEAgLTI2MDgsNyArMjUzMSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1
YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICFtX29wc1tvcC5tX3ByZXZpb3VzT3BdLm1fYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByZXZpb3VzIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVy
cyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2t0cmFjayB0byB0cnkgdG8gbWF0Y2gg
d2hpbGUgY29uc3VtbWluZyBzb21lIGlucHV0LgotICAgICAgICAgICAgICAgICAgICBvcC5tX3pl
cm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9u
ICogc2l6ZW9mKHZvaWQqKSkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IC8vIElmIHdlIHJlYWNoIGhlcmUgdGhlbiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBoYXMgbWF0Y2hl
ZCAtIGp1bXAgdG8gdGhlCkBAIC0yNjI1LDEwICsyNTQ4LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgZW5kT3AgPSAmbV9v
cHNbZW5kT3AtPm1fbmV4dE9wXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGVuZE9wLT5tX29wID09IFlhcnJPcENvZGU6OlNpbXBsZU5lc3RlZEFsdGVybmF0aXZl
RW5kIHx8IGVuZE9wLT5tX29wID09IFlhcnJPcENvZGU6Ok5lc3RlZEFsdGVybmF0aXZlRW5kKTsK
LSAgICAgICAgICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbmV4dCBhbHRlcm5hdGl2
ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAg
ICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICAvLyBD
YWxjdWxhdGUgaG93IG11Y2ggaW5wdXQgd2UgbmVlZCB0byBjaGVjayBmb3IsIGFuZCBpZiBub24t
emVybyBjaGVjay4KICAgICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRqdXN0ID0gYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemU7CkBAIC0yNjU1LDEzICsyNTc4LDEzIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVh
bnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICFtX29wc1tvcC5tX3By
ZXZpb3VzT3BdLm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25z
dW1pbmcgY2hhcmFjdGVycyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2t0cmFjayB0
byB0cnkgdG8gbWF0Y2ggd2hpbGUgY29uc3VtbWluZyBzb21lIGlucHV0LgotICAgICAgICAgICAg
ICAgICAgICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2
b2lkKikpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0Y2ggPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJt
LT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgc2V0IG9mIGFsdGVybmF0aXZlcyBjb250YWlucyBt
b3JlIHRoYW4gb25lIGFsdGVybmF0aXZlLAogICAgICAgICAgICAgICAgIC8vIHRoZW4gdGhlIE5l
eHQgbm9kZXMgd2lsbCBoYXZlIHBsYW50ZWQganVtcHMgdG8gdGhlIEVuZCwgYW5kIGFkZGVkCiAg
ICAgICAgICAgICAgICAgLy8gdGhlbSB0byB0aGlzIG5vZGUncyBtX2p1bXBzIGxpc3QuCi0gICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuY2xlYXIoKTsK
IAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09w
XTsKQEAgLTI2NzYsNyArMjU5OSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0
ZXJuT25jZUJlZ2luOiB7CiAgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5t
X3Rlcm07CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklE
IGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gMSk7CiAKICAgICAgICAg
ICAgICAgICAvLyBVcG9uIGVudHJ5IHRvIGEgR3JlZWR5IHF1YW50aWZpZWQgc2V0IG9mIHBhcmVu
dGhlc2Ugc3RvcmUgdGhlIGluZGV4LgpAQCAtMjY5NCwxMiArMjYxNywxMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogZm9yIGNhcHR1cmluZyBwYXJlbnMsIGNvdWxkIHVzZSB0aGUg
aW5kZXggaW4gdGhlIGNhcHR1cmUgYXJyYXk/CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVl
ZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSks
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6
OmJlZ2luSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
LTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNP
bmNlOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2pp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNl
OjpiZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBzdGFydGluZyBpbmRl
eCB2YWx1ZSB0byB0aGUKQEAgLTI3MTMsMjMgKzI2MzYsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50KQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRPZmZzZXQgKz0gdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1f
bWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0T2Zmc2V0KSwgaW5k
ZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdz
LmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFy
eSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXhUZW1w
b3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KGlu
ZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KG1fcmVncy5pbmRleCwgdGVybS0+cGFyZW50aGVzZXMu
c3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFlhcnJPcENvZGU6OlBhcmVudGhlc2Vz
U3VicGF0dGVybk9uY2VFbmQ6IHsKICAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9
IG9wLm1fdGVybTsKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9y
YXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gMSk7CiAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgbmVzdGVkIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25zdW1pbmcgYW55IGNo
YXJhY3RlcnMsIHB1bnQgdGhpcyBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4KICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFSUiBKSVQgdG8gcHJvcGVybHkKICAgICAgICAg
ICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJlc3Npb25zIHRoYXQgY2FuIG1hdGNoIHdpdGhv
dXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICF0ZXJtLT5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgbV9hYm9y
dEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2Nh
dGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFy
ZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4IHZhbHVlIHRvIHRo
ZQogICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVzIGFycmF5LCBvZmZzZXR0aW5nIGFzIG5lY2Vz
c2FyeS4KQEAgLTI3NDAsMjAgKzI2NjMsMjAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkgJiYgbV9j
b21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlucHV0T2Zmc2V0ID0gbV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoaW5wdXRPZmZz
ZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIz
MihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9mZnNldCksIGluZGV4
VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQoaW5k
ZXhUZW1wb3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVu
ZChpbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQobV9yZWdzLmluZGV4LCB0ZXJtLT5wYXJlbnRoZXNl
cy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnRoZXNlcyBhcmUgcXVhbnRpZmllZCBHcmVlZHkgdGhlbiBhZGQgYSBsYWJl
bCB0byBqdW1wIGJhY2sKICAgICAgICAgICAgICAgICAvLyB0byBpZiB3ZSBnZXQgYSBmYWlsZWQg
bWF0Y2ggZnJvbSBhZnRlciB0aGUgcGFyZW50aGVzZXMuIEZvciBOb25HcmVlZHkKICAgICAgICAg
ICAgICAgICAvLyBwYXJlbnRoZXNlcywgbGluayB0aGUganVtcCBmcm9tIGJlZm9yZSB0aGUgc3Vi
cGF0dGVybiB0byBoZXJlLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUg
PT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVu
dHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQu
bGFiZWwoKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewogICAgICAgICAgICAgICAgICAgICBZYXJyT3Am
IGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAgICAgICAgICAgICBi
ZWdpbk9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5PcC5t
X2p1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yNzY2LDExICsyNjg5LDExIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBBU1NFUlQoIXRl
cm0tPmNhcHR1cmUoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBVcG9uIGVudHJ5IHNldCBhIGxh
YmVsIHRvIGxvb3AgYmFjayB0by4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAg
ICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgc3RhcnQgaW5kZXggb2YgdGhlIGN1cnJlbnQgbWF0
Y2g7IHdlIG5lZWQgdG8gcmVqZWN0IHplcm8KICAgICAgICAgICAgICAgICAvLyBsZW5ndGggbWF0
Y2hlcy4KLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDo6YmVnaW5JbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5mcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzVGVybWluYWw6OmJlZ2luSW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IFlhcnJPcENvZGU6OlBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5kOiB7CkBAIC0yNzgx
LDE1ICsyNzA0LDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFSUiBKSVQgdG8gcHJvcGVy
bHkKICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJlc3Npb25zIHRoYXQgY2Fu
IG1hdGNoIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICBpZiAo
dGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICF0ZXJt
LT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZv
aWQqKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVy
bS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBXZSBrbm93IHRoYXQgdGhlIG1hdGNoIGlzIG5vbi16ZXJvLCB3ZSBjYW4gYWNjZXB0IGl0IGFu
ZAogICAgICAgICAgICAgICAgIC8vIGxvb3AgYmFjayB1cCB0byB0aGUgaGVhZCBvZiB0aGUgc3Vi
cGF0dGVybi4KLSAgICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKIAogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIGp1bXAgdG8gd2hlbiB3ZSBzdG9wIG1h
dGNoaW5nIC0gd2Ugd2lsbAogICAgICAgICAgICAgICAgIC8vIGRvIHNvIG9uY2UgdGhlIHN1YnBh
dHRlcm4gY2Fubm90IG1hdGNoIGFueSBtb3JlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMjgxNiwyNCAr
MjczOSwyNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIGNhcHR1cmluZyBw
YXJlbnMsIGNvdWxkIHVzZSB0aGUgaW5kZXggaW4gdGhlIGNhcHR1cmUgYXJyYXk/CiAgICAgICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5
IHx8IHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJ
bmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9y
ZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkp
OworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOwogCiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVk
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigt
MSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6
YmVnaW5JbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgY3VyclBhcmVuQ29u
dGV4dFJlZyA9IHJlZ1QwOwotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcklEIG5ld1BhcmVu
Q29udGV4dFJlZyA9IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBt
X2ppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjdXJyUGFyZW5Db250ZXh0UmVnID0gbV9yZWdzLnJlZ1QwOworICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSBtX3Jl
Z3MucmVnVDE7CiAKICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhl
YWRJbmRleCgpLCBjdXJyUGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgYWxs
b2NhdGVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgc3RvcmVQdHIoY3VyclBhcmVuQ29udGV4dFJlZywgQWRkcmVzcyhuZXdQYXJlbkNvbnRleHRS
ZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY3VyclBhcmVuQ29udGV4
dFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobmV3UGFyZW5Db250ZXh0UmVnKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShuZXdQYXJlbkNvbnRleHRSZWcsIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0
SGVhZEluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBzYXZlUGFyZW5Db250ZXh0KG5ld1Bh
cmVuQ29udGV4dFJlZywgcmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVy
bS0+cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
KTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNhdmVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnLCBt
X3JlZ3MucmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50
aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFy
ZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBzdGFydGluZyBpbmRleCB2YWx1ZSB0byB0aGUKQEAgLTI4
NDMsMTUgKzI3NjYsMTUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9p
bnQgdGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3Nl
ZC4KICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUg
PT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5
ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dE9mZnNl
dCA9IG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dE9mZnNldCArPSB0ZXJtLT5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGlucHV0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1t
MzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9m
ZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBh
dHRlcm5TdGFydChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklk
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQobV9yZWdzLmluZGV4
LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KICNl
bHNlIC8vICFZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TCiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI4NjcsMTMgKzI3OTAsMTMgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4g
QWRkIGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJVCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAg
IC8vIGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25z
dW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUg
IT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1
bmN0aW9uLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0
aW9uLmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDE7CiAK
ICAgICAgICAgICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3Bd
OwogICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50VGVt
cG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVt
cG9yYXJ5KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKGNvdW50VGVtcG9yYXJ5LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4
IHZhbHVlIHRvIHRoZQpAQCAtMjg4MywxNCArMjgwNiwxNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyBvbmx5IGFm
dGVyd2FyZHMsIGF0IHRoZSBwb2ludCB0aGUgcmVzdWx0cyBhcnJheSBpcwogICAgICAgICAgICAg
ICAgIC8vIGJlaW5nIGFjY2Vzc2VkLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJl
KCkgJiYgbV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5z
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3Jhcnkg
PSByZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dE9mZnNldCA9IG1fY2hlY2tlZE9m
ZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1
dE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlu
cHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQp
LCBpbmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJu
RW5kKGluZGV4VGVtcG9yYXJ5LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBh
dHRlcm5FbmQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKG1fcmVncy5pbmRleCwgdGVybS0+cGFy
ZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZXMgYXJlIHF1YW50aWZpZWQgR3JlZWR5IHRoZW4gYWRk
IGEgbGFiZWwgdG8ganVtcCBiYWNrCkBAIC0yODk4LDE1ICsyODIxLDE1IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBwYXJlbnRo
ZXNlcywgbGluayB0aGUganVtcCBmcm9tIGJlZm9yZSB0aGUgc3VicGF0dGVybiB0byBoZXJlLgog
ICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6
OkdyZWVkeSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3Vu
dCAhPSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIo
QmVsb3csIGNvdW50VGVtcG9yYXJ5LCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlu
a1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgY291bnRUZW1wb3JhcnksIE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlua1RvKGJlZ2luT3Au
bV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAoYmVnaW5PcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3Jl
ZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1f
cHJldmlvdXNPcF07Ci0gICAgICAgICAgICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAg
ICAgICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIH0K
ICNlbHNlIC8vICFZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TCiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5MjEsMTIgKzI4NDQsMTIgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAg
IC8vIFN0b3JlIHRoZSBjdXJyZW50IGluZGV4IC0gYXNzZXJ0aW9ucyBzaG91bGQgbm90IHVwZGF0
ZSBpbmRleCwgc28KICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gcmVzdG9yZSBp
dCB1cG9uIGEgc3VjY2Vzc2Z1bCBtYXRjaC4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAg
ICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBDaGVjayAKICAgICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRq
dXN0ID0gbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1t
MzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBtX3JlZ3MuaW5k
ZXgpOwogCiAgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0IC09IG9wLm1fY2hlY2tBZGp1
c3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTM2LDEzICsyODU5LDEzIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAgICAgICAgIC8v
IFJlc3RvcmUgdGhlIGlucHV0IGluZGV4IHZhbHVlLgogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0gICAgICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAg
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5k
ZXgpOwogCiAgICAgICAgICAgICAgICAgLy8gSWYgaW52ZXJ0ZWQsIGEgc3VjY2Vzc2Z1bCBtYXRj
aCBvZiB0aGUgYXNzZXJ0aW9uIG11c3QgYmUgdHJlYXRlZAogICAgICAgICAgICAgICAgIC8vIGFz
IGEgZmFpbHVyZSwgc28ganVtcCB0byBiYWNrdHJhY2tpbmcuCiAgICAgICAgICAgICAgICAgaWYg
KHRlcm0tPmludmVydCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3By
ZXZpb3VzT3BdOwpAQCAtMjk3MCw3ICsyODkzLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgLS1vcEluZGV4OwogCiAgICAgICAgICAgICBp
ZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZv
ckJhY2t0cmFjayhvcEluZGV4LCBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0Rm9yQmFja3RyYWNrKG9wSW5kZXgsIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAg
ICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG9w
Lm1fb3ApIHsKQEAgLTMwMTUsNyArMjkzOCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHRoZSBsYXN0IGFsdGVy
bmF0aXZlPyBJZiBub3QsIHRoZW4gaWYgd2UgYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgd2UganVz
dAogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8ganVtcCB0byB0cnkgdG8gbWF0Y2ggdGhlIG5l
eHQgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG1fb3BzW29wLm1fbmV4dE9wXS5t
X29wICE9IFlhcnJPcENvZGU6OkJvZHlBbHRlcm5hdGl2ZUVuZCkgewotICAgICAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhtX29wc1tvcC5tX25leHRPcF0ubV9yZWVu
dHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5r
VG8obV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFlhcnJPcCYg
ZW5kT3AgPSBtX29wc1tvcC5tX25leHRPcF07CkBAIC0zMDI5LDE3ICsyOTUyLDE3IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAgICAgICAgIGJv
b2wgb25jZVRocm91Z2ggPSBlbmRPcC5tX25leHRPcCA9PSBub3RGb3VuZDsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBKdW1wTGlzdCBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWls
dXJlczsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbGFzdFN0aWNr
eUFsdGVybmF0aXZlRmFpbHVyZXM7CiAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgZ2VuZXJh
dGUgY29kZSB0byBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgYmFja3RyYWNrIG91dCBvZiBhbiBhdHRl
bXB0ZWQgbWF0Y2gKICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZS4g
SWYgdGhpcyBpcyBhICdvbmNlIHRocm91Z2gnIHNldCBvZiBhbHRlcm5hdGl2ZXMgdGhlbiB3ZQog
ICAgICAgICAgICAgICAgIC8vIGhhdmUgbm90aGluZyB0byBkbyAtIGxpbmsgdGhpcyBzdHJhaWdo
dCB0aHJvdWdoIHRvIHRoZSBFbmQuCiAgICAgICAgICAgICAgICAgaWYgKG9uY2VUaHJvdWdoKQot
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3Jl
ZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmtUbyhlbmRPcC5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4uc3RpY2t5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGEgc3RpY2t5IHBhdHRlcm4gYW5kIHRoZSBsYXN0IGFsdGVy
bmF0aXZlIGZhaWxlZCwganVtcCB0byB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobGFzdFN0aWNreUFs
dGVybmF0aXZlRmFpbHVyZXMsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNr
dHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobGFzdFN0aWNreUFsdGVybmF0
aXZlRmFpbHVyZXMsICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9w
YXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICYm
IChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA+IGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IDEp
KSB7CkBAIC0zMDQ3LDExICsyOTcwLDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChpbiB3aGljaCBjYXNlIHdl
IG9taXQgdGhlIHN0b3JlIG9mIHRoZSBzdGFydCBpbmRleCB1bnRpbCB0aGUgcGF0dGVybiBoYXMg
bWF0Y2hlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIGp1c3QgbGlu
ayB0aGUgYmFja3RyYWNrIG91dCBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBzdHJhaWdodCB0byB0
aGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWQgb2YgdGhlIGZpcnN0IGFsdGVybmF0
aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8o
YmVnaW5PcC0+bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZ2VuZXJhdGUgYSB0cmFtcG9saW5lIG9mIGNvZGUgdG8gZXhlY3V0ZSBiZWZvcmUgbG9v
cGluZyBiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcm91bmQgdG8gdGhlIGZpcnN0
IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
YWR2YW5jZSBhbmQgcmV0cnkgZm9yIGEgc3RpY2t5IHBhdHRlcm4uIEFuZCBpdCBpcyBhbHJlYWR5
IGhhbmRsZWQgYmVmb3JlIHRoaXMgYnJhbmNoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX3BhdHRlcm4uc3RpY2t5KCkpOwpAQCAtMzA1OSwxMyArMjk4MiwxMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0aGUgc3Rh
cnQgaW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gMSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplIC0gMSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplIC0gMSksIG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMwNzcsMTYgKzMw
MDAsMTYgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbHRhID0gYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZWx0YSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRlbHRhICE9IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN1YjMyKEltbTMyKGRlbHRhIC0gMSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKGJlZ2luT3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSAtIDEpLCBtX3Jl
Z3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5P
cC0+bV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGFsdGVybmF0aXZlIGhhcyBtaW5p
bXVtIHNpemUgMHhGRkZGRkZGRnUsIHRoZW4gdGhlcmUgY2Fubm90CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYmUgc3VmZmljZW50IGlucHV0IGF2YWlsYWJsZSB0byBoYW5kbGUgdGhp
cywgc28ganVzdCBmYWxsIHRocm91Z2guCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZGVsdGEgPSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGRlbHRhICE9IDB4RkZGRkZGRkZ1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgaW5wdXQgYmVjYXVzZSB3ZSBhcmUgaW5jcmVtZW50aW5nIHRo
ZSBpbnB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoZGVs
dGEgKyAxKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lu
cHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSAr
IDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTMwOTksNyArMzAyMiw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyAgICBmb2xsb3dpbmcgYSBmYWls
ZWQgaW5wdXQgY2hlY2suCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBF
aXRoZXIgd2F5LCB3ZSBoYXZlIGp1c3QgZmFpbGVkIHRoZSBpbnB1dCBjaGVjayBmb3IgdGhlIGZp
cnN0IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIExhYmVsIGZpcnN0SW5wdXRDaGVja0Zh
aWxlZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmlyc3RJ
bnB1dENoZWNrRmFpbGVkKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBj
b2RlIHRvIGhhbmRsZSBpbnB1dCBjaGVjayBmYWlsdXJlcyBmcm9tIGFsdGVybmF0aXZlcyBleGNl
cHQgdGhlIGxhc3QuCiAgICAgICAgICAgICAgICAgLy8gcHJldk9wIGlzIHRoZSBhbHRlcm5hdGl2
ZSB3ZSdyZSBoYW5kbGluZyBhIGJhaWwgb3V0IGZyb20gKGluaXRpYWxseSBCZWdpbiksIGFuZApA
QCAtMzExMCw3ICszMDMzLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIFlhcnJPcCogcHJldk9wID0gYmVnaW5PcDsKICAgICAgICAg
ICAgICAgICBZYXJyT3AqIG5leHRPcCA9ICZtX29wc1tiZWdpbk9wLT5tX25leHRPcF07CiAgICAg
ICAgICAgICAgICAgd2hpbGUgKG5leHRPcC0+bV9vcCAhPSBZYXJyT3BDb2RlOjpCb2R5QWx0ZXJu
YXRpdmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldk9wLT5tX2p1bXBzLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIHByZXZPcC0+bV9qdW1wcy5saW5rKCZtX2ppdCk7CiAK
ICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBnZXQgaGVyZSBpZiBhbiBpbnB1dCBjaGVj
ayBmYWlscywgaXQgaXMgb25seSB3b3J0aCBjaGVja2luZyBhZ2FpbgogICAgICAgICAgICAgICAg
ICAgICAvLyBpZiB0aGUgbmV4dCBhbHRlcm5hdGl2ZSBoYXMgYSBtaW5pbXVtIHNpemUgbGVzcyB0
aGFuIHRoZSBsYXN0LgpAQCAtMzExOSwxMyArMzA0MiwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWJ0cmFj
dCBkZWx0YSBiYWNrIG91dCwgYW5kIHJlZHVjZSB0aGlzIGNvZGUuIFNob3VsZCBwZXJmb3JtYW5j
ZSB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYmVuZWZpdCBvZiB0aGlzLgog
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsdGEgPSBwcmV2T3AtPm1fYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUgLSBuZXh0T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNp
emU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgZmFpbCA9IGp1bXBJZk5vQXZhaWxhYmxlSW5w
dXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGRlbHRhKSwgaW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICAgICAganVtcChuZXh0T3AtPm1fcmVlbnRyeSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmYWlsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCA9
IGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG5leHRPcC0+bV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZhaWwubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHByZXZPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA8IG5leHRP
cC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZDMyKEltbTMyKG5leHRPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByZXZP
cC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihuZXh0T3AtPm1fYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBwcmV2T3AgPSBuZXh0
T3A7CiAgICAgICAgICAgICAgICAgICAgIG5leHRPcCA9ICZtX29wc1tuZXh0T3AtPm1fbmV4dE9w
XTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTM1LDE0ICszMDU4LDE0IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8gcnVuIHRoZSBsYXN0IGFsdGVybmF0aXZlLCB0aGVu
IGZvciAnb25jZSB0aHJvdWdoJwogICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlcyB3ZSBh
cmUgZG9uZSAtIGp1c3QganVtcCBiYWNrIHVwIGludG8gdGhlIGZvcndhcmRzIG1hdGNoaW5nIHBh
dGggYXQgdGhlIEVuZC4KICAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpIHsKLSAgICAg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsK
LSAgICAgICAgICAgICAgICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAg
ICAgICAgICBvcC5tX2p1bXBzLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksICZtX2ppdCk7CisgICAg
ICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoZW5kT3AubV9yZWVudHJ5KTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8g
Rm9yIHJlcGVhdGluZyBhbHRlcm5hdGl2ZXMsIGxpbmsgYW55IGlucHV0IGNoZWNrIGZhaWx1cmUg
ZnJvbSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSB0bwogICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9p
bnQuCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBuZWVk
c1RvVXBkYXRlTWF0Y2hTdGFydCA9ICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZTsK
IApAQCAtMzE1MSw3ICszMDc0LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBZYXJySgogICAgICAgICAgICAgICAgIC8vIGRpc2p1bmN0aW9uIGlzIDAsIGUuZy4gL2EqfGIv
KS4KICAgICAgICAgICAgICAgICBpZiAobmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgJiYgYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbmRl
eCBpcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IDEsIHNvIGp1c3Qgc3RvcmUgaXQgbm93IQotICAg
ICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBuZWVk
c1RvVXBkYXRlTWF0Y2hTdGFydCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMzE2
NCwyMiArMzA4NywyMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
CiAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSBt
X3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBoYWQgdGhlIHNhbWUgbWluaW11bSBzaXplIGFz
IHRoZSBkaXNqdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3Qgc2ltcGx5
IGluY3JlbWVudCBpbnB1dCBwb3MgYnkgMSwgbm8gYWRqdXN0bWVudCBiYXNlZCBvbiBtaW5pbXVt
IHNpemUuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbWludW11bSBmb3IgdGhl
IGxhc3QgYWx0ZXJuYXRpdmUgd2FzIG9uZSBncmVhdGVyIHRoYW4gdGhhbiB0aGF0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGRpc2p1bmN0aW9uLCB3ZSdyZSBhbHJlYWR5IHBy
b2dyZXNzZWQgYnkgMSwgbm90aGluZyB0byBkbyEKICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGRlbHRhID0gKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1f
Ym9keS0+bV9taW5pbXVtU2l6ZSkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRl
bHRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGRlbHRhKSwgaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgSnVtcCBtYXRjaEZhaWxlZCA9IGp1bXBJZk5vQXZhaWxhYmxl
SW5wdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbWF0Y2hG
YWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKG1f
cGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9w
YXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMxODcsMjIgKzMx
MTAsMjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgICAgICAvLyBmb3IgdGhlIGJvZHkgYXMgYSB3aG9sZS4gSWYgbm8gbW9yZSBpcyBu
ZWVkZWQgdGhlbiB3ZSBkb250IG5lZWQgYW4gYWRkaXRpb25hbAogICAgICAgICAgICAgICAgICAg
ICAvLyBpbnB1dCBjaGVjayBoZXJlIC0ganVtcCBzdHJhaWdodCBiYWNrIHVwIHRvIHRoZSBzdGFy
dCBvZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdp
bk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IG1fcGF0dGVybi5tX2JvZHktPm1f
bWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AtPm1fcmVl
bnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AtPm1fcmVl
bnRyeSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPiBtX3BhdHRlcm4u
bV9ib2R5LT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMy
KEltbTMyKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBtX3BhdHRlcm4u
bV9ib2R5LT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihiZWdpbk9wLT5tX2FsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIG1f
cmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6
ZSAtIGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRy
eSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGZpcnN0SW5wdXRDaGVja0Zh
aWxlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgLSBiZWdpbk9wLT5t
X2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5PcC0+bV9yZWVudHJ5LCAmbV9q
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChmaXJzdElucHV0Q2hlY2tG
YWlsZWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
V2UganVtcCB0byBoZXJlIGlmIHdlIGl0ZXJhdGUgdG8gdGhlIHBvaW50IHRoYXQgdGhlcmUgaXMg
aW5zdWZmaWNpZW50IGlucHV0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBhbnkgbWF0
Y2hlcywgYW5kIG5lZWQgdG8gcmV0dXJuIGEgZmFpbHVyZSBzdGF0ZSBmcm9tIEpJVCBjb2RlLgot
ICAgICAgICAgICAgICAgICAgICBtYXRjaEZhaWxlZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBtYXRjaEZhaWxlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXMubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJlcy5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVGYWlsUmV0dXJuKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjYyLDE0
ICszMTg1LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAvLyBsaW5rIHRoZSBiYWNrdHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRl
c3RpbmF0aW9uLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBsaW5r
IHRoZSBiYWNrdHJhY2tzIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5n
U3RhdGUubGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIob3AubV9j
aGVja0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1
bXAgdG8gaXRzIHN1Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAobmV4dE9w
Lm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG5leHRPcC5t
X3JlZW50cnkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0JlZ2luKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBvZiBtb3JlIHRoYW4gb25lIGFsdGVy
bmF0aXZlcyBtdXN0IGp1bXAgYmFjayB0byB0aGUgYmVnaW5uaW5nLgotICAgICAgICAgICAgICAg
ICAgICAgICAgbmV4dE9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0T3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgc2luZ2xlIGFs
dGVybmF0aXZlIG9uIGl0cyBvd24gY2FuIGZhbGwgdGhyb3VnaC4KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTMyNzgsMTAgKzMy
MDEsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHdlIGNhbiBsaW5rIHRoZSBi
YWNrdHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRlc3RpbmF0aW9ucy4KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1bXAgdG8gaXRz
IHN1Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGlua1RvKG5leHRPcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8obmV4dE9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZXMgbXVzdCBq
dW1wIGJhY2sgdG8gdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG5leHRPcC5tX2p1bXBzLCB0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJh
Y2t0cmFja3NUb0p1bXBMaXN0KG5leHRPcC5tX2p1bXBzLCAmbV9qaXQpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgc2luZ2xl
IGFsdGVybmF0aXZlIG9uIGl0cyBvd24gZG8gbm90aGluZyAtIGl0IGNhbiBmYWxsIHRocm91Z2gu
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzMzMSw3ICszMjU0LDcgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIGludG8gdGhlIGVu
ZCBvZiBhIG5vbi1zaW1wbGUgc2V0IG9mIGFsdGVybnRpdmVzIHdlIG5lZWQgdG8ganVtcAogICAg
ICAgICAgICAgICAgIC8vIHRvIHRoZSBiYWNrdHJhY2tpbmcgcmV0dXJuIGFkZHJlc3Mgc2V0IHVw
IGR1cmluZyBnZW5lcmF0aW9uLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX29wID09IFlhcnJP
cENvZGU6Ok5lc3RlZEFsdGVybmF0aXZlRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gUGxhbnQg
YSBqdW1wIHRvIHRoZSByZXR1cm4gYWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKQEAgLTMz
NjgsNyArMzI5MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
IAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBiYWNrdHJhY2sgdG8gdGhpcyBw
b2ludCBpZiBjYXB0dXJpbmcgb3IgZ3JlZWR5LgogICAgICAgICAgICAgICAgIGlmICgodGVybS0+
Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJw
YXR0ZXJucykgfHwgdGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYXB0dXJpbmcsIGNsZWFyIHRoZSBjYXB0dXJlICh3
ZSBvbmx5IG5lZWQgdG8gcmVzZXQgc3RhcnQpLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVy
bS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVT
dWJwYXR0ZXJucykKQEAgLTMzNzgsMTIgKzMzMDEsMTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENsZWFyIHRoZSBmbGFnIGluIHRoZSBzdGFja2ZyYW1lIGluZGljYXRpbmcgd2UgcmFu
IHRocm91Z2ggdGhlIHN1YnBhdHRlcm4uCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBKdW1wIHRvIGFmdGVyIHRoZSBwYXJlbnRoZXNlcywgc2tpcHBpbmcgdGhlIHN1YnBh
dHRlcm4uCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5t
X3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29wc1tvcC5t
X25leHRPcF0ubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgYmFja3Ry
YWNrIGZyb20gYWZ0ZXIgdGhlIHBhcmVudGhlc2VzLCB3aGVuIHNraXBwaW5nIHRoZSBzdWJwYXR0
ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBqdW1wIGJhY2sgdG8gaGVyZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhy
b3VnaCgpOwpAQCAtMzM5NCwxMyArMzMxNywxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5t
X3Rlcm07CiAKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50
aWZpZXJUeXBlOjpGaXhlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB3ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZW50aGVzZXMsIG9yIGlmIHdl
CiAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gYSBzdGF0ZSB3aGVyZSB3
ZSBoYWQgc2tpcHBlZCBvdmVyIHRoZSBzdWJwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgIC8v
IChpbiB3aGljaCBjYXNlIHRoZSBmbGFnIHZhbHVlIG9uIHRoZSBzdGFjayB3aWxsIGJlIC0xKS4K
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0g
dGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgSnVtcCBoYWRTa2lwcGVk
ID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbklu
ZGV4KCkpICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRTa2lwcGVkID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpICogc2l6ZW9mKHZvaWQq
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBHcmVlZHkgcGFyZW50aGVzZXMsIHdlIHNr
aXAgYWZ0ZXIgaGF2aW5nIGFscmVhZHkgdHJpZWQgZ29pbmcKQEAgLTM0MTQsNyArMzMzNyw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG1hdGNoaW5nIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91
c09wXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhZFNraXBwZWQubGlua1RvKGJlZ2luT3Au
bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZFNraXBwZWQubGlu
a1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpA
QCAtMzQzNSw3ICszMzU4LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIC8vIHF1YW50aWZpZWQgd2l0aCBhIG1pbmltdW0gb2YgemVy
bykganVtcCBiYWNrIHRvIHRoZSBmb3J3YXJkcyBtYXRjaGluZwogICAgICAgICAgICAgICAgIC8v
IHBhdGggYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9wID0gbV9vcHNb
b3AubV9uZXh0T3BdOwotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1Rv
KGVuZE9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRo
ZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZDoKQEAgLTM0NjUsNDAgKzMzODgsNDAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CiAKICAg
ICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpG
aXhlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZt
X2ppdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0
UmVnID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgbmV3UGFyZW5Db250
ZXh0UmVnID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IG1f
cmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0
SGVhZEluZGV4KCksIGN1cnJQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVBhcmVuQ29udGV4dChjdXJyUGFyZW5Db250ZXh0
UmVnLCByZWdUMiwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRo
ZXNlcy5sYXN0U3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICByZXN0b3JlUGFyZW5Db250ZXh0KGN1cnJQYXJlbkNvbnRleHRSZWcsIG1f
cmVncy5yZWdUMiwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRo
ZXNlcy5sYXN0U3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZnJlZVBhcmVuQ29udGV4dChjdXJy
UGFyZW5Db250ZXh0UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUobmV3UGFyZW5Db250ZXh0UmVnLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpKTsK
IAotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50VGVtcG9yYXJ5ID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICBs
b2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFyeSk7Ci0gICAgICAgICAg
ICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50
VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgemVy
b0xlbmd0aE1hdGNoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBj
b3VudFRlbXBvcmFyeSk7CiAKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVtcG9yYXJ5KTsKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50VGVtcG9yYXJ5LCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7
CiAKLSAgICAgICAgICAgICAgICAgICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29wc1tvcC5tX25leHRPcF0ubV9y
ZWVudHJ5KTsKIAotICAgICAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0Y2gubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmxhZyBpbiB0aGUgc3RhY2tmcmFtZSBp
bmRpY2F0aW5nIHdlIGRpZG4ndCBydW4gdGhyb3VnaCB0aGUgc3VicGF0dGVybi4KLSAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXM6OmJlZ2luSW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAgICAg
ICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgR3JlZWR5LCBqdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVk
eSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrdHJhY2sgZnJvbSBhZnRlciB0
aGUgcGFyZW50aGVzZXMsIHdoZW4gc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aWxsIGp1bXAgYmFjayB0byBoZXJlLgotICAgICAgICAgICAgICAg
ICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
b3AubV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNTEz
LDcgKzM0MzYsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKICAgICAgICAg
ICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENv
dW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7
CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIApAQCAtMzUyMSw3ICszNDQ0LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZW50
aGVzZXMsIG9yIGlmIHdlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgY3VycmVudGx5
IGluIGEgc3RhdGUgd2hlcmUgd2UgaGFkIHNraXBwZWQgb3ZlciB0aGUgc3VicGF0dGVybgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gKGluIHdoaWNoIGNhc2UgdGhlIGZsYWcgdmFsdWUgb24g
dGhlIHN0YWNrIHdpbGwgYmUgLTEpLgotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcCBoYWRT
a2lwcGVkID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdp
bkluZGV4KCkpICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkU2tpcHBlZCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2
b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBHcmVlZHkgcGFyZW50aGVzZXMsIHdlIHNraXAgYWZ0ZXIgaGF2
aW5nIGFscmVhZHkgdHJpZWQgZ29pbmcKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRocm91
Z2ggdGhlIHN1YnBhdHRlcm4sIHNvIGlmIHdlIGdldCBoZXJlIHdlJ3JlIGRvbmUuCkBAIC0zNTM0
LDI0ICszNDU3LDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhdGguCiAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpO
b25HcmVlZHkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGJl
Z2luVGVtcG9yYXJ5ID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiZWdpblRlbXBvcmFyeSA9IG1fcmVncy5y
ZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpLCBiZWdpblRlbXBvcmFy
eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gzMihFcXVhbCwgYmVnaW5UZW1wb3Jh
cnksIFRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIGJlZ2luVGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSkubGlu
a1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBKdW1wTGlzdCBleGNlZWRlZE1hdGNoTGltaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZXhjZWVkZWRNYXRjaExpbWl0OwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmlu
aXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50
SW5kZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VlZGVkTWF0Y2hMaW1pdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBjb3VudFRlbXBv
cmFyeSwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGNvdW50VGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIoQWJvdmUsIGluZGV4LCBiZWdp
blRlbXBvcmFyeSkubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbV9yZWdz
LmluZGV4LCBiZWdpblRlbXBvcmFyeSkubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VlZGVkTWF0Y2hMaW1pdC5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0
cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNTczLDE3ICszNDk2LDE3IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBv
ZiBhIHBhcmVudGhldGljYWwgYXNzZXJ0aW9uIGlmIGVpdGhlciB3ZSBuZWVkIHRvIGNvcnJlY3QK
ICAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgaW5kZXgsIG9yIHRoZSBhc3NlcnRpb24gd2Fz
IGludmVydGVkLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0IHx8IHRlcm0t
PmludmVydCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygm
bV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAg
ICAgICAvLyBJbiBhbiBpbnZlcnRlZCBhc3NlcnRpb24gZmFpbHVyZSB0byBtYXRjaCB0aGUgc3Vi
cGF0dGVybgogICAgICAgICAgICAgICAgICAgICAvLyBpcyB0cmVhdGVkIGFzIGEgc3VjY2Vzc2Z1
bCBtYXRjaCAtIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8g
c3VicGF0dGVybi4gV2UgYWxyZWFkeSBoYXZlIGFkanVzdGVkIHRoZSBpbnB1dCBwb3NpdGlvbgog
ICAgICAgICAgICAgICAgICAgICAvLyBiYWNrIHRvIHRoYXQgYmVmb3JlIHRoZSBhc3NlcnRpb24s
IHdoaWNoIGlzIGNvcnJlY3QuCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAoZW5kT3AubV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoZW5kT3AubV9yZWVudHJ5KTsKIAogICAgICAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMzYwMiw3ICszNTI1LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIHRoaXMgYnVnIHRvbyAocHJlc3Vt
YWJseSBiZWNhdXNlIHRoZXkgdXNlIFlBUlIhKQogCiAgICAgICAgICAgICAgICAgLy8gTmV2ZXIg
YmFja3RyYWNrIGludG8gYW4gYXNzZXJ0aW9uOyBsYXRlciBmYWlsdXJlcyBiYWlsIHRvIGJlZm9y
ZSB0aGUgYmVnaW4uCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFj
a3RyYWNrc1RvSnVtcExpc3Qob3AubV9qdW1wcywgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3Qob3AubV9qdW1wcywgJm1f
aml0KTsKIAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2
aW91c09wXTsKICAgICAgICAgICAgICAgICBtX2NoZWNrZWRPZmZzZXQgLT0gbGFzdE9wLm1fY2hl
Y2tBZGp1c3Q7CkBAIC0zNjM3LDcgKzM1NjAsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcENvZGUgYWx0ZXJuYXRpdmVOZXh0T3BDb2Rl
ID0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OwogICAgICAgICBZYXJy
T3BDb2RlIGFsdGVybmF0aXZlRW5kT3BDb2RlID0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVkQWx0
ZXJuYXRpdmVFbmQ7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vy
c2UoKSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAg
ICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhlc2lz
TmVzdGVkVG9vRGVlcDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzc0OCw3
ICszNjcxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
IC8vIG9uY2UsIGFuZCB3aWxsIG5ldmVyIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIGFzc2VydGlv
bi4KICAgICB2b2lkIG9wQ29tcGlsZVBhcmVudGhldGljYWxBc3NlcnRpb24oUGF0dGVyblRlcm0q
IHRlcm0pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJz
ZSgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAg
ICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6UGFyZW50aGVzaXNO
ZXN0ZWRUb29EZWVwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODMzLDcg
KzM3NTYsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
Ly8gdG8gcmV0dXJuIHRoZSBmYWlsaW5nIHJlc3VsdC4KICAgICB2b2lkIG9wQ29tcGlsZUJvZHko
UGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
aXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRG
YWlsdXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3RlZFRvb0RlZXA7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTM4OTIsNiArMzgxNSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGlmIChjb2xsZWN0Qm95ZXJNb29yZUlu
Zm8oZGlzanVuY3Rpb24sIGN1cnJlbnRBbHRlcm5hdGl2ZUluZGV4LCBibUluZm8uZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgbV9vcHMubGFzdCgpLm1fYm1JbmZvID0gYm1JbmZvLnB0cigpOwog
ICAgICAgICAgICAgICAgIG1fYm1JbmZvcy5hcHBlbmQoV1RGTW92ZShibUluZm8pKTsKKyAgICAg
ICAgICAgICAgICBtX3VzZXNUMiA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApA
QCAtNDAwOCw4ICszOTMyLDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogCiAgICAgY29uc3QgQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSogZ2V0Qm95
ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1hcCkKICAgICB7Ci0g
ICAgICAgIGlmIChjb25zdCBhdXRvKiBleGlzdGluZ1BvaW50ZXIgPSBtX2NvZGVCbG9jay50cnlS
ZXVzZUJveWVyTW9vcmVCaXRtYXAobWFwKSkKLSAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUG9p
bnRlcjsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8qIGV4aXN0aW5nUG9pbnRlciA9IG1fYm95ZXJN
b29yZURhdGEtPnRyeVJldXNlQm95ZXJNb29yZUJpdG1hcChtYXApKQorICAgICAgICAgICAgcmV0
dXJuIGV4aXN0aW5nUG9pbnRlcjsKKwogICAgICAgICBhdXRvIGhlYXBNYXAgPSBtYWtlVW5pcXVl
UmVmPEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4obWFwKTsKICAgICAgICAgY29uc3QgYXV0byogcG9p
bnRlciA9IGhlYXBNYXAtPnN0b3JhZ2UoKTsKICAgICAgICAgbV9ibU1hcHMuYXBwZW5kKFdURk1v
dmUoaGVhcE1hcCkpOwpAQCAtNDAyNCw2NCArMzk0OSw2NCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgQVNTRVJUKG1fZGVjb2RlU3Vycm9nYXRl
UGFpcnMpOwogCi0gICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSA9IGxhYmVs
KCk7CisgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSA9IG1faml0LmxhYmVs
KCk7CiAKLSAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgICAgICBtX2ppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CiAKLSAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChyZWdUMCk7Cisg
ICAgICAgIHRyeVJlYWRVbmljb2RlQ2hhckltcGwobV9yZWdzLnJlZ1QwKTsKIAotICAgICAgICBy
ZXQoKTsKKyAgICAgICAgbV9qaXQucmV0KCk7CiAjZW5kaWYKICAgICB9CiAKICAgICB2b2lkIGdl
bmVyYXRlRW50ZXIoKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KQotICAgICAgICBwdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKLSAgICAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgWDg2UmVn
aXN0ZXJzOjplYnApOworICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4
NlJlZ2lzdGVyczo6ZWJwKTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUluaXRpYWxT
dGFydFZhbHVlKQotICAgICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OmVieCk7CisgICAgICAg
ICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKIAogI2lmIE9TKFdJTkRPV1MpCi0g
ICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplZGkpOworICAgICAgICBtX2ppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWRpKTsKICNlbmRpZgogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VY
UFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKSB7CiAj
aWYgT1MoV0lORE9XUykKLSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplc2kpOworICAg
ICAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVzaSk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTIpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZS
ZWdpc3RlcnM6OnIxMik7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIGlmIChtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6cjEzKTsK
LSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTQpOwotICAgICAgICAgICAgcHVzaChY
ODZSZWdpc3RlcnM6OnIxNSk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6
cjEzKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjpyMTQpOworICAgICAg
ICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OnIxNSk7CiAgICAgICAgIH0KICNpZiBPUyhX
SU5ET1dTKQogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5j
bHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVy
czo6ZWJwLCA2ICogc2l6ZW9mKHZvaWQqKSksIG91dHB1dCk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJwLCA2ICogc2l6
ZW9mKHZvaWQqKSksIG1fcmVncy5vdXRwdXQpOwogICAgICAgICAvLyByY3ggaXMgdGhlIHBvaW50
ZXIgdG8gdGhlIGFsbG9jYXRlZCBzcGFjZSBmb3IgcmVzdWx0IGluIHg2NCBXaW5kb3dzLgotICAg
ICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICAgICAgbV9qaXQucHVzaChYODZSZWdp
c3RlcnM6OmVjeCk7CiAjZW5kaWYKICNlbGlmIENQVShBUk02NCkKICAgICAgICAgaWYgKCFPcHRp
b25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAg
ICAgICAgICBtX2ppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgIGlmIChtX2RlY29kZVN1
cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVENhZ2UoKSkK
LSAgICAgICAgICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lz
dGVyKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4MTAwMDApLCBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGQ4MDApLCBs
ZWFkaW5nU3Vycm9nYXRlVGFnKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZGMw
MCksIHRyYWlsaW5nU3Vycm9nYXRlVGFnKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wdXNoUGFp
cihNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjps
aW5rUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDB4MTAwMDApLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZDgwMCks
IG1fcmVncy5sZWFkaW5nU3Vycm9nYXRlVGFnKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApLCBtX3JlZ3MudHJhaWxpbmdTdXJyb2dh
dGVUYWcpOwogICAgICAgICB9CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnI0KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI1KTsKLSAgICAg
ICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI4
KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnIxMCk7CisgICAgICAgIG1faml0LnB1c2go
QVJNUmVnaXN0ZXJzOjpyNCk7CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7
CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyNik7CisgICAgICAgIG1faml0LnB1
c2goQVJNUmVnaXN0ZXJzOjpyOCk7CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpy
MTApOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKQEAg
LTQwODksNzAgKzQwMTQsNzkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogCiAgICAgdm9pZCBnZW5lcmF0ZVJldHVybigpCiAgICAgeworI2lmIEVOQUJMRShZQVJS
X0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJ
VENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KSB7CisgICAgICAgICAgICBtX2lubGluZWRNYXRjaGVk
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisj
ZW5kaWYKKwogI2lmIENQVShYODZfNjQpCiAjaWYgT1MoV0lORE9XUykKICAgICAgICAgLy8gU3Rv
cmUgdGhlIHJldHVybiB2YWx1ZSBpbiB0aGUgYWxsb2NhdGVkIHNwYWNlIHBvaW50ZWQgYnkgcmN4
LgotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplY3gpOwotICAgICAgICBzdG9yZTY0KHJldHVy
blJlZ2lzdGVyLCBBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIHN0b3JlNjQo
cmV0dXJuUmVnaXN0ZXIyLCBBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWN4LCBzaXplb2Yodm9pZCop
KSk7Ci0gICAgICAgIG1vdmUoWDg2UmVnaXN0ZXJzOjplY3gsIHJldHVyblJlZ2lzdGVyKTsKKyAg
ICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICAgICAgc3RvcmU2NChtX3Jl
Z3MucmV0dXJuUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6
ZWN4KSk7CisgICAgICAgIHN0b3JlNjQobV9yZWdzLnJldHVyblJlZ2lzdGVyMiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplY3gsIHNpemVvZih2b2lkKikpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShYODZSZWdpc3RlcnM6OmVjeCwgbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsK
ICNlbmRpZgogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewotICAgICAgICAg
ICAgcG9wKFg4NlJlZ2lzdGVyczo6cjE1KTsKLSAgICAgICAgICAgIHBvcChYODZSZWdpc3RlcnM6
OnIxNCk7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpyMTMpOworICAgICAgICAgICAg
bV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjE1KTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZS
ZWdpc3RlcnM6OnIxNCk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjpyMTMp
OwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9O
UykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykgewotICAgICAgICAg
ICAgcG9wKFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZSZWdp
c3RlcnM6OnIxMik7CiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAgICAgIHBvcChYODZSZWdpc3Rl
cnM6OmVzaSk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJzOjplc2kpOwogI2Vu
ZGlmCiAgICAgICAgIH0KICNlbmRpZgogI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHBvcChYODZS
ZWdpc3RlcnM6OmVkaSk7CisgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OmVkaSk7CiAj
ZW5kaWYKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUluaXRpYWxTdGFydFZhbHVlKQot
ICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKLSAgICAgICAgcG9wKFg4NlJlZ2lz
dGVyczo6ZWJwKTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OmVieCk7Cisg
ICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCiAg
ICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgICAgICBwb3BQYWlyKGZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0LnBvcFBhaXIo
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6bGlu
a1JlZ2lzdGVyKTsKICAgICAgICAgfQogI2VsaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgICAgIHBv
cChBUk1SZWdpc3RlcnM6OnIxMCk7Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI4KTsKLSAg
ICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwotICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpy
NSk7Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyAgICAgICAgbV9qaXQucG9wKEFS
TVJlZ2lzdGVyczo6cjEwKTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJlZ2lzdGVyczo6cjgpOwor
ICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyNik7CisgICAgICAgIG1faml0LnBvcChB
Uk1SZWdpc3RlcnM6OnI1KTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJlZ2lzdGVyczo6cjQpOwog
I2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgogI2lmIENQVShB
Uk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICBm
YXJKdW1wKFRydXN0ZWRJbW1QdHIocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcs
IE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlUb1lhcnJKSVRBZnRlcikpLCBPcGVyYXRpb25QdHJU
YWcpOworICAgICAgICAgICAgbV9qaXQuZmFySnVtcChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgT3BlcmF0aW9uUHRyVGFn
Pigmdm1FbnRyeVRvWWFyckpJVEFmdGVyKSksIE9wZXJhdGlvblB0clRhZyk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJldCgpOworICAgICAgICAgICAgbV9qaXQucmV0KCk7CiAjZWxzZQot
ICAgICAgICByZXQoKTsKKyAgICAgICAgbV9qaXQucmV0KCk7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICB2b2lkIGxvYWRTdWJQYXR0ZXJuKFJlZ2lzdGVySUQgb3V0cHV0R1BSLCB1bnNpZ25lZCBzdWJw
YXR0ZXJuSWQsIFJlZ2lzdGVySUQgc3RhcnRJbmRleEdQUiwgUmVnaXN0ZXJJRCBlbmRJbmRleE9y
TGVuR1BSKQorICAgIHZvaWQgbG9hZFN1YlBhdHRlcm4oTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgb3V0cHV0R1BSLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHN0YXJ0SW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVuZEluZGV4
T3JMZW5HUFIpCiAgICAgewotICAgICAgICBsb2FkUGFpcjMyKG91dHB1dEdQUiwgVHJ1c3RlZElt
bTMyKChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHN0YXJ0SW5kZXhHUFIsIGVu
ZEluZGV4T3JMZW5HUFIpOworICAgICAgICBtX2ppdC5sb2FkUGFpcjMyKG91dHB1dEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigoc3VicGF0dGVybklkIDw8IDEpICogc2l6ZW9mKGlu
dCkpLCBzdGFydEluZGV4R1BSLCBlbmRJbmRleE9yTGVuR1BSKTsKICAgICB9CiAKIHB1YmxpYzoK
LSAgICBZYXJyR2VuZXJhdG9yKFZNKiB2bSwgWWFyclBhdHRlcm4mIHBhdHRlcm4sIFN0cmluZyYg
cGF0dGVyblN0cmluZywgWWFyckNvZGVCbG9jayYgY29kZUJsb2NrLCBDaGFyU2l6ZSBjaGFyU2l6
ZSwgSklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUpCi0gICAgICAgIDogbV92bSh2bSkKKyAgICBZ
YXJyR2VuZXJhdG9yKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNvbnN0IFZNKiB2bSwgWWFyckNvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBZYXJySklUUmVncyYgcmVncywgWWFyclBhdHRlcm4mIHBh
dHRlcm4sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hhclNpemUgY2hhclNpemUsIEpJ
VENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAg
LCBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBt
X3JlZ3MocmVncykKICAgICAgICAgLCBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX3Bh
dHRlcm5TdHJpbmcocGF0dGVyblN0cmluZykKLSAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCiAgICAgICAgICwgbV9jaGFyU2l6ZShjaGFyU2l6ZSkKICAgICAgICAgLCBtX2NvbXBpbGVN
b2RlKGNvbXBpbGVNb2RlKQogICAgICAgICAsIG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMobV9jaGFy
U2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjE2ICYmIG1fcGF0dGVybi51bmljb2RlKCkpCkBAIC00MTYz
LDExICs0MDk3LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3BhcmVuQ29udGV4dFNpemVzKGNv
bXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMgPyBtX3BhdHRl
cm4ubV9udW1TdWJwYXR0ZXJucyA6IDAsIG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6
ZSkKICNlbmRpZgogICAgIHsKKyAgICAgICAgbV9ib3llck1vb3JlRGF0YSA9IHN0YXRpY19jYXN0
PFlhcnJCb3llck1veWVyRGF0YSo+KG1fY29kZUJsb2NrKTsKKyAgICB9CisKKyAgICBZYXJyR2Vu
ZXJhdG9yKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNvbnN0IFZNKiB2bSwgWWFyckJveWVyTW95ZXJE
YXRhKiB5YXJyQk1EYXRhLCBjb25zdCBZYXJySklUUmVncyYgcmVncywgWWFyclBhdHRlcm4mIHBh
dHRlcm4sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hhclNpemUgY2hhclNpemUsIEpJ
VENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAg
LCBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKG51bGxwdHIpCisgICAgICAgICwgbV9i
b3llck1vb3JlRGF0YSh5YXJyQk1EYXRhKQorICAgICAgICAsIG1fcmVncyhyZWdzKQorICAgICAg
ICAsIG1fcGF0dGVybihwYXR0ZXJuKQorICAgICAgICAsIG1fcGF0dGVyblN0cmluZyhwYXR0ZXJu
U3RyaW5nKQorICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCisgICAgICAgICwgbV9jb21w
aWxlTW9kZShjb21waWxlTW9kZSkKKyAgICAgICAgLCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKG1f
Y2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXIxNiAmJiBtX3BhdHRlcm4udW5pY29kZSgpKQorICAg
ICAgICAsIG1fdW5pY29kZUlnbm9yZUNhc2UobV9wYXR0ZXJuLnVuaWNvZGUoKSAmJiBtX3BhdHRl
cm4uaWdub3JlQ2FzZSgpKQorICAgICAgICAsIG1fY2Fub25pY2FsTW9kZShtX3BhdHRlcm4udW5p
Y29kZSgpID8gQ2Fub25pY2FsTW9kZTo6VW5pY29kZSA6IENhbm9uaWNhbE1vZGU6OlVDUzIpCisj
aWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgICAgICwgbV9j
b250YWluc05lc3RlZFN1YnBhdHRlcm5zKGZhbHNlKQorICAgICAgICAsIG1fcGFyZW5Db250ZXh0
U2l6ZXMoY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyA/
IG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zIDogMCwgbV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxs
RnJhbWVTaXplKQorI2VuZGlmCisgICAgeworICAgICAgICBpZiAobV9wYXR0ZXJuLm1fY29udGFp
bnNCYWNrcmVmZXJlbmNlcykKKyAgICAgICAgICAgIG1fdXNlc1QyID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBib29sIGlzU2FmZVRvUmVjdXJzZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9j
b21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlcikKKyAgICAgICAgICAgIHJldHVybiBtX2NvbXBp
bGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLT5pc1NhZmVUb1JlY3Vyc2UoKTsKKworICAgICAgICBy
ZXR1cm4gbV92bS0+aXNTYWZlVG9SZWN1cnNlKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRTdGFj
a0NoZWNrZXIoU3RhY2tDaGVjayogc3RhY2tDaGVja2VyKQorICAgIHsKKyAgICAgICAgbV9jb21w
aWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciA9IHN0YWNrQ2hlY2tlcjsKICAgICB9CiAKLSAgICB2
b2lkIGNvbXBpbGUoKQorICAgIHZvaWQgY29tcGlsZShZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2sp
CiAgICAgewotICAgICAgICBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0T2ZNYWluQ29kZTsKIAogI2lmICFF
TkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2Rl
U3Vycm9nYXRlUGFpcnMpIHsKQEAgLTQxOTgsNyArNDE2OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxZYXJyRGlzYXNzZW1ibGVyPih0aGlzKTsK
IAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0U3RhcnRPZkNvZGUobV9qaXQubGFiZWwoKSk7CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxM
X1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0
ZXJucykKQEAgLTQyMDcsNDIgKzQxNzcsNDYgQEAgcHVibGljOgogCiAgICAgICAgIGdlbmVyYXRl
RW50ZXIoKTsKIAotICAgICAgICBKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOworICAgICAg
ICBzdGFydE9mTWFpbkNvZGUgPSBtX2ppdC5sYWJlbCgpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOwogICAgICAgICBnZW5lcmF0ZUZhaWxS
ZXR1cm4oKTsKLSAgICAgICAgaGFzSW5wdXQubGluayh0aGlzKTsKKyAgICAgICAgaGFzSW5wdXQu
bGluaygmbV9qaXQpOwogCiAgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0g
YWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNp
emUpOwogICAgICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgIC8v
IENoZWNrIHN0YWNrIHNpemUKLSAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWNhbGxG
cmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1jYWxsRnJhbWVT
aXplSW5CeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9yZWdz
LnJlZ1QwKTsKICNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQogICAgICAgICAgICAgLy8g
bWF0Y2hpbmdDb250ZXh0IGlzIHRoZSA1dGggYXJndW1lbnQsIGl0IGlzIGZvdW5kIG9uIHRoZSBz
dGFjay4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gcmVnVDE7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDcgKiBzaXplb2Yo
dm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5yZWdUMTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDcg
KiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKICNlbGlmIENQVShBUk1fVEhVTUIy
KSB8fCBDUFUoTUlQUykKICAgICAgICAgICAgIC8vIG1hdGNoaW5nQ29udGV4dCBpcyB0aGUgNXRo
IGFyZ3VtZW50LCBpdCBpcyBmb3VuZCBvbiB0aGUgc3RhY2suCi0gICAgICAgICAgICBSZWdpc3Rl
cklEIG1hdGNoaW5nQ29udGV4dCA9IHJlZ1QxOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQqKSksIG1hdGNoaW5nQ29udGV4
dCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRl
eHQgPSBtX3JlZ3MucmVnVDE7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgNCAqIHNp
emVvZih2b2lkKikpLCBtYXRjaGluZ0NvbnRleHQpOworI2Vsc2UKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5tYXRjaGluZ0Nv
bnRleHQ7CiAjZW5kaWYKLSAgICAgICAgICAgIEp1bXAgc3RhY2tPayA9IGJyYW5jaFB0cihCZWxv
d09yRXF1YWwsIEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6
Om9mZnNldE9mU3RhY2tMaW1pdCgpKSwgcmVnVDApOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc3RhY2tPayA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dP
ckVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5n
Q29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkpLCBtX3JlZ3MucmVnVDApOwogCiAg
ICAgICAgICAgICAvLyBFeGNlZWRlZCBzdGFjayBsaW1pdCwgcHVudCB0byB0aGUgaW50ZXJwcmV0
ZXIuCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNp
emVfdD4oSlNSZWdFeHBSZXN1bHQ6OkpJVENvZGVGYWlsdXJlKSksIHJldHVyblJlZ2lzdGVyKTsK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdpc3RlcjIpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigodm9pZCop
c3RhdGljX2Nhc3Q8c2l6ZV90PihKU1JlZ0V4cFJlc3VsdDo6SklUQ29kZUZhaWx1cmUpKSwgbV9y
ZWdzLnJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyMik7CiAgICAgICAgICAg
ICBnZW5lcmF0ZVJldHVybigpOwogCi0gICAgICAgICAgICBzdGFja09rLmxpbmsodGhpcyk7Ci0g
ICAgICAgICAgICBtb3ZlKHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICBzdGFja09rLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLnJl
Z1QwLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICB9CiAK
ICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1f
ZGVjb2RlU3Vycm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBnZXRFZmZlY3RpdmVBZGRyZXNzKEJh
c2VJbmRleChpbnB1dCwgbGVuZ3RoLCBUaW1lc1R3byksIGVuZE9mU3RyaW5nQWRkcmVzcyk7Cisg
ICAgICAgICAgICBtX2ppdC5nZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgobV9yZWdzLmlucHV0LCBtX3JlZ3MubGVuZ3RoLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNU
d28pLCBtX3JlZ3MuZW5kT2ZTdHJpbmdBZGRyZXNzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFlB
UlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2NvbnRhaW5zTmVz
dGVkU3VicGF0dGVybnMpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihtYXRjaExpbWl0
KSwgcmVtYWluaW5nTWF0Y2hDb3VudCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF0Y2hMaW1pdCksIG1fcmVncy5yZW1haW5pbmdNYXRjaENv
dW50KTsKICNlbmRpZgogCiAgICAgICAgIC8vIEluaXRpYWxpemUgc3VicGF0dGVybnMnIHN0YXJ0
cy4gQW5kIGluaXRpYWxpemUgbWF0Y2hTdGFydCBpZiBgIW1fcGF0dGVybi5tX2JvZHktPm1faGFz
Rml4ZWRTaXplYC4KQEAgLTQyNTEsMTQgKzQyMjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAg
dW5zaWduZWQgc3VicGF0dGVybklkID0gMDsKICAgICAgICAgICAgIC8vIEZpcnN0IHN1YnBhdHRl
cm5JZCdzIHN0YXJ0IGlzIGNvbmZpZ3VyZWQgdG8gYGluZGV4YCBpZiAhbV9wYXR0ZXJuLm1fYm9k
eS0+bV9oYXNGaXhlZFNpemUuCiAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1f
aGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7Cisg
ICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAg
ICAgICsrc3VicGF0dGVybklkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yICg7IHN1
YnBhdHRlcm5JZCA8IG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zICsgMTsgKytzdWJwYXR0ZXJu
SWQpCi0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoLTEpLCBBZGRyZXNzKG91
dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNp
emVvZihpbnQpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW1fcGF0dGVy
bi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQotICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQo
aW5kZXgpOworICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAg
ICAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCkBA
IC00MjcyLDQ1ICs0MjQ2LDYzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAKICAgICAgICAg
aWYgKG1fcGF0dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAgICAgICAgIG1vdmUo
aW5kZXgsIGluaXRpYWxTdGFydCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRl
eCwgbV9yZWdzLmluaXRpYWxTdGFydCk7CiAKICAgICAgICAgZ2VuZXJhdGUoKTsKICAgICAgICAg
aWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9m
R2VuZXJhdGUobGFiZWwoKSk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZH
ZW5lcmF0ZShtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgYmFja3RyYWNrKCk7CiAgICAgICAgIGlm
IChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkJh
Y2t0cmFjayhsYWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkJh
Y2t0cmFjayhtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBwdHJkaWZmX3QgY29kZVNpemUgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW4oc3RhcnRPZk1haW5Db2RlLCBtX2ppdC5s
YWJlbCgpKTsKKyAgICAgICAgYm9vbCBjYW5JbmxpbmUgPSBtX2NvbXBpbGVNb2RlICE9IEpJVENv
bXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMKKyAgICAgICAgICAgICYmICFtX3BhdHRlcm4u
Z2xvYmFsKCkgJiYgIW1fcGF0dGVybi5zdGlja3koKSAmJiAhbV9wYXR0ZXJuLnVuaWNvZGUoKQor
I2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgICAgICAgICAg
JiYgIW1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucworI2VuZGlmCisgICAgICAgICAgICAmJiAh
bV9wYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlczsKIAogICAgICAgICBnZW5lcmF0ZVRy
eVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKCk7CiAKICAgICAgICAgZ2VuZXJhdGVKSVRGYWls
UmV0dXJuKCk7CiAKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNz
ZW1ibGVyLT5zZXRFbmRPZkNvZGUobV9qaXQubGFiZWwoKSk7CiAKLSAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
WWFyckpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKGxpbmtCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICAgICAgY29kZUJsb2NrLnNldEZhbGxCYWNr
V2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJsZU1lbW9yeUFsbG9j
YXRpb25GYWlsdXJlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBiYWNrdHJh
Y2tSZWNvcmRzID0gbV9iYWNrdHJhY2tpbmdTdGF0ZS5iYWNrdHJhY2tSZWNvcmRzKCk7CisgICAg
ICAgIGlmICghYmFja3RyYWNrUmVjb3Jkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1faml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgIEJhY2t0cmFja2luZ1N0YXRlOjpsaW5rQmFja3RyYWNrUmVjb3JkcyhsaW5rQnVmZmVyLCBi
YWNrdHJhY2tSZWNvcmRzKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJI
ZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJFbnRyeSk7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxO
b1B0clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSk7CiAKLSAgICAg
ICAgICAgIGZvciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzKQot
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFkVW5pY29kZUNoYXJh
Y3RlckhlbHBlcik7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBtX3RyeVJlYWRV
bmljb2RlQ2hhcmFjdGVyQ2FsbHMpCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhjYWxsLCB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcik7CisgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMo
bGlua0J1ZmZlcik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihtX2ppdCwgUkVHRVhQ
X0NPREVfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OllhcnJKSVQsIEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7CisgICAgICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKEpJVEZhaWx1
cmVSZWFzb246OkV4ZWN1dGFibGVNZW1vcnlBbGxvY2F0aW9uRmFpbHVyZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAg
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChsaW5rQnVmZmVyKTsKIAogICAgICAgICBpZiAo
bV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6TWF0Y2hPbmx5KSB7Ci0gICAgICAgICAg
ICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpCisgICAgICAgICAgICBpZiAobV9j
aGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpIHsKICAgICAgICAgICAgICAgICBjb2RlQmxvY2su
c2V0OEJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlciwgWWFy
ck1hdGNoT25seThCaXRQdHJUYWcsICJNYXRjaC1vbmx5IDgtYml0IHJlZ3VsYXIgZXhwcmVzc2lv
biIpLCBXVEZNb3ZlKG1fYm1NYXBzKSk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgY29kZUJsb2NrLnNldDhCaXRJbmxpbmVTdGF0cyhjb2RlU2l6ZSwgY2FsbEZyYW1lU2l6ZUlu
Qnl0ZXMsIGNhbklubGluZSwgbV91c2VzVDIpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBjb2RlQmxvY2suc2V0MTZCaXRDb2RlTWF0Y2hPbmx5KEZJTkFMSVpFX1JFR0VY
UF9DT0RFKGxpbmtCdWZmZXIsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZywgIk1hdGNoLW9ubHkg
MTYtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCBXVEZNb3ZlKG1fYm1NYXBzKSk7CisgICAgICAg
ICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0SW5saW5lU3RhdHMoY29kZVNpemUsIGNhbGxGcmFt
ZVNpemVJbkJ5dGVzLCBjYW5JbmxpbmUsIG1fdXNlc1QyKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFy
OCkKICAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklOQUxJWkVfUkVHRVhQ
X0NPREUobGlua0J1ZmZlciwgWWFycjhCaXRQdHJUYWcsICI4LWJpdCByZWd1bGFyIGV4cHJlc3Np
b24iKSwgV1RGTW92ZShtX2JtTWFwcykpOwpAQCAtNDMyMSw2ICs0MzEzLDEwMiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbigqbV9m
YWlsdXJlUmVhc29uKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1Rf
SU5MSU5FKQorICAgIHZvaWQgY29tcGlsZUlubGluZShZYXJyQm95ZXJNb3llckRhdGEmIGJveWVy
TW9vcmVEYXRhKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGF0dGVybi5tX2Nv
bnRhaW5zQmFja3JlZmVyZW5jZXMpOworCisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSBi
ZWZvcmUgZ2VuZXJhdGluZyBjb2RlIHNpbmNlIHdlIHNldCBmbGFncyBiYXNlZCBvbiBjb21waWxh
dGlvbiB0aGF0CisgICAgICAgIC8vIGFyZSB1c2VkIGR1cmluZyBnZW5lcmF0aW9uLgorICAgICAg
ICBvcENvbXBpbGVCb2R5KG1fcGF0dGVybi5tX2JvZHkpOworCisjaWZuZGVmIEpJVF9VTklDT0RF
X0VYUFJFU1NJT05TCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlY29kZVN1cnJvZ2F0ZVBh
aXJzKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lP
TlMpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMp
OworI2VuZGlmCisKKyAgICAgICAgQVNTRVJUKCFtX2ZhaWx1cmVSZWFzb24pOworCisgICAgICAg
IGlmIChtX3VzZXNUMikKKyAgICAgICAgICAgIEFTU0VSVChtX3JlZ3MucmVnVDIgIT0gTWFjcm9B
c3NlbWJsZXI6OkludmFsaWRHUFJSZWcpOworCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlzYXNzZW1ibHkoKSkp
CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8WWFyckRpc2Fzc2VtYmxl
cj4odGhpcyk7CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKG1faml0LmxhYmVsKCkpOworCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOworICAgICAgICBnZW5l
cmF0ZUZhaWxSZXR1cm4oKTsKKyAgICAgICAgaGFzSW5wdXQubGluaygmbV9qaXQpOworCisgICAg
ICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxsRnJhbWVTaXplSW5C
eXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOworICAgICAgICBpZiAoY2Fs
bEZyYW1lU2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBzcGFjZSBvbiBzdGFj
ayBmb3IgbWF0Y2hpbmcgY29udGV4dCBkYXRhLgorICAgICAgICAgICAgbV9qaXQuYWRkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICB9CisKKyNpZmRlZiBKSVRfVU5JQ09ERV9FWFBSRVNTSU9O
UworICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKKyAgICAgICAgICAgIG1faml0
LmdldEVmZmVjdGl2ZUFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5w
dXQsIG1fcmVncy5sZW5ndGgsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIG1fcmVncy5lbmRP
ZlN0cmluZ0FkZHJlc3MpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVO
U19FWFBSRVNTSU9OUykKKyAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtYXRj
aExpbWl0KSwgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpOworI2VuZGlmCisKKyAgICAgICAg
aWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGF0dGVybi5tX251bVN1
YnBhdHRlcm5zICsgMTsgKytpKQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVn
cy5vdXRwdXQsIChpIDw8IDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpCisgICAgICAgICAgICBzZXRN
YXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CisKKyAgICAgICAgaWYgKG1fcGF0dGVybi5tX3NhdmVJ
bml0aWFsU3RhcnRWYWx1ZSkKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBt
X3JlZ3MuaW5pdGlhbFN0YXJ0KTsKKworICAgICAgICBnZW5lcmF0ZSgpOworICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZHZW5l
cmF0ZShtX2ppdC5sYWJlbCgpKTsKKyAgICAgICAgYmFja3RyYWNrKCk7CisgICAgICAgIGlmICht
X2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkJhY2t0
cmFjayhtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBnZW5lcmF0ZVRyeVJlYWRVbmljb2RlQ2hh
cmFjdGVySGVscGVyKCk7CisKKyAgICAgICAgZ2VuZXJhdGVKSVRGYWlsUmV0dXJuKCk7CisKKyAg
ICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEVuZE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBtX2lubGluZWRGYWlsZWRNYXRj
aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faW5saW5lZE1hdGNoZWQubGluaygmbV9qaXQpOwor
CisgICAgICAgIGF1dG8gYmFja3RyYWNrUmVjb3JkcyA9IG1fYmFja3RyYWNraW5nU3RhdGUuYmFj
a3RyYWNrUmVjb3JkcygpOworICAgICAgICBpZiAoIWJhY2t0cmFja1JlY29yZHMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICBCYWNrdHJhY2tpbmdTdGF0ZTo6bGlua0JhY2t0cmFj
a1JlY29yZHMobGlua0J1ZmZlciwgYmFja3RyYWNrUmVjb3Jkcyk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxz
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8Tm9Q
dHJUYWc+IHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPE5vUHRyVGFnPihtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnkpOworCisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMp
CisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFkVW5pY29k
ZUNoYXJhY3RlckhlbHBlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAg
IGJveWVyTW9vcmVEYXRhLnNhdmVNYXBzKFdURk1vdmUobV9ibU1hcHMpKTsKKyAgICB9CisjZW5k
aWYKKwogICAgIGNvbnN0IGNoYXIqIHZhcmlhbnQoKSBmaW5hbAogICAgIHsKICAgICAgICAgaWYg
KG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6Ok1hdGNoT25seSkgewpAQCAtNDUyNiwx
MiArNDYxNCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZNKiBtX3ZtOwor
ICAgIE1hY3JvQXNzZW1ibGVyJiBtX2ppdDsKKyAgICBjb25zdCBWTSogbV92bTsKKyAgICBZYXJy
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBZYXJyQm95ZXJNb3llckRhdGEqIG1fYm95ZXJN
b29yZURhdGE7CisgICAgY29uc3QgWWFyckpJVFJlZ3MmIG1fcmVnczsKIAorICAgIFN0YWNrQ2hl
Y2sqIG1fY29tcGlsYXRpb25UaHJlYWRTdGFja0NoZWNrZXIgeyBudWxscHRyIH07CiAgICAgWWFy
clBhdHRlcm4mIG1fcGF0dGVybjsKLSAgICBTdHJpbmcmIG1fcGF0dGVyblN0cmluZzsKKyAgICBj
b25zdCBTdHJpbmcmIG1fcGF0dGVyblN0cmluZzsKIAotICAgIFlhcnJDb2RlQmxvY2smIG1fY29k
ZUJsb2NrOwogICAgIENoYXJTaXplIG1fY2hhclNpemU7CiAgICAgSklUQ29tcGlsZU1vZGUgbV9j
b21waWxlTW9kZTsKIApAQCAtNDU0MSwxNSArNDYzMywxOSBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzOwogICAgIGJvb2wgbV91bmljb2RlSWdub3JlQ2FzZTsK
KyAgICBib29sIG1fdXNlc1QyOwogICAgIENhbm9uaWNhbE1vZGUgbV9jYW5vbmljYWxNb2RlOwog
I2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgIGJvb2wgbV9j
b250YWluc05lc3RlZFN1YnBhdHRlcm5zOwogICAgIFBhcmVuQ29udGV4dFNpemVzIG1fcGFyZW5D
b250ZXh0U2l6ZXM7CiAjZW5kaWYKLSAgICBKdW1wTGlzdCBtX2Fib3J0RXhlY3V0aW9uOwotICAg
IEp1bXBMaXN0IG1faGl0TWF0Y2hMaW1pdDsKLSAgICBWZWN0b3I8Q2FsbD4gbV90cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckNhbGxzOwotICAgIExhYmVsIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJF
bnRyeTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9hYm9ydEV4ZWN1dGlvbjsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9oaXRNYXRjaExpbWl0OworICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlcjo6Q2FsbD4gbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzOworICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnk7CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9pbmxpbmVkTWF0Y2hlZDsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9pbmxpbmVkRmFpbGVkTWF0Y2g7CiAKICAgICAvLyBUaGUg
cmVndWxhciBleHByZXNzaW9uIGV4cHJlc3NlZCBhcyBhIGxpbmVhciBzZXF1ZW5jZSBvZiBvcGVy
YXRpb25zLgogICAgIFZlY3RvcjxZYXJyT3AsIDEyOD4gbV9vcHM7CkBAIC00NjA2LDcgKzQ3MDIs
MTMgQEAgc3RhdGljIHZvaWQgZHVtcENvbXBpbGVGYWlsdXJlKEpJVEZhaWx1cgogCiB2b2lkIGpp
dENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hh
clNpemUgY2hhclNpemUsIFZNKiB2bSwgWWFyckNvZGVCbG9jayYgY29kZUJsb2NrLCBKSVRDb21w
aWxlTW9kZSBtb2RlKQogewotICAgIFlhcnJHZW5lcmF0b3Iodm0sIHBhdHRlcm4sIHBhdHRlcm5T
dHJpbmcsIGNvZGVCbG9jaywgY2hhclNpemUsIG1vZGUpLmNvbXBpbGUoKTsKKyAgICBNYWNyb0Fz
c2VtYmxlciBtYXNtOworCisgICAgQVNTRVJUKG1vZGUgPT0gSklUQ29tcGlsZU1vZGU6Ok1hdGNo
T25seSB8fCBtb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpOworCisg
ICAgWWFyckpJVERlZmF1bHRSZWdpc3RlcnMgaml0UmVnaXN0ZXJzOworICAgIFlhcnJHZW5lcmF0
b3I8WWFyckpJVERlZmF1bHRSZWdpc3RlcnM+KG1hc20sIHZtLCAmY29kZUJsb2NrLCBqaXRSZWdp
c3RlcnMsIHBhdHRlcm4sIHBhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCBtb2RlKS5jb21waWxlKGNv
ZGVCbG9jayk7CisKICAgICBpZiAoYXV0byBmYWlsdXJlUmVhc29uID0gY29kZUJsb2NrLmZhaWx1
cmVSZWFzb24oKSkgewogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcENvbXBpbGVk
UmVnRXhwUGF0dGVybnMoKSkpIHsKICAgICAgICAgICAgIHBhdHRlcm4uZHVtcFBhdHRlcm5TdHJp
bmcoV1RGOjpkYXRhRmlsZSgpLCBwYXR0ZXJuU3RyaW5nKTsKQEAgLTQ2MTYsNiArNDcxOCwyMiBA
QCB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFN0CiAgICAgfQogfQogCisj
aWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKyNpZiAhQ1BVKEFSTTY0KSAm
JiAhQ1BVKFg4Nl82NCkgfHwgT1MoV0lORE9XUykKKyNlcnJvciAiTm8gc3VwcG9ydCBmb3IgaW5s
aW5lZCBKSVQnaW5nIG9mIFJlZ0V4cC50ZXN0IGZvciB0aGlzIENQVSAvIE9TIGNvbWJpbmF0aW9u
LiIKKyNlbmRpZgorCit2b2lkIGppdENvbXBpbGVJbmxpbmVkVGVzdChTdGFja0NoZWNrKiBtX2Nv
bXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLCBjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcs
IE9wdGlvblNldDxZYXJyOjpGbGFncz4gZmxhZ3MsIENoYXJTaXplIGNoYXJTaXplLCBjb25zdCBW
TSogdm0sIFlhcnJCb3llck1veWVyRGF0YSYgYm95ZXJNb29yZURhdGEsIE1hY3JvQXNzZW1ibGVy
JiBqaXQsIFlhcnJKSVRSZWdpc3RlcnMmIGppdFJlZ2lzdGVycykKK3sKKyAgICBZYXJyOjpFcnJv
ckNvZGUgZXJyb3JDb2RlOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4ocGF0dGVyblN0
cmluZywgZmxhZ3MsIGVycm9yQ29kZSk7CisKKyAgICBZYXJyR2VuZXJhdG9yPFlhcnJKSVRSZWdp
c3RlcnM+IHlhcnJHZW5lcmF0b3Ioaml0LCB2bSwgJmJveWVyTW9vcmVEYXRhLCBqaXRSZWdpc3Rl
cnMsIHBhdHRlcm4sIHBhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCBKSVRDb21waWxlTW9kZTo6SW5s
aW5lVGVzdCk7CisgICAgeWFyckdlbmVyYXRvci5zZXRTdGFja0NoZWNrZXIobV9jb21waWxhdGlv
blRocmVhZFN0YWNrQ2hlY2tlcik7CisgICAgeWFyckdlbmVyYXRvci5jb21waWxlSW5saW5lKGJv
eWVyTW9vcmVEYXRhKTsKK30KKyNlbmRpZgorCiB9fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsMTAg
QEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyUGF0
dGVybi5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja0NoZWNr
Lmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjZGVmaW5lIFlBUlJfQ0FMTApAQCAt
NDMsNiArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVk07CiBjbGFzcyBFeGVjdXRh
YmxlUG9vbDsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyOwogCiBuYW1lc3BhY2UgWWFyciB7CiAKQEAg
LTE5OSw3ICsyMDIsNzIgQEAgZXh0ZXJuICJDIiBFbmNvZGVkTWF0Y2hSZXN1bHQgdm1FbnRyeVRv
WQogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb1lhcnJKSVRBZnRlcih2b2lkKTsKICNlbmRpZgog
Ci1jbGFzcyBZYXJyQ29kZUJsb2NrIHsKK2NsYXNzIFlhcnJCb3llck1veWVyRGF0YSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWWFyckJv
eWVyTW95ZXJEYXRhKTsKKworcHVibGljOgorICAgIFlhcnJCb3llck1veWVyRGF0YSgpID0gZGVm
YXVsdDsKKworICAgIHZvaWQgc2F2ZU1hcHMoVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0
bWFwOjpNYXA+PiBtYXBzKQorICAgIHsKKyAgICAgICAgbV9tYXBzLnJlc2VydmVDYXBhY2l0eSht
X21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIG1fbWFwcy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgIH0KKworICAgIHZvaWQg
Y2xlYXJNYXBzKCkKKyAgICB7CisgICAgICAgIG1fbWFwcy5jbGVhcigpOworICAgIH0KKworICAg
IGNvbnN0IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUqIHRyeVJldXNlQm95ZXJNb29y
ZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1hcCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byYgc3RvcmVkIDogbV9tYXBzKSB7CisgICAgICAgICAgICBpZiAoc3Rv
cmVkLmdldCgpID09IG1hcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVkLT5zdG9yYWdl
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbV9tYXBzOwor
fTsKKworY2xhc3MgWWFyckNvZGVCbG9jayA6IHB1YmxpYyBZYXJyQm95ZXJNb3llckRhdGEgewor
ICAgIHN0cnVjdCBJbmxpbmVTdGF0cyB7CisgICAgICAgIElubGluZVN0YXRzKCkKKyAgICAgICAg
ICAgIDogbV9pbnNuQ291bnQoMCkKKyAgICAgICAgICAgICwgbV9zdGFja1NpemUoMCkKKyAgICAg
ICAgICAgICwgbV9uZWVkc1RlbXAyKGZhbHNlKQorICAgICAgICAgICAgLCBtX2NhbklubGluZShm
YWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXQodW5zaWduZWQg
aW5zbkNvdW50LCB1bnNpZ25lZCBzdGFja1NpemUsIGJvb2wgY2FuSW5saW5lLCBib29sIG5lZWRz
VGVtcDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5zbkNvdW50PSBpbnNuQ291bnQ7Cisg
ICAgICAgICAgICBtX3N0YWNrU2l6ZSA9IHN0YWNrU2l6ZTsKKyAgICAgICAgICAgIG1fbmVlZHNU
ZW1wMiA9IG5lZWRzVGVtcDI7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgICAgICAgICAgbV9jYW5JbmxpbmUgPSBjYW5JbmxpbmU7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
Y29kZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc25Db3VudDsgfQorICAgICAgICB1bnNpZ25l
ZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorICAgICAgICBib29s
IGNhbklubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuSW5saW5lOyB9CisgICAgICAgIGJvb2wg
bmVlZHNUZW1wMigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNUZW1wMjsgfQorCisgICAgICAgIHVu
c2lnbmVkIG1faW5zbkNvdW50OworICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZSA6IDMwOwor
ICAgICAgICBib29sIG1fbmVlZHNUZW1wMiA6IDE7CisgICAgICAgIGJvb2wgbV9jYW5JbmxpbmUg
OiAxOworICAgIH07CisKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShZYXJyQ29kZUJsb2NrKTsKIApAQCAtMjE5LDE2ICsyODcsMTIgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnI4Qml0
UHRyVGFnPiByZWYsIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFwPj4gbWFw
cykKICAgICB7CiAgICAgICAgIG1fcmVmOCA9IHJlZjsKLSAgICAgICAgbV9tYXBzLnJlc2VydmVD
YXBhY2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgICAg
IG1fbWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgICAgICBz
YXZlTWFwcyhXVEZNb3ZlKG1hcHMpKTsKICAgICB9CiAgICAgdm9pZCBzZXQxNkJpdENvZGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJpdFB0clRhZz4gcmVmLCBWZWN0b3I8VW5pcXVlUmVm
PEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4+IG1hcHMpCiAgICAgewogICAgICAgICBtX3JlZjE2ID0g
cmVmOwotICAgICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBtYXBz
LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHMu
c2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKG1hcHNbaW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwogICAg
IH0KIAogICAgIGJvb2wgaGFzOEJpdENvZGVNYXRjaE9ubHkoKSB7IHJldHVybiBtX21hdGNoT25s
eTguc2l6ZSgpOyB9CkBAIC0yMzYsMTYgKzMwMCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXQ4
Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25seThCaXRQ
dHJUYWc+IG1hdGNoT25seSwgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3JlQml0bWFwOjpNYXA+
PiBtYXBzKQogICAgIHsKICAgICAgICAgbV9tYXRjaE9ubHk4ID0gbWF0Y2hPbmx5OwotICAgICAg
ICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBtYXBzLnNpemUoKSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHMuc2l6ZSgpOyArK2lu
ZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG1hcHNbaW5k
ZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwogICAgIH0KICAgICB2b2lk
IHNldDE2Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1hdGNoT25s
eTE2Qml0UHRyVGFnPiBtYXRjaE9ubHksIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1h
cDo6TWFwPj4gbWFwcykKICAgICB7CiAgICAgICAgIG1fbWF0Y2hPbmx5MTYgPSBtYXRjaE9ubHk7
Ci0gICAgICAgIG1fbWFwcy5yZXNlcnZlQ2FwYWNpdHkobV9tYXBzLnNpemUoKSArIG1hcHMuc2l6
ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWFwcy5zaXpl
KCk7ICsraW5kZXgpCi0gICAgICAgICAgICBtX21hcHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
bWFwc1tpbmRleF0pKTsKKyAgICAgICAgc2F2ZU1hcHMoV1RGTW92ZShtYXBzKSk7CiAgICAgfQog
CiAgICAgYm9vbCB1c2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IHJldHVybiBtX3VzZXNQYXR0
ZXJuQ29udGV4dEJ1ZmZlcjsgfQpAQCAtMjUzLDYgKzMxMywxOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRVc2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1BhdHRlcm5Db250ZXh0QnVm
ZmVyID0gdHJ1ZTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIHNldDhCaXRJbmxpbmVTdGF0cyh1bnNp
Z25lZCBpbnNuQ291bnQsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgYm9vbCBjYW5JbmxpbmUsIGJvb2wg
bmVlZHNUMikKKyAgICB7CisgICAgICAgIG1fbWF0Y2hPbmx5OFN0YXRzLnNldChpbnNuQ291bnQs
IHN0YWNrU2l6ZSwgY2FuSW5saW5lLCBuZWVkc1QyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDE2
Qml0SW5saW5lU3RhdHModW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25lZCBzdGFja1NpemUsIGJv
b2wgY2FuSW5saW5lLCBib29sIG5lZWRzVDIpCisgICAgeworICAgICAgICBtX21hdGNoT25seTE2
U3RhdHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUsIG5lZWRzVDIpOworICAg
IH0KKworICAgIElubGluZVN0YXRzJiBnZXQ4Qml0SW5saW5lU3RhdHMoKSB7IHJldHVybiBtX21h
dGNoT25seThTdGF0czsgfQorICAgIElubGluZVN0YXRzJiBnZXQxNkJpdElubGluZVN0YXRzKCkg
eyByZXR1cm4gIG1fbWF0Y2hPbmx5MTZTdGF0czsgfQorCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0
ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGlu
dCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXImIG1hdGNoaW5nQ29udGV4dCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKQEAgLTMzOCwxNyArNDExLDggQEAgcHVi
bGljOgogICAgICAgICBtX3JlZjE2ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJpdFB0
clRhZz4oKTsKICAgICAgICAgbV9tYXRjaE9ubHk4ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlh
cnJNYXRjaE9ubHk4Qml0UHRyVGFnPigpOwogICAgICAgICBtX21hdGNoT25seTE2ID0gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4oKTsKLSAgICAgICAgbV9t
YXBzLmNsZWFyKCk7CiAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IHN0ZDo6bnVsbG9wdDsKLSAg
ICB9Ci0KLSAgICBjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXA6OldvcmRUeXBlKiB0cnlSZXVz
ZUJveWVyTW9vcmVCaXRtYXAoY29uc3QgQm95ZXJNb29yZUJpdG1hcDo6TWFwJiBtYXApIGNvbnN0
Ci0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0b3JlZCA6IG1fbWFwcykgewotICAgICAgICAg
ICAgaWYgKHN0b3JlZC5nZXQoKSA9PSBtYXApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3Jl
ZC0+c3RvcmFnZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBjbGVhck1hcHMoKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTYsMTcgKzQyMCwyOCBAQCBw
cml2YXRlOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQdHJUYWc+IG1fcmVm
MTY7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPiBt
X21hdGNoT25seTg7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJp
dFB0clRhZz4gbV9tYXRjaE9ubHkxNjsKLSAgICBWZWN0b3I8VW5pcXVlUmVmPEJveWVyTW9vcmVC
aXRtYXA6Ok1hcD4+IG1fbWFwczsKKyAgICBJbmxpbmVTdGF0cyBtX21hdGNoT25seThTdGF0czsK
KyAgICBJbmxpbmVTdGF0cyBtX21hdGNoT25seTE2U3RhdHM7CisKICAgICBib29sIG1fdXNlc1Bh
dHRlcm5Db250ZXh0QnVmZmVyIHsgZmFsc2UgfTsKICAgICBzdGQ6Om9wdGlvbmFsPEpJVEZhaWx1
cmVSZWFzb24+IG1fZmFpbHVyZVJlYXNvbjsKIH07CiAKIGVudW0gY2xhc3MgSklUQ29tcGlsZU1v
ZGUgOiB1aW50OF90IHsKICAgICBNYXRjaE9ubHksCi0gICAgSW5jbHVkZVN1YnBhdHRlcm5zCisg
ICAgSW5jbHVkZVN1YnBhdHRlcm5zLAorICAgIElubGluZVRlc3QKIH07CiB2b2lkIGppdENvbXBp
bGUoWWFyclBhdHRlcm4mLCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJTaXplLCBWTSosIFlh
cnJDb2RlQmxvY2smIGppdE9iamVjdCwgSklUQ29tcGlsZU1vZGUpOwogCisjaWYgRU5BQkxFKFlB
UlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKworCitjbGFzcyBZYXJySklUUmVnaXN0ZXJzOwor
Cit2b2lkIGppdENvbXBpbGVJbmxpbmVkVGVzdChTdGFja0NoZWNrKiwgY29uc3QgU3RyaW5nJiwg
T3B0aW9uU2V0PFlhcnI6OkZsYWdzPiwgQ2hhclNpemUsIGNvbnN0IFZNKiwgWWFyckJveWVyTW95
ZXJEYXRhJiwgTWFjcm9Bc3NlbWJsZXImLCBZYXJySklUUmVnaXN0ZXJzJik7CisjZW5kaWYKKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OllhcnIKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklUUmVnaXN0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lzdGVycy5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShZQVJSX0pJVCkKKworI2luY2x1
ZGUgIkdQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBZYXJyIHsKKwor
c3RydWN0IFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzIHsKK3B1YmxpYzoKKyNpZiBDUFUoQVJNX1RI
VU1CMikKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbnB1dCA9IEFSTVJlZ2lzdGVyczo6
cjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5kZXggPSBBUk1SZWdpc3RlcnM6OnIx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGxlbmd0aCA9IEFSTVJlZ2lzdGVyczo6cjI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgb3V0cHV0ID0gQVJNUmVnaXN0ZXJzOjpyMzsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlZ1QwID0gQVJNUmVnaXN0ZXJzOjpyNDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdUMSA9IEFSTVJlZ2lzdGVyczo6cjU7Cisg
ICAgLy8gcjYgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyQVJNdjcsCisgICAgLy8gcjcg
aXMgZnAuCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDIgPSBBUk1SZWdpc3RlcnM6
OnI4OworICAgIC8vIHI5IGlzIHNiIGluIEVBQkkuCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgaW5pdGlhbFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7IC8vIHIxMCBpcyBTTCwgYnV0IG5v
IGxvbmdlciBhIHNwZWNpYWwgcmVnaXN0ZXIuCisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXR1cm5SZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIyID0gQVJNUmVnaXN0ZXJzOjpyMTsKKworI2VsaWYgQ1BV
KEFSTTY0KQorICAgIC8vIEFyZ3VtZW50IHJlZ2lzdGVycworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGlucHV0ID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGluZGV4ID0gQVJNNjRSZWdpc3RlcnM6OngxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGxlbmd0aCA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgbWF0Y2hpbmdDb250ZXh0ID0gQVJNNjRSZWdpc3RlcnM6Ong0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGZyZWVsaXN0UmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDQ7
IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3Vl
LgorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gQVJN
NjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCisg
ICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdU
MCA9IEFSTTY0UmVnaXN0ZXJzOjp4NjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdU
MSA9IEFSTTY0UmVnaXN0ZXJzOjp4NzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdU
MiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZW1h
aW5pbmdNYXRjaENvdW50ID0gQVJNNjRSZWdpc3RlcnM6Ong5OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsID0gQVJNNjRSZWdpc3RlcnM6OngxMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB1bmljb2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJz
Ojp4NTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbml0aWFsU3RhcnQgPSBBUk02NFJl
Z2lzdGVyczo6eDExOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN1cHBsZW1lbnRhcnlQ
bGFuZXNCYXNlID0gQVJNNjRSZWdpc3RlcnM6OngxMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBsZWFkaW5nU3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IEFSTTY0UmVnaXN0ZXJz
Ojp4MTQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZW5kT2ZTdHJpbmdBZGRyZXNzID0g
QVJNNjRSZWdpc3RlcnM6OngxNTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJldHVy
blJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJldHVyblJlZ2lzdGVyMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0g
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGZmZmZmYzAwKTsKKyNlbGlmIENQVShNSVBT
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGlucHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5kZXggPSBNSVBTUmVnaXN0ZXJzOjphMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBsZW5ndGggPSBNSVBTUmVnaXN0ZXJzOjphMjsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsK
KworICAgIC8vIHQwIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCisgICAgLy8g
dDEgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6dDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBpbml0aWFsU3RhcnQgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIyID0gTUlQU1JlZ2lzdGVyczo6
djE7CisKKyNlbGlmIENQVShYODZfNjQpCisjaWYgIU9TKFdJTkRPV1MpCisgICAgLy8gQXJndW1l
bnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5wdXQgPSBYODZSZWdp
c3RlcnM6OmVkaTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbmRleCA9IFg4NlJlZ2lz
dGVyczo6ZXNpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGxlbmd0aCA9IFg4NlJlZ2lz
dGVyczo6ZWR4OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIG91dHB1dCA9IFg4NlJlZ2lz
dGVyczo6ZWN4OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIG1hdGNoaW5nQ29udGV4dCA9
IFg4NlJlZ2lzdGVyczo6cjg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZnJlZWxpc3RS
ZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0Nv
bnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyOTsgLy8gT25seSB1c2VkIGR1
cmluZyBpbml0aWFsaXphdGlvbi4KKyNlbHNlCisgICAgLy8gSWYgdGhlIHJldHVybiB2YWx1ZSBk
b2Vzbid0IGZpdCBpbiA2NGJpdHMsIGl0cyBkZXN0aW5hdGlvbiBpcyBwb2ludGVkIGJ5IHJjeCBh
bmQgdGhlIHBhcmFtZXRlcnMgYXJlIHNoaWZ0ZWQuCisgICAgLy8gaHR0cDovL21zZG4ubWljcm9z
b2Z0LmNvbS9lbi11cy9saWJyYXJ5Lzc1NzJ6dHo0LmFzcHgKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihNYXRjaFJlc3VsdCkgPiBzaXplb2Yodm9pZCopLCAiTWF0Y2hSZXN1bHQgZG9lcyBub3Qg
Zml0IGluIDY0Yml0cyIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGlucHV0ID0gWDg2
UmVnaXN0ZXJzOjplZHg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5kZXggPSBYODZS
ZWdpc3RlcnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGxlbmd0aCA9IFg4NlJl
Z2lzdGVyczo6cjk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgb3V0cHV0ID0gWDg2UmVn
aXN0ZXJzOjpyMTA7CisjZW5kaWYKKworICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVheDsKKyNpZiAhT1Mo
V0lORE9XUykKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdUMSA9IFg4NlJlZ2lzdGVy
czo6cjk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDIgPSBYODZSZWdpc3RlcnM6
OnIxMDsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDEgPSBYODZSZWdp
c3RlcnM6OmVjeDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdUMiA9IFg4NlJlZ2lz
dGVyczo6ZWRpOworI2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbml0aWFs
U3RhcnQgPSBYODZSZWdpc3RlcnM6OmVieDsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjpyMTI7
CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlbWFpbmluZ01hdGNoQ291bnQg
PSBYODZSZWdpc3RlcnM6OmVzaTsKKyNlbmRpZgorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsID0gWDg2UmVnaXN0ZXJzOjpyMTM7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgdW5pY29kZVRlbXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBlbmRPZlN0cmluZ0FkZHJlc3MgPSBYODZSZWdpc3RlcnM6
OnIxNTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJldHVyblJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjplYXg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmV0dXJuUmVnaXN0
ZXIyID0gWDg2UmVnaXN0ZXJzOjplZHg7CisKKyAgICBzdGF0aWMgY29uc3RleHByIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMHhkYzAwKTsKKyAgICBzdGF0aWMgY29uc3RleHByIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIgc3Vycm9nYXRlVGFnTWFzayA9IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMHhmZmZmZmMwMCk7CisjZW5kaWYKK307CisKKyNpZiBFTkFCTEUoWUFSUl9KSVRf
UkVHRVhQX1RFU1RfSU5MSU5FKQorY2xhc3MgWWFyckpJVFJlZ2lzdGVycyB7CitwdWJsaWM6Cisg
ICAgWWFyckpJVFJlZ2lzdGVycygpCisgICAgeworICAgIH0KKworICAgIC8vIEFyZ3VtZW50IHJl
Z2lzdGVycworICAgIEdQUlJlZyBpbnB1dCB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcg
aW5kZXggeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIGxlbmd0aCB7IEludmFsaWRHUFJS
ZWcgfTsKKyAgICBHUFJSZWcgb3V0cHV0IHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyBt
YXRjaGluZ0NvbnRleHQgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIGZyZWVsaXN0UmVn
aXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIGZyZWVsaXN0U2l6ZVJlZ2lzdGVy
IHsgSW52YWxpZEdQUlJlZyB9OworCisgICAgR1BSUmVnIHJldHVyblJlZ2lzdGVyIHsgSW52YWxp
ZEdQUlJlZyB9OworICAgIEdQUlJlZyByZXR1cm5SZWdpc3RlcjIgeyBJbnZhbGlkR1BSUmVnIH07
CisKKyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIEdQUlJlZyByZWdUMCB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBHUFJSZWcgcmVnVDEgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVn
IHJlZ1QyIHsgSW52YWxpZEdQUlJlZyB9OworCisgICAgLy8gVW5pY29kZSBjaGFyYWN0ZXIgcHJv
Y2Vzc2luZworICAgIEdQUlJlZyBpbml0aWFsU3RhcnQgeyBJbnZhbGlkR1BSUmVnIH07CisgICAg
R1BSUmVnIHJlbWFpbmluZ01hdGNoQ291bnQgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVn
IHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyB1
bmljb2RlVGVtcCB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgZW5kT2ZTdHJpbmdBZGRy
ZXNzIHsgSW52YWxpZEdQUlJlZyB9OworCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMHgxMDAwMCk7CisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBs
ZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGQ4MDAp
OworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgdHJhaWxpbmdTdXJyb2dh
dGVUYWcgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZGMwMCk7Cit9OworI2VuZGlm
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCisKKyNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQ
ZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0xMC0xOSAg
TWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgUmVn
RXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IFNh
YW0gQmFyYXRpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGVuYWJsZW1lbnQ6IEVOQUJMRV9ZQVJS
X0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5h
YmxlLmg6CisKIDIwMjEtMTAtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdHJpbmdCdWZmZXIgc2hvdWxkIHJlYWxseSBrbm93IHRoYXQgc3RyaW5ncyBtaWdo
dCBiZSA4LWJpdApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCShyZXZpc2lvbiAyODQ0NjMp
CisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NDcsNiArNzQ3LDcgQEAKIC8qIEVuYWJsZSBKSVQnaW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgdGhh
dCBoYXZlIG5lc3RlZCBwYXJlbnRoZXNpcyAuICovCiAjaWYgRU5BQkxFKFlBUlJfSklUKSAmJiAo
Q1BVKEFSTTY0KSB8fCAoQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1MpKSkKICNkZWZpbmUgRU5B
QkxFX1lBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMgMQorI2RlZmluZSBFTkFCTEVfWUFS
Ul9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FIDEKICNlbmRpZgogCiAvKiBFbmFibGUgSklUJ2luZyBS
ZWd1bGFyIEV4cHJlc3Npb25zIHRoYXQgaGF2ZSBuZXN0ZWQgYmFjayByZWZlcmVuY2VzLiAqLwo=
</data>
<flag name="commit-queue"
          id="466105"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441759</attachid>
            <date>2021-10-19 11:05:32 -0700</date>
            <delta_ts>2021-10-19 11:05:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>230469-7.patch</filename>
            <type>text/plain</type>
            <size>258734</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODQ0NjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIxLTEwLTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIElubGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5k
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMw
NDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgTmV3IG1p
Y3JvYmVuY2htYXJrLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0LWlu
bGluZWQuanM6IEFkZGVkLgorCiAyMDIxLTEwLTE4ICBQaGlsbGlwIE1hdGVzICA8cG1hdGVzQGln
YWxpYS5jb20+CiAKICAgICAgICAgVGVzdCBjb3ZlcmFnZSBmb3IgSlNDIHNoYWRvdyByZWFsbXMg
aW1wbGVtZW50YXRpb24KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZ2V4cC10ZXN0
LWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVnZXhw
LXRlc3QtaW5saW5lZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9yZWdleHAtdGVzdC1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
Ky8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2VyaWVzIDMiCisoZnVuY3Rpb24o
KSB7CisgICAgbGV0IHN0cmluZ3MgPSBbICJ0aGVtIiwgInRoZXJlIiwgInRoZXkiLCAiYW50aGVt
IiwgImFtcGhpdGhlYXRlciIsICJib3RoZXIiLCAiYW5vdGhlciIsICJicm90aGVyIiwgImFwb3Ro
ZWNhcnkiLCAiYW5hdGhlbWEiXTsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAgICBsZXQgbiA9IDEw
MDAwMDAwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICByZXN1bHQg
Kz0gL3RoZS8udGVzdChzdHJpbmdzW2kgJSAxMF0pOworICAgIGlmIChyZXN1bHQgIT0gbikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIx
LTEwLTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIElu
bGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwNDY5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgUmVzdHJ1Y3R1cmVkIFlhcnJKSVQgZnJvbSBp
bmhlcml0aW5nIGZyb20gTWFjcm9Bc3NlbWJsZXIgdG8gaGF2aW5nIGEgTWFjcm9Bc3NlbWJsZXIK
KyAgICAgICAgbWVtYmVyLiAgQWRkZWQgYSBuZXcgcGF0aCB0byBZYXJyIEpJVCBjb2RlIHRvIGNv
bXBpbGUgaW5saW5lIGNvZGUgYnkgY2hhbmdpbmcgaG93IHRoZQorICAgICAgICBjb2RlIGlzIGVu
dGVyZWQgYW5kIGV4aXRlZC4gIEFkZGVkIHN0YXRpc3RpYyB0byB0aGUgbm9ybWFsIGNvbXBpbGF0
aW9uIHBhdGggdG8gcmVjb3JkCisgICAgICAgIHRoZSBzaXplIG9mIHRoZSBtYXRjaGluZyBjb2Rl
IGdlbmVyYXRlZCwgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBuZWVkZWQsIGFuZCBpZgorICAg
ICAgICB0aGUgY29kZSBjYW4gYmUgaW5saW5lZC4gIFRoaXMgcGF0Y2ggb25seSBpbmxpbmVzIDhi
aXQgY29kZSwgYXMgdGhpcyBzZWVtcyB0byBjb3ZlcgorICAgICAgICB0aGUgbW9zdCBjb21tb24g
cGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNhc2VzLiAgQWRkaW5nIDE2IGJpdCwgbm9uLVVuaWNvZGUg
aW5saW5pbmcKKyAgICAgICAgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIGNvZGUgaXMg
c3RydWN0dXJlZCB0byB0YWtlIHRoZSBpbmxpbmVkIHBhdGggZm9yIHRoZQorICAgICAgICBjYXNl
IG9mIG5vbi1yb3BlIHN0cmluZyBhcmd1bWVudHMuICBGb3Igb3RoZXIgY2FzZXMsIHdlIGZhbGwg
YmFjayB0byBjYWxsaW5nIG91dAorICAgICAgICB0byBDKysgcGF0aHMuCisKKyAgICAgICAgSGVy
ZSBhcmUgdGhlIHBlcmYgcmVzdWx0cyBydW5uaW5nIHRoZSBuZXdseSBhZGRlZCByZWdleHAtdGVz
dC1pbmxpbmVkIG1pY3JvCisgICAgICAgIGJlbmNobWFyayAodGltZSBpbiBtc2VjKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEJhc2VsaW5lICAgICAgIFdpdGggdGhpcyBwYXRjaCAgICAgUmVz
dWx0CisgICAgICAgICAgICBBUk02NCAgIDEzNy4zODQ5Ky0zLjA3NDAgICA2NC45MjgyKy0wLjcz
NDggIDIuMTJ4IGZhc3RlcgorICAgICAgICAgICAgWDg2LTY0ICAyMjAuMjYxNistMTkuMjgxNCAx
MDUuMjAzNCstNi44NzIyICAyLjA5eCBmYXN0ZXIKKworICAgICAgICBBcyBwYXJ0IG9mIHRoaXMg
Y2hhbmdlLCBmb3VuZCB0aGF0IHRoZSBzdHJlbmd0aCByZWR1Y3Rpb24gZGlkbid0IHdvcmsgcHJv
cGVybHkgZm9yIHRoZQorICAgICAgICBleGlzdGluZyBjYXNlcyBmb3IgUmVnRXhwRXhlYywgUmVn
RXhwVGVzdCBhbmQgcmVsYXRlZCBzaW5jZSB3ZSBhZGRlZCB0aGF0IGNoZWNrcyBmb3IKKyAgICAg
ICAgb3ZlcnJpZGluZyB0aGUgUmVnRXhwIG9iamVjdC4gIENsb2JiZXJpemUgZm9yIHRyeUdldEJ5
SWQgd2FzIGNsb2JiZXIgdG9wLCBidXQgYWRkZWQKKyAgICAgICAgYW4gZXhjZXB0aW9uIGZvciBS
ZWdFeHAubGFzdEluZGV4LiAgVGhpcyBmaXggYWxsb3dlZCBtYW55IG9mIHRoZSBzdHJlbmd0aCBy
ZWR1Y3Rpb25zCisgICAgICAgIGNhc2VzIHRvIHN0YXJ0IHdvcmtpbmcgYWdhaW4sIG5hbWVseSB0
aGUgY29zdGFudCBmb2xkaW5nIGNhc2VzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdDbG9i
YmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZn
L0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9SZWdFeHBUZXN0
SW5saW5lKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNDZWxs
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQ2VsbE9wZXJhbmQyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpjZWxsT3BlcmFuZDIpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJl
Z0V4cFRlc3RJbmxpbmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6aGFuZGxlTm9kZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAg
ICAgICogcnVudGltZS9TdGFja0FsaWdubWVudC5oOgorICAgICAgICAoSlNDOjphcmd1bWVudENv
dW50Rm9yU3RhY2tTaXplKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAo
SlNDOjpZYXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6aml0Q29tcGlsZUlu
bGluZWRUZXN0KToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFy
cjo6WWFyckJveWVyTW95ZXJEYXRhOjpzYXZlTWFwcyk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJCb3llck1veWVyRGF0YTo6Y2xlYXJNYXBzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckJv
eWVyTW95ZXJEYXRhOjp0cnlSZXVzZUJveWVyTW9vcmVCaXRtYXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6SW5saW5lU3RhdHMpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpJbmxpbmVTdGF0czo6c2V0KToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OmNsZWFyKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OmNvZGVTaXplIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6SW5saW5lU3RhdHM6OnN0YWNr
U2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OklubGluZVN0
YXRzOjpjYW5JbmxpbmUgY29uc3QpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2Nr
OjpJbmxpbmVTdGF0czo6bmVlZHNUZW1wMiBjb25zdCk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJDb2RlQmxvY2s6OnNldDhCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6c2V0MTZCaXRDb2RlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6
c2V0OEJpdENvZGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2Nr
OjpzZXQxNkJpdENvZGVNYXRjaE9ubHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJs
b2NrOjpzZXQ4Qml0SW5saW5lU3RhdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJs
b2NrOjpzZXQxNkJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6Z2V0OEJpdElubGluZVN0YXRzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVC
bG9jazo6Z2V0MTZCaXRJbmxpbmVTdGF0cyk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2Rl
QmxvY2s6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6dHJ5UmV1
c2VCb3llck1vb3JlQml0bWFwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB5YXJyL1lhcnJK
SVRSZWdpc3RlcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OllhcnI6OllhcnJKSVRSZWdpc3Rl
cnM6OllhcnJKSVRSZWdpc3RlcnMpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKwog
MjAyMS0xMC0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg1LDYgKzEyODUs
NyBAQAogCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjQxMTJE
QjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQk4NjcwNEI4NTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgwMTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJySklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1M0JDNDNF
MjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY3MDRCOEExMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjcwNEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njg5
MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQ
cml2YXRlTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC00Mjg3LDYgKzQyODgsNyBAQAogCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyckludGVycHJldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJJ
bnRlcnByZXRlci5oOyBwYXRoID0geWFyci9ZYXJySW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyckpJVC5jcHA7IHBhdGgg
PSB5YXJyL1lhcnJKSVQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4
MDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBZYXJySklULmg7IHBhdGggPSB5YXJyL1lhcnJKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3Rl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckpJVFJlZ2lzdGVycy5o
OyBwYXRoID0geWFyci9ZYXJySklUUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXJzZXIuaDsgcGF0aCA9IHlhcnIvWWFyclBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI4MjEyREJBMzM3MDBB
OUZFN0IgLyogWWFyclBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gWWFyclBhdHRlcm4uY3BwOyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJy
UGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyUGF0dGVybi5o
OyBwYXRoID0geWFyci9ZYXJyUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODIxMyw2ICs4MjE1LDcgQEAKIAkJCQk4NjcwNEI3RTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckludGVycHJldGVyLmggKi8sCiAJCQkJODY3MDRCN0YxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJK
SVQuY3BwICovLAogCQkJCTg2NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8s
CisJCQkJNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLywK
IAkJCQlFM0YwRkM5NDI2QTExQjRBMDA5OUZGQTAgLyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRl
ci5oICovLAogCQkJCTg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggKi8s
CiAJCQkJODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCAqLywKQEAg
LTEwMjk2LDYgKzEwMjk5LDggQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklU
UmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEg
LyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUw
MDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRF
MURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MTEwMTcsNyArMTEwMjIsNiBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJy
RXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIg
LyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjcwNEI4NzEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNGMEZDOTUyNkEx
MUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjg0NDYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjI4LDYgKzI2MjgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBU
ZXN0OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2
ZSBwcm92ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAg
ICAgICAgIC8vIGFjY2Vzc2luZyBsYXN0SW5kZXggaXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9i
YWwgcmVnZXhwLgogICAgICAgICBjbG9iYmVyV29ybGQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNjc1
LDE0ICs2NzUsMjYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBU
cnlHZXRCeUlkOgorICAgICAgICByZWFkKFdvcmxkKTsKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9O
T1RfUmVnRXhwT2JqZWN0X2xhc3RJbmRleChuYW1lKSBpZiAobmFtZSAhPSBJbnZhbGlkQWJzdHJh
Y3RIZWFwICYmIFwKKyAgICBuYW1lICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYgXAorICAgIG5h
bWUgIT0gV29ybGQgJiYgXAorICAgIG5hbWUgIT0gU3RhY2sgJiYgXAorICAgIG5hbWUgIT0gSGVh
cCAmJiBcCisgICAgbmFtZSAhPSBSZWdFeHBPYmplY3RfbGFzdEluZGV4KSBcCisgICAgICAgIHdy
aXRlKG5hbWUpOworICAgIEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChBQlNUUkFDVF9IRUFQ
X05PVF9SZWdFeHBPYmplY3RfbGFzdEluZGV4KQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfTk9UX1Jl
Z0V4cE9iamVjdF9sYXN0SW5kZXgKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBHZXRCeUlk
OgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2UgR2V0QnlJZFdpdGhUaGlzOgogICAg
IGNhc2UgR2V0QnlJZERpcmVjdDoKICAgICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICBj
YXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBUcnlHZXRCeUlkOgogICAgIGNhc2UgUHV0
QnlJZDoKICAgICBjYXNlIFB1dEJ5SWRXaXRoVGhpczoKICAgICBjYXNlIFB1dEJ5VmFsV2l0aFRo
aXM6CkBAIC0xNzY1LDYgKzE3NzcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0Ogor
ICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgLy8gRXZlbiBpZiB3ZSd2ZSBwcm92
ZW4ga25vd24gaW5wdXQgdHlwZXMgYXMgUmVnRXhwT2JqZWN0IGFuZCBTdHJpbmcsCiAgICAgICAg
IC8vIGFjY2Vzc2luZyBsYXN0SW5kZXggaXMgZWZmZWN0ZnVsIGlmIGl0J3MgYSBnbG9iYWwgcmVn
ZXhwLgogICAgICAgICBjbG9iYmVyVG9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29t
cGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCisjaW5jbHVkZSAiWWFy
ckpJVC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtMTIyLDcgKzEyMyw4IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgUmVjb3JkZWRTdGF0dXNl
cyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJl
cGxhY2VtZW50czsKLSAgICAKKyAgICBZYXJyOjpZYXJyQm95ZXJNb3llckRhdGEgbV9ib3llck1v
b3JlRGF0YTsKKwogICAgIFNjcmF0Y2hCdWZmZXIqIGNhdGNoT1NSRW50cnlCdWZmZXI7CiAgICAg
UmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CiAgICAgYm9vbCBpc1N0
aWxsVmFsaWQgeyB0cnVlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw2ICszMzgsNyBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAg
ICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RHbG9iYWw6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAg
IGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICBjYXNlIFJlc29sdmVTY29wZToKICAgICBjYXNl
IFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXR1cm46
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODYsNyArMTQ4Niw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0g
ICAgICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAg
ICAgIGNhc2UgUmVnRXhwVGVzdElubGluZTogewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVSZWdFeHBPYmplY3QoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIx
LDYgKzMyMSwxNyBAQCB2b2lkIE5vZGU6OmNvbnZlcnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhCiAg
ICAgbV9vcEluZm8gPSByZWdFeHA7CiB9CiAKK3ZvaWQgTm9kZTo6Y29udmVydFRvUmVnRXhwVGVz
dElubGluZShGcm96ZW5WYWx1ZSogZ2xvYmFsT2JqZWN0LCBGcm96ZW5WYWx1ZSogcmVnRXhwKQor
eworICAgIEFTU0VSVChvcCgpID09IFJlZ0V4cFRlc3QpOworICAgIHNldE9wQW5kRGVmYXVsdEZs
YWdzKFJlZ0V4cFRlc3RJbmxpbmUpOworICAgIGNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShjaGls
ZHJlbi5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSk7CisgICAgY2hpbGRyZW4uY2hpbGQy
KCkgPSBFZGdlKGNoaWxkcmVuLmNoaWxkMigpLm5vZGUoKSwgUmVnRXhwT2JqZWN0VXNlKTsKKyAg
ICAvLyBXZSBrZWVwIHRoZSBleGlzdGluZyBjaGlsZDMuCisgICAgbV9vcEluZm8gPSBnbG9iYWxP
YmplY3Q7CisgICAgbV9vcEluZm8yID0gcmVnRXhwOworfQorCiBTdHJpbmcgTm9kZTo6dHJ5R2V0
U3RyaW5nKEdyYXBoJiBncmFwaCkKIHsKICAgICBpZiAoaGFzQ29uc3RhbnQoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIzLDYgKzgy
Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udmVydFRvUmVnRXhwRXhlY05vbkdsb2JhbE9y
U3RpY2t5V2l0aG91dENoZWNrcyhGcm96ZW5WYWx1ZSogcmVnRXhwKTsKICAgICB2b2lkIGNvbnZl
cnRUb1JlZ0V4cE1hdGNoRmFzdEdsb2JhbFdpdGhvdXRDaGVja3MoRnJvemVuVmFsdWUqIHJlZ0V4
cCk7CisgICAgdm9pZCBjb252ZXJ0VG9SZWdFeHBUZXN0SW5saW5lKEZyb3plblZhbHVlKiBnbG9i
YWxPYmplY3QsIEZyb3plblZhbHVlKiByZWdFeHApOwogCiAgICAgdm9pZCBjb252ZXJ0VG9TZXRS
ZWdFeHBPYmplY3RMYXN0SW5kZXgoKQogICAgIHsKQEAgLTE4MDAsNiArMTgwMSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWNOb25H
bG9iYWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBjYXNlIFJl
Z0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICBj
YXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkBA
IC0xODk2LDYgKzE4OTgsMTggQEAgcHVibGljOgogICAgICAgICBjYXNlIERpcmVjdFRhaWxDYWxs
SW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6
CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgorICAgICAgICBjYXNlIFJlZ0V4
cFRlc3RJbmxpbmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBoYXNDZWxsT3BlcmFuZDIoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkwNyw3ICsxOTIx
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGhhc0NlbGxPcGVyYW5kKCkpOwogICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8RnJvemVuVmFsdWUqPigpOwogICAgIH0KLSAgICAKKworICAg
IEZyb3plblZhbHVlKiBjZWxsT3BlcmFuZDIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0Nl
bGxPcGVyYW5kMigpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMi5hczxGcm96ZW5WYWx1ZSo+
KCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUIGNhc3RPcGVyYW5k
KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShy
ZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMjQsNiArMzI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKFJlZ0V4cEV4ZWMsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3ksIE5v
ZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFJlZ0V4cFRlc3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhSZWdFeHBUZXN0SW5saW5lLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwTWF0Y2hGYXN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwTWF0Y2hGYXN0R2xv
YmFsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTdHJpbmdSZXBsYWNlLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NjgsNiArODY4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgICAgICBjYXNlIFJlZ0V4cEV4
ZWNOb25HbG9iYWxPclN0aWNreToKICAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICBj
YXNlIFJlZ0V4cFRlc3RJbmxpbmU6CiAgICAgICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAg
ICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBs
YWNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTU3LDYgKzU1Nyw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAg
ICAgY2FzZSBSZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3k6CiAgICAgY2FzZSBSZWdFeHBUZXN0
OgorICAgIGNhc2UgUmVnRXhwVGVzdElubGluZToKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoK
ICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdEdsb2JhbDoKICAgICBjYXNlIENhbGw6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjk0OCw3ICsyOTQ4LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgIGNhc2UgUmVnRXhwVGVz
dDoKKyAgICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6IHsKICAgICAgICAgY29tcGlsZVJlZ0V4cFRl
c3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjg0NDYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJz
TW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1w
bGVyLmgiCisjaW5jbHVkZSAiWWFyckpJVFJlZ2lzdGVycy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKQEAgLTI2OTQsNiArMjY5NSwxOTcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZAogICAgIH0gfQogfQogCisjaWYgRU5BQkxFKFlBUlJf
SklUX1JFR0VYUF9URVNUX0lOTElORSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdF
eHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCit7CisgICAgUmVnRXhwKiByZWdFeHAgPSBqc0Nhc3Q8
UmVnRXhwKj4obm9kZS0+Y2VsbE9wZXJhbmQyKCktPnZhbHVlKCkpOworCisgICAgQVNTRVJUKCFy
ZWdFeHAtPmdsb2JhbE9yU3RpY2t5KCkpOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZ2xv
YmFsT2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gZ2xvYmFsT2JqZWN0LmdwcigpOworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
KyAgICBHUFJSZWcgYXJndW1lbnRHUFI7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSVGVt
cG9yYXJ5IHN0cmluZ0ltcGwodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHN0cmluZ0RhdGEodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHN0ckxlbmd0aCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkg
b3V0cHV0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQyKHRoaXMpOworICAgIEdQUlRl
bXBvcmFyeSB0ZW1wMCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDEodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IHRlbXAyOworICAgIEdQUlJlZyBzdHJpbmdJbXBsR1BSID0gc3RyaW5nSW1w
bC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyaW5nRGF0YUdQUiA9IHN0cmluZ0RhdGEuZ3ByKCk7Cisg
ICAgR1BSUmVnIG91dHB1dEdQUiA9IG91dHB1dC5ncHIoKTsKKyAgICBHUFJSZWcgc3RyTGVuZ3Ro
R1BSID0gc3RyTGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyByZXN1bHQyR1BSID0gcmVzdWx0Mi5n
cHIoKTsKKyAgICBHUFJSZWcgdGVtcDBHUFIgPSB0ZW1wMC5ncHIoKTsKKyAgICBHUFJSZWcgdGVt
cDFHUFIgPSB0ZW1wMS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDJHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgIEdQUlJlZyBzd2FwUmVnID0gSW52YWxpZEdQUlJlZzsKKworICAgIGF1dG8gaml0Q29k
ZUJsb2NrID0gcmVnRXhwLT5nZXRSZWdFeHBKSVRDb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoaml0
Q29kZUJsb2NrKTsKKyAgICBhdXRvIGlubGluZUNvZGVTdGF0czhCaXQgPSBqaXRDb2RlQmxvY2st
PmdldDhCaXRJbmxpbmVTdGF0cygpOworCisjaWYgIUNQVShYODZfNjQpCisgICAgaWYgKGlubGlu
ZUNvZGVTdGF0czhCaXQubmVlZHNUZW1wMigpKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZWFs
VGVtcDIodGhpcyk7CisgICAgICAgIHRlbXAyLmFkb3B0KHJlYWxUZW1wMik7CisgICAgICAgIHRl
bXAyR1BSID0gdGVtcDIuZ3ByKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBzcGVjdWxhdGVSZWdF
eHBPYmplY3Qobm9kZS0+Y2hpbGQyKCksIGJhc2VHUFIpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG9wZXJhdGlvbkNh
c2VzOworCisgICAgYXV0byBzd2FwUmVnSWZOZWVkZWQgPSBbJl0geworICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0R1BSID09IHJlc3VsdEdQUikgeworICAgICAgICAgICAgc3dhcFJlZyA9IGFsbG9j
YXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdsb2JhbE9iamVjdEdQUiwgc3dhcFJlZyk7
CisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSBzd2FwUmVnOworICAgICAgICB9IGVsc2Ug
aWYgKGJhc2VHUFIgPT0gcmVzdWx0R1BSKSB7CisgICAgICAgICAgICBzd2FwUmVnID0gYWxsb2Nh
dGUoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoYmFzZUdQUiwgc3dhcFJlZyk7CisgICAgICAg
ICAgICBiYXNlR1BSID0gc3dhcFJlZzsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudEdQUiA9
PSByZXN1bHRHUFIpIHsKKyAgICAgICAgICAgIHN3YXBSZWcgPSBhbGxvY2F0ZSgpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShhcmd1bWVudEdQUiwgc3dhcFJlZyk7CisgICAgICAgICAgICBhcmd1
bWVudEdQUiA9IHN3YXBSZWc7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byByZWdFeHBU
ZXN0SW5saW5lQ2FzZSA9IFsmXSB7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RyaW5nSW1wbEdQUiwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3Ry
aW5nRGF0YUdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdHJpbmdJbXBsR1BSLCBTdHJpbmdJbXBsOjpsZW5ndGhNZW1vcnlPZmZzZXQoKSksIHN0ckxl
bmd0aEdQUik7CisKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gc3RyaW5nSW1wbEdQUjsKKwor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgaW5kZXhHUFIpOworCisgICAgICAg
IFlhcnI6OllhcnJKSVRSZWdpc3RlcnMgeWFyclJlZ2lzdGVyczsKKyAgICAgICAgeWFyclJlZ2lz
dGVycy5pbnB1dCA9IHN0cmluZ0RhdGFHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXgg
PSBpbmRleEdQUjsKKyAgICAgICAgeWFyclJlZ2lzdGVycy5sZW5ndGggPSBzdHJMZW5ndGhHUFI7
CisgICAgICAgIHlhcnJSZWdpc3RlcnMub3V0cHV0ID0gb3V0cHV0R1BSOworICAgICAgICB5YXJy
UmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAgICAgIHlhcnJSZWdpc3RlcnMucmVnVDEg
PSB0ZW1wMUdQUjsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICB0ZW1wMkdQUiA9IGdsb2JhbE9i
amVjdEdQUjsKKyNlbmRpZgorICAgICAgICBpZiAoaW5saW5lQ29kZVN0YXRzOEJpdC5uZWVkc1Rl
bXAyKCkpCisgICAgICAgICAgICB5YXJyUmVnaXN0ZXJzLnJlZ1QyID0gdGVtcDJHUFI7CisKKyAg
ICAgICAgeWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlciA9IHJlc3VsdEdQUjsKKyAgICAgICAg
eWFyclJlZ2lzdGVycy5yZXR1cm5SZWdpc3RlcjIgPSByZXN1bHQyR1BSOworCisgICAgICAgIGF1
dG8gY29tbW9uRGF0YSA9IG1faml0LmppdENvZGUoKS0+ZGZnQ29tbW9uKCk7CisgICAgICAgIFlh
cnI6OmppdENvbXBpbGVJbmxpbmVkVGVzdCgmbV9ncmFwaC5tX3N0YWNrQ2hlY2tlciwgcmVnRXhw
LT5wYXR0ZXJuKCksIHJlZ0V4cC0+ZmxhZ3MoKSwgWWFycjo6Q2hhclNpemU6OkNoYXI4LCAmdm0o
KSwgY29tbW9uRGF0YS0+bV9ib3llck1vb3JlRGF0YSwgbV9qaXQsIHlhcnJSZWdpc3RlcnMpOwor
CisgICAgICAgIGF1dG8gZmFpbGVkTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKDApKTsKKworICAgICAgICAvLyAg
U2F2ZWQgY2FjaGVkIHJlc3VsdAorI2lmIENQVShYODZfNjQpCisgICAgICAgIGlmIChpbmxpbmVD
b2RlU3RhdHM4Qml0Lm5lZWRzVGVtcDIoKSkgeworICAgICAgICAgICAgLy8gU2luY2Ugd2UgcmV1
c2VkIGdsb2JhbE9iamVjdEdQUiBmb3IgdGVtcDIsIGxldCdzIHJlc3RvcmUgdGhlIGdsb2JhbCBv
YmplY3QuCisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Q29uc3QgPSBq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdENvbnN0KSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IEpTR2xvYmFsT2JqZWN0OjpyZWdFeHBHbG9iYWxEYXRhT2Zm
c2V0KCkgKyBSZWdFeHBHbG9iYWxEYXRhOjpvZmZzZXRPZkNhY2hlZFJlc3VsdCgpOworCisgICAg
ICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHJl
Z0V4cCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVn
RXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RSZWdFeHAoKSkpOworICAgICAgICBtX2ppdC5z
dG9yZVB0cihhcmd1bWVudEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mTGFzdElucHV0KCkpKTsKKyAg
ICAgICAgbV9qaXQuc3RvcmUzMihyZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZlJlc3VsdCgp
ICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBzdGFydCkpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihyZXN1bHQyR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9P
RkZTRVRPRihNYXRjaFJlc3VsdCwgZW5kKSkpOworICAgICAgICBtX2ppdC5zdG9yZTgoVHJ1c3Rl
ZEltbTMyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIG9mZnNldCAr
IFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZSZWlmaWVkKCkpKTsKKworICAgICAgICBpZiAo
c3dhcFJlZyAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgdW5sb2NrKHN3YXBSZWcpOwor
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGZhaWxlZE1hdGNoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgfTsKKworICAgIGlmIChu
b2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgYXJn
dW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUt
PmNoaWxkMygpLCBhcmd1bWVudEdQUik7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKwor
ICAgICAgICBzd2FwUmVnSWZOZWVkZWQoKTsKKworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgc3RyaW5nSW1wbEdQUik7CisgICAgICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgYSByb3BlIG9y
IDE2IGJpdCwgd2UgY2FsbCB0aGUgb3BlcmF0aW9uLgorICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZSb3BlU3RyaW5nSW1wbChzdHJpbmdJbXBsR1BSKSk7CisgICAg
ICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cmluZ0ltcGxHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAorICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpKTsKKworICAgICAgICBy
ZWdFeHBUZXN0SW5saW5lQ2FzZSgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1f
aml0KTsKKworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcs
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0R1BSLCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisKKyAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudCh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7CisgICAgYXJndW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKKwor
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBzd2FwUmVnSWZOZWVkZWQoKTsKKworICAgIG9w
ZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYXJndW1lbnRHUFIpKTsK
KyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoYXJndW1l
bnRHUFIpKTsKKworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJn
dW1lbnRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdHJpbmdJbXBsR1BSKTsKKyAg
ICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgcm9wZSBvciAxNiBiaXQsIHdlIGNhbGwgdGhlIG9wZXJh
dGlvbi4KKyAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZSb3BlU3RyaW5n
SW1wbChzdHJpbmdJbXBsR1BSKSk7CisgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ0ltcGxHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0
KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOwor
CisgICAgcmVnRXhwVGVzdElubGluZUNhc2UoKTsKKworICAgIG9wZXJhdGlvbkNhc2VzLmxpbmso
Jm1faml0KTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVnRXhwVGVzdCwgcmVzdWx0
R1BSLCBnbG9iYWxPYmplY3RHUFIsIGJhc2VHUFIsIGFyZ3VtZW50R1BSKTsKKworICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICB1bmJsZXNz
ZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisjZWxzZQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSogbm9kZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0obm9kZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGNv
bXBpbGVSZWdFeHBUZXN0KG5vZGUpOworfQorI2VuZGlmCisKICNpZiBVU0UoTEFSR0VfVFlQRURf
QVJSQVlTKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoSW50
NTJTaXplKE5vZGUqIG5vZGUpCiB7CkBAIC0zOTE1LDYgKzQxMDcsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAg
ICBjYXNlIFJlZ0V4cFRlc3RJbmxpbmU6IHsKKyAgICAgICAgY29tcGlsZVJlZ0V4cFRlc3RJbmxp
bmUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgUmVnRXhwTWF0Y2hG
YXN0OiB7CiAgICAgICAgIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3Qobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA5LDYgKzE1MDksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21waWxlUmVnRXhwTWF0Y2hGYXN0KE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVSZWdFeHBNYXRjaEZhc3RHbG9iYWwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlZ0V4
cFRlc3QoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVJlZ0V4cFRlc3RJbmxpbmUoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVN0cmluZ1JlcGxhY2UoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlz
T2JqZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2ZJc09iamVjdChOb2RlKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxNiw2ICs4MTYsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH07CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5F
KQorICAgICAgICAgICAgYXV0byBjb252ZXJ0VGVzdFRvVGVzdElubGluZSA9IFsmXSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSAhPSBSZWdFeHBUZXN0KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAocmVnRXhwLT5nbG9i
YWxPclN0aWNreSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGF1dG8gaml0Q29kZUJsb2NrID0gcmVnRXhw
LT5nZXRSZWdFeHBKSVRDb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoIWppdENvZGVC
bG9jaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAg
ICAgYXV0byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5nZXQ4Qml0SW5saW5l
U3RhdHMoKTsKKworICAgICAgICAgICAgICAgIGlmICghaW5saW5lQ29kZVN0YXRzOEJpdC5jYW5J
bmxpbmUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY29kZVNpemUgPSBpbmxpbmVDb2RlU3RhdHM4Qml0LmNvZGVTaXplKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoY29kZVNpemUgPiBPcHRpb25zOjptYXhpbXVtUmVnRXhw
VGVzdElubGluZUNvZGVzaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBpbmxpbmVDb2RlU3RhdHM4Qml0
LnN0YWNrU2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIGlmIChhbGlnbmVkRnJhbWVTaXplKQor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBzdGQ6Om1heCht
X2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMsIGFyZ3VtZW50Q291bnRGb3JTdGFja1NpemUoYWxpZ25l
ZEZyYW1lU2l6ZSkpOworCisgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX25v
ZGUtPm9yaWdpbjsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICBtX25vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4s
IG1fbm9kZS0+Y2hpbGRyZW4uanVzdENoZWNrcygpKTsKKyAgICAgICAgICAgICAgICBtX25vZGUt
PmNvbnZlcnRUb1JlZ0V4cFRlc3RJbmxpbmUobV9ncmFwaC5mcmVlemUoZ2xvYmFsT2JqZWN0KSwg
bV9ncmFwaC5mcmVlemUocmVnRXhwKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisjZW5kaWYK
KwogICAgICAgICAgICAgYXV0byBjb252ZXJ0VG9TdGF0aWMgPSBbJl0gewogICAgICAgICAgICAg
ICAgIGlmIChtX25vZGUtPm9wKCkgIT0gUmVnRXhwRXhlYykKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODM0LDYgKzg3MywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKGZvbGRUb0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyNpZiBFTkFC
TEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorICAgICAgICAgICAgaWYgKGNvbnZlcnRU
ZXN0VG9UZXN0SW5saW5lKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKwogICAg
ICAgICAgICAgaWYgKGNvbnZlcnRUb1N0YXRpYygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMzksNiArMzM5LDcgQEAgaW5saW5lIENh
cGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAg
ICBjYXNlIFJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreToKICAgICBjYXNlIFJlZ0V4cFRlc3Q6
CisgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0Ogog
ICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgogICAgIGNhc2UgTmV3UmVnZXhwOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjg0NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBACiAjaW5jbHVkZSAiU3VwZXJT
YW1wbGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiWWFyckpJVFJlZ2lzdGVycy5oIgogI2luY2x1ZGUgPGF0
b21pYz4KICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1JlY3Vyc2FibGVMYW1i
ZGEuaD4KQEAgLTE1OTEsNiArMTU5Miw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhw
VGVzdDoKICAgICAgICAgICAgIGNvbXBpbGVSZWdFeHBUZXN0KCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0SW5saW5lOgorICAgICAgICAgICAgY29tcGlsZVJl
Z0V4cFRlc3RJbmxpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZ0V4
cE1hdGNoRmFzdDoKICAgICAgICAgICAgIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTQzNTUsNiArMTQzNTksMTYzIEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwogICAgIH0KIAorI2lmIEVOQUJM
RShZQVJSX0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgdm9pZCBjb21waWxlUmVnRXhwVGVz
dElubGluZSgpCisgICAgeworICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAq
PihtX25vZGUtPmNlbGxPcGVyYW5kMigpLT52YWx1ZSgpKTsKKworICAgICAgICBBU1NFUlQoIXJl
Z0V4cC0+Z2xvYmFsT3JTdGlja3koKSk7CisKKyAgICAgICAgYXV0byBqaXRDb2RlQmxvY2sgPSBy
ZWdFeHAtPmdldFJlZ0V4cEpJVENvZGVCbG9jaygpOworICAgICAgICBBU1NFUlQoaml0Q29kZUJs
b2NrKTsKKyAgICAgICAgYXV0byBpbmxpbmVDb2RlU3RhdHM4Qml0ID0gaml0Q29kZUJsb2NrLT5n
ZXQ4Qml0SW5saW5lU3RhdHMoKTsKKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0Q29uc3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihtX25vZGUtPmNlbGxPcGVyYW5kKCkt
PnZhbHVlKCkpOworCisgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBpbmxpbmVDb2RlU3RhdHM4
Qml0LnN0YWNrU2l6ZSgpKTsKKworICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6
ZUluQnl0ZXMoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2s4
Qml0U3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5l
Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlvbkNh
c2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxw
dHI7CisKKyAgICAgICAgTFZhbHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93UmVnRXhwT2JqZWN0KG1fbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBudWxscHRyOworICAgICAgICBib29s
IGhhdmVTdHJpbmdBcmcgPSBtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2U7
CisKKyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcpCisgICAgICAgICAgICBhcmd1bWVudCA9IGxv
d1N0cmluZyhtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJn
dW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIGF1dG8gdm0g
PSAmdGhpcy0+dm0oKTsKKyAgICAgICAgYXV0byBzdGFja0NoZWNrZXIgPSAmbV9ncmFwaC5tX3N0
YWNrQ2hlY2tlcjsKKworICAgICAgICBpZiAoIWhhdmVTdHJpbmdBcmcpIHsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChhcmd1bWVudCksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJh
cmVseShvcGVyYXRpb25DYXNlKSk7CisKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChpc1N0cmluZyhhcmd1bWVudCksIHVzdWFsbHkoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKG9wZXJh
dGlvbkNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBj
aGVjazhCaXRTdHJpbmcpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNSb3BlU3RyaW5n
KGFyZ3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5zdXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1
cmUoY2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNr
OEJpdFN0cmluZywgaW5saW5lQ2FzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNSb3BlU3RyaW5nKGFyZ3VtZW50LCBtX25vZGUtPmNoaWxkMygpKSwgdW5z
dXJlKG9wZXJhdGlvbkNhc2UpLCB1bnN1cmUoY2hlY2s4Qml0U3RyaW5nKSk7CisKKyAgICAgICAg
ICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2s4Qml0U3RyaW5nLCBpbmxpbmVDYXNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0
cihhcmd1bWVudCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkp
KSwKKyAgICAgICAgICAgIHVuc3VyZShvcGVyYXRpb25DYXNlKSwgdW5zdXJlKGlubGluZUNhc2Up
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVDYXNlLCBvcGVyYXRpb25DYXNlKTsK
KyAgICAgICAgTFZhbHVlIHN0cmluZ0xlbmd0aCA9IG1fb3V0Lnplcm9FeHQobV9vdXQubG9hZDMy
KHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9sZW5ndGgpLCBJbnQ2NCk7CisgICAgICAg
IExWYWx1ZSBzdHJpbmdEYXRhID0gbV9vdXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0
cmluZ0ltcGxfZGF0YSk7CisKKyAgICAgICAgYXV0byBjb21tb25EYXRhID0gbV9mdGxTdGF0ZS5q
aXRDb2RlLT5kZmdDb21tb24oKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KEludDMyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KENvbnN0cmFpbmVkVmFsdWUoc3RyaW5nRGF0YSwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIp
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc3RyaW5nTGVu
Z3RoLCBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmd1bWVudCwgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0
ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gaW5saW5l
Q29kZVN0YXRzOEJpdC5uZWVkc1RlbXAyKCkgPyA2IDogNTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KworICAgICAgICAgICAgICAgIEdQUlJlZyByZXR1cm5HUFIgPSBwYXJhbXNbMF0uZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0RhdGFHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHN0cmluZ0xlbmd0aEdQUiA9IHBhcmFtc1syXS5ncHIoKTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgc3RyaW5nR1BSID0gcGFyYW1zWzNdLmdwcigpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHJldHVybjJHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDIpOworICAg
ICAgICAgICAgICAgIEdQUlJlZyB0ZW1wMEdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMyk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHRlbXAxR1BSID0gcGFyYW1zLmdwU2NyYXRjaCg0KTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgdGVtcDJHUFIgPSBpbmxpbmVDb2RlU3RhdHM4Qml0Lm5lZWRzVGVt
cDIoKSA/IHBhcmFtcy5ncFNjcmF0Y2goNSkgOiBJbnZhbGlkR1BSUmVnOworCisgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIGluZGV4R1BSKTsK
KworICAgICAgICAgICAgICAgIFlhcnI6OllhcnJKSVRSZWdpc3RlcnMgeWFyclJlZ2lzdGVyczsK
KworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5wdXQgPSBzdHJpbmdEYXRhR1BSOwor
ICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMuaW5kZXggPSBpbmRleEdQUjsKKyAgICAgICAg
ICAgICAgICB5YXJyUmVnaXN0ZXJzLmxlbmd0aCA9IHN0cmluZ0xlbmd0aEdQUjsKKyAgICAgICAg
ICAgICAgICB5YXJyUmVnaXN0ZXJzLm91dHB1dCA9IG91dHB1dEdQUjsKKyAgICAgICAgICAgICAg
ICB5YXJyUmVnaXN0ZXJzLnJlZ1QwID0gdGVtcDBHUFI7CisgICAgICAgICAgICAgICAgeWFyclJl
Z2lzdGVycy5yZWdUMSA9IHRlbXAxR1BSOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDb2Rl
U3RhdHM4Qml0Lm5lZWRzVGVtcDIoKSkKKyAgICAgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVy
cy5yZWdUMiA9IHRlbXAyR1BSOworICAgICAgICAgICAgICAgIHlhcnJSZWdpc3RlcnMucmV0dXJu
UmVnaXN0ZXIgPSByZXR1cm5HUFI7CisgICAgICAgICAgICAgICAgeWFyclJlZ2lzdGVycy5yZXR1
cm5SZWdpc3RlcjIgPSByZXR1cm4yR1BSOworCisgICAgICAgICAgICAgICAgWWFycjo6aml0Q29t
cGlsZUlubGluZWRUZXN0KHN0YWNrQ2hlY2tlciwgcmVnRXhwLT5wYXR0ZXJuKCksIHJlZ0V4cC0+
ZmxhZ3MoKSwgWWFycjo6Q2hhclNpemU6OkNoYXI4LCB2bSwgY29tbW9uRGF0YS0+bV9ib3llck1v
b3JlRGF0YSwgaml0LCB5YXJyUmVnaXN0ZXJzKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgICAgICAgICAgICAgIGF1dG8gZmFpbGVkTWF0Y2gg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgcmV0dXJuR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlZCBjYWNo
ZWQgcmVzdWx0LgorICAgICAgICAgICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSB0ZW1w
MEdQUjsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0Q29uc3QpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgICAg
IHB0cmRpZmZfdCBvZmZzZXQgPSBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNl
dCgpICsgUmVnRXhwR2xvYmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKTsKKworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVnRXhw
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhw
Q2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RSZWdFeHAoKSkpOworICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihzdHJpbmdHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIG9mZnNldCArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zmc2V0T2ZMYXN0SW5wdXQoKSkpOwor
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHJldHVybkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgb2Zmc2V0ICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRP
ZlJlc3VsdCgpICsgT0JKRUNUX09GRlNFVE9GKE1hdGNoUmVzdWx0LCBzdGFydCkpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuc3RvcmUzMihyZXR1cm4yR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6Om9mZnNldE9mUmVz
dWx0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hSZXN1bHQsIGVuZCkpKTsKKyAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU4KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBvZmZzZXQgKyBSZWdFeHBDYWNoZWRSZXN1bHQ6
Om9mZnNldE9mUmVpZmllZCgpKSk7CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcmV0dXJuR1BSKTsKKyAgICAgICAgICAgICAgICBkb25l
LmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGZhaWxlZE1hdGNoLmxpbmso
JmppdCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMCksIHJldHVybkdQUik7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1
ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7
CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlOjp0b3AoKTsK
KworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmxpbmVyZXN1bHQgPSBtX291dC5hbmNob3IocGF0
Y2hwb2ludCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhvcGVyYXRpb25DYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1
ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQ7CisKKyAgICAgICAgaWYgKGhhdmVTdHJpbmdBcmcp
CisgICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDMy
LCBvcGVyYXRpb25SZWdFeHBUZXN0U3RyaW5nLCBnbG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFu
Y2hvcih2bUNhbGwoSW50MzIsIG9wZXJhdGlvblJlZ0V4cFRlc3QsIGdsb2JhbE9iamVjdCwgYmFz
ZSwgYXJndW1lbnQpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRC
b29sZWFuKG1fb3V0LnBoaShJbnQzMiwgaW5saW5lcmVzdWx0LCBvcGVyYXRpb25SZXN1bHQpKTsK
KyAgICB9CisjZWxzZQorICAgIE5PX1JFVFVSTiB2b2lkIGNvbXBpbGVSZWdFeHBUZXN0SW5saW5l
KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
I2VuZGlmCisKICAgICB2b2lkIGNvbXBpbGVSZWdFeHBNYXRjaEZhc3QoKQogICAgIHsKICAgICAg
ICAgTFZhbHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9u
IDI4NDQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2ICsyODcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSgpOwogICAgIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5n
U3dpdGNoQ2FzZUxlbmd0aCwgNTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQs
IG1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3RhbExlbmd0aCwgMjAwMCwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdihVbnNpZ25lZCwgbWF4aW11bVJlZ0V4cFRlc3RJbmxpbmVDb2Rlc2l6ZSwg
NTAwLCBOb3JtYWwsICJNYXhpbXVtIGNvZGUgc2l6ZSBpbiBieXRlcyBmb3IgaW5saW5lZCBSZWdF
eHAudGVzdCBKSVQgY29kZS4iKSBcCiAgICAgXAogICAgIHYoRG91YmxlLCBqaXRQb2xpY3lTY2Fs
ZSwgMS4wLCBOb3JtYWwsICJzY2FsZSBKSVQgdGhyZXNob2xkcyB0byB0aGlzIHNwZWNpZmllZCBy
YXRpbyBiZXR3ZWVuIDAuMCAoY29tcGlsZSBBU0FQKSBhbmQgMS4wIChjb21waWxlIGxpa2Ugbm9y
bWFsKS4iKSBcCiAgICAgdihCb29sLCBmb3JjZUVhZ2VyQ29tcGlsYXRpb24sIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
CShyZXZpc2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHAuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwxMyBAQCBwdWJsaWM6CiAKICAgICBT
dHJpbmcgdG9Tb3VyY2VTdHJpbmcoKSBjb25zdDsKIAorI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAg
ICBZYXJyOjpZYXJyQ29kZUJsb2NrKiBnZXRSZWdFeHBKSVRDb2RlQmxvY2soKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcmVnRXhwSklUQ29kZS5nZXQoKTsKKyAgICB9CisjZW5kaWYKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7CiAgICAgUmVnRXhwKFZNJiwgY29u
c3QgU3RyaW5nJiwgT3B0aW9uU2V0PFlhcnI6OkZsYWdzPik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHJldmlzaW9uIDI4NDQ2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrQWxpZ25tZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHJvdW5kTG9jYWxS
ZWdpc3RlckNvdW50RgogICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSwgbG9jYWxSZWdpc3RlckNvdW50ICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzKSAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
IH0KIAoraW5saW5lIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRGb3JTdGFja1NpemUodW5zaWduZWQg
c2l6ZUluQnl0ZXMpCit7CisgICAgdW5zaWduZWQgc2l6ZUluUmVnaXN0ZXJzID0gc2l6ZUluQnl0
ZXMgLyBzaXplb2Yodm9pZCopOworCisgICAgaWYgKHNpemVJblJlZ2lzdGVycyA8PSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gc2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7Cit9
CisKIGlubGluZSB1bnNpZ25lZCBsb2dTdGFja0FsaWdubWVudFJlZ2lzdGVycygpCiB7CiAgICAg
cmV0dXJuIFdURjo6ZmFzdExvZzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjg0NDYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSAiWWFyckNhbm9uaWNh
bGl6ZS5oIgogI2luY2x1ZGUgIllhcnJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJZYXJySklU
UmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAiWWFyck1hdGNoaW5nQ29udGV4dEhvbGRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgpAQCAt
MTgyLDExNSArMTgzLDExIEBAIHN0ZDo6dHVwbGU8Qm95ZXJNb29yZUJpdG1hcDo6TWFwLCBCb3ll
ck0KICAgICByZXR1cm4gc3RkOjp0dXBsZSB7IFdURk1vdmUobWFwKSwgV1RGTW92ZShjaGFyYWN0
ZXJzRmFzdFBhdGgpIH07CiB9CiAKLWNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
WWFyckpJVEluZm8sIHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewordGVtcGxhdGU8Y2xhc3MgWWFy
ckpJVFJlZ3MgPSBZYXJySklURGVmYXVsdFJlZ2lzdGVycz4KK2NsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckpJVEluZm8gewogCi0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNUmVnaXN0ZXJzOjpyMDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBBUk1SZWdpc3RlcnM6OnIxOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBBUk1SZWdpc3RlcnM6OnIy
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk1SZWdpc3RlcnM6
OnIzOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJlZ1QwID0gQVJNUmVnaXN0
ZXJzOjpyNDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBBUk1SZWdp
c3RlcnM6OnI1OwotICAgIC8vIHI2IGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlckFSTXY3
LAotICAgIC8vIHI3IGlzIGZwLgotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdU
MiA9IEFSTVJlZ2lzdGVyczo6cjg7Ci0gICAgLy8gcjkgaXMgc2IgaW4gRUFCSS4KLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7
IC8vIHIxMCBpcyBTTCwgYnV0IG5vIGxvbmdlciBhIHNwZWNpYWwgcmVnaXN0ZXIuCi0KLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6
OnIwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlcjIgPSBB
Uk1SZWdpc3RlcnM6OnIxOwotCi0jZWxpZiBDUFUoQVJNNjQpCi0gICAgLy8gQXJndW1lbnQgcmVn
aXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0gQVJNNjRSZWdp
c3RlcnM6OngwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTTY0
UmVnaXN0ZXJzOjp4MTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGVuZ3RoID0g
QVJNNjRSZWdpc3RlcnM6OngyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRw
dXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsgLy8g
TG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gQVJN
NjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotCi0g
ICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDAgPSBBUk02NFJlZ2lzdGVyczo6eDY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIHJlZ1QxID0gQVJNNjRSZWdpc3RlcnM6Ong3OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCByZWdUMiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKLSAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgcmVtYWluaW5nTWF0Y2hDb3VudCA9IEFSTTY0UmVnaXN0ZXJzOjp4OTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBB
Uk02NFJlZ2lzdGVyczo6eDEwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCB1bmlj
b2RlVGVtcCA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgaW5pdGlhbFN0YXJ0ID0gQVJNNjRSZWdpc3RlcnM6OngxMTsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UgPSBBUk02NFJlZ2lzdGVy
czo6eDEyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZWFkaW5nU3Vycm9nYXRl
VGFnID0gQVJNNjRSZWdpc3RlcnM6OngxMzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgdHJhaWxpbmdTdXJyb2dhdGVUYWcgPSBBUk02NFJlZ2lzdGVyczo6eDE0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBlbmRPZlN0cmluZ0FkZHJlc3MgPSBBUk02NFJlZ2lzdGVy
czo6eDE1OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVy
ID0gQVJNNjRSZWdpc3RlcnM6OngwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBy
ZXR1cm5SZWdpc3RlcjIgPSBBUk02NFJlZ2lzdGVyczo6eDE7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIFRydXN0ZWRJbW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZj
MDApOwotI2VsaWYgQ1BVKE1JUFMpCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlu
cHV0ID0gTUlQU1JlZ2lzdGVyczo6YTA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklE
IGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIGxlbmd0aCA9IE1JUFNSZWdpc3RlcnM6OmEyOwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVn
aXN0ZXJJRCBvdXRwdXQgPSBNSVBTUmVnaXN0ZXJzOjphMzsKLQotICAgIC8vIHQwIGlzIHJlc2Vy
dmVkIGZvciBNYWNyb0Fzc2VtYmxlck1JUFMuCi0gICAgLy8gdDEgaXMgcmVzZXJ2ZWQgZm9yIE1h
Y3JvQXNzZW1ibGVyTUlQUy4KLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDAg
PSBNSVBTUmVnaXN0ZXJzOjp0MjsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVn
VDEgPSBNSVBTUmVnaXN0ZXJzOjp0MzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
cmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgaW5pdGlhbFN0YXJ0ID0gTUlQU1JlZ2lzdGVyczo6dDU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gTUlQU1JlZ2lzdGVy
czo6djE7Ci0KLSNlbGlmIENQVShYODZfNjQpCi0jaWYgIU9TKFdJTkRPV1MpCi0gICAgLy8gQXJn
dW1lbnQgcmVnaXN0ZXJzCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGlucHV0ID0g
WDg2UmVnaXN0ZXJzOjplZGk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGluZGV4
ID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxl
bmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OmVjeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsKLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8v
IExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IFg4
NlJlZ2lzdGVyczo6cjk7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0jZWxz
ZQotICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgZG9lc24ndCBmaXQgaW4gNjRiaXRzLCBpdHMg
ZGVzdGluYXRpb24gaXMgcG9pbnRlZCBieSByY3ggYW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBzaGlm
dGVkLgotICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS83NTcy
enR6NC5hc3B4Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoTWF0Y2hSZXN1bHQpID4gc2l6ZW9m
KHZvaWQqKSwgIk1hdGNoUmVzdWx0IGRvZXMgbm90IGZpdCBpbiA2NGJpdHMiKTsKLSAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVkeDsKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OnI4OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODZSZWdpc3RlcnM6OnI5Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBvdXRwdXQgPSBYODZSZWdpc3RlcnM6OnIx
MDsKLSNlbmRpZgotCi0gICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVheDsKLSNpZiAhT1MoV0lORE9X
UykKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBYODZSZWdpc3RlcnM6
OnI5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZWdUMiA9IFg4NlJlZ2lzdGVy
czo6cjEwOwotI2Vsc2UKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDEgPSBY
ODZSZWdpc3RlcnM6OmVjeDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVDIg
PSBYODZSZWdpc3RlcnM6OmVkaTsKLSNlbmRpZgotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBSZWdp
c3RlcklEIGluaXRpYWxTdGFydCA9IFg4NlJlZ2lzdGVyczo6ZWJ4OwotI2lmICFPUyhXSU5ET1dT
KQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCByZW1haW5pbmdNYXRjaENvdW50ID0g
WDg2UmVnaXN0ZXJzOjpyMTI7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0jZW5kaWYKLSAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmVnVW5pY29kZUlucHV0QW5kVHJhaWwgPSBYODZS
ZWdpc3RlcnM6OnIxMzsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdW5pY29kZVRl
bXAgPSBYODZSZWdpc3RlcnM6OnIxNDsKLSAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQg
ZW5kT2ZTdHJpbmdBZGRyZXNzID0gWDg2UmVnaXN0ZXJzOjpyMTU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIyID0gWDg2UmVnaXN0
ZXJzOjplZHg7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJbW0zMiBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSA9IFRydXN0ZWRJbW0zMigweDEwMDAwKTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIFRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gVHJ1c3RlZEltbTMyKDB4ZDgw
MCk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBUcnVzdGVkSW1tMzIgdHJhaWxpbmdTdXJyb2dhdGVU
YWcgPSBUcnVzdGVkSW1tMzIoMHhkYzAwKTsKLSAgICBzdGF0aWMgY29uc3RleHByIFRydXN0ZWRJ
bW0zMiBzdXJyb2dhdGVUYWdNYXNrID0gVHJ1c3RlZEltbTMyKDB4ZmZmZmZjMDApOworI2lmZGVm
ICBKSVRfVU5JQ09ERV9FWFBSRVNTSU9OUworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIgc3Vycm9nYXRlVGFnTWFzayA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MHhmZmZmZmMwMCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VY
UFJFU1NJT05TKQpAQCAtMzYwLDggKzI1NywxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAKICAgICB2b2lkIGluaXRQYXJlbkNvbnRleHRGcmVlTGlzdCgpCiAg
ICAgewotICAgICAgICBSZWdpc3RlcklEIHBhcmVuQ29udGV4dFBvaW50ZXIgPSByZWdUMDsKLSAg
ICAgICAgUmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlciA9IHJlZ1QyOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRQb2ludGVyID0gbV9yZWdz
LnJlZ1QwOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXh0UGFyZW5Db250
ZXh0UG9pbnRlciA9IG1fcmVncy5yZWdUMjsKKworICAgICAgICBtX3VzZXNUMiA9IHRydWU7CiAK
ICAgICAgICAgc2l6ZV90IHBhcmVuQ29udGV4dFNpemUgPSBQYXJlbkNvbnRleHQ6OnNpemVGb3Io
bV9wYXJlbkNvbnRleHRTaXplcyk7CiAKQEAgLTM3Miw5NCArMjcxLDkzIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdD
b250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgZnJlZWxp
c3RTaXplUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9yZWdzLm1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZz
ZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpKSwgbV9yZWdzLmZyZWVsaXN0U2l6ZVJlZ2lz
dGVyKTsKICAgICAgICAgLy8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RS
ZWdpc3RlciBhcmUgbGlrZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0
dGVybkNvbnRleHRCdWZmZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAgICAgICBKdW1wIGVt
cHR5RnJlZUxpc3QgPSBicmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwotICAg
ICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVy
LCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGFkZFB0cihmcmVlbGlzdFJlZ2lz
dGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0gICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIo
cGFyZW5Db250ZXh0U2l6ZSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MubWF0Y2hpbmdDb250ZXh0LCBN
YXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXIoKSksIG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZW1w
dHlGcmVlTGlzdCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1f
cmVncy5mcmVlbGlzdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxp
c3RSZWdpc3RlciwgcGFyZW5Db250ZXh0UG9pbnRlcik7CisgICAgICAgIG1faml0LmFkZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJl
ZWxpc3RSZWdpc3RlciwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIpOworICAgICAgICBtX2ppdC5h
ZGRQdHIobV9yZWdzLmZyZWVsaXN0UmVnaXN0ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdpc3Rl
cik7CisgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBh
cmVuQ29udGV4dFNpemUpLCBtX3JlZ3MuZnJlZWxpc3RTaXplUmVnaXN0ZXIpOwogCi0gICAgICAg
IExhYmVsIGxvb3BUb3AodGhpcyk7Ci0gICAgICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2hQdHIo
QWJvdmUsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Ci0g
ICAgICAgIHN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBBZGRyZXNzKHBhcmVuQ29u
dGV4dFBvaW50ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIG1vdmUo
bmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwotICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBwYXJlbkNvbnRleHRQb2ludGVy
LCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7Ci0gICAgICAgIGp1bXAobG9vcFRvcCk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wVG9wKCZtX2ppdCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGluaXREb25lID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgbmV4dFBhcmVuQ29udGV4dFBvaW50ZXIsIG1fcmVncy5mcmVlbGlzdFNpemVSZWdp
c3Rlcik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKG5leHRQYXJlbkNvbnRleHRQb2ludGVyLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRQb2ludGVyLCBQYXJlbkNvbnRleHQ6
Om5leHRPZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5tb3ZlKG5leHRQYXJlbkNvbnRleHRQb2lu
dGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFyZW5Db250ZXh0U2l6ZSksIHBhcmVuQ29udGV4dFBvaW50
ZXIsIG5leHRQYXJlbkNvbnRleHRQb2ludGVyKTsKKyAgICAgICAgbV9qaXQuanVtcChsb29wVG9w
KTsKIAotICAgICAgICBpbml0RG9uZS5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHBhcmVuQ29udGV4dFBvaW50ZXIsIFBhcmVuQ29u
dGV4dDo6bmV4dE9mZnNldCgpKSk7Ci0gICAgICAgIGVtcHR5RnJlZUxpc3QubGluayh0aGlzKTsK
KyAgICAgICAgaW5pdERvbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocGFyZW5Db250ZXh0UG9pbnRlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpKTsK
KyAgICAgICAgZW1wdHlGcmVlTGlzdC5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgdm9pZCBh
bGxvY2F0ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHJlc3VsdCkKKyAgICB2b2lkIGFsbG9jYXRl
UGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlc3VsdCkKICAgICB7Ci0g
ICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgZnJlZWxp
c3RSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlbWFpbmluZ01h
dGNoQ291bnQpOwotICAgICAgICBtX2hpdE1hdGNoTGltaXQuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVtYWluaW5nTWF0Y2hDb3VudCkpOwotICAgICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0
ZXIsIHJlc3VsdCk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmVlbGlzdFJlZ2lzdGVyLCBQ
YXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOworICAgICAgICBt
X2Fib3J0RXhlY3V0aW9uLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlcikpOworICAgICAgICBtX2ppdC5zdWIzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MucmVtYWluaW5nTWF0Y2hDb3Vu
dCk7CisgICAgICAgIG1faGl0TWF0Y2hMaW1pdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShtX3JlZ3MuZnJlZWxpc3RSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3MuZnJlZWxpc3RSZWdp
c3RlciwgUGFyZW5Db250ZXh0OjpuZXh0T2Zmc2V0KCkpLCBtX3JlZ3MuZnJlZWxpc3RSZWdpc3Rl
cik7CiAgICAgfQogCi0gICAgdm9pZCBmcmVlUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgaGVhZFB0
clJlZ2lzdGVyLCBSZWdpc3RlcklEIG5ld0hlYWRQdHJSZWdpc3RlcikKKyAgICB2b2lkIGZyZWVQ
YXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgaGVhZFB0clJlZ2lzdGVyLCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdIZWFkUHRyUmVnaXN0ZXIpCiAgICAgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRP
ZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7Ci0gICAgICAgIHN0b3JlUHRyKGZyZWVsaXN0
UmVnaXN0ZXIsIEFkZHJlc3MoaGVhZFB0clJlZ2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZz
ZXQoKSkpOwotICAgICAgICBtb3ZlKGhlYWRQdHJSZWdpc3RlciwgZnJlZWxpc3RSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaGVhZFB0clJl
Z2lzdGVyLCBQYXJlbkNvbnRleHQ6Om5leHRPZmZzZXQoKSksIG5ld0hlYWRQdHJSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKG1fcmVncy5mcmVlbGlzdFJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhoZWFkUHRyUmVnaXN0ZXIsIFBhcmVuQ29udGV4dDo6bmV4dE9mZnNl
dCgpKSk7CisgICAgICAgIG1faml0Lm1vdmUoaGVhZFB0clJlZ2lzdGVyLCBtX3JlZ3MuZnJlZWxp
c3RSZWdpc3Rlcik7CiAgICAgfQogCi0KLSAgICB2b2lkIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3Vu
dFRvUGFyZW5Db250ZXh0KFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91
bnRHUFIsIFJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSKQorICAgIHZvaWQgc3RvcmVCZWdpbkFu
ZE1hdGNoQW1vdW50VG9QYXJlbkNvbnRleHQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmVn
aW5HUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoQW1vdW50R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbkNvbnRleHRHUFIpCiAgICAgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQoKSArIDQgPT0gUGFyZW5Db250ZXh0
OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1h
dGNoQW1vdW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6
OmJlZ2luT2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQYWlyMzIoYmVnaW5HUFIsIG1h
dGNoQW1vdW50R1BSLCBwYXJlbkNvbnRleHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoUGFyZW5Db250ZXh0OjpiZWdpbk9mZnNldCgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBsb2Fk
QmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoUmVnaXN0ZXJJRCBwYXJlbkNvbnRl
eHRHUFIsIFJlZ2lzdGVySUQgYmVnaW5HUFIsIFJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIpCisg
ICAgdm9pZCBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQoTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBiZWdpbkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnRHUFIp
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KFBhcmVuQ29udGV4dDo6YmVnaW5PZmZzZXQo
KSArIDQgPT0gUGFyZW5Db250ZXh0OjptYXRjaEFtb3VudE9mZnNldCgpKTsKLSAgICAgICAgbG9h
ZFBhaXIzMihwYXJlbkNvbnRleHRHUFIsIFRydXN0ZWRJbW0zMihQYXJlbkNvbnRleHQ6OmJlZ2lu
T2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UGFpcjMyKHBhcmVuQ29udGV4dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihQYXJl
bkNvbnRleHQ6OmJlZ2luT2Zmc2V0KCkpLCBiZWdpbkdQUiwgbWF0Y2hBbW91bnRHUFIpOwogICAg
IH0KIAotICAgIHZvaWQgc2F2ZVBhcmVuQ29udGV4dChSZWdpc3RlcklEIHBhcmVuQ29udGV4dFJl
ZywgUmVnaXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVk
IGxhc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCisg
ICAgdm9pZCBzYXZlUGFyZW5Db250ZXh0KE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhcmVu
Q29udGV4dFJlZywgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgdW5zaWduZWQg
Zmlyc3RTdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybiwgdW5zaWduZWQgc3VicGF0
dGVybkJhc2VGcmFtZUxvY2F0aW9uKQogICAgIHsKICAgICAgICAgbG9hZEZyb21GcmFtZShzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNo
QW1vdW50SW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlQmVnaW5BbmRNYXRjaEFtb3Vu
dFRvUGFyZW5Db250ZXh0KGluZGV4LCB0ZW1wUmVnLCBwYXJlbkNvbnRleHRSZWcpOworICAgICAg
ICBzdG9yZUJlZ2luQW5kTWF0Y2hBbW91bnRUb1BhcmVuQ29udGV4dChtX3JlZ3MuaW5kZXgsIHRl
bXBSZWcsIHBhcmVuQ29udGV4dFJlZyk7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUoc3VicGF0dGVy
bkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRy
ZXNzSW5kZXgoKSwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlUHRyKHRlbXBSZWcsIEFkZHJlc3Mo
cGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSkpOwor
ICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSk7CiAg
ICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0
dGVybnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0U3Vi
cGF0dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7CiAg
ICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAgICAg
IGxvYWQ2NChBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5zaWdu
ZWQpKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2NCh0ZW1wUmVnLCBBZGRyZXNz
KHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1YnBhdHRl
cm4pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5vdXRwdXQsIChzdWJwYXR0ZXJuIDw8IDEpICogc2l6ZW9mKHVuc2lnbmVkKSks
IHRlbXBSZWcpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQodGVtcFJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocGFyZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnN1YnBhdHRl
cm5PZmZzZXQoc3VicGF0dGVybikpKTsKICAgICAgICAgICAgICAgICBjbGVhclN1YnBhdHRlcm5T
dGFydChzdWJwYXR0ZXJuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdWJw
YXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZv
UGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlvbiA9IHN1YnBh
dHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5Db250ZXh0U2l6
ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKICAgICAgICAgICAgIGxvYWRGcm9t
RnJhbWUoZnJhbWVMb2NhdGlvbiwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzdG9yZVB0cih0ZW1w
UmVnLCBBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzYXZlZEZyYW1lT2Zm
c2V0KG1fcGFyZW5Db250ZXh0U2l6ZXMpICsgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih1aW50cHRy
X3QpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9mZnNl
dChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0cl90
KSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlUGFyZW5Db250ZXh0KFJl
Z2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBSZWdpc3RlcklEIHRlbXBSZWcsIHVuc2lnbmVkIGZp
cnN0U3VicGF0dGVybiwgdW5zaWduZWQgbGFzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIHN1YnBhdHRl
cm5CYXNlRnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHJlc3RvcmVQYXJlbkNvbnRleHQoTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGFyZW5Db250ZXh0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCB0ZW1wUmVnLCB1bnNpZ25lZCBmaXJzdFN1YnBhdHRlcm4sIHVuc2lnbmVkIGxhc3RT
dWJwYXR0ZXJuLCB1bnNpZ25lZCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24pCiAgICAgewot
ICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRleHQocGFyZW5Db250
ZXh0UmVnLCBpbmRleCwgdGVtcFJlZyk7Ci0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgc3Vi
cGF0dGVybkJhc2VGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdp
bkluZGV4KCkpOworICAgICAgICBsb2FkQmVnaW5BbmRNYXRjaEFtb3VudEZyb21QYXJlbkNvbnRl
eHQocGFyZW5Db250ZXh0UmVnLCBtX3JlZ3MuaW5kZXgsIHRlbXBSZWcpOworICAgICAgICBzdG9y
ZVRvRnJhbWUobV9yZWdzLmluZGV4LCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIHN0b3JlVG9GcmFt
ZSh0ZW1wUmVnLCBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhw
YXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6cmV0dXJuQWRkcmVzc09mZnNldCgpKSwgdGVt
cFJlZyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocGFy
ZW5Db250ZXh0UmVnLCBQYXJlbkNvbnRleHQ6OnJldHVybkFkZHJlc3NPZmZzZXQoKSksIHRlbXBS
ZWcpOwogICAgICAgICBzdG9yZVRvRnJhbWUodGVtcFJlZywgc3VicGF0dGVybkJhc2VGcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpyZXR1cm5BZGRyZXNzSW5kZXgoKSk7
CiAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3Vi
cGF0dGVybnMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VicGF0dGVybiA9IGZpcnN0
U3VicGF0dGVybjsgc3VicGF0dGVybiA8PSBsYXN0U3VicGF0dGVybjsgc3VicGF0dGVybisrKSB7
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChpczY0Qml0KCkpOwotICAgICAgICAgICAg
ICAgIGxvYWQ2NChBZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0
ZXJuT2Zmc2V0KHN1YnBhdHRlcm4pKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgc3RvcmU2
NCh0ZW1wUmVnLCBBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YodW5z
aWduZWQpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHBhcmVuQ29udGV4dFJlZywgUGFyZW5Db250ZXh0OjpzdWJwYXR0ZXJuT2Zmc2V0KHN1
YnBhdHRlcm4pKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh0ZW1w
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0LCAoc3VicGF0dGVybiA8
PCAxKSAqIHNpemVvZih1bnNpZ25lZCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBzdWJwYXR0ZXJuQmFzZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXM7CiAgICAgICAgIGZvciAodW5zaWduZWQgZnJhbWVMb2NhdGlv
biA9IHN1YnBhdHRlcm5CYXNlRnJhbWVMb2NhdGlvbjsgZnJhbWVMb2NhdGlvbiA8IG1fcGFyZW5D
b250ZXh0U2l6ZXMuZnJhbWVTbG90cygpOyBmcmFtZUxvY2F0aW9uKyspIHsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFt
ZU9mZnNldChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWlu
dHB0cl90KSksIHRlbXBSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhwYXJlbkNvbnRleHRSZWcsIFBhcmVuQ29udGV4dDo6c2F2ZWRGcmFtZU9m
ZnNldChtX3BhcmVuQ29udGV4dFNpemVzKSArIGZyYW1lTG9jYXRpb24gKiBzaXplb2YodWludHB0
cl90KSksIHRlbXBSZWcpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKHRlbXBSZWcsIGZyYW1l
TG9jYXRpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNDg3LDcgKzM4NSw3IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgfQogICAgIH0KIAotICAg
IHZvaWQgbWF0Y2hDaGFyYWN0ZXJDbGFzc1JhbmdlKFJlZ2lzdGVySUQgY2hhcmFjdGVyLCBKdW1w
TGlzdCYgZmFpbHVyZXMsIEp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlclJhbmdl
KiByYW5nZXMsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCogbWF0Y2hJbmRleCwgY29uc3QgVUNo
YXIzMiogbWF0Y2hlcywgdW5zaWduZWQgbWF0Y2hDb3VudCkKKyAgICB2b2lkIG1hdGNoQ2hhcmFj
dGVyQ2xhc3NSYW5nZShNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZXMsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
bWF0Y2hEZXN0LCBjb25zdCBDaGFyYWN0ZXJSYW5nZSogcmFuZ2VzLCB1bnNpZ25lZCBjb3VudCwg
dW5zaWduZWQqIG1hdGNoSW5kZXgsIGNvbnN0IFVDaGFyMzIqIG1hdGNoZXMsIHVuc2lnbmVkIG1h
dGNoQ291bnQpCiAgICAgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICAvLyBwaWNrIHdoaWNo
IHJhbmdlIHdlJ3JlIGdvaW5nIHRvIGdlbmVyYXRlCkBAIC00OTgsMzMgKzM5NiwzMyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAvLyBjaGVj
ayBpZiB0aGVyZSBhcmUgYW55IHJhbmdlcyBvciBtYXRjaGVzIGJlbG93IGxvLiAgSWYgbm90LCBq
dXN0IGpsIHRvIGZhaWx1cmUgLQogICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcg
ZWxzZSB0byBjaGVjaywgY2hlY2sgdGhhdCBmaXJzdCwgaWYgaXQgZmFsbHMgdGhyb3VnaCBqbXAg
dG8gZmFpbHVyZS4KICAgICAgICAgICAgIGlmICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAm
JiAobWF0Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGxv
T3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5P
ckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQp
bG8pKTsKIAogICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNvZGUgZm9yIGFsbCByYW5nZXMg
YmVmb3JlIHRoaXMgb25lCiAgICAgICAgICAgICAgICAgaWYgKHdoaWNoKQogICAgICAgICAgICAg
ICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzUmFuZ2UoY2hhcmFjdGVyLCBmYWlsdXJlcywgbWF0
Y2hEZXN0LCByYW5nZXMsIHdoaWNoLCBtYXRjaEluZGV4LCBtYXRjaGVzLCBtYXRjaENvdW50KTsK
IAogICAgICAgICAgICAgICAgIHdoaWxlICgoKm1hdGNoSW5kZXggPCBtYXRjaENvdW50KSAmJiAo
bWF0Y2hlc1sqbWF0Y2hJbmRleF0gPCBsbykpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hE
ZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hv
cnQpbWF0Y2hlc1sqbWF0Y2hJbmRleF0pKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoRGVz
dC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQgc2hvcnQpbWF0Y2hlc1sqbWF0Y2hJbmRl
eF0pKSk7CiAgICAgICAgICAgICAgICAgICAgICsrKm1hdGNoSW5kZXg7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICAgICAg
bG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsoJm1f
aml0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAod2hpY2gpIHsKLSAgICAgICAgICAgICAgICBK
dW1wIGxvT3JBYm92ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJ
bW0zMigodW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBsb09yQWJvdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRl
clRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5zaWduZWQg
c2hvcnQpbG8pKTsKIAogICAgICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3NSYW5nZShj
aGFyYWN0ZXIsIGZhaWx1cmVzLCBtYXRjaERlc3QsIHJhbmdlcywgd2hpY2gsIG1hdGNoSW5kZXgs
IG1hdGNoZXMsIG1hdGNoQ291bnQpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
Ci0gICAgICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
bG9PckFib3ZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpbG8pKSk7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWxvKSkpOwogCiAgICAgICAgICAgICB3aGls
ZSAoKCptYXRjaEluZGV4IDwgbWF0Y2hDb3VudCkgJiYgKG1hdGNoZXNbKm1hdGNoSW5kZXhdIDw9
IGhpKSkKICAgICAgICAgICAgICAgICArKyptYXRjaEluZGV4OwogCi0gICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigo
dW5zaWduZWQgc2hvcnQpaGkpKSk7CisgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKCh1bnNpZ25lZCBzaG9ydCloaSkpKTsKICAgICAgICAgICAgIC8v
IGZhbGwgdGhyb3VnaCB0byBoZXJlLCB0aGUgdmFsdWUgaXMgYWJvdmUgaGkuCiAKICAgICAgICAg
ICAgIC8vIHNodWZmbGUgYWxvbmcgJiBsb29wIGFyb3VuZCBpZiB0aGVyZSBhcmUgYW55IG1vcmUg
bWF0Y2hlcyB0byBoYW5kbGUuCkBAIC01MzQsMjQgKzQzMiwyNCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIH0gd2hpbGUgKGNvdW50KTsKICAgICB9
CiAKLSAgICB2b2lkIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoUmVnaXN0ZXJJRCBjaGFyYWN0ZXIsIEp1
bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3RlckNsYXNzKiBjaGFyQ2xhc3MpCisgICAg
dm9pZCBtYXRjaENoYXJhY3RlckNsYXNzKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJh
Y3RlciwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBtYXRjaERlc3QsIGNvbnN0IENoYXJhY3Rl
ckNsYXNzKiBjaGFyQ2xhc3MpCiAgICAgewogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX3RhYmxl
ICYmICFtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBFeHRlbmRlZEFkZHJl
c3MgdGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNoYXJD
bGFzcy0+bV90YWJsZSkpOwotICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2hUZXN0
OChjaGFyQ2xhc3MtPm1fdGFibGVJbnZlcnRlZCA/IFplcm8gOiBOb25aZXJvLCB0YWJsZUVudHJ5
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIHRhYmxlRW50
cnkoY2hhcmFjdGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihjaGFyQ2xhc3MtPm1fdGFi
bGUpKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDgoY2hh
ckNsYXNzLT5tX3RhYmxlSW52ZXJ0ZWQgPyBNYWNyb0Fzc2VtYmxlcjo6WmVybyA6IE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0YWJsZUVudHJ5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBKdW1wTGlzdCB1bmljb2RlRmFpbDsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHVuaWNvZGVGYWlsOwogICAgICAgICBpZiAoY2hhckNsYXNzLT5tX21h
dGNoZXNVbmljb2RlLnNpemUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZS5zaXplKCkp
IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IGlzQXNjaWk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgaXNBc2NpaTsKICAgICAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0
Y2hlcy5zaXplKCkgfHwgY2hhckNsYXNzLT5tX3Jhbmdlcy5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgaXNBc2NpaS5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIFRy
dXN0ZWRJbW0zMigweDdmKSkpOworICAgICAgICAgICAgICAgIGlzQXNjaWkuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDdmKSkpOwogCiAgICAgICAgICAgICBpZiAoY2hh
ckNsYXNzLT5tX21hdGNoZXNVbmljb2RlLnNpemUoKSkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjaCA9IGNoYXJDbGFzcy0+bV9tYXRj
aGVzVW5pY29kZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFu
Y2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNo
YXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApAQCAtNTYwLDI1ICs0NTgsMjUgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGxvID0g
Y2hhckNsYXNzLT5tX3Jhbmdlc1VuaWNvZGVbaV0uYmVnaW47CiAgICAgICAgICAgICAgICAgICAg
IFVDaGFyMzIgaGkgPSBjaGFyQ2xhc3MtPm1fcmFuZ2VzVW5pY29kZVtpXS5lbmQ7CiAKLSAgICAg
ICAgICAgICAgICAgICAgSnVtcCBiZWxvdyA9IGJyYW5jaDMyKExlc3NUaGFuLCBjaGFyYWN0ZXIs
IEltbTMyKGxvKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNo
MzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGhpKSkpOwotICAgICAgICAgICAg
ICAgICAgICBiZWxvdy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZWxvdyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobG8pKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihoaSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYmVsb3cubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNp
emUoKSB8fCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSkKLSAgICAgICAgICAgICAgICB1bmlj
b2RlRmFpbCA9IGp1bXAoKTsKLSAgICAgICAgICAgIGlzQXNjaWkubGluayh0aGlzKTsKKyAgICAg
ICAgICAgICAgICB1bmljb2RlRmFpbCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIGlzQXNj
aWkubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNoYXJDbGFzcy0+bV9y
YW5nZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXRjaEluZGV4ID0gMDsKLSAg
ICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzc1Jhbmdl
KGNoYXJhY3RlciwgZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLT5tX3Jhbmdlcy5iZWdp
bigpLCBjaGFyQ2xhc3MtPm1fcmFuZ2VzLnNpemUoKSwgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy0+
bV9tYXRjaGVzLmJlZ2luKCksIGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSk7CiAgICAgICAg
ICAgICB3aGlsZSAobWF0Y2hJbmRleCA8IGNoYXJDbGFzcy0+bV9tYXRjaGVzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaGFyQ2xhc3MtPm1fbWF0Y2hlc1ttYXRjaEluZGV4Kytd
KSkpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBjaGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMigodW5z
aWduZWQgc2hvcnQpY2hhckNsYXNzLT5tX21hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKIAotICAg
ICAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmxpbmso
Jm1faml0KTsKICAgICAgICAgfSBlbHNlIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlcy5zaXplKCkp
IHsKICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbjogZ2F0aGVyICdhJywnQScgZXRjIGJhY2sg
dG9nZXRoZXIsIGNhbiBtYXNrICYgdGVzdCBvbmNlLgogICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IG1hdGNoZXNBWmF6OwpAQCAtNTkzLDc4ICs0OTEsODMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVy
KGNoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFy
YWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydCljaCkpKTsKKyAgICAgICAgICAgICAgICBtYXRj
aERlc3QuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFj
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAodW5zaWduZWQgY291bnRBWmF6ID0gbWF0Y2hlc0Fa
YXouc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50QVphejsgKytpKQotICAgICAgICAgICAgICAgICAgICBtYXRjaERlc3Qu
YXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJbW0zMihtYXRjaGVzQVph
eltpXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihtYXRjaGVzQVpheltpXSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjaGFyQ2xhc3MtPm1fbWF0Y2hlc1VuaWNvZGUuc2l6ZSgpIHx8IGNoYXJD
bGFzcy0+bV9yYW5nZXNVbmljb2RlLnNpemUoKSkKLSAgICAgICAgICAgIHVuaWNvZGVGYWlsLmxp
bmsodGhpcyk7CisgICAgICAgICAgICB1bmljb2RlRmFpbC5saW5rKCZtX2ppdCk7CiAgICAgfQog
CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCi0gICAgdm9pZCBhZHZh
bmNlSW5kZXhBZnRlckNoYXJhY3RlckNsYXNzVGVybU1hdGNoKGNvbnN0IFBhdHRlcm5UZXJtKiB0
ZXJtLCBKdW1wTGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBSZWdp
c3RlcklEIGNoYXJhY3RlcikKKyAgICB2b2lkIGFkdmFuY2VJbmRleEFmdGVyQ2hhcmFjdGVyQ2xh
c3NUZXJtTWF0Y2goY29uc3QgUGF0dGVyblRlcm0qIHRlcm0sIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZXNBZnRlckluY3JlbWVudGluZ0luZGV4LCBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICBBU1NFUlQodGVybS0+dHlw
ZSA9PSBQYXR0ZXJuVGVybTo6VHlwZTo6Q2hhcmFjdGVyQ2xhc3MpOwogCiAgICAgICAgIGlmICh0
ZXJtLT5pc0ZpeGVkV2lkdGhDaGFyYWN0ZXJDbGFzcygpKQotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKHRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNOb25CTVBDaGFyYWN0ZXJzKCkgPyAy
IDogMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/
IDIgOiAxKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIEp1bXAgaXNCTVBDaGFyID0g
YnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQk1QQ2hh
ciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgY2hhcmFjdGVyLCBt
X3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwogICAgICAgICAgICAgZmFpbHVyZXNBZnRl
ckluY3JlbWVudGluZ0luZGV4LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5r
KHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2pp
dCk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIEp1bXBzIGlmIGlucHV0IG5v
dCBhdmFpbGFibGU7IHdpbGwgaGF2ZSAoaW5jb3JyZWN0bHkpIGluY3JlbWVudGVkIGFscmVhZHkh
Ci0gICAgSnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9
IDApCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcElmTm9BdmFpbGFibGVJbnB1dCh1bnNp
Z25lZCBjb3VudFRvQ2hlY2sgPSAwKQogICAgIHsKICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykK
LSAgICAgICAgICAgIGFkZDMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2spLCBtX3JlZ3MuaW5kZXgp
OworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBt
X3JlZ3MuaW5kZXgsIG1fcmVncy5sZW5ndGgpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykKKyAgICB7
CisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjb3VudFRvQ2hlY2sp
LCBtX3JlZ3MuaW5kZXgpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsKICAgICB9
CiAKLSAgICBKdW1wIGp1bXBJZkF2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjaykK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVja05vdEVub3VnaElucHV0KE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGFkZGl0aW9uYWxBbW91bnQpCiAgICAgewotICAgICAgICBhZGQzMihJ
bW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihCZWxv
d09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICBtX2ppdC5hZGQzMihtX3JlZ3MuaW5k
ZXgsIGFkZGl0aW9uYWxBbW91bnQpOworICAgICAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlLCBhZGRpdGlvbmFsQW1vdW50LCBtX3JlZ3MubGVuZ3RoKTsKICAg
ICB9CiAKLSAgICBKdW1wIGNoZWNrTm90RW5vdWdoSW5wdXQoUmVnaXN0ZXJJRCBhZGRpdGlvbmFs
QW1vdW50KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrSW5wdXQoKQogICAgIHsKLSAg
ICAgICAgYWRkMzIoaW5kZXgsIGFkZGl0aW9uYWxBbW91bnQpOwotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoQWJvdmUsIGFkZGl0aW9uYWxBbW91bnQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX3JlZ3MuaW5kZXgs
IG1fcmVncy5sZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgY2hlY2tJbnB1dCgpCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYXRFbmRPZklucHV0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBi
cmFuY2gzMihCZWxvd09yRXF1YWwsIGluZGV4LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5s
ZW5ndGgpOwogICAgIH0KIAotICAgIEp1bXAgYXRFbmRPZklucHV0KCkKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3RBdEVuZE9mSW5wdXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKEVxdWFsLCBpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbV9yZWdzLmluZGV4LCBtX3JlZ3MubGVuZ3RoKTsK
ICAgICB9CiAKLSAgICBKdW1wIG5vdEF0RW5kT2ZJbnB1dCgpCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKENoZWNrZWQ8dW5zaWduZWQ+
IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0ZW1w
UmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRp
dmVDaGFyYWN0ZXJPZmZzZXQsIHRlbXBSZWcsIG1fcmVncy5pbmRleCk7CiAgICAgfQogCi0gICAg
QmFzZUluZGV4IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MoQ2hlY2tlZDx1bnNpZ25lZD4g
bmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVySUQgdGVtcFJlZywgUmVnaXN0ZXJJRCBp
bmRleFJlZyA9IGluZGV4KQorICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggbmVnYXRpdmVP
ZmZzZXRJbmRleGVkQWRkcmVzcyhDaGVja2VkPHVuc2lnbmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9m
ZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgaW5kZXhSZWcpCiAgICAgewotICAgICAgICBSZWdpc3RlcklEIGJhc2UgPSBp
bnB1dDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgYmFzZSA9IG1fcmVncy5p
bnB1dDsKIAotICAgICAgICAvLyBCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50
MzJfdCBvZmZzZXQuIEdpdmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCi0gICAgICAgIC8v
IGV4cHJlc3Npb24gdGhhdCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIEJhc2VJbmRl
eCdzIHNpZ25lZCBvZmZzZXQgaXMgaW5zdWZmaWNpZW50CisgICAgICAgIC8vIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoKSBhZGRyZXNzaW5nIGNhbiB0YWtlIGEgaW50MzJfdCBvZmZzZXQuIEdp
dmVuIHRoYXQgd2UgY2FuIGhhdmUgYSByZWd1bGFyCisgICAgICAgIC8vIGV4cHJlc3Npb24gdGhh
dCBoYXMgdW5zaWduZWQgY2hhcmFjdGVyIG9mZnNldHMsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgncyBzaWduZWQgb2Zmc2V0IGlzIGluc3VmZmljaWVudAogICAgICAgICAvLyBmb3IgYWRkcmVz
c2luZyBpbiBleHRyZW1lIGNhc2VzIHdoZXJlIHdlIG1pZ2h0IHVuZGVyZmxvdy4gVGhlcmVmb3Jl
IHdlIGNoZWNrIHRvIHNlZSBpZgogICAgICAgICAvLyBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCB3
aWxsIHVuZGVyZmxvdyBkaXJlY3RseSBvciBhZnRlciBjb252ZXJ0aW5nIGZvciAxNiBiaXQgY2hh
cmFjdGVycy4KICAgICAgICAgLy8gSWYgc28sIHdlIGRvIG91ciBvd24gYWRkcmVzcyBjYWxjdWxh
dGluZyBieSBhZGp1c3RpbmcgdGhlIGJhc2UsIHVzaW5nIHRoZSByZXN1bHQgcmVnaXN0ZXIKQEAg
LTY3MywxMSArNTc2LDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFy
ckoKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0QWRqdXN0QW1vdW50ID0gMHg0MDAwMDAwMDsKICAg
ICAgICAgaWYgKG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0ID4gbWF4aW11bU5lZ2F0aXZlT2Zmc2V0
Rm9yQ2hhcmFjdGVyU2l6ZSkgewogICAgICAgICAgICAgYmFzZSA9IHRlbXBSZWc7Ci0gICAgICAg
ICAgICBtb3ZlKGlucHV0LCBiYXNlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmlu
cHV0LCBiYXNlKTsKICAgICAgICAgICAgIHdoaWxlIChuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCA+
IG1heGltdW1OZWdhdGl2ZU9mZnNldEZvckNoYXJhY3RlclNpemUpIHsKLSAgICAgICAgICAgICAg
ICBzdWJQdHIoVHJ1c3RlZEltbTMyKG9mZnNldEFkanVzdEFtb3VudCksIGJhc2UpOworICAgICAg
ICAgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG9mZnNl
dEFkanVzdEFtb3VudCksIGJhc2UpOwogICAgICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplICE9
IENoYXJTaXplOjpDaGFyOCkKLSAgICAgICAgICAgICAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0z
MihvZmZzZXRBZGp1c3RBbW91bnQpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0QWRqdXN0QW1vdW50KSwg
YmFzZSk7CiAgICAgICAgICAgICAgICAgbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQgLT0gb2Zmc2V0
QWRqdXN0QW1vdW50OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODUsNjcgKzU4OCw3
MiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIENo
ZWNrZWQ8aW50MzJfdD4gY2hhcmFjdGVyT2Zmc2V0KC1zdGF0aWNfY2FzdDxpbnQzMl90PihuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCkpOwogCiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJT
aXplOjpDaGFyOCkKLSAgICAgICAgICAgIHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVn
LCBUaW1lc09uZSwgY2hhcmFjdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KGNoYXIpKSk7CisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCht
X3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIGNoYXJhY3Rl
ck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihjaGFyKSkpOwogCi0gICAgICAg
IHJldHVybiBCYXNlSW5kZXgoaW5wdXQsIGluZGV4UmVnLCBUaW1lc1R3bywgY2hhcmFjdGVyT2Zm
c2V0ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MuaW5wdXQsIGluZGV4UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNUd28sIGNoYXJhY3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGludDMy
X3Q+KHNpemVvZihVQ2hhcikpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09E
RV9FWFBSRVNTSU9OUykKLSAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhckltcGwoUmVnaXN0ZXJJ
RCByZXN1bHRSZWcpCisgICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXJJbXBsKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlc3VsdFJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NoYXJT
aXplID09IENoYXJTaXplOjpDaGFyMTYpOwogCi0gICAgICAgIEp1bXBMaXN0IG5vdFVuaWNvZGU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub3RVbmljb2RlOwogCi0gICAgICAg
IGxvYWQxNlVuYWxpZ25lZChBZGRyZXNzKHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKSwgcmVzdWx0
UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZDE2VW5hbGlnbmVkKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCksIHJlc3VsdFJlZyk7CiAKICAgICAg
ICAgLy8gSXMgdGhlIGNoYXJhY3RlciBhIGxlYWRpbmcgc3Vycm9nYXRlPwotICAgICAgICBhbmQz
MihzdXJyb2dhdGVUYWdNYXNrLCByZXN1bHRSZWcsIHVuaWNvZGVUZW1wKTsKLSAgICAgICAgbm90
VW5pY29kZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHVuaWNvZGVUZW1wLCBsZWFkaW5nU3Vy
cm9nYXRlVGFnKSk7CisgICAgICAgIG1faml0LmFuZDMyKFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJz
OjpzdXJyb2dhdGVUYWdNYXNrLCByZXN1bHRSZWcsIG1fcmVncy51bmljb2RlVGVtcCk7CisgICAg
ICAgIG5vdFVuaWNvZGUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgbV9yZWdzLnVuaWNvZGVUZW1wLCBtX3JlZ3MubGVhZGluZ1N1cnJvZ2F0ZVRhZykpOwog
CiAgICAgICAgIC8vIElzIHRoZSBpbnB1dCBsb25nIGVub3VnaCB0byByZWFkIGEgdHJhaWxpbmcg
c3Vycm9nYXRlPwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDIpLCByZWdVbmljb2RlSW5w
dXRBbmRUcmFpbCk7Ci0gICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKGJyYW5jaFB0cihBYm92ZU9y
RXF1YWwsIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsLCBlbmRPZlN0cmluZ0FkZHJlc3MpKTsKKyAg
ICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIG1fcmVn
cy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCk7CisgICAgICAgIG5vdFVuaWNvZGUuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBtX3JlZ3MucmVnVW5p
Y29kZUlucHV0QW5kVHJhaWwsIG1fcmVncy5lbmRPZlN0cmluZ0FkZHJlc3MpKTsKIAogICAgICAg
ICAvLyBJcyB0aGUgY2hhcmFjdGVyIGEgdHJhaWxpbmcgc3Vycm9nYXRlPwotICAgICAgICBsb2Fk
MTZVbmFsaWduZWQoQWRkcmVzcyhyZWdVbmljb2RlSW5wdXRBbmRUcmFpbCksIHJlZ1VuaWNvZGVJ
bnB1dEFuZFRyYWlsKTsKLSAgICAgICAgYW5kMzIoc3Vycm9nYXRlVGFnTWFzaywgcmVnVW5pY29k
ZUlucHV0QW5kVHJhaWwsIHVuaWNvZGVUZW1wKTsKLSAgICAgICAgbm90VW5pY29kZS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIHVuaWNvZGVUZW1wLCB0cmFpbGluZ1N1cnJvZ2F0ZVRhZykpOwor
ICAgICAgICBtX2ppdC5sb2FkMTZVbmFsaWduZWQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9y
ZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsKSwgbV9yZWdzLnJlZ1VuaWNvZGVJbnB1dEFuZFRy
YWlsKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoWWFyckpJVERlZmF1bHRSZWdpc3RlcnM6OnN1cnJv
Z2F0ZVRhZ01hc2ssIG1fcmVncy5yZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgbV9yZWdzLnVuaWNv
ZGVUZW1wKTsKKyAgICAgICAgbm90VW5pY29kZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBtX3JlZ3MudW5pY29kZVRlbXAsIG1fcmVncy50cmFpbGluZ1N1
cnJvZ2F0ZVRhZykpOwogCiAgICAgICAgIC8vIENvbWJpbmUgbGVhZGluZyBhbmQgdHJhaWxpbmcg
c3Vycm9nYXRlcyB0byBwcm9kdWNlIGEgY29kZSBwb2ludC4KLSAgICAgICAgbHNoaWZ0MzIoVHJ1
c3RlZEltbTMyKDEwKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgZ2V0RWZmZWN0aXZlQWRkcmVzcyhC
YXNlSW5kZXgocmVzdWx0UmVnLCByZWdVbmljb2RlSW5wdXRBbmRUcmFpbCwgVGltZXNPbmUsIC1V
MTZfU1VSUk9HQVRFX09GRlNFVCksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG5vdFVuaWNvZGUubGlu
ayh0aGlzKTsKKyAgICAgICAgbV9qaXQubHNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxMCksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmdldEVmZmVjdGl2ZUFkZHJlc3Mo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRSZWcsIG1fcmVncy5yZWdVbmljb2RlSW5w
dXRBbmRUcmFpbCwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCAtVTE2X1NVUlJPR0FURV9PRkZT
RVQpLCByZXN1bHRSZWcpOworICAgICAgICBub3RVbmljb2RlLmxpbmsoJm1faml0KTsKICAgICB9
CiAKLSAgICB2b2lkIHRyeVJlYWRVbmljb2RlQ2hhcihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0
ZXJJRCByZXN1bHRSZWcpCisgICAgdm9pZCB0cnlSZWFkVW5pY29kZUNoYXIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCBhZGRyZXNzLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXN1bHRS
ZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjE2
KTsKIAotICAgICAgICBnZXRFZmZlY3RpdmVBZGRyZXNzKGFkZHJlc3MsIHJlZ1VuaWNvZGVJbnB1
dEFuZFRyYWlsKTsKKyAgICAgICAgbV9qaXQuZ2V0RWZmZWN0aXZlQWRkcmVzcyhhZGRyZXNzLCBt
X3JlZ3MucmVnVW5pY29kZUlucHV0QW5kVHJhaWwpOwogCi0gICAgICAgIGlmIChyZXN1bHRSZWcg
PT0gcmVnVDApCi0gICAgICAgICAgICBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuYXBw
ZW5kKG5lYXJDYWxsKCkpOworICAgICAgICBpZiAocmVzdWx0UmVnID09IG1fcmVncy5yZWdUMCkK
KyAgICAgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5hcHBlbmQobV9qaXQu
bmVhckNhbGwoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRyeVJlYWRVbmljb2RlQ2hh
ckltcGwocmVzdWx0UmVnKTsKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICB2b2lkIHJlYWRDaGFy
YWN0ZXIoQ2hlY2tlZDx1bnNpZ25lZD4gbmVnYXRpdmVDaGFyYWN0ZXJPZmZzZXQsIFJlZ2lzdGVy
SUQgcmVzdWx0UmVnLCBSZWdpc3RlcklEIGluZGV4UmVnID0gaW5kZXgpCisgICAgdm9pZCByZWFk
Q2hhcmFjdGVyKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXN1bHRSZWcpCiAgICAgewotICAgICAgICBCYXNlSW5k
ZXggYWRkcmVzcyA9IG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3MobmVnYXRpdmVDaGFyYWN0
ZXJPZmZzZXQsIHJlc3VsdFJlZywgaW5kZXhSZWcpOworICAgICAgICByZWFkQ2hhcmFjdGVyKG5l
Z2F0aXZlQ2hhcmFjdGVyT2Zmc2V0LCByZXN1bHRSZWcsIG1fcmVncy5pbmRleCk7CisgICAgfQor
CisgICAgdm9pZCByZWFkQ2hhcmFjdGVyKENoZWNrZWQ8dW5zaWduZWQ+IG5lZ2F0aXZlQ2hhcmFj
dGVyT2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXN1bHRSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4UmVnKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCBhZGRyZXNzID0gbmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCwgcmVzdWx0UmVnLCBpbmRleFJlZyk7CiAKICAgICAgICAgaWYg
KG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAgICAgICAgbG9hZDgoYWRkcmVz
cywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KGFkZHJlc3MsIHJlc3VsdFJl
Zyk7CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGVs
c2UgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCiAgICAgICAgICAgICB0cnlSZWFkVW5pY29k
ZUNoYXIoYWRkcmVzcywgcmVzdWx0UmVnKTsKICNlbmRpZgogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2FkMTZVbmFsaWduZWQoYWRkcmVzcywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQxNlVuYWxpZ25lZChhZGRyZXNzLCByZXN1bHRSZWcpOwogICAgIH0KIAotICAgIEp1
bXAganVtcElmQ2hhck5vdEVxdWFscyhVQ2hhcjMyIGNoLCBDaGVja2VkPHVuc2lnbmVkPiBuZWdh
dGl2ZUNoYXJhY3Rlck9mZnNldCwgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcElmQ2hhck5vdEVxdWFscyhVQ2hhcjMyIGNoLCBDaGVja2VkPHVuc2ln
bmVkPiBuZWdhdGl2ZUNoYXJhY3Rlck9mZnNldCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
Y2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgcmVhZENoYXJhY3RlcihuZWdhdGl2ZUNoYXJhY3Rl
ck9mZnNldCwgY2hhcmFjdGVyKTsKIApAQCAtNzUzLDQzICs2NjEsNDMgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAvLyB1cHBlciAmIGxvd2VyIGNh
c2UgcmVwcmVzZW50YXRpb25zIGFyZSBjb252ZXJ0ZWQgdG8gYSBjaGFyYWN0ZXIgY2xhc3MuCiAg
ICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSB8fCBpc0FTQ0lJQWxwaGEoY2gp
IHx8IGlzQ2Fub25pY2FsbHlVbmlxdWUoY2gsIG1fY2Fub25pY2FsTW9kZSkpOwogICAgICAgICBp
ZiAobV9wYXR0ZXJuLmlnbm9yZUNhc2UoKSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAg
ICAgICBvcjMyKFRydXN0ZWRJbW0zMigweDIwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1f
aml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweDIwKSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgIGNoIHw9IDB4MjA7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gYnJh
bmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2gpKTsKKyAgICAgICAgcmV0dXJuIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIoY2gpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzdG9yZVRvRnJhbWUo
UmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24pCisgICAgdm9pZCBzdG9yZVRv
RnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBmcmFtZUxvY2F0
aW9uKQogICAgIHsKLSAgICAgICAgcG9rZShyZWcsIGZyYW1lTG9jYXRpb24pOworICAgICAgICBt
X2ppdC5wb2tlKHJlZywgZnJhbWVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBzdG9yZVRv
RnJhbWUoVHJ1c3RlZEltbTMyIGltbSwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKKyAgICB2b2lk
IHN0b3JlVG9GcmFtZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgdW5zaWduZWQg
ZnJhbWVMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHBva2UoaW1tLCBmcmFtZUxvY2F0aW9uKTsK
KyAgICAgICAgbV9qaXQucG9rZShpbW0sIGZyYW1lTG9jYXRpb24pOwogICAgIH0KIAogI2lmIENQ
VShBUk02NCkgfHwgQ1BVKFg4Nl82NCkKLSAgICB2b2lkIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1t
UHRyIGltbSwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbikKKyAgICB2b2lkIHN0b3JlVG9GcmFtZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciBpbW0sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24p
CiAgICAgewotICAgICAgICBwb2tlKGltbSwgZnJhbWVMb2NhdGlvbik7CisgICAgICAgIG1faml0
LnBva2UoaW1tLCBmcmFtZUxvY2F0aW9uKTsKICAgICB9CiAjZW5kaWYKIAotICAgIERhdGFMYWJl
bFB0ciBzdG9yZVRvRnJhbWVXaXRoUGF0Y2godW5zaWduZWQgZnJhbWVMb2NhdGlvbikKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIHN0b3JlVG9GcmFtZVdpdGhQYXRjaCh1bnNpZ25l
ZCBmcmFtZUxvY2F0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0b3JlUHRyV2l0aFBhdGNo
KFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZy
YW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CisgICAgICAgIHJldHVybiBtX2ppdC5zdG9y
ZVB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgIH0KIAotICAgIHZvaWQgbG9h
ZEZyb21GcmFtZSh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCBSZWdpc3RlcklEIHJlZykKKyAgICB2
b2lkIGxvYWRGcm9tRnJhbWUodW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgcmVnKQogICAgIHsKLSAgICAgICAgcGVlayhyZWcsIGZyYW1lTG9jYXRpb24p
OworICAgICAgICBtX2ppdC5wZWVrKHJlZywgZnJhbWVMb2NhdGlvbik7CiAgICAgfQogCiAgICAg
dm9pZCBsb2FkRnJvbUZyYW1lQW5kSnVtcCh1bnNpZ25lZCBmcmFtZUxvY2F0aW9uKQogICAgIHsK
LSAgICAgICAgZmFySnVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0
aW9uICogc2l6ZW9mKHZvaWQqKSksIFlhcnJCYWNrdHJhY2tQdHJUYWcpOworICAgICAgICBtX2pp
dC5mYXJKdW1wKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBZYXJyQmFja3Ry
YWNrUHRyVGFnKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5
dGVzKHVuc2lnbmVkIGNhbGxGcmFtZVNpemUpCkBAIC04MDcsMTMgKzcxNSwyMSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgewogICAgICAgICB1bnNpZ25l
ZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0
ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKICAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJ
bkJ5dGVzKQotICAgICAgICAgICAgYWRkUHRyKEltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMihjYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUZhaWxSZXR1cm4o
KQogICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCh2b2lkKilXVEY6Om5vdEZvdW5k
KSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmV0dXJu
UmVnaXN0ZXIyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigodm9pZCopV1RGOjpub3RGb3VuZCksIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbV9yZWdzLnJl
dHVyblJlZ2lzdGVyMik7CisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5F
KQorICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5saW5lVGVz
dCkgeworICAgICAgICAgICAgbV9pbmxpbmVkRmFpbGVkTWF0Y2guYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CiAgICAgfQogCkBAIC04MjIsNDggKzczOCw0MiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIGlmIChtX2Fib3J0RXhlY3V0
aW9uLmVtcHR5KCkgJiYgbV9oaXRNYXRjaExpbWl0LmVtcHR5KCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgSnVtcExpc3QgZmluaXNoRXhpdGluZzsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZpbmlzaEV4aXRpbmc7CiAgICAgICAgIGlmICghbV9hYm9ydEV4ZWN1
dGlvbi5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2Fib3J0RXhlY3V0aW9uLmxpbmsodGhpcyk7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVf
dD4oLTIpKSwgcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICAgICAgZmluaXNoRXhpdGluZy5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24ubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigodm9p
ZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAgICAgZmluaXNoRXhpdGluZy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghbV9oaXRNYXRjaExpbWl0LmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG1f
aGl0TWF0Y2hMaW1pdC5saW5rKHRoaXMpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIG1faGl0TWF0Y2hMaW1pdC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXpl
X3Q+KC0xKSksIG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAgICAgICAgIH0KIAotICAgICAgICBm
aW5pc2hFeGl0aW5nLmxpbmsodGhpcyk7CisgICAgICAgIGZpbmlzaEV4aXRpbmcubGluaygmbV9q
aXQpOwogICAgICAgICByZW1vdmVDYWxsRnJhbWUoKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJldHVyblJlZ2lzdGVyMik7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyMik7CiAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byByZWNvcmQgc3VicGF0dGVy
bnMsIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBtX2NvbXBpbGVNb2RlIGlzIEpJVENvbXBpbGVN
b2RlOjpJbmNsdWRlU3VicGF0dGVybnMuCi0gICAgdm9pZCBzZXRTdWJwYXR0ZXJuU3RhcnQoUmVn
aXN0ZXJJRCByZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCisgICAgdm9pZCBzZXRTdWJwYXR0ZXJu
U3RhcnQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBzdWJwYXR0ZXJu
KQogICAgIHsKICAgICAgICAgQVNTRVJUKHN1YnBhdHRlcm4pOwogICAgICAgICAvLyBGSVhNRTog
c2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6
OkluY2x1ZGVTdWJwYXR0ZXJucyksIGJ1dCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY29uZGl0aW9u
YWxseSBOT1JFVFVSTi4gOi0oCi0gICAgICAgIHN0b3JlMzIocmVnLCBBZGRyZXNzKG91dHB1dCwg
KHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2YoaW50KSkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KHJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4g
PDwgMSkgKiBzaXplb2YoaW50KSkpOwogICAgIH0KLSAgICB2b2lkIHNldFN1YnBhdHRlcm5FbmQo
UmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIHN1YnBhdHRlcm4pCisgICAgdm9pZCBzZXRTdWJwYXR0
ZXJuRW5kKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgc3VicGF0dGVy
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChzdWJwYXR0ZXJuKTsKICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2Rl
OjpJbmNsdWRlU3VicGF0dGVybnMpLCBidXQgdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlv
bmFsbHkgTk9SRVRVUk4uIDotKAotICAgICAgICBzdG9yZTMyKHJlZywgQWRkcmVzcyhvdXRwdXQs
ICgoc3VicGF0dGVybiA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihyZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQsICgoc3Vi
cGF0dGVybiA8PCAxKSArIDEpICogc2l6ZW9mKGludCkpKTsKICAgICB9CiAgICAgdm9pZCBjbGVh
clN1YnBhdHRlcm5TdGFydCh1bnNpZ25lZCBzdWJwYXR0ZXJuKQogICAgIHsKICAgICAgICAgQVNT
RVJUKHN1YnBhdHRlcm4pOwogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUgdG8gQVNT
RVJUKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucyks
IGJ1dCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBOT1JFVFVSTi4gOi0oCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsIChzdWJwYXR0
ZXJuIDw8IDEpICogc2l6ZW9mKGludCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTWF0Y2hl
cyh1bnNpZ25lZCBzdWJwYXR0ZXJuLCB1bnNpZ25lZCBsYXN0U3VicGF0dGVybikKLSAgICB7Ci0g
ICAgICAgIGZvciAoOyBzdWJwYXR0ZXJuIDw9IGxhc3RTdWJwYXR0ZXJuOyBzdWJwYXR0ZXJuKysp
Ci0gICAgICAgICAgICBjbGVhclN1YnBhdHRlcm5TdGFydChzdWJwYXR0ZXJuKTsKKyAgICAgICAg
bV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm4gPDwgMSkgKiBzaXplb2Yo
aW50KSkpOwogICAgIH0KIAogICAgIC8vIFdlIHVzZSBvbmUgb2YgdGhyZWUgZGlmZmVyZW50IHN0
cmF0ZWdpZXMgdG8gdHJhY2sgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IG1hdGNoLApAQCAtODcx
LDI1ICs3ODEsMjUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgog
ICAgIC8vIDEpIElmIHRoZSBwYXR0ZXJuIGhhcyBhIGZpeGVkIHNpemUsIGRvIG5vdGhpbmchIC0g
d2UgY2FsY3VsYXRlIHRoZSB2YWx1ZSBsYXppbHkKICAgICAvLyAgICBhdCB0aGUgZW5kIG9mIG1h
dGNoaW5nLiBUaGlzIGlzIGlycmVzcGVjdGl2ZSBvZiBtX2NvbXBpbGVNb2RlLCBhbmQgaW4gdGhp
cyBjYXNlCiAgICAgLy8gICAgdGhlc2UgbWV0aG9kcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLgot
ICAgIC8vIDIpIElmIHdlJ3JlIGNvbXBpbGluZyBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBh
dHRlcm5zLCAnb3V0cHV0JyBjb250YWlucyBhIHBvaW50ZXIgdG8gYW4gb3V0cHV0CisgICAgLy8g
MikgSWYgd2UncmUgY29tcGlsaW5nIEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMs
ICdtX3JlZ3Mub3V0cHV0JyBjb250YWlucyBhIHBvaW50ZXIgdG8gYW4gb3V0cHV0CiAgICAgLy8g
ICAgdmVjdG9yLCBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW4gdGhlIG91dHB1dCB2ZWN0b3IuCi0g
ICAgLy8gMykgSWYgd2UncmUgY29tcGlsaW5nIE1hdGNoT25seSwgJ291dHB1dCcgaXMgdW51c2Vk
LCBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgZGlyZWN0bHkKKyAgICAvLyAzKSBJZiB3ZSdyZSBjb21w
aWxpbmcgTWF0Y2hPbmx5IG9yIElubGluZWRUZXN0LCAnbV9yZWdzLm91dHB1dCcgaXMgdW51c2Vk
LCBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgZGlyZWN0bHkKICAgICAvLyAgICBpbiB0aGlzIHJlZ2lz
dGVyLgotICAgIHZvaWQgc2V0TWF0Y2hTdGFydChSZWdpc3RlcklEIHJlZykKKyAgICB2b2lkIHNl
dE1hdGNoU3RhcnQoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAgIGlm
IChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMpCi0g
ICAgICAgICAgICBzdG9yZTMyKHJlZywgQWRkcmVzcyhvdXRwdXQpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0KSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1vdmUocmVnLCBvdXRwdXQpOworICAgICAgICAg
ICAgbV9qaXQubW92ZShyZWcsIG1fcmVncy5vdXRwdXQpOwogICAgIH0KLSAgICB2b2lkIGdldE1h
dGNoU3RhcnQoUmVnaXN0ZXJJRCByZWcpCisgICAgdm9pZCBnZXRNYXRjaFN0YXJ0KE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJu
Lm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBK
SVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3Mob3V0cHV0KSwgcmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhtX3JlZ3Mub3V0cHV0KSwgcmVnKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbW92ZShvdXRwdXQsIHJlZyk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5v
dXRwdXQsIHJlZyk7CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBZYXJyT3BDb2RlIDogdWludDhf
dCB7CkBAIC05NjUsMTIgKzg3NSwxMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgIC8vIHVzZWQgZm9yIGp1bXBzIG91dCB0byBiYWNrdHJhY2tpbmcg
Y29kZSwgYW5kIGEgc2luZ2xlIHJlZW50cnkgYmFjawogICAgICAgICAvLyBpbnRvIHRoZSBjb2Rl
IGZvciBhIG5vZGUgKGxpa2VseSB3aGVyZSBhIGJhY2t0cmFjayB3aWxsIHRyaWdnZXIKICAgICAg
ICAgLy8gcmVtYXRjaGluZykuCi0gICAgICAgIExhYmVsIG1fcmVlbnRyeTsKLSAgICAgICAgSnVt
cExpc3QgbV9qdW1wczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fcmVlbnRyeTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fanVtcHM7CiAKICAgICAgICAgLy8g
VXNlZCBmb3IgYmFja3RyYWNraW5nIHdoZW4gdGhlIHByaW9yIGFsdGVybmF0aXZlIGRpZCBub3Qg
Y29uc3VtZSBhbnkKICAgICAgICAgLy8gY2hhcmFjdGVycyBidXQgbWF0Y2hlZC4KLSAgICAgICAg
SnVtcCBtX3plcm9MZW5ndGhNYXRjaDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV96
ZXJvTGVuZ3RoTWF0Y2g7CiAKICAgICAgICAgLy8gVGhpcyBmbGFnIGlzIHVzZWQgdG8gbnVsbCBv
dXQgdGhlIHNlY29uZCBwYXR0ZXJuIGNoYXJhY3Rlciwgd2hlbgogICAgICAgICAvLyB0d28gYXJl
IGZ1c2VkIHRvIG1hdGNoIGEgcGFpciB0b2dldGhlci4KQEAgLTk4NCw3ICs4OTQsNyBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIC8vIFVzZWQgYnkg
WWFyck9wQ29kZTo6TmVzdGVkQWx0ZXJuYXRpdmVOZXh0L0VuZCB0byBob2xkIHRoZSBwb2ludGVy
IHRvIHRoZQogICAgICAgICAvLyB2YWx1ZSB0aGF0IHdpbGwgYmUgcHVzaGVkIGludG8gdGhlIHBh
dHRlcm4ncyBmcmFtZSB0byByZXR1cm4gdG8sCiAgICAgICAgIC8vIHVwb24gYmFja3RyYWNraW5n
IGJhY2sgaW50byB0aGUgZGlzanVuY3Rpb24uCi0gICAgICAgIERhdGFMYWJlbFB0ciBtX3JldHVy
bkFkZHJlc3M7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbV9yZXR1cm5B
ZGRyZXNzOwogCiAgICAgICAgIEJveWVyTW9vcmVJbmZvKiBtX2JtSW5mbyB7IG51bGxwdHIgfTsK
ICAgICB9OwpAQCAtMTAwNiw3ICs5MTYsMjEgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgIC8vICAtIEEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGN1cnJl
bnQgc2VxdWVuY2Ugb2YgZ2VuZXJhdGVkIGNvZGUgdXAgdG8KICAgICAvLyAgICB0aGlzIHBvaW50
IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KICAgICBjbGFzcyBCYWNrdHJhY2tpbmdTdGF0ZSB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgc3RydWN0IFJldHVybkFkZHJlc3NSZWNvcmQgeworICAgICAg
ICAgICAgUmV0dXJuQWRkcmVzc1JlY29yZChNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGRh
dGFMYWJlbCwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJhY2t0cmFja0xvY2F0aW9uKQorICAgICAg
ICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQorICAgICAgICAgICAgICAgICwgbV9i
YWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtX2Rh
dGFMYWJlbDsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2JhY2t0cmFja0xv
Y2F0aW9uOworICAgICAgICB9OworCiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIFZlY3Rv
cjxSZXR1cm5BZGRyZXNzUmVjb3JkLCA0PiBCYWNrdHJhY2tSZWNvcmRzOworCiAgICAgICAgIEJh
Y2t0cmFja2luZ1N0YXRlKCkKICAgICAgICAgICAgIDogbV9wZW5kaW5nRmFsbHRocm91Z2goZmFs
c2UpCiAgICAgICAgIHsKQEAgLTEwMTQsMTUgKzkzOCwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgLy8gQWRkIGEganVtcCBvciBqdW1wcywg
YSByZXR1cm4gYWRkcmVzcywgb3Igc2V0IHRoZSBmbGFnIGluZGljYXRpbmcKICAgICAgICAgLy8g
dGhhdCB0aGUgY3VycmVudCAnZmFsbHRocm91Z2gnIGNvbnRyb2wgZmxvdyByZXF1aXJlcyBiYWNr
dHJhY2tpbmcuCi0gICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXAmIGp1bXApCisgICAgICAg
IHZvaWQgYXBwZW5kKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXApOwogICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBqdW1wTGlzdCkKKyAgICAgICAgdm9pZCBhcHBl
bmQoTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wTGlzdCkKICAgICAgICAgewogICAgICAg
ICAgICAgbV9sYXRlckZhaWx1cmVzLmFwcGVuZChqdW1wTGlzdCk7CiAgICAgICAgIH0KLSAgICAg
ICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YUxhYmVsUHRyJiByZXR1cm5BZGRyZXNzKQorICAgICAg
ICB2b2lkIGFwcGVuZChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyJiByZXR1cm5B
ZGRyZXNzKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmFwcGVuZChy
ZXR1cm5BZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTAzOSw3ICs5NjMsNyBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIHZvaWQgbGluayhNYWNyb0Fz
c2VtYmxlciogYXNzZW1ibGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5n
UmV0dXJucy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2VtYmxlcik7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1ibGVyKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJu
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFw
cGVuZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUpKTsKICAg
ICAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDQ4LDcgKzk3Miw3
IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAg
IG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigpOwogICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91
Z2ggPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtUbyhMYWJlbCBsYWJlbCwg
TWFjcm9Bc3NlbWJsZXIqIGFzc2VtYmxlcikKKyAgICAgICAgdm9pZCBsaW5rVG8oTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciogYXNzZW1ibGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5zaXplKCk7ICsr
aSkKQEAgLTEwNjEsMTAgKzk4NSwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuY2xlYXIoKTsKICAgICAgICAg
ICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgdm9p
ZCB0YWtlQmFja3RyYWNrc1RvSnVtcExpc3QoSnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2Vt
YmxlciogYXNzZW1ibGVyKQorICAgICAgICB2b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2VtYmxlciogYXNzZW1i
bGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkp
IHsKLSAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFzc2VtYmxlcik7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGhlcmUoYXNzZW1ibGVyKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nUmV0dXJucy5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChSZXR1cm5BZGRy
ZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGhlcmUpKTsKICAgICAgICAgICAgICAgICBt
X3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CkBAIC0xMDgyLDYgKzEwMDYsMTcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgcmV0dXJuIG1fbGF0
ZXJGYWlsdXJlcy5lbXB0eSgpICYmIG1fcGVuZGluZ1JldHVybnMuaXNFbXB0eSgpICYmICFtX3Bl
bmRpbmdGYWxsdGhyb3VnaDsKICAgICAgICAgfQogCisgICAgICAgIEJhY2t0cmFja1JlY29yZHMm
IGJhY2t0cmFja1JlY29yZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNr
dHJhY2tSZWNvcmRzOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0JhY2t0
cmFja1JlY29yZHMoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgY29uc3QgQmFja3RyYWNrUmVjb3Jk
cyYgYmFja3RyYWNrUmVjb3JkcykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhY2t0cmFja1JlY29yZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5wYXRjaChiYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxhYmVsLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8WWFyckJhY2t0cmFja1B0clRhZz4oYmFja3RyYWNrUmVjb3Jkc1tp
XS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBDYWxsZWQg
YXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGluayBhbGwgcmV0dXJuIGFkZHJlc3Nl
cy4KICAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQog
ICAgICAgICB7CkBAIC0xMDkxLDIwICsxMDI2LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdHJ1
Y3QgUmV0dXJuQWRkcmVzc1JlY29yZCB7Ci0gICAgICAgICAgICBSZXR1cm5BZGRyZXNzUmVjb3Jk
KERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExhYmVsIGJhY2t0cmFja0xvY2F0aW9uKQotICAgICAg
ICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQotICAgICAgICAgICAgICAgICwgbV9i
YWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsOwotICAgICAg
ICAgICAgTGFiZWwgbV9iYWNrdHJhY2tMb2NhdGlvbjsKLSAgICAgICAgfTsKLQotICAgICAgICBK
dW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBtX2xhdGVyRmFpbHVyZXM7CiAgICAgICAgIGJvb2wgbV9wZW5kaW5nRmFsbHRocm91Z2g7Ci0g
ICAgICAgIFZlY3RvcjxEYXRhTGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVybnM7CisgICAgICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyLCA0PiBtX3BlbmRpbmdSZXR1cm5z
OwogICAgICAgICBWZWN0b3I8UmV0dXJuQWRkcmVzc1JlY29yZCwgND4gbV9iYWNrdHJhY2tSZWNv
cmRzOwogICAgIH07CiAKQEAgLTExMjcsMjMgKzEwNTEsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1f
dGVybTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogCi0g
ICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0
aW9uKQotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGlu
ZGV4LCBJbW0zMihtX2NoZWNrZWRPZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKIAogICAgICAgICAg
ICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uICsg
MSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVy
LCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7
CisgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQgdGhlc2UgYWx0ZXJu
YXRpdmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uKQot
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgs
IEltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1fcmVncy5pbmRl
eCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG1fY2hlY2tlZE9mZnNldCkpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbkJPTChzaXplX3Qgb3BJbmRleCkKQEAg
LTExNTcsMjMgKzEwODEsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAogICAgICAgICBp
ZiAobV9wYXR0ZXJuLm11bHRpbGluZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZWdpc3RlcklE
IGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOwogCi0gICAgICAgICAgICBKdW1wTGlz
dCBtYXRjaERlc3Q7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hE
ZXN0OwogICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0gbV9jaGVja2VkT2Zm
c2V0KQogICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwog
CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0
UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNo
YXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3RlckNsYXNzKCkpOwot
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG1hdGNoRGVzdC5saW5r
KHRoaXMpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsoJm1faml0KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tlZE9m
ZnNldCkKICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChub3RBdEVuZE9mSW5wdXQo
KSk7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBh
bHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIGJhY2t0cmFj
a0Fzc2VydGlvbkVPTChzaXplX3Qgb3BJbmRleCkKQEAgLTExODIsMTIgKzExMDYsMTIgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgIH0KIAogICAgIC8vIEFs
c28gZmFsbHMgdGhvdWdoIG9uIG5leHRJc05vdFdvcmRDaGFyLgotICAgIHZvaWQgbWF0Y2hBc3Nl
cnRpb25Xb3JkY2hhcihzaXplX3Qgb3BJbmRleCwgSnVtcExpc3QmIG5leHRJc1dvcmRDaGFyLCBK
dW1wTGlzdCYgbmV4dElzTm90V29yZENoYXIpCisgICAgdm9pZCBtYXRjaEFzc2VydGlvbldvcmRj
aGFyKHNpemVfdCBvcEluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJc1dvcmRD
aGFyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIG5leHRJc05vdFdvcmRDaGFyKQogICAgIHsK
ICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3Rl
ciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24g
PT0gbV9jaGVja2VkT2Zmc2V0KQogICAgICAgICAgICAgbmV4dElzTm90V29yZENoYXIuYXBwZW5k
KGF0RW5kT2ZJbnB1dCgpKTsKQEAgLTEyMDksMTIgKzExMzMsMTIgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJ
bmRleF07CiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKIAotICAgICAg
ICBKdW1wIGF0QmVnaW47Ci0gICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYXRCZWdpbjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IG1hdGNoRGVzdDsKICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQotICAgICAg
ICAgICAgYXRCZWdpbiA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkT2Zm
c2V0KSk7CisgICAgICAgICAgICBhdEJlZ2luID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihtX2NoZWNrZWRP
ZmZzZXQpKTsKICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSB0ZXJtLT5p
bnB1dFBvc2l0aW9uICsgMSwgY2hhcmFjdGVyKTsKIAogICAgICAgICBDaGFyYWN0ZXJDbGFzcyog
d29yZGNoYXJDaGFyYWN0ZXJDbGFzczsKQEAgLTEyMjYsMjcgKzExNTAsMjcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIG1hdGNoQ2hhcmFjdGVy
Q2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHdvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MpOwogICAg
ICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICBhdEJlZ2luLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBhdEJlZ2luLmxpbmsoJm1faml0KTsKIAogICAgICAgICAvLyBX
ZSBmYWxsIHRocm91Z2ggdG8gaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIG5vdCBhIHdv
cmRjaGFyLgotICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKLSAgICAg
ICAgSnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyOwogICAgICAgICBp
ZiAodGVybS0+aW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIo
b3BJbmRleCwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIsIG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyKTsKLSAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgbm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFy
KG9wSW5kZXgsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5Ob25Xb3Jk
Q2hhcik7Ci0gICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICB9CiAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG5vbldvcmRD
aGFyVGhlbk5vbldvcmRDaGFyKTsKIAogICAgICAgICAvLyBXZSBqdW1wIGhlcmUgaWYgdGhlIGxh
c3QgY2hhcmFjdGVyIHdhcyBhIHdvcmRjaGFyLgotICAgICAgICBtYXRjaERlc3QubGluayh0aGlz
KTsKLSAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENoYXI7Ci0gICAgICAgIEp1bXBM
aXN0IHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyOworICAgICAgICBtYXRjaERlc3QubGluaygmbV9q
aXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENo
YXI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCB3b3JkQ2hhclRoZW5Ob25Xb3Jk
Q2hhcjsKICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKSB7CiAgICAgICAgICAgICBtYXRjaEFz
c2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCB3b3JkQ2hh
clRoZW5Xb3JkQ2hhcik7Ci0gICAgICAgICAgICB3b3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgICAgIHdvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3Jk
Y2hhcihvcEluZGV4LCB3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgd29yZENoYXJUaGVuTm9uV29yZENo
YXIpOwogICAgICAgICAgICAgLy8gVGhpcyBjYW4gZmFsbC10aG91Z2ghCkBAIC0xMjU0LDggKzEx
NzgsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAg
ICAgb3AubV9qdW1wcy5hcHBlbmQod29yZENoYXJUaGVuV29yZENoYXIpOwogCi0gICAgICAgIG5v
bldvcmRDaGFyVGhlbldvcmRDaGFyLmxpbmsodGhpcyk7Ci0gICAgICAgIHdvcmRDaGFyVGhlbk5v
bldvcmRDaGFyLmxpbmsodGhpcyk7CisgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmxp
bmsoJm1faml0KTsKKyAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIubGluaygmbV9qaXQp
OwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFja0Fzc2VydGlvbldvcmRCb3VuZGFyeShzaXplX3Qg
b3BJbmRleCkKICAgICB7CkBAIC0xMjYzLDQwICsxMTg3LDQwIEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQkFD
S1JFRkVSRU5DRVMpCi0gICAgdm9pZCBtYXRjaEJhY2tyZWZlcmVuY2Uoc2l6ZV90IG9wSW5kZXgs
IEp1bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBSZWdpc3RlcklEIGNoYXJhY3RlciwgUmVn
aXN0ZXJJRCBwYXR0ZXJuSW5kZXgsIFJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKKyAgICB2
b2lkIG1hdGNoQmFja3JlZmVyZW5jZShzaXplX3Qgb3BJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBjaGFyYWN0ZXJNYXRjaEZhaWxzLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBhdHRlcm5JbmRleCwgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIFlh
cnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBv
cC5tX3Rlcm07CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZl
cmVuY2VTdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKIAogICAgICAgICByZWFkQ2hhcmFj
dGVyKDAsIHBhdHRlcm5DaGFyYWN0ZXIsIHBhdHRlcm5JbmRleCk7CiAgICAgICAgIHJlYWRDaGFy
YWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hhcmFjdGVyKTsK
ICAgICAKICAgICAgICAgaWYgKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpKQotICAgICAgICAgICAg
Y2hhcmFjdGVyTWF0Y2hGYWlscy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3Rlciwg
cGF0dGVybkNoYXJhY3RlcikpOworICAgICAgICAgICAgY2hhcmFjdGVyTWF0Y2hGYWlscy5hcHBl
bmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0ZXIsIHBh
dHRlcm5DaGFyYWN0ZXIpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKdW1wIGNoYXJh
Y3RlcnNNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIHBhdHRlcm5DaGFyYWN0ZXIp
OwotICAgICAgICAgICAgRXh0ZW5kZWRBZGRyZXNzIGNoYXJhY3RlclRhYmxlRW50cnkoY2hhcmFj
dGVyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PigmY2Fub25pY2FsVGFibGVMQ2hhcikpOwot
ICAgICAgICAgICAgbG9hZDE2KGNoYXJhY3RlclRhYmxlRW50cnksIGNoYXJhY3Rlcik7Ci0gICAg
ICAgICAgICBFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNoYXJhY3Rl
ciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKLSAg
ICAgICAgICAgIGxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
Y2hhcmFjdGVyLCBwYXR0ZXJuQ2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzTWF0
Y2gubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoYXJhY3Rl
cnNNYXRjaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgY2hhcmFjdGVy
LCBwYXR0ZXJuQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRl
ZEFkZHJlc3MgY2hhcmFjdGVyVGFibGVFbnRyeShjaGFyYWN0ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KCZjYW5vbmljYWxUYWJsZUxDaGFyKSk7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
MTYoY2hhcmFjdGVyVGFibGVFbnRyeSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgcGF0dGVyblRhYmxlRW50cnkocGF0dGVybkNoYXJhY3Rl
ciwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oJmNhbm9uaWNhbFRhYmxlTENoYXIpKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQxNihwYXR0ZXJuVGFibGVFbnRyeSwgcGF0dGVybkNoYXJhY3Rl
cik7CisgICAgICAgICAgICBjaGFyYWN0ZXJNYXRjaEZhaWxzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgcGF0dGVybkNoYXJhY3Rlcikp
OworICAgICAgICAgICAgY2hhcmFjdGVyc01hdGNoLmxpbmsoJm1faml0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7CiAK
ICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKLSAgICAgICAgICAgIEp1bXAg
aXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFyeVBs
YW5lc0Jhc2UpOwotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0g
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHBhdHRlcm5JbmRleCk7Ci0gICAgICAg
ICAgICBpc0JNUENoYXIubGluayh0aGlzKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGlzQk1QQ2hhciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
Y2hhcmFjdGVyLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4
KTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSksIHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIHBhdHRlcm5JbmRleCwgQWRk
cmVzcyhvdXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpLmxp
bmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5v
dXRwdXQsICgoc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpLmxpbmtUbyhs
b29wLCAmbV9qaXQpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVCYWNrUmVmZXJlbmNlKHNp
emVfdCBvcEluZGV4KQpAQCAtMTMxMiwxMTYgKzEyMzYsMTE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0g
dGVybS0+YmFja1JlZmVyZW5jZVN1YnBhdHRlcm5JZDsKICAgICAgICAgdW5zaWduZWQgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIAotICAgICAgICBjb25z
dCBSZWdpc3RlcklEIGNoYXJhY3Rlck9yVGVtcCA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdp
c3RlcklEIHBhdHRlcm5JbmRleCA9IHJlZ1QxOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIHBh
dHRlcm5UZW1wID0gcmVnVDI7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNoYXJhY3Rlck9yVGVtcCA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF0dGVybkluZGV4ID0gbV9yZWdzLnJlZ1QxOworICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuVGVtcCA9IG1fcmVncy5y
ZWdUMjsKIAotICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOworICAgICAg
ICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpKTsKICAgICAgICAgaWYgKHRl
cm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0ZXJtLT5x
dWFudGl0eU1heENvdW50ICE9IDEpCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZElt
bTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVy
ZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAotICAgICAg
ICBKdW1wTGlzdCBtYXRjaGVzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0
Y2hlczsKIAogICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBl
OjpOb25HcmVlZHkpIHsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwgc3VicGF0
dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgIGxvYWRTdWJQ
YXR0ZXJuKG1fcmVncy5vdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAKICAgICAgICAgICAgIC8vIEFuIGVtcHR5IG1hdGNoIGlzIHN1Y2Nlc3NmdWwgd2l0
aG91dCBjb25zdW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5
VHlwZSAhPSBRdWFudGlmaWVyVHlwZTo6Rml4ZWRDb3VudCB8fCB0ZXJtLT5xdWFudGl0eU1heENv
dW50ICE9IDEpIHsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbWF0
Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApKTsK
KyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSnVtcCB6ZXJvTGVuZ3RoTWF0Y2ggPSBicmFu
Y2gzMihFcXVhbCwgVHJ1c3RlZEltbTMyKC0xKSwgcGF0dGVybkluZGV4KTsKLSAgICAgICAgICAg
ICAgICBKdW1wIHRyeU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5k
ZXgsIHBhdHRlcm5UZW1wKTsKLSAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0Y2gubGluayh0
aGlzKTsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKDEpLCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hB
bW91bnRJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICAgICAgICAgIHRyeU5vblplcm9NYXRjaC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHplcm9MZW5ndGhNYXRjaCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSks
IHBhdHRlcm5JbmRleCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ5
Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBw
YXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0
Y2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIHRyeU5vblpl
cm9NYXRjaC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBzd2l0Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZpZXJU
eXBlOjpGaXhlZENvdW50OiB7Ci0gICAgICAgICAgICBMYWJlbCBvdXRlckxvb3AodGhpcyk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgb3V0ZXJMb29wKCZtX2ppdCk7CiAKICAg
ICAgICAgICAgIC8vIFBhdHRlcm5UZW1wIHNob3VsZCBjb250YWluIHBhdHRlcm4gZW5kIGluZGV4
IGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVyblRl
bXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkluZGV4LCBwYXR0ZXJuVGVtcCk7
CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KHBhdHRl
cm5UZW1wKSk7CiAKICAgICAgICAgICAgIG1hdGNoQmFja3JlZmVyZW5jZShvcEluZGV4LCBvcC5t
X2p1bXBzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSAxKSB7CiAgICAgICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpLCBjaGFyYWN0ZXJPclRlbXApOwot
ICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyT3JUZW1wKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBjaGFyYWN0ZXJPclRlbXApOwogICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShjaGFy
YWN0ZXJPclRlbXAsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNr
UmVmZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1hdGNoZXMu
YXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hh
cmFjdGVyT3JUZW1wKSk7Ci0gICAgICAgICAgICAgICAgbG9hZFN1YlBhdHRlcm4ob3V0cHV0LCBz
dWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwotICAgICAgICAgICAgICAg
IGp1bXAob3V0ZXJMb29wKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJt
LT5xdWFudGl0eU1heENvdW50KSwgY2hhcmFjdGVyT3JUZW1wKSk7CisgICAgICAgICAgICAgICAg
bG9hZFN1YlBhdHRlcm4obV9yZWdzLm91dHB1dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgs
IHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG91dGVyTG9vcCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICBtYXRjaGVzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5OiB7Ci0gICAgICAgICAgICBKdW1w
TGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBpbmNvbXBsZXRlTWF0Y2hlczsKIAotICAgICAgICAgICAgTGFiZWwgb3V0ZXJMb29wKHRo
aXMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG91dGVyTG9vcCgmbV9qaXQp
OwogCiAgICAgICAgICAgICAvLyBQYXR0ZXJuVGVtcCBzaG91bGQgY29udGFpbiBwYXR0ZXJuIGVu
ZCBpbmRleCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICBzdWIzMihwYXR0ZXJuSW5kZXgsIHBh
dHRlcm5UZW1wKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKHBhdHRlcm5JbmRleCwgcGF0dGVy
blRlbXApOwogICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoY2hlY2tOb3RFbm91Z2hJbnB1dChw
YXR0ZXJuVGVtcCkpOwogCiAgICAgICAgICAgICBtYXRjaEJhY2tyZWZlcmVuY2Uob3BJbmRleCwg
aW5jb21wbGV0ZU1hdGNoZXMsIGNoYXJhY3Rlck9yVGVtcCwgcGF0dGVybkluZGV4LCBwYXR0ZXJu
VGVtcCk7CiAKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgY2hh
cmFjdGVyT3JUZW1wKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY2hhcmFj
dGVyT3JUZW1wKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIGNoYXJhY3Rlck9yVGVtcCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUo
Y2hhcmFjdGVyT3JUZW1wLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZv
QmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eU1heENvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCi0gICAgICAgICAgICAgICAg
bWF0Y2hlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQpLCBjaGFyYWN0ZXJPclRlbXApKTsKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1
dCwgc3VicGF0dGVybklkLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAgICAg
ICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSwgY2hhcmFjdGVy
T3JUZW1wKSk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJw
YXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAgICAgICAgICAgICAvLyBT
dG9yZSBjdXJyZW50IGluZGV4IGluIGZyYW1lIGZvciByZXN0b3JpbmcgYWZ0ZXIgYSBwYXJ0aWFs
IG1hdGNoCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCkpOwotICAg
ICAgICAgICAganVtcChvdXRlckxvb3ApOworICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVn
cy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZl
cmVuY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG91dGVyTG9vcCk7
CiAKLSAgICAgICAgICAgIGluY29tcGxldGVNYXRjaGVzLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9C
YWNrUmVmZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGluY29tcGxl
dGVNYXRjaGVzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5k
ZXgoKSwgbV9yZWdzLmluZGV4KTsKIAotICAgICAgICAgICAgbWF0Y2hlcy5saW5rKHRoaXMpOwot
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIG1hdGNoZXMu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBRdWFudGlmaWVy
VHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hl
czsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBpbmNvbXBsZXRlTWF0Y2hl
czsKIAotICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG1h
dGNoZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9
IGxhYmVsKCk7CisgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCi0g
ICAgICAgICAgICBsb2FkU3ViUGF0dGVybihvdXRwdXQsIHN1YnBhdHRlcm5JZCwgcGF0dGVybklu
ZGV4LCBwYXR0ZXJuVGVtcCk7CisgICAgICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0
cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXApOwogCiAgICAgICAg
ICAgICAvLyBBbiBlbXB0eSBtYXRjaCBpcyBzdWNjZXNzZnVsIHdpdGhvdXQgY29uc3VtaW5nIGNo
YXJhY3RlcnMKLSAgICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNoMzIoRXF1
YWwsIFRydXN0ZWRJbW0zMigtMSksIHBhdHRlcm5JbmRleCk7Ci0gICAgICAgICAgICBKdW1wIHRy
eU5vblplcm9NYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5U
ZW1wKTsKLSAgICAgICAgICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKHRoaXMpOwotICAgICAgICAg
ICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Ci0gICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgdHJ5Tm9uWmVyb01h
dGNoLmxpbmsodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB6ZXJvTGVu
Z3RoTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBwYXR0ZXJuSW5kZXgpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgdHJ5Tm9uWmVyb01hdGNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5UZW1wKTsKKyAgICAgICAg
ICAgIHplcm9MZW5ndGhNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzdG9yZVRvRnJh
bWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSk7Cisg
ICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgdHJ5
Tm9uWmVyb01hdGNoLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
aGF2ZSBpbnB1dCByZW1haW5pbmcgdG8gbWF0Y2gKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5J
bmRleCwgcGF0dGVyblRlbXApOworICAgICAgICAgICAgbV9qaXQuc3ViMzIocGF0dGVybkluZGV4
LCBwYXR0ZXJuVGVtcCk7CiAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChjaGVja05vdEVub3Vn
aElucHV0KHBhdHRlcm5UZW1wKSk7CiAKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJl
Z2luSW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6YmVnaW5J
bmRleCgpKTsKIAogICAgICAgICAgICAgbWF0Y2hCYWNrcmVmZXJlbmNlKG9wSW5kZXgsIGluY29t
cGxldGVNYXRjaGVzLCBjaGFyYWN0ZXJPclRlbXAsIHBhdHRlcm5JbmRleCwgcGF0dGVyblRlbXAp
OwogCi0gICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbWF0
Y2hlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNo
ZXMubGluayh0aGlzKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJlZ2luSW5kZXgoKSwgaW5k
ZXgpOworICAgICAgICAgICAgaW5jb21wbGV0ZU1hdGNoZXMubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvQmFja1JlZmVyZW5jZTo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5kZXgpOwogCi0gICAgICAg
ICAgICBtYXRjaGVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaGVzLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0MzMsNDkg
KzEzNTcsNDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAg
ICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0tPmJhY2tSZWZlcmVuY2VTdWJwYXR0
ZXJuSWQ7CiAKLSAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwotICAgICAg
ICBvcC5tX2p1bXBzLmxpbmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
aygmbV9qaXQpOworICAgICAgICBvcC5tX2p1bXBzLmxpbmsoJm1faml0KTsKIAotICAgICAgICBK
dW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVzOwogCiAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0t
PmZyYW1lTG9jYXRpb247CiAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CiAg
ICAgICAgIGNhc2UgUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQ6Ci0gICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVm
ZXJlbmNlOjpiZWdpbkluZGV4KCksIGluZGV4KTsKKyAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tSZWZlcmVuY2U6OmJl
Z2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgUXVhbnRpZmllclR5cGU6OkdyZWVkeTogewotICAgICAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBtYXRjaEFtb3VudCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBw
YXR0ZXJuU3RhcnRJbmRleCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBw
YXR0ZXJuRW5kSW5kZXhPckxlbiA9IHJlZ1QyOworICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgbWF0Y2hBbW91bnQgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXR0ZXJuU3RhcnRJbmRleCA9IG1f
cmVncy5yZWdUMTsKKyAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IHBhdHRlcm5FbmRJbmRleE9yTGVuID0gbV9yZWdzLnJlZ1QyOwogCiAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVm
ZXJlbmNlOjptYXRjaEFtb3VudEluZGV4KCksIG1hdGNoQW1vdW50KTsKLSAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgbWF0Y2hBbW91bnQpKTsKKyAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIG1hdGNoQW1vdW50KSk7CiAKLSAgICAgICAgICAgIGxvYWRTdWJQYXR0ZXJuKG91dHB1dCwg
c3VicGF0dGVybklkLCBwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOwot
ICAgICAgICAgICAgc3ViMzIocGF0dGVyblN0YXJ0SW5kZXgsIHBhdHRlcm5FbmRJbmRleE9yTGVu
KTsKLSAgICAgICAgICAgIHN1YjMyKHBhdHRlcm5FbmRJbmRleE9yTGVuLCBpbmRleCk7CisgICAg
ICAgICAgICBsb2FkU3ViUGF0dGVybihtX3JlZ3Mub3V0cHV0LCBzdWJwYXR0ZXJuSWQsIHBhdHRl
cm5TdGFydEluZGV4LCBwYXR0ZXJuRW5kSW5kZXhPckxlbik7CisgICAgICAgICAgICBtX2ppdC5z
dWIzMihwYXR0ZXJuU3RhcnRJbmRleCwgcGF0dGVybkVuZEluZGV4T3JMZW4pOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIocGF0dGVybkVuZEluZGV4T3JMZW4sIG1fcmVncy5pbmRleCk7CiAKLSAg
ICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91
bnQpOwogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1hdGNoQW1vdW50LCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQmFja1JlZmVyZW5jZTo6bWF0Y2hBbW91bnRJbmRl
eCgpKTsKLSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgIG1faml0
Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5OiB7Ci0gICAgICAgICAgICBjb25z
dCBSZWdpc3RlcklEIG1hdGNoQW1vdW50ID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtYXRjaEFtb3VudCA9IG1fcmVncy5yZWdUMDsKIAogICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgICAgIGxv
YWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0JhY2tS
ZWZlcmVuY2U6Om1hdGNoQW1vdW50SW5kZXgoKSwgbWF0Y2hBbW91bnQpOwogICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBJbW0zMih0ZXJt
LT5xdWFudGl0eU1heENvdW50KSwgbWF0Y2hBbW91bnQpKTsKLSAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgbWF0Y2hBbW91bnQpOworICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCksIG1hdGNoQW1vdW50KSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBt
YXRjaEFtb3VudCk7CiAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobWF0Y2hBbW91bnQsIHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9CYWNrUmVmZXJlbmNlOjptYXRjaEFt
b3VudEluZGV4KCkpOwotICAgICAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAgICAgICAg
ICAgbV9qaXQuanVtcChvcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICBmYWls
dXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91
Z2goKTsKICAgICB9CiAjZW5kaWYKQEAgLTE0OTcsMTEgKzE0MjEsMTEgQEAgY2xhc3MgWWFyckdl
bmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgIGlmICghaXNMYXRpbjEoY2gp
ICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsKICAgICAgICAgICAgIC8vIEhh
dmUgYSAxNiBiaXQgcGF0dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0
IGNpcmN1aXQKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdU
MDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0g
bV9yZWdzLnJlZ1QwOwogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKICAgICAgICAgdW5z
aWduZWQgbWF4Q2hhcmFjdGVyc0F0T25jZSA9IG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4
ID8gOCA6IDQ7CiAjZWxzZQpAQCAtMTU1Miw3ICsxNDc2LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBpZiAoIWlzTGF0aW4xKGN1cnJl
bnRDaGFyYWN0ZXIpICYmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpDaGFyOCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBIYXZlIGEgMTYgYml0IHBhdHRlcm4gY2hhcmFjdGVyIGFuZCBhbiA4IGJp
dCBzdHJpbmcgLSBzaG9ydCBjaXJjdWl0Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMTU3NSwy
OSArMTQ5OSwyOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBhdXRvIGNoZWNrMiA9IFsmXSAoQ2hlY2tlZDx1
bnNpZ25lZD4gb2Zmc2V0LCB1aW50MTZfdCBjaGFyYWN0ZXJzLCB1aW50MTZfdCBtYXNrKSB7Ci0g
ICAgICAgICAgICAgICAgbG9hZDE2VW5hbGlnbmVkKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJl
c3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0
LmxvYWQxNlVuYWxpZ25lZChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hh
cmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAg
ICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAg
ICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihj
aGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
aGFyYWN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsKICAg
ICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gY2hlY2s0ID0gWyZdIChDaGVja2VkPHVu
c2lnbmVkPiBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlcnMsIHVuc2lnbmVkIG1hc2spIHsKICAg
ICAgICAgICAgICAgICBpZiAobWFzaykgewotICAgICAgICAgICAgICAgICAgICBsb2FkMzJXaXRo
VW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBj
aGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0
LCBjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobWFzayksIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
Y2hhcmFjdGVycyB8IG1hc2spKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzJX
aXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRy
ZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgVHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CisgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoMzJXaXRoVW5hbGlnbmVk
SGFsZldvcmRzKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbmVnYXRpdmVPZmZzZXRJbmRleGVk
QWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
Y2hhcmFjdGVycykpKTsKICAgICAgICAgICAgIH07CiAKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNNjQpCiAgICAgICAgICAgICBhdXRvIGNoZWNrOCA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4g
b2Zmc2V0LCB1aW50NjRfdCBjaGFyYWN0ZXJzLCB1aW50NjRfdCBtYXNrKSB7Ci0gICAgICAgICAg
ICAgICAgbG9hZDY0KG5lZ2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0
ZXIpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChuZWdhdGl2ZU9m
ZnNldEluZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgICAgICBpZiAobWFzaykKLSAgICAgICAgICAgICAgICAgICAgb3I2NChUcnVzdGVkSW1t
NjQobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQo
YnJhbmNoNjQoTm90RXF1YWwsIGNoYXJhY3RlciwgVHJ1c3RlZEltbTY0KGNoYXJhY3RlcnMgfCBt
YXNrKSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQobWFzayksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjaGFyYWN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoY2hhcmFjdGVycyB8IG1hc2spKSk7CiAg
ICAgICAgICAgICB9OwogI2VuZGlmCiAKQEAgLTE2NDksMjEgKzE1NzMsMjEgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogCiAgICAgICAgICAgICBhdXRvIGNoZWNr
MiA9IFsmXSAoQ2hlY2tlZDx1bnNpZ25lZD4gb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBtYXNrKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9mZnNldEluZGV4
ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhuZWdhdGl2ZU9mZnNldElu
ZGV4ZWRBZGRyZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMyKG1h
c2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaGFyYWN0ZXJzIHwgbWFzaykpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKGNoYXJhY3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wLm1fanVt
cHMuYXBwZW5kKGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgbmVnYXRp
dmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3RlciksIFRydXN0ZWRJbW0zMihj
aGFyYWN0ZXJzKSkpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJy
YW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG5l
Z2F0aXZlT2Zmc2V0SW5kZXhlZEFkZHJlc3Mob2Zmc2V0LCBjaGFyYWN0ZXIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKGNoYXJhY3RlcnMpKSk7CiAgICAgICAgICAgICB9OwogCiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQogICAgICAgICAgICAgYXV0byBjaGVjazQgPSBbJl0g
KENoZWNrZWQ8dW5zaWduZWQ+IG9mZnNldCwgdWludDY0X3QgY2hhcmFjdGVycywgdWludDY0X3Qg
bWFzaykgewotICAgICAgICAgICAgICAgIGxvYWQ2NChuZWdhdGl2ZU9mZnNldEluZGV4ZWRBZGRy
ZXNzKG9mZnNldCwgY2hhcmFjdGVyKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkNjQobmVnYXRpdmVPZmZzZXRJbmRleGVkQWRkcmVzcyhvZmZzZXQsIGNoYXJhY3Rlciks
IGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2spCi0gICAgICAgICAgICAgICAg
ICAgIG9yNjQoVHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAg
IG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDY0KE5vdEVxdWFsLCBjaGFyYWN0ZXIsIFRydXN0ZWRJ
bW02NChjaGFyYWN0ZXJzIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQub3I2
NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgY2hhcmFjdGVyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KGNoYXJh
Y3RlcnMgfCBtYXNrKSkpOwogICAgICAgICAgICAgfTsKICNlbmRpZgogCkBAIC0xNjk4LDM0ICsx
NjIyLDM0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAgICAgICAgIFVDaGFyMzIgY2ggPSB0
ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJl
Z1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGNvdW50UmVnaXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vy
cm9nYXRlUGFpcnMpCiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWls
YWJsZUlucHV0KCkpOwogCiAgICAgICAgIENoZWNrZWQ8dW5zaWduZWQ+IHNjYWxlZE1heENvdW50
ID0gdGVybS0+cXVhbnRpdHlNYXhDb3VudDsKICAgICAgICAgc2NhbGVkTWF4Q291bnQgKj0gVV9J
U19CTVAoY2gpID8gMSA6IDI7Ci0gICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihzY2FsZWRNYXhD
b3VudCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMihzY2FsZWRNYXhDb3VudCksIGNvdW50UmVnaXN0ZXIpOwog
Ci0gICAgICAgIExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBsb29wKCZtX2ppdCk7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50LCBjaGFyYWN0ZXIsIGNvdW50UmVn
aXN0ZXIpOwogICAgICAgICAvLyBGb3IgY2FzZS1pbnNlc2l0aXZlIGNvbXBhcmVzLCBub24tYXNj
aWkgY2hhcmFjdGVycyB0aGF0IGhhdmUgZGlmZmVyZW50CiAgICAgICAgIC8vIHVwcGVyICYgbG93
ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMgYXJlIGNvbnZlcnRlZCB0byBhIGNoYXJhY3RlciBjbGFz
cy4KICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4uaWdub3JlQ2FzZSgpIHx8IGlzQVNDSUlBbHBo
YShjaCkgfHwgaXNDYW5vbmljYWxseVVuaXF1ZShjaCwgbV9jYW5vbmljYWxNb2RlKSk7CiAgICAg
ICAgIGlmIChtX3BhdHRlcm4uaWdub3JlQ2FzZSgpICYmIGlzQVNDSUlBbHBoYShjaCkpIHsKLSAg
ICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MjApLCBjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgY2ggfD0gMHgyMDsKICAgICAgICAgfQogCi0gICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoKSkpOwor
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNoYXJhY3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGNoKSkpOwogI2lmIEVO
QUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9kZWNvZGVT
dXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKQotICAgICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDIpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBlbHNl
CiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rl
cik7Ci0gICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBpbmRleCkubGlu
a1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgbV9yZWdzLmluZGV4KS5s
aW5rVG8obG9vcCwgJm1faml0KTsKICAgICB9CiAgICAgdm9pZCBiYWNrdHJhY2tQYXR0ZXJuQ2hh
cmFjdGVyRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTczOCwzOCArMTY2MiwzOCBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAgICBVQ2hhcjMyIGNoID0gdGVybS0+cGF0
dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJl
Z1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdz
LnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJl
Z2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBj
b3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICAvLyBVbmxlc3MgaGF2ZSBhIDE2
IGJpdCBwYXR0ZXJuIGNoYXJhY3RlciBhbmQgYW4gOCBiaXQgc3RyaW5nIC0gc2hvcnQgY2lyY3Vp
dAogICAgICAgICBpZiAoISghaXNMYXRpbjEoY2gpICYmIChtX2NoYXJTaXplID09IENoYXJTaXpl
OjpDaGFyOCkpKSB7Ci0gICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgICAg
IExhYmVsIGxvb3AodGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZmFpbHVyZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgmbV9qaXQp
OwogICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCBtX2NoZWNrZWRPZmZz
ZXQgLSB0ZXJtLT5pbnB1dFBvc2l0aW9uLCBjaGFyYWN0ZXIpKTsKIAotICAgICAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogI2lmIEVOQUJMRShZ
QVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQogICAgICAgICAgICAgaWYgKG1fZGVjb2RlU3Vy
cm9nYXRlUGFpcnMgJiYgIVVfSVNfQk1QKGNoKSkgewotICAgICAgICAgICAgICAgIEp1bXAgc3Vy
cm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklucHV0KCk7Ci0gICAgICAgICAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3Vycm9nYXRlUGFpck9rID0gbm90QXRFbmRPZklu
cHV0KCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBzdXJyb2dhdGVQYWlyT2subGluaygm
bV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gcXVhbnRp
ZnlJbmZpbml0ZSkKLSAgICAgICAgICAgICAgICBqdW1wKGxvb3ApOworICAgICAgICAgICAgICAg
IG1faml0Lmp1bXAobG9vcCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJh
bmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291
bnQpKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogCi0g
ICAgICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbHVyZXMubGlu
aygmbV9qaXQpOwogICAgICAgICB9Ci0gICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Cisg
ICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAgICAgc3RvcmVUb0Zy
YW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGF0
dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBAIC0xNzc4LDE4ICsx
NzAyLDE4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9Q
YXR0ZXJuQ2hhcmFjdGVyOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50UmVnaXN0ZXIpOwotICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgY291bnRS
ZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIp
OworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIGNvdW50UmVnaXN0ZXIpKTsKKyAgICAgICAgbV9qaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAg
ICAgIGlmICghbV9kZWNvZGVTdXJyb2dhdGVQYWlycyB8fCBVX0lTX0JNUCh0ZXJtLT5wYXR0ZXJu
Q2hhcmFjdGVyKSkKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLmluZGV4KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDIpLCBpbmRleCk7Ci0gICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAg
IG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMiksIG1fcmVncy5pbmRl
eCk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKICAgICB9CiAKICAgICB2b2lk
IGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShzaXplX3Qgb3BJbmRleCkKQEAgLTE3
OTcsMTAgKzE3MjEsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IHJlZ1QxOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsK
KyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBjb3Vu
dFJlZ2lzdGVyKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAg
ICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGF0dGVybkNoYXJhY3Rlcjo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CiAg
ICAgdm9pZCBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4
KQpAQCAtMTgwOSw0MyArMTczMyw0MyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIFlhcnJKCiAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogICAgICAg
ICBVQ2hhcjMyIGNoID0gdGVybS0+cGF0dGVybkNoYXJhY3RlcjsKIAotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNv
dW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhdHRlcm5DaGFyYWN0ZXI6Om1hdGNoQW1vdW50SW5kZXgo
KSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gVW5sZXNzIGhhdmUgYSAxNiBiaXQgcGF0
dGVybiBjaGFyYWN0ZXIgYW5kIGFuIDggYml0IHN0cmluZyAtIHNob3J0IGNpcmN1aXQKICAgICAg
ICAgaWYgKCEoIWlzTGF0aW4xKGNoKSAmJiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgp
KSkgewotICAgICAgICAgICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CiAgICAgICAgICAg
ICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAg
ICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNvdW50UmVn
aXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKSk7CisgICAgICAgICAgICAgICAg
bm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgY291bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5
TWF4Q291bnQpKSk7CiAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoanVtcElm
Q2hhck5vdEVxdWFscyhjaCwgbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwg
Y2hhcmFjdGVyKSk7CiAKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbV9yZWdzLmluZGV4KTsKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9O
UykKICAgICAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICFVX0lTX0JNUChj
aCkpIHsKLSAgICAgICAgICAgICAgICBKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0RW5kT2ZJ
bnB1dCgpOwotICAgICAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwot
ICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICAgICAgICAgIHN1cnJvZ2F0ZVBhaXJPay5saW5rKHRoaXMpOwotICAgICAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHN1cnJvZ2F0ZVBhaXJPayA9IG5vdEF0RW5kT2ZJbnB1dCgpOworICAgICAgICAg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVn
cy5pbmRleCk7CisgICAgICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgc3Vycm9nYXRlUGFpck9rLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAK
LSAgICAgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKLSAgICAgICAgICAgIG5vbkdyZWVkeUZh
aWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7
CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycyAmJiAhVV9JU19CTVAoY2gpKSB7
CiAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBjb3VudFJlZ2lzdGVyKjIgZm9yIG5vbi1CTVAgY2hh
cmFjdGVycwotICAgICAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgc3ViMzIoY291
bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBtX2ppdC5zdWIzMihjb3VudFJlZ2lzdGVyLCBt
X3JlZ3MuaW5kZXgpOwogICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7
CiAgICAgfQogCkBAIC0xODU0LDE0ICsxNzc4LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwog
ICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBtX3JlZ3MucmVnVDA7CiAKICAgICAgICAgaWYgKG1f
ZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7Ci0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgs
IHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2lu
SW5kZXgoKSk7CisgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hEZXN0OwogICAgICAgICByZWFkQ2hhcmFjdGVyKG1f
Y2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAg
IC8vIElmIHdlIGFyZSBtYXRjaGluZyB0aGUgImFueSBjaGFyYWN0ZXIiIGJ1aWx0aW4gY2xhc3Mg
d2Ugb25seSBuZWVkIHRvIHJlYWQgdGhlCiAgICAgICAgIC8vIGNoYXJhY3RlciBhbmQgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBhcyBpdCB3aWxsIGFsd2F5cyBzdWNjZWVkLgpAQCAtMTg3MSwxNiArMTc5
NSwxNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
ICAgICBpZiAodGVybS0+aW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBl
bmQobWF0Y2hEZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICBtYXRjaERlc3QubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAg
IGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzICYmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhh
c09uZUNoYXJhY3RlclNpemUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkpIHsKLSAgICAgICAgICAgIEp1
bXAgaXNCTVBDaGFyID0gYnJhbmNoMzIoTGVzc1RoYW4sIGNoYXJhY3Rlciwgc3VwcGxlbWVudGFy
eVBsYW5lc0Jhc2UpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNCTVBDaGFy
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBjaGFyYWN0ZXIsIG1f
cmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChhdEVuZE9mSW5wdXQoKSk7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IGluZGV4KTsKLSAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKHRoaXMpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4
KTsKKyAgICAgICAgICAgIGlzQk1QQ2hhci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KICNlbmRp
ZgogICAgIH0KQEAgLTE4OTEsOCArMTgxNSw4IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsK
ICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgICAg
ICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICBsb2FkRnJvbUZy
YW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJl
Z2luSW5kZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24g
KyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4
KTsKICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKICAgICAg
ICAgfQogI2VuZGlmCkBAIC0xOTA0LDggKzE4MjgsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsK
ICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3Qg
UmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBj
b3VudFJlZ2lzdGVyID0gcmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNoYXJhY3RlciA9IG1fcmVncy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAg
ICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBw
ZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKSk7CkBAIC0xOTE1LDEwICsxODM5LDEwIEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgaWYgKG1fZGVj
b2RlU3Vycm9nYXRlUGFpcnMgJiYgdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09ubHlOb25CTVBD
aGFyYWN0ZXJzKCkgJiYgIXRlcm0tPmludmVydCgpKQogICAgICAgICAgICAgc2NhbGVkTWF4Q291
bnQgKj0gMjsKICNlbmRpZgotICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoc2NhbGVkTWF4Q291
bnQpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIoc2NhbGVkTWF4Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKIAot
ICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAgIHJlYWRDaGFyYWN0ZXIobV9j
aGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiAtIHNjYWxlZE1heENvdW50LCBjaGFy
YWN0ZXIsIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhl
ICJhbnkgY2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZQog
ICAgICAgICAvLyBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBh
bHdheXMgc3VjY2VlZC4KQEAgLTE5MjgsMjcgKzE4NTIsMjcgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQog
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1hdGNoRGVzdCk7CiAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0Lmxp
bmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJf
SklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBh
aXJzKSB7CiAgICAgICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3Mo
KSkKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIodGVybS0+Y2hhcmFjdGVyQ2xh
c3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAxKSwgY291bnRSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0ZXJt
LT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEpLCBjb3VudFJl
Z2lzdGVyKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc0JNUENo
YXIgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFz
ZSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNCTVBDaGFyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCBjaGFyYWN0ZXIsIG1fcmVncy5zdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7CiAgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwotICAgICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaXNCTVBDaGFy
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpc0JNUENoYXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBj
b3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIs
IGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBtX3Jl
Z3MuaW5kZXgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIH0KICAgICB2b2lkIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgewpAQCAtMTk2MCwxOSAr
MTg4NCwxOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRl
cm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBy
ZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7Cisg
ICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoYXJhY3RlciA9IG1fcmVn
cy5yZWdUMDsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQ
YWlycyAmJiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNPbmVDaGFyYWN0ZXJTaXplKCkgfHwg
dGVybS0+aW52ZXJ0KCkpKQotICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCB0ZXJtLT5m
cmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAg
ICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFj
a1RyYWNrSW5mb0NoYXJhY3RlckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwogCi0g
ICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJlc0RlY3Jl
bWVudEluZGV4OwotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBmYWlsdXJlc0RlY3JlbWVudEluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bG9vcCgmbV9qaXQpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9VTklDT0RFX0VYUFJFU1NJT05TKQog
ICAgICAgICBpZiAodGVybS0+aXNGaXhlZFdpZHRoQ2hhcmFjdGVyQ2xhc3MoKSAmJiB0ZXJtLT5j
aGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChjaGVja05vdEVub3VnaElucHV0KGNoYXJhY3RlcikpOwogICAgICAgICB9
IGVsc2UKICNlbmRpZgpAQCAtMTk4MiwxNSArMTkwNiwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tl
ZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24sIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBt
YXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZmFpbHVyZXMsIHRlcm0tPmNoYXJhY3RlckNs
YXNzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAg
ICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb24s
IGNoYXJhY3Rlcik7CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbWF0Y2hpbmcgdGhlICJhbnkg
Y2hhcmFjdGVyIiBidWlsdGluIGNsYXNzIGZvciBub24tdW5pY29kZSBwYXR0ZXJucywKICAgICAg
ICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRvbid0IG5l
ZWQgdG8gbWF0Y2ggYXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KICAgICAgICAgICAgIGlmICgh
dGVybS0+Y2hhcmFjdGVyQ2xhc3MtPm1fYW55Q2hhcmFjdGVyKSB7CiAgICAgICAgICAgICAgICAg
bWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVy
Q2xhc3MpOwotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CisgICAgICAgICAgICBtYXRjaERlc3Qu
bGluaygmbV9qaXQpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9F
WFBSRVNTSU9OUykKQEAgLTE5OTgsMjIgKzE5MjIsMjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgYWR2YW5jZUluZGV4QWZ0ZXJDaGFyYWN0
ZXJDbGFzc1Rlcm1NYXRjaCh0ZXJtLCBmYWlsdXJlc0RlY3JlbWVudEluZGV4LCBjaGFyYWN0ZXIp
OwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgaW5kZXgpOwotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
KSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5TWF4Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAgICAgYnJhbmNoMzIo
Tm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQpKS5s
aW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY291
bnRSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHRlcm0tPnF1YW50aXR5TWF4Q291bnQp
KS5saW5rVG8obG9vcCwgJm1faml0KTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGp1bXAobG9vcCk7CisgICAg
ICAgICAgICBtX2ppdC5qdW1wKGxvb3ApOwogCiAgICAgICAgIGlmICghZmFpbHVyZXNEZWNyZW1l
bnRJbmRleC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlc0RlY3JlbWVudEluZGV4Lmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAg
ICAgICAgICAgIGZhaWx1cmVzRGVjcmVtZW50SW5kZXgubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV9yZWdzLmlu
ZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7Ci0gICAgICAg
IG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgIGZhaWx1cmVzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKIAogICAgICAgICBzdG9yZVRv
RnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9D
aGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKICAgICB9CkBAIC0yMDIyLDQ1ICsx
OTQ2LDQ1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRS
ZWdpc3RlciA9IG1fcmVncy5yZWdUMTsKIAotICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygmbV9qaXQpOwogCiAg
ICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9D
aGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVn
aXN0ZXIpKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
KyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CisgICAgICAgIG1faml0LnN1YjMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAg
ICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9DaGFyYWN0ZXJDbGFzczo6bWF0Y2hBbW91bnRJbmRleCgpKTsKIAogICAgICAgICBp
ZiAoIW1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIGluZGV4KTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgIGVsc2UgaWYgKHRlcm0tPmlz
Rml4ZWRXaWR0aENoYXJhY3RlckNsYXNzKCkpCi0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIodGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc05vbkJNUENoYXJhY3RlcnMoKSA/IDIgOiAxKSwg
aW5kZXgpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih0ZXJtLT5jaGFyYWN0ZXJDbGFzcy0+aGFzTm9uQk1QQ2hhcmFjdGVycygpID8gMiA6IDEp
LCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFJlbWF0Y2gg
b25lIGxlc3MKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7
CisgICAgICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSBtX3JlZ3MucmVnVDA7CiAKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBpbmRl
eCk7CisgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5kZXgoKSwgbV9yZWdzLmluZGV4KTsKIAot
ICAgICAgICAgICAgTGFiZWwgcmVtYXRjaExvb3AodGhpcyk7Ci0gICAgICAgICAgICBKdW1wIGRv
bmVSZW1hdGNoaW5nID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHJlbWF0Y2hMb29wKCZtX2ppdCk7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lUmVtYXRjaGluZyA9IG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgICAg
IHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hh
cmFjdGVyKTsKIAotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lz
dGVyKTsKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgY291bnRS
ZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOwogCiAjaWYgRU5BQkxFKFlBUlJfSklUX1VOSUNPREVf
RVhQUkVTU0lPTlMpCi0gICAgICAgICAgICBKdW1wIGlzQk1QQ2hhciA9IGJyYW5jaDMyKExlc3NU
aGFuLCBjaGFyYWN0ZXIsIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICAgICAgaXNCTVBDaGFyLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0JNUENoYXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGNoYXJhY3RlciwgbV9yZWdzLnN1
cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CisgICAgICAgICAgICBpc0JN
UENoYXIubGluaygmbV9qaXQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGp1bXAocmVtYXRjaExv
b3ApOwotICAgICAgICAgICAgZG9uZVJlbWF0Y2hpbmcubGluayh0aGlzKTsKKyAgICAgICAgICAg
IG1faml0Lmp1bXAocmVtYXRjaExvb3ApOworICAgICAgICAgICAgZG9uZVJlbWF0Y2hpbmcubGlu
aygmbV9qaXQpOwogCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1hdGNoQW1vdW50SW5kZXgoKSwgY291
bnRSZWdpc3Rlcik7CiAgICAgICAgIH0KLSAgICAgICAganVtcChvcC5tX3JlZW50cnkpOworICAg
ICAgICBtX2ppdC5qdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0
ZUNoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4KQpAQCAtMjA2OCwxNSArMTk5
MiwxNSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAg
IFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0g
PSBvcC5tX3Rlcm07CiAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0g
cmVnVDE7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNvdW50UmVn
aXN0ZXIgPSBtX3JlZ3MucmVnVDE7CiAKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIGNv
dW50UmVnaXN0ZXIpOwotICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIp
OworICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogCiAjaWYgRU5BQkxFKFlB
UlJfSklUX1VOSUNPREVfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0
ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIXRlcm0tPmNoYXJhY3RlckNsYXNzLT5oYXNPbmVD
aGFyYWN0ZXJTaXplKCkgfHwgdGVybS0+aW52ZXJ0KCkpCi0gICAgICAgICAgICAgICAgc3RvcmVU
b0ZyYW1lKGluZGV4LCB0ZXJtLT5mcmFtZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb0NoYXJhY3Rl
ckNsYXNzOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShtX3Jl
Z3MuaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xh
c3M6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yMDg4LDI3ICsyMDEy
LDI3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAg
WWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9
IG9wLm1fdGVybTsKIAotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1Qw
OwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKKyAgICAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hhcmFjdGVyID0gbV9yZWdzLnJl
Z1QwOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjb3VudFJlZ2lz
dGVyID0gbV9yZWdzLnJlZ1QxOwogCi0gICAgICAgIEp1bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVz
OwotICAgICAgICBKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4OworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub25HcmVlZHlGYWlsdXJlc0RlY3JlbWVudEluZGV4
OwogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5J
Q09ERV9FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsK
ICAgICAgICAgICAgIGlmICghdGVybS0+Y2hhcmFjdGVyQ2xhc3MtPmhhc09uZUNoYXJhY3RlclNp
emUoKSB8fCB0ZXJtLT5pbnZlcnQoKSkKLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6OmJlZ2luSW5k
ZXgoKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVM
b2NhdGlvbiArIEJhY2tUcmFja0luZm9DaGFyYWN0ZXJDbGFzczo6YmVnaW5JbmRleCgpLCBtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICBsb2FkRnJvbUZyYW1lKHRl
cm0tPmZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvQ2hhcmFjdGVyQ2xhc3M6Om1hdGNoQW1v
dW50SW5kZXgoKSwgY291bnRSZWdpc3Rlcik7CiAKICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMu
YXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5k
KGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENv
dW50KSkpOworICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBjb3VudFJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKIAotICAgICAgICBKdW1wTGlzdCBtYXRjaERl
c3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtYXRjaERlc3Q7CiAgICAgICAg
IHJlYWRDaGFyYWN0ZXIobV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbiwgY2hh
cmFjdGVyKTsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1hdGNoaW5nIHRoZSAiYW55IGNoYXJhY3Rl
ciIgYnVpbHRpbiBjbGFzcyBmb3Igbm9uLXVuaWNvZGUgcGF0dGVybnMsCiAgICAgICAgIC8vIHdl
IG9ubHkgbmVlZCB0byByZWFkIHRoZSBjaGFyYWN0ZXIgYW5kIGRvbid0IG5lZWQgdG8gbWF0Y2gg
YXMgaXQgd2lsbCBhbHdheXMgc3VjY2VlZC4KQEAgLTIxMTgsOCArMjA0Miw4IEBAIGNsYXNzIFlh
cnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGlmICh0ZXJtLT5p
bnZlcnQoKSkKICAgICAgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobWF0Y2hE
ZXN0KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1
cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApAQCAtMjEyOCwxNyArMjA1MiwxNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICBhZHZhbmNlSW5kZXhBZnRlckNoYXJh
Y3RlckNsYXNzVGVybU1hdGNoKHRlcm0sIG5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXgs
IGNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKIAotICAgICAgICBqdW1w
KG9wLm1fcmVlbnRyeSk7CisgICAgICAgIG1faml0Lmp1bXAob3AubV9yZWVudHJ5KTsKIAogICAg
ICAgICBpZiAoIW5vbkdyZWVkeUZhaWx1cmVzRGVjcmVtZW50SW5kZXguZW1wdHkoKSkgewotICAg
ICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXNEZWNyZW1lbnRJbmRleC5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgYnJlYWtwb2ludCgpOworICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXNEZWNy
ZW1lbnRJbmRleC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CiAgICAgICAgIH0KLSAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsKLSAgICAg
ICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBub25HcmVlZHlGYWlsdXJl
cy5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LnN1YjMyKGNvdW50UmVnaXN0ZXIsIG1fcmVn
cy5pbmRleCk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKICAg
ICB9CiAKQEAgLTIxNDcsNjIgKzIwNzEsNjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAg
ICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgIGNvbnN0IFJlZ2lz
dGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hQ
b3MgPSByZWdUMTsKLSAgICAgICAgSnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5lOwotICAg
ICAgICBKdW1wTGlzdCBzYXZlU3RhcnRJbmRleDsKLSAgICAgICAgSnVtcExpc3QgZm91bmRFbmRp
bmdOZXdMaW5lOworICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGFy
YWN0ZXIgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIG1hdGNoUG9zID0gbV9yZWdzLnJlZ1QxOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZm91bmRCZWdpbm5pbmdOZXdMaW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2F2ZVN0YXJ0SW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBmb3VuZEVuZGluZ05ld0xpbmU7CiAKICAgICAgICAgaWYgKG1fcGF0dGVybi5kb3RBbGwoKSkg
ewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIG1hdGNoUG9zKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbWF0Y2hQb3Mp
OwogICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtYXRjaFBvcyk7Ci0gICAgICAgICAgICBtb3Zl
KGxlbmd0aCwgaW5kZXgpOworICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MubGVuZ3RoLCBt
X3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
QVNTRVJUKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSk7CiAgICAgICAgIGdldE1h
dGNoU3RhcnQobWF0Y2hQb3MpOwogCi0gICAgICAgIHNhdmVTdGFydEluZGV4LmFwcGVuZChicmFu
Y2gzMihCZWxvd09yRXF1YWwsIG1hdGNoUG9zLCBpbml0aWFsU3RhcnQpKTsKLSAgICAgICAgTGFi
ZWwgZmluZEJPTExvb3AodGhpcyk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWF0
Y2hQb3MpOworICAgICAgICBzYXZlU3RhcnRJbmRleC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbWF0Y2hQb3MsIG1fcmVncy5pbml0aWFsU3RhcnQp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGZpbmRCT0xMb29wKCZtX2ppdCk7Cisg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1hdGNo
UG9zKTsKICAgICAgICAgaWYgKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXI4KQotICAgICAg
ICAgICAgbG9hZDgoQmFzZUluZGV4KGlucHV0LCBtYXRjaFBvcywgVGltZXNPbmUsIDApLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChtX3JlZ3MuaW5wdXQsIG1hdGNoUG9zLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIDApLCBj
aGFyYWN0ZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlu
cHV0LCBtYXRjaFBvcywgVGltZXNUd28sIDApLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9q
aXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBv
cywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZvdW5kQmVnaW5uaW5nTmV3TGluZSwgbV9wYXR0
ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKIAotICAgICAgICBicmFuY2gzMihBYm92ZSwg
bWF0Y2hQb3MsIGluaXRpYWxTdGFydCkubGlua1RvKGZpbmRCT0xMb29wLCB0aGlzKTsKLSAgICAg
ICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbWF0Y2hQb3MsIG1fcmVncy5pbml0aWFsU3RhcnQpLmxp
bmtUbyhmaW5kQk9MTG9vcCwgJm1faml0KTsKKyAgICAgICAgc2F2ZVN0YXJ0SW5kZXguYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgZm91bmRCZWdpbm5pbmdOZXdMaW5lLmxpbmsodGhp
cyk7Ci0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOyAvLyBBZHZhbmNl
IHBhc3QgbmV3bGluZQotICAgICAgICBzYXZlU3RhcnRJbmRleC5saW5rKHRoaXMpOworICAgICAg
ICBmb3VuZEJlZ2lubmluZ05ld0xpbmUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBtYXRjaFBvcyk7IC8vIEFkdmFuY2Ug
cGFzdCBuZXdsaW5lCisgICAgICAgIHNhdmVTdGFydEluZGV4LmxpbmsoJm1faml0KTsKIAogICAg
ICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0ZXJtLT5hbmNob3JzLmJvbEFuY2hv
cikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBt
YXRjaFBvcykpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtYXRjaFBvcykpOwogCiAgICAgICAgIEFTU0VS
VCghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpOwogICAgICAgICBzZXRNYXRjaFN0
YXJ0KG1hdGNoUG9zKTsKIAotICAgICAgICBtb3ZlKGluZGV4LCBtYXRjaFBvcyk7CisgICAgICAg
IG1faml0Lm1vdmUobV9yZWdzLmluZGV4LCBtYXRjaFBvcyk7CiAKLSAgICAgICAgTGFiZWwgZmlu
ZEVPTExvb3AodGhpcyk7ICAgICAgICAKLSAgICAgICAgZm91bmRFbmRpbmdOZXdMaW5lLmFwcGVu
ZChicmFuY2gzMihFcXVhbCwgbWF0Y2hQb3MsIGxlbmd0aCkpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZmluZEVPTExvb3AoJm1faml0KTsKKyAgICAgICAgZm91bmRFbmRpbmdOZXdM
aW5lLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1hdGNoUG9z
LCBtX3JlZ3MubGVuZ3RoKSk7CiAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXJTaXplOjpD
aGFyOCkKLSAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVz
T25lLCAwKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtYXRjaFBvcywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lLCAwKSwgY2hhcmFjdGVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDE2
KEJhc2VJbmRleChpbnB1dCwgbWF0Y2hQb3MsIFRpbWVzVHdvLCAwKSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KG1fcmVncy5p
bnB1dCwgbWF0Y2hQb3MsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIGNoYXJhY3Rlcik7
CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmb3VuZEVuZGluZ05ld0xp
bmUsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgbWF0Y2hQb3MpOwotICAgICAgICBqdW1wKGZpbmRFT0xMb29wKTsKKyAg
ICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbWF0Y2hQ
b3MpOworICAgICAgICBtX2ppdC5qdW1wKGZpbmRFT0xMb29wKTsKIAotICAgICAgICBmb3VuZEVu
ZGluZ05ld0xpbmUubGluayh0aGlzKTsKKyAgICAgICAgZm91bmRFbmRpbmdOZXdMaW5lLmxpbmso
Jm1faml0KTsKIAogICAgICAgICBpZiAoIW1fcGF0dGVybi5tdWx0aWxpbmUoKSAmJiB0ZXJtLT5h
bmNob3JzLmVvbEFuY2hvcikKLSAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBtYXRjaFBvcywgbGVuZ3RoKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG1hdGNoUG9zLCBt
X3JlZ3MubGVuZ3RoKSk7CiAKLSAgICAgICAgbW92ZShtYXRjaFBvcywgaW5kZXgpOworICAgICAg
ICBtX2ppdC5tb3ZlKG1hdGNoUG9zLCBtX3JlZ3MuaW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQg
YmFja3RyYWNrRG90U3RhckVuY2xvc3VyZShzaXplX3Qgb3BJbmRleCkKQEAgLTIzNjcsNyArMjI5
MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICAgICAg
bV9kaXNhc3NlbWJsZXItPnNldEZvckdlbmVyYXRlKG9wSW5kZXgsIGxhYmVsKCkpOworICAgICAg
ICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JHZW5lcmF0ZShvcEluZGV4LCBtX2ppdC5s
YWJlbCgpKTsKIAogICAgICAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOwogICAg
ICAgICAgICAgc3dpdGNoIChvcC5tX29wKSB7CkBAIC0yNDA4LDcgKzIzMzIsNyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgICAgICAgICAvLyBX
ZSB3aWxsIHJlZW50ZXIgYWZ0ZXIgdGhlIGNoZWNrLCBhbmQgYXNzdW1lIHRoZSBpbnB1dCBwb3Np
dGlvbiB0byBoYXZlIGJlZW4KICAgICAgICAgICAgICAgICAvLyBzZXQgYXMgYXBwcm9wcmlhdGUg
dG8gdGhpcyBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAg
ICAgICAgICAgICAgICAvLyBFbWl0IGZhc3Qgc2tpcCBwYXRoIHdpdGggc3RyaWRlIGlmIHdlIGhh
dmUgQm95ZXJNb29yZUluZm8uCiAgICAgICAgICAgICAgICAgaWYgKG9wLm1fYm1JbmZvKSB7CkBA
IC0yNDIwLDggKzIzNDQsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlh
cnJKCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIFttYXAsIGNoYXJhY3RlcnNGYXN0UGF0
aF0gPSBvcC5tX2JtSW5mby0+Y3JlYXRlQ2FuZGlkYXRlQml0bWFwKGJlZ2luSW5kZXgsIGVuZElu
ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1hcENvdW50ID0gbWFwLmNv
dW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW5kaWF0ZSBjaGFyYWN0ZXJz
IGFyZSA8PSAyLCBjaGVja2luZyBlYWNoIGlzIGJldHRlciB0aGFuIHVzaW5nIHZlY3Rvci4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG91dE9mTGVuZ3RoRmFpbHVyZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoZWQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3V0T2ZMZW5ndGhGYWlsdXJlOworICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoZWQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihZYXJySklUSW50ZXJuYWw6OnZlcmJvc2Us
ICJCTSBCaXRtYXAgaXMgIiwgbWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhdHRl
cm5zIGxpa2UgL1tdLyBoYXZlIHplcm8gY2FuZGlkYXRlcy4gU2luY2UgaXQgaXMgcmFyZSwgd2Ug
ZG8gbm90IGRvIG5vdGhpbmcgZm9yIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWFwQ291bnQpCkBAIC0yNDMwLDc1ICsyMzU0LDc1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KEJveWVyTW9vcmVGYXN0Q2FuZGlkYXRlczo6bWF4U2l6ZSA9PSAyKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGls
YXRpb24oKSwgIkZvdW5kIGNoYXJhY3RlcnMgZmFzdHBhdGggbG9va2FoZWFkICIsIGNoYXJhY3Rl
cnNGYXN0UGF0aCwgIiByYW5nZTpbIiwgYmVnaW5JbmRleCwgIiwgIiwgZW5kSW5kZXgsICIpIik7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFiZWwoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNl
dCAtIGVuZEluZGV4ICsgMSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWQuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKGNoYXJhY3Rl
cnNGYXN0UGF0aC5hdCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxv
b3BIZWFkID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFk
Q2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwgbV9yZWdzLnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5yZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMCkpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoYXJhY3RlcnNGYXN0UGF0aC5zaXplKCkgPiAxKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihjaGFyYWN0ZXJzRmFzdFBhdGguYXQoMSkpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGNoYXJhY3RlcnNGYXN0UGF0aC5hdCgxKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoZW5k
SW5kZXggLSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcCgp
LmxpbmtUbyhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuanVtcCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byogcG9p
bnRlciA9IGdldEJveWVyTW9vcmVCaXRtYXAobWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlUmVnRXhwQ29tcGlsYXRpb24oKSwgIkZv
dW5kIGJpdG1hcCBsb29rYWhlYWQgY291bnQ6KCIsIG1hcENvdW50LCAiKSxyYW5nZTpbIiwgYmVn
aW5JbmRleCwgIiwgIiwgZW5kSW5kZXgsICIpIik7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIHJlZ1QxKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGxvb3BIZWFkID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWFkQ2hhcmFjdGVyKG1fY2hlY2tlZE9mZnNldCAtIGVuZEluZGV4ICsgMSwg
cmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIG1fcmVncy5yZWdUMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byBsb29wSGVhZCA9IG1faml0LmxhYmVsKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhZENoYXJhY3RlcihtX2NoZWNrZWRPZmZzZXQgLSBlbmRJ
bmRleCArIDEsIG1fcmVncy5yZWdUMCk7CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6
V29yZFR5cGUpID09IHNpemVvZih1aW50NjRfdCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoMSA8PCA2ID09IDY0KTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDYgKyAxKSA9PSBCb3llck1vb3JlQml0bWFwOjpNYXA6
OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdFVuc2lnbmVkQml0
ZmllbGQzMihyZWdUMCwgVHJ1c3RlZEltbTMyKDYpLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QyKTsg
Ly8gRXh0cmFjdCAxIGJpdCBmb3IgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDIsIFRpbWVzRWlnaHQpLCByZWdUMik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJzaGlmdDY0KHJlZ1QwLCByZWdUMik7IC8vIFdlIGNh
biBpZ25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA2Yml0cyBhcmUgZWZmZWN0aXZlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKGJyYW5jaFRlc3Q2NChO
b25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuZXh0cmFjdFVuc2lnbmVkQml0ZmllbGQzMihtX3JlZ3MucmVnVDAsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSksIG1fcmVncy5yZWdUMik7IC8vIEV4dHJhY3QgMSBiaXQgZm9yIGluZGV4LgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KG1fcmVncy5yZWdUMSwgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCks
IG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlm
dDY0KG1fcmVncy5yZWdUMCwgbV9yZWdzLnJlZ1QyKTsgLy8gV2UgY2FuIGlnbm9yZSB1cHBlciBi
aXRzIGFuZCBvbmx5IGxvd2VyIDZiaXRzIGFyZSBlZmZlY3RpdmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlZC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSkpKTsKICNlbGlmIENQVShYODZfNjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSkgPT0gc2l6
ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgxIDw8IDYgPT0gNjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3Nl
cnQoMSA8PCAoNiArIDEpID09IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6c2l6ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMig2KSwgcmVnVDIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QyLCBU
aW1lc0VpZ2h0KSwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQu
YXBwZW5kKGJyYW5jaFRlc3RCaXQ2NChOb25aZXJvLCByZWdUMiwgcmVnVDApKTsgLy8gV2UgY2Fu
IGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3JtZWQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdU
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIG1fcmVncy5yZWdUMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
bV9yZWdzLnJlZ1QyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChtX3JlZ3MucmVnVDEsIG1fcmVncy5yZWdUMiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RCaXQ2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBtX3JlZ3MucmVnVDApKTsgLy8gV2UgY2Fu
IGlnbm9yZSB1cHBlciBiaXRzIHNpbmNlIG1vZHVsby02NCBpcyBwZXJmb3JtZWQuCiAjZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEJveWVyTW9v
cmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUpID09IHNpemVvZih1aW50MzJfdCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCA1ID09IDMyKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgKDUgKyAyKSA9PSBCb3llck1v
b3JlQml0bWFwOjpNYXA6OnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hpZnQzMihU
cnVzdGVkSW1tMzIoNSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoMGIxMSksIHJlZ1QyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMiwgVGltZXNGb3VyKSwgcmVnVDIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVyc2hpZnQzMihyZWdUMCwgcmVnVDIpOyAvLyBXZSBj
YW4gaWdub3JlIHVwcGVyIGJpdHMgYW5kIG9ubHkgbG93ZXIgNWJpdHMgYXJlIGVmZmVjdGl2ZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLmFwcGVuZChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMigxKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUobV9yZWdzLnJlZ1QwLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDUpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMGIxMSksIG1fcmVncy5yZWdU
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgobV9yZWdzLnJlZ1QxLCBtX3JlZ3MucmVnVDIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0ZvdXIpLCBtX3JlZ3MucmVnVDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnVyc2hpZnQzMihtX3JlZ3MucmVnVDAsIG1fcmVncy5yZWdUMik7IC8vIFdlIGNhbiBp
Z25vcmUgdXBwZXIgYml0cyBhbmQgb25seSBsb3dlciA1Yml0cyBhcmUgZWZmZWN0aXZlLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbV9yZWdzLnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRPZkxlbmd0aEZhaWx1cmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoZW5kSW5kZXgg
LSBiZWdpbkluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcCgpLmxpbmtU
byhsb29wSGVhZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVt
cCgpLmxpbmtUbyhsb29wSGVhZCwgJm1faml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gc2l6ZSBpcyBub3Qg
Zml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGluZGV4IGZvciB1c2UgaWYgd2UgbWF0Y2guCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIGFkanVzdGluZyBtYXRj
aC1zdGFydCB3aGVuIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBzdGFydCB3aXRoIEJveWVyTW9vcmUg
c2VhcmNoLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5t
X2hhc0ZpeGVkU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVuZ3Ro
RmFpbHVyZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dE9mTGVu
Z3RoRmFpbHVyZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIHJl
Z1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdU
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG1fcmVncy5p
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwg
bV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hT
dGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG91dE9mTGVuZ3RoRmFpbHVyZSk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZWQubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHBhdHRlcm4gc2l6ZSBpcyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGlu
ZGV4IGZvciB1c2UgaWYgd2UgbWF0Y2guCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHVzZWQgZm9yIGFkanVzdGluZyBtYXRjaC1zdGFydCB3aGVuIHdlIHN0YXJ0IHBhdHRlcm4g
bWF0Y2hpbmcgd2l0aCB0aGUgdXBkYXRlZCBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYnkgQm95ZXJNb29yZSBzZWFyY2guCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
cGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN1YjMyKGluZGV4LCBJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hT
dGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMy
KG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKSwgbV9yZWdzLnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3Jl
Z3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUxNywyMSArMjQ0MSwyMCBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gTG9hZCBh
cHByb3ByaWF0ZSB2YWx1ZXMgaW50byB0aGUgcmV0dXJuIHJlZ2lzdGVyIGFuZCB0aGUgZmlyc3Qg
b3V0cHV0CiAgICAgICAgICAgICAgICAgLy8gc2xvdCwgYW5kIHJldHVybi4gSW4gdGhlIGNhc2Ug
b2YgcGF0dGVybiB3aXRoIGEgZml4ZWQgc2l6ZSwgd2Ugd2lsbAogICAgICAgICAgICAgICAgIC8v
IG5vdCBoYXZlIHlldCBzZXQgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggIT0gcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX3JlZ3MuaW5kZXggIT0gbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAg
ICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIocHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVt
U2l6ZSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHByaW9yQWx0ZXJuYXRpdmUt
Pm1fbWluaW11bVNpemUpLCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCByZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG1fcmVncy5pbmRleCwg
bV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29tcGls
ZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JlUGFpcjMyKHJldHVyblJlZ2lzdGVyLCBpbmRleCwgb3V0cHV0LCBU
cnVzdGVkSW1tMzIoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQYWly
MzIobV9yZWdzLnJldHVyblJlZ2lzdGVyLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5vdXRwdXQsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldE1hdGNoU3RhcnQocmV0dXJuUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICBnZXRNYXRjaFN0YXJ0KG1fcmVncy5yZXR1cm5SZWdpc3Rlcik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJ
bmNsdWRlU3VicGF0dGVybnMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4
LCBBZGRyZXNzKG91dHB1dCwgNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fcmVncy5vdXRwdXQs
IDQpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbW92ZShpbmRleCwgcmV0
dXJuUmVnaXN0ZXIyKTsKLQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUobV9yZWdzLmluZGV4
LCBtX3JlZ3MucmV0dXJuUmVnaXN0ZXIyKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZVJldHVy
bigpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGl2aWRlIGJldHdlZW4gdGhl
IHRhaWwgb2YgdGhlIHByaW9yIGFsdGVybmF0aXZlLCBhYm92ZSwgYW5kCkBAIC0yNTQyLDE3ICsy
NDY1LDE3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhhdCBqdW1wcyBoZXJlIHRvIGRvIHNvIHdpdGggdGhlIGlucHV0
IHBvc2l0aW9uIG1hdGNoaW5nIHRoYXQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIFBS
SU9SIGFsdGVyYW5hdGl2ZSwgYW5kIHdlIHdpbGwgb25seSBjaGVjayBpbnB1dCBhdmFpbGFiaWxp
dHkgaWYgd2UKICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBwcm9ncmVzcyBpdCBmb3J3
YXJkcy4KLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID4gcHJpb3JBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIo
YWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1T
aXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gcHJpb3JBbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCkpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUg
PiBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1
YjMyKEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
IC0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAob3AubV9uZXh0T3AgPT0gbm90Rm91bmQpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVlbnRyeSBwb2ludCBmb3IgdGhlIEVuZCBvZiAnb25j
ZSB0aHJvdWdoJyBhbHRlcm5hdGl2ZXMsCiAgICAgICAgICAgICAgICAgICAgIC8vIGp1bXBlZCB0
byB3aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZlIGZhaWxzIHRvIG1hdGNoLgotICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBzdWIz
MihJbW0zMihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIocHJpb3JBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gWWFyck9wQ29kZTo6Qm9keUFsdGVybmF0aXZl
TmV4dCkKQEAgLTI2MDgsNyArMjUzMSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1
YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICFtX29wc1tvcC5tX3ByZXZpb3VzT3BdLm1fYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHByZXZpb3VzIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25zdW1pbmcgY2hhcmFjdGVy
cyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2t0cmFjayB0byB0cnkgdG8gbWF0Y2gg
d2hpbGUgY29uc3VtbWluZyBzb21lIGlucHV0LgotICAgICAgICAgICAgICAgICAgICBvcC5tX3pl
cm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0Y2ggPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9u
ICogc2l6ZW9mKHZvaWQqKSkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IC8vIElmIHdlIHJlYWNoIGhlcmUgdGhlbiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBoYXMgbWF0Y2hl
ZCAtIGp1bXAgdG8gdGhlCkBAIC0yNjI1LDEwICsyNTQ4LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgZW5kT3AgPSAmbV9v
cHNbZW5kT3AtPm1fbmV4dE9wXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGVuZE9wLT5tX29wID09IFlhcnJPcENvZGU6OlNpbXBsZU5lc3RlZEFsdGVybmF0aXZl
RW5kIHx8IGVuZE9wLT5tX29wID09IFlhcnJPcENvZGU6Ok5lc3RlZEFsdGVybmF0aXZlRW5kKTsK
LSAgICAgICAgICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbmV4dCBhbHRlcm5hdGl2
ZS4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAg
ICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAgICAgICAgICAgICAgICAvLyBD
YWxjdWxhdGUgaG93IG11Y2ggaW5wdXQgd2UgbmVlZCB0byBjaGVjayBmb3IsIGFuZCBpZiBub24t
emVybyBjaGVjay4KICAgICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRqdXN0ID0gYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemU7CkBAIC0yNjU1LDEzICsyNTc4LDEzIEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVh
bnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICFtX29wc1tvcC5tX3By
ZXZpb3VzT3BdLm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25z
dW1pbmcgY2hhcmFjdGVycyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2t0cmFjayB0
byB0cnkgdG8gbWF0Y2ggd2hpbGUgY29uc3VtbWluZyBzb21lIGlucHV0LgotICAgICAgICAgICAg
ICAgICAgICBvcC5tX3plcm9MZW5ndGhNYXRjaCA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2
b2lkKikpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV96ZXJvTGVuZ3RoTWF0Y2ggPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG1fcmVncy5pbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJt
LT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgc2V0IG9mIGFsdGVybmF0aXZlcyBjb250YWlucyBt
b3JlIHRoYW4gb25lIGFsdGVybmF0aXZlLAogICAgICAgICAgICAgICAgIC8vIHRoZW4gdGhlIE5l
eHQgbm9kZXMgd2lsbCBoYXZlIHBsYW50ZWQganVtcHMgdG8gdGhlIEVuZCwgYW5kIGFkZGVkCiAg
ICAgICAgICAgICAgICAgLy8gdGhlbSB0byB0aGlzIG5vZGUncyBtX2p1bXBzIGxpc3QuCi0gICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG9wLm1f
anVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuY2xlYXIoKTsK
IAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09w
XTsKQEAgLTI2NzYsNyArMjU5OSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJs
aWMgWWFyckoKICAgICAgICAgICAgIGNhc2UgWWFyck9wQ29kZTo6UGFyZW50aGVzZXNTdWJwYXR0
ZXJuT25jZUJlZ2luOiB7CiAgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5t
X3Rlcm07CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklE
IGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gMSk7CiAKICAgICAgICAg
ICAgICAgICAvLyBVcG9uIGVudHJ5IHRvIGEgR3JlZWR5IHF1YW50aWZpZWQgc2V0IG9mIHBhcmVu
dGhlc2Ugc3RvcmUgdGhlIGluZGV4LgpAQCAtMjY5NCwxMiArMjYxNywxMiBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogZm9yIGNhcHR1cmluZyBwYXJlbnMsIGNvdWxkIHVzZSB0aGUg
aW5kZXggaW4gdGhlIGNhcHR1cmUgYXJyYXk/CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShtX3JlZ3MuaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVl
ZHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSks
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6
OmJlZ2luSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTo6YmVnaW5JbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
LTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNP
bmNlOjpiZWdpbkluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2pp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4
LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNl
OjpiZWdpbkluZGV4KCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBzdGFydGluZyBpbmRl
eCB2YWx1ZSB0byB0aGUKQEAgLTI3MTMsMjMgKzI2MzYsMjMgQEAgY2xhc3MgWWFyckdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50KQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRPZmZzZXQgKz0gdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1f
bWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlucHV0T2Zmc2V0KSwgaW5k
ZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIobV9yZWdz
LmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFy
eSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXhUZW1w
b3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KGlu
ZGV4LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0U3VicGF0dGVyblN0YXJ0KG1fcmVncy5pbmRleCwgdGVybS0+cGFyZW50aGVzZXMu
c3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFlhcnJPcENvZGU6OlBhcmVudGhlc2Vz
U3VicGF0dGVybk9uY2VFbmQ6IHsKICAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9
IG9wLm1fdGVybTsKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9y
YXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHRlcm0tPnF1YW50aXR5TWF4Q291bnQgPT0gMSk7CiAKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgbmVzdGVkIGFsdGVybmF0aXZlIG1hdGNoZWQgd2l0aG91dCBjb25zdW1pbmcgYW55IGNo
YXJhY3RlcnMsIHB1bnQgdGhpcyBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4KICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFSUiBKSVQgdG8gcHJvcGVybHkKICAgICAgICAg
ICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJlc3Npb25zIHRoYXQgY2FuIG1hdGNoIHdpdGhv
dXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICF0ZXJtLT5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgbV9hYm9y
dEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2Nh
dGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFy
ZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4IHZhbHVlIHRvIHRo
ZQogICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVzIGFycmF5LCBvZmZzZXR0aW5nIGFzIG5lY2Vz
c2FyeS4KQEAgLTI3NDAsMjAgKzI2NjMsMjAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6
IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkgJiYgbV9j
b21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5zKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlucHV0T2Zmc2V0ID0gbV9jaGVja2VkT2Zmc2V0IC0g
dGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1tMzIoaW5wdXRPZmZz
ZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIz
MihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9mZnNldCksIGluZGV4
VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQoaW5k
ZXhUZW1wb3JhcnksIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3VicGF0dGVybkVu
ZChpbmRleCwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNldFN1YnBhdHRlcm5FbmQobV9yZWdzLmluZGV4LCB0ZXJtLT5wYXJlbnRoZXNl
cy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBwYXJlbnRoZXNlcyBhcmUgcXVhbnRpZmllZCBHcmVlZHkgdGhlbiBhZGQgYSBsYWJl
bCB0byBqdW1wIGJhY2sKICAgICAgICAgICAgICAgICAvLyB0byBpZiB3ZSBnZXQgYSBmYWlsZWQg
bWF0Y2ggZnJvbSBhZnRlciB0aGUgcGFyZW50aGVzZXMuIEZvciBOb25HcmVlZHkKICAgICAgICAg
ICAgICAgICAvLyBwYXJlbnRoZXNlcywgbGluayB0aGUganVtcCBmcm9tIGJlZm9yZSB0aGUgc3Vi
cGF0dGVybiB0byBoZXJlLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUg
PT0gUXVhbnRpZmllclR5cGU6OkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVu
dHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQu
bGFiZWwoKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllclR5cGU6Ok5vbkdyZWVkeSkgewogICAgICAgICAgICAgICAgICAgICBZYXJyT3Am
IGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwotICAgICAgICAgICAgICAgICAgICBi
ZWdpbk9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5PcC5t
X2p1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yNzY2LDExICsyNjg5LDExIEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICBBU1NFUlQoIXRl
cm0tPmNhcHR1cmUoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBVcG9uIGVudHJ5IHNldCBhIGxh
YmVsIHRvIGxvb3AgYmFjayB0by4KLSAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJl
bCgpOworICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAKICAg
ICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgc3RhcnQgaW5kZXggb2YgdGhlIGN1cnJlbnQgbWF0
Y2g7IHdlIG5lZWQgdG8gcmVqZWN0IHplcm8KICAgICAgICAgICAgICAgICAvLyBsZW5ndGggbWF0
Y2hlcy4KLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9j
YXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbDo6YmVnaW5JbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUobV9yZWdzLmluZGV4LCB0ZXJtLT5mcmFtZUxv
Y2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzVGVybWluYWw6OmJlZ2luSW5kZXgoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IFlhcnJPcENvZGU6OlBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5kOiB7CkBAIC0yNzgx
LDE1ICsyNzA0LDE1IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDA3ODY+IEFkZCBhYmlsaXR5IGZvciB0aGUgWUFSUiBKSVQgdG8gcHJvcGVy
bHkKICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbmVzdGVkIGV4cHJlc3Npb25zIHRoYXQgY2Fu
IG1hdGNoIHdpdGhvdXQgY29uc3VtaW5nIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICBpZiAo
dGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENvdW50ICYmICF0ZXJt
LT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAg
ICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZv
aWQqKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hYm9ydEV4ZWN1dGlvbi5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBtX3JlZ3MuaW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGVy
bS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBXZSBrbm93IHRoYXQgdGhlIG1hdGNoIGlzIG5vbi16ZXJvLCB3ZSBjYW4gYWNjZXB0IGl0IGFu
ZAogICAgICAgICAgICAgICAgIC8vIGxvb3AgYmFjayB1cCB0byB0aGUgaGVhZCBvZiB0aGUgc3Vi
cGF0dGVybi4KLSAgICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKIAogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIGp1bXAgdG8gd2hlbiB3ZSBzdG9wIG1h
dGNoaW5nIC0gd2Ugd2lsbAogICAgICAgICAgICAgICAgIC8vIGRvIHNvIG9uY2UgdGhlIHN1YnBh
dHRlcm4gY2Fubm90IG1hdGNoIGFueSBtb3JlLgotICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IGxhYmVsKCk7CisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMjgxNiwyNCAr
MjczOSwyNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
ICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIGNhcHR1cmluZyBw
YXJlbnMsIGNvdWxkIHVzZSB0aGUgaW5kZXggaW4gdGhlIGNhcHR1cmUgYXJyYXk/CiAgICAgICAg
ICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5
IHx8IHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3JlZWR5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoMCksIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6bWF0Y2hBbW91bnRJ
bmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRo
ZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBzdG9y
ZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCkp
OworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0lu
Zm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0SGVhZEluZGV4KCkpOwogCiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6Ok5vbkdyZWVk
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigt
MSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6
YmVnaW5JbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tU
cmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRy
eSA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgY3VyclBhcmVuQ29u
dGV4dFJlZyA9IHJlZ1QwOwotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcklEIG5ld1BhcmVu
Q29udGV4dFJlZyA9IHJlZ1QxOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBt
X2ppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBjdXJyUGFyZW5Db250ZXh0UmVnID0gbV9yZWdzLnJlZ1QwOworICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBuZXdQYXJlbkNvbnRleHRSZWcgPSBtX3Jl
Z3MucmVnVDE7CiAKICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhl
YWRJbmRleCgpLCBjdXJyUGFyZW5Db250ZXh0UmVnKTsKICAgICAgICAgICAgICAgICAgICAgYWxs
b2NhdGVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgc3RvcmVQdHIoY3VyclBhcmVuQ29udGV4dFJlZywgQWRkcmVzcyhuZXdQYXJlbkNvbnRleHRS
ZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY3VyclBhcmVuQ29udGV4
dFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobmV3UGFyZW5Db250ZXh0UmVnKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShuZXdQYXJlbkNvbnRleHRSZWcsIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0
SGVhZEluZGV4KCkpOwotICAgICAgICAgICAgICAgICAgICBzYXZlUGFyZW5Db250ZXh0KG5ld1Bh
cmVuQ29udGV4dFJlZywgcmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVy
bS0+cGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
KTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OmJlZ2luSW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNhdmVQYXJlbkNvbnRleHQobmV3UGFyZW5Db250ZXh0UmVnLCBt
X3JlZ3MucmVnVDIsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS0+cGFyZW50
aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdpbkluZGV4KCkpOwogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFy
ZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBzdGFydGluZyBpbmRleCB2YWx1ZSB0byB0aGUKQEAgLTI4
NDMsMTUgKzI3NjYsMTUgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJy
SgogICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9p
bnQgdGhlIHJlc3VsdHMgYXJyYXkgaXMKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3Nl
ZC4KICAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUg
PT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJwYXR0ZXJucykgewotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5
ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dE9mZnNl
dCA9IG1fY2hlY2tlZE9mZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dE9mZnNldCArPSB0ZXJtLT5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGlucHV0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihpbmRleCwgSW1t
MzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihtX3JlZ3MuaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbnB1dE9m
ZnNldCksIGluZGV4VGVtcG9yYXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBh
dHRlcm5TdGFydChpbmRleFRlbXBvcmFyeSwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklk
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZXRTdWJwYXR0ZXJuU3RhcnQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuU3RhcnQobV9yZWdzLmluZGV4
LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAgICAgICAgICAgICAgIH0KICNl
bHNlIC8vICFZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TCiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI4NjcsMTMgKzI3OTAsMTMgQEAgY2xh
c3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDc4Nj4g
QWRkIGFiaWxpdHkgZm9yIHRoZSBZQVJSIEpJVCB0byBwcm9wZXJseQogICAgICAgICAgICAgICAg
IC8vIGhhbmRsZSBuZXN0ZWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4gbWF0Y2ggd2l0aG91dCBjb25z
dW1pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUg
IT0gUXVhbnRpZmllclR5cGU6OkZpeGVkQ291bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1
bmN0aW9uLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICBtX2Fib3J0RXhlY3V0
aW9uLmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fYWJvcnRFeGVjdXRpb24uYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgbV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKLSAgICAgICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgY291bnRUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDE7CiAK
ICAgICAgICAgICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3Bd
OwogICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjptYXRjaEFtb3VudEluZGV4KCksIGNvdW50VGVt
cG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVt
cG9yYXJ5KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBjb3VudFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKGNvdW50VGVtcG9yYXJ5LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJ
bmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4
IHZhbHVlIHRvIHRoZQpAQCAtMjg4MywxNCArMjgwNiwxNCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyBvbmx5IGFm
dGVyd2FyZHMsIGF0IHRoZSBwb2ludCB0aGUgcmVzdWx0cyBhcnJheSBpcwogICAgICAgICAgICAg
ICAgIC8vIGJlaW5nIGFjY2Vzc2VkLgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJl
KCkgJiYgbV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5jbHVkZVN1YnBhdHRlcm5z
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3Jhcnkg
PSByZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgaW5kZXhUZW1wb3JhcnkgPSBtX3JlZ3MucmVnVDA7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dE9mZnNldCA9IG1fY2hlY2tlZE9m
ZnNldCAtIHRlcm0tPmlucHV0UG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1
dE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGlu
cHV0T2Zmc2V0KSwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW5wdXRPZmZzZXQp
LCBpbmRleFRlbXBvcmFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJu
RW5kKGluZGV4VGVtcG9yYXJ5LCB0ZXJtLT5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN1YnBh
dHRlcm5FbmQoaW5kZXgsIHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRTdWJwYXR0ZXJuRW5kKG1fcmVncy5pbmRleCwgdGVybS0+cGFy
ZW50aGVzZXMuc3VicGF0dGVybklkKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZXMgYXJlIHF1YW50aWZpZWQgR3JlZWR5IHRoZW4gYWRk
IGEgbGFiZWwgdG8ganVtcCBiYWNrCkBAIC0yODk4LDE1ICsyODIxLDE1IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBwYXJlbnRo
ZXNlcywgbGluayB0aGUganVtcCBmcm9tIGJlZm9yZSB0aGUgc3VicGF0dGVybiB0byBoZXJlLgog
ICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6
OkdyZWVkeSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3Vu
dCAhPSBxdWFudGlmeUluZmluaXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIo
QmVsb3csIGNvdW50VGVtcG9yYXJ5LCBJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlu
a1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgY291bnRUZW1wb3JhcnksIE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMih0ZXJtLT5xdWFudGl0eU1heENvdW50KSkubGlua1RvKGJlZ2luT3Au
bV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAoYmVnaW5PcC5tX3JlZW50cnkpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6Tm9uR3Jl
ZWR5KSB7CiAgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1f
cHJldmlvdXNPcF07Ci0gICAgICAgICAgICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAg
ICAgICAgICAgICAgICBiZWdpbk9wLm1fanVtcHMubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgIH0K
ICNlbHNlIC8vICFZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TCiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5MjEsMTIgKzI4NDQsMTIgQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAg
IC8vIFN0b3JlIHRoZSBjdXJyZW50IGluZGV4IC0gYXNzZXJ0aW9ucyBzaG91bGQgbm90IHVwZGF0
ZSBpbmRleCwgc28KICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gcmVzdG9yZSBp
dCB1cG9uIGEgc3VjY2Vzc2Z1bCBtYXRjaC4KICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAg
ICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgQmFja1Ry
YWNrSW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKG1fcmVncy5pbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ICsgQmFja1RyYWNrSW5mb1BhcmVudGhldGljYWxBc3NlcnRpb246OmJlZ2luSW5kZXgoKSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBDaGVjayAKICAgICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRq
dXN0ID0gbV9jaGVja2VkT2Zmc2V0IC0gdGVybS0+aW5wdXRQb3NpdGlvbjsKICAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1t
MzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBtX3JlZ3MuaW5k
ZXgpOwogCiAgICAgICAgICAgICAgICAgbV9jaGVja2VkT2Zmc2V0IC09IG9wLm1fY2hlY2tBZGp1
c3Q7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTM2LDEzICsyODU5LDEzIEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAgICAgICAgIC8v
IFJlc3RvcmUgdGhlIGlucHV0IGluZGV4IHZhbHVlLgogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247Ci0gICAgICAg
ICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJh
Y2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpLCBpbmRleCk7CisgICAg
ICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNr
VHJhY2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjo6YmVnaW5JbmRleCgpLCBtX3JlZ3MuaW5k
ZXgpOwogCiAgICAgICAgICAgICAgICAgLy8gSWYgaW52ZXJ0ZWQsIGEgc3VjY2Vzc2Z1bCBtYXRj
aCBvZiB0aGUgYXNzZXJ0aW9uIG11c3QgYmUgdHJlYXRlZAogICAgICAgICAgICAgICAgIC8vIGFz
IGEgZmFpbHVyZSwgc28ganVtcCB0byBiYWNrdHJhY2tpbmcuCiAgICAgICAgICAgICAgICAgaWYg
KHRlcm0tPmludmVydCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3By
ZXZpb3VzT3BdOwpAQCAtMjk3MCw3ICsyODkzLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgLS1vcEluZGV4OwogCiAgICAgICAgICAgICBp
ZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZv
ckJhY2t0cmFjayhvcEluZGV4LCBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0Rm9yQmFja3RyYWNrKG9wSW5kZXgsIG1faml0LmxhYmVsKCkpOwogCiAgICAgICAg
ICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG9w
Lm1fb3ApIHsKQEAgLTMwMTUsNyArMjkzOCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwg
OiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHRoZSBsYXN0IGFsdGVy
bmF0aXZlPyBJZiBub3QsIHRoZW4gaWYgd2UgYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgd2UganVz
dAogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8ganVtcCB0byB0cnkgdG8gbWF0Y2ggdGhlIG5l
eHQgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG1fb3BzW29wLm1fbmV4dE9wXS5t
X29wICE9IFlhcnJPcENvZGU6OkJvZHlBbHRlcm5hdGl2ZUVuZCkgewotICAgICAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhtX29wc1tvcC5tX25leHRPcF0ubV9yZWVu
dHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5r
VG8obV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFlhcnJPcCYg
ZW5kT3AgPSBtX29wc1tvcC5tX25leHRPcF07CkBAIC0zMDI5LDE3ICsyOTUyLDE3IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKIAogICAgICAgICAgICAgICAgIGJv
b2wgb25jZVRocm91Z2ggPSBlbmRPcC5tX25leHRPcCA9PSBub3RGb3VuZDsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBKdW1wTGlzdCBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWls
dXJlczsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbGFzdFN0aWNr
eUFsdGVybmF0aXZlRmFpbHVyZXM7CiAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgZ2VuZXJh
dGUgY29kZSB0byBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgYmFja3RyYWNrIG91dCBvZiBhbiBhdHRl
bXB0ZWQgbWF0Y2gKICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZS4g
SWYgdGhpcyBpcyBhICdvbmNlIHRocm91Z2gnIHNldCBvZiBhbHRlcm5hdGl2ZXMgdGhlbiB3ZQog
ICAgICAgICAgICAgICAgIC8vIGhhdmUgbm90aGluZyB0byBkbyAtIGxpbmsgdGhpcyBzdHJhaWdo
dCB0aHJvdWdoIHRvIHRoZSBFbmQuCiAgICAgICAgICAgICAgICAgaWYgKG9uY2VUaHJvdWdoKQot
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3Jl
ZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmtUbyhlbmRPcC5tX3JlZW50cnksICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3BhdHRlcm4uc3RpY2t5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGEgc3RpY2t5IHBhdHRlcm4gYW5kIHRoZSBsYXN0IGFsdGVy
bmF0aXZlIGZhaWxlZCwganVtcCB0byB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobGFzdFN0aWNreUFs
dGVybmF0aXZlRmFpbHVyZXMsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNr
dHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3QobGFzdFN0aWNreUFsdGVybmF0
aXZlRmFpbHVyZXMsICZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9w
YXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICYm
IChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA+IGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IDEp
KSB7CkBAIC0zMDQ3LDExICsyOTcwLDExIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChpbiB3aGljaCBjYXNlIHdl
IG9taXQgdGhlIHN0b3JlIG9mIHRoZSBzdGFydCBpbmRleCB1bnRpbCB0aGUgcGF0dGVybiBoYXMg
bWF0Y2hlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIGp1c3QgbGlu
ayB0aGUgYmFja3RyYWNrIG91dCBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBzdHJhaWdodCB0byB0
aGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWQgb2YgdGhlIGZpcnN0IGFsdGVybmF0
aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8o
YmVnaW5PcC0+bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZ2VuZXJhdGUgYSB0cmFtcG9saW5lIG9mIGNvZGUgdG8gZXhlY3V0ZSBiZWZvcmUgbG9v
cGluZyBiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcm91bmQgdG8gdGhlIGZpcnN0
IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
YWR2YW5jZSBhbmQgcmV0cnkgZm9yIGEgc3RpY2t5IHBhdHRlcm4uIEFuZCBpdCBpcyBhbHJlYWR5
IGhhbmRsZWQgYmVmb3JlIHRoaXMgYnJhbmNoLgogICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFtX3BhdHRlcm4uc3RpY2t5KCkpOwpAQCAtMzA1OSwxMyArMjk4MiwxMyBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgcGF0dGVybiBzaXplIGlzIG5vdCBmaXhlZCwgdGhlbiBzdG9yZSB0aGUgc3Rh
cnQgaW5kZXggZm9yIHVzZSBpZiB3ZSBtYXRjaC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPT0gMSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLmluZGV4KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplIC0gMSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjMyKG1fcmVncy5pbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGFsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplIC0gMSksIG1fcmVncy5yZWdUMCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCBtX3JlZ3MuaW5kZXgsIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdzLnJlZ1QwKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMwNzcsMTYgKzMw
MDAsMTYgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbHRhID0gYWx0ZXJuYXRpdmUtPm1fbWlu
aW11bVNpemUgLSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZWx0YSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRlbHRhICE9IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN1YjMyKEltbTMyKGRlbHRhIC0gMSksIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdW1wKGJlZ2luT3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSAtIDEpLCBtX3Jl
Z3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoYmVnaW5P
cC0+bV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGFsdGVybmF0aXZlIGhhcyBtaW5p
bXVtIHNpemUgMHhGRkZGRkZGRnUsIHRoZW4gdGhlcmUgY2Fubm90CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYmUgc3VmZmljZW50IGlucHV0IGF2YWlsYWJsZSB0byBoYW5kbGUgdGhp
cywgc28ganVzdCBmYWxsIHRocm91Z2guCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgZGVsdGEgPSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGRlbHRhICE9IDB4RkZGRkZGRkZ1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgaW5wdXQgYmVjYXVzZSB3ZSBhcmUgaW5jcmVtZW50aW5nIHRo
ZSBpbnB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoZGVs
dGEgKyAxKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lu
cHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSAr
IDEpLCBtX3JlZ3MuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgJm1faml0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTMwOTksNyArMzAyMiw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmlu
YWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyAgICBmb2xsb3dpbmcgYSBmYWls
ZWQgaW5wdXQgY2hlY2suCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBF
aXRoZXIgd2F5LCB3ZSBoYXZlIGp1c3QgZmFpbGVkIHRoZSBpbnB1dCBjaGVjayBmb3IgdGhlIGZp
cnN0IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgICAgIExhYmVsIGZpcnN0SW5wdXRDaGVja0Zh
aWxlZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZmlyc3RJ
bnB1dENoZWNrRmFpbGVkKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBj
b2RlIHRvIGhhbmRsZSBpbnB1dCBjaGVjayBmYWlsdXJlcyBmcm9tIGFsdGVybmF0aXZlcyBleGNl
cHQgdGhlIGxhc3QuCiAgICAgICAgICAgICAgICAgLy8gcHJldk9wIGlzIHRoZSBhbHRlcm5hdGl2
ZSB3ZSdyZSBoYW5kbGluZyBhIGJhaWwgb3V0IGZyb20gKGluaXRpYWxseSBCZWdpbiksIGFuZApA
QCAtMzExMCw3ICszMDMzLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIFlhcnJPcCogcHJldk9wID0gYmVnaW5PcDsKICAgICAgICAg
ICAgICAgICBZYXJyT3AqIG5leHRPcCA9ICZtX29wc1tiZWdpbk9wLT5tX25leHRPcF07CiAgICAg
ICAgICAgICAgICAgd2hpbGUgKG5leHRPcC0+bV9vcCAhPSBZYXJyT3BDb2RlOjpCb2R5QWx0ZXJu
YXRpdmVFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldk9wLT5tX2p1bXBzLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgICAgIHByZXZPcC0+bV9qdW1wcy5saW5rKCZtX2ppdCk7CiAK
ICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBnZXQgaGVyZSBpZiBhbiBpbnB1dCBjaGVj
ayBmYWlscywgaXQgaXMgb25seSB3b3J0aCBjaGVja2luZyBhZ2FpbgogICAgICAgICAgICAgICAg
ICAgICAvLyBpZiB0aGUgbmV4dCBhbHRlcm5hdGl2ZSBoYXMgYSBtaW5pbXVtIHNpemUgbGVzcyB0
aGFuIHRoZSBsYXN0LgpAQCAtMzExOSwxMyArMzA0MiwxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWJ0cmFj
dCBkZWx0YSBiYWNrIG91dCwgYW5kIHJlZHVjZSB0aGlzIGNvZGUuIFNob3VsZCBwZXJmb3JtYW5j
ZSB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYmVuZWZpdCBvZiB0aGlzLgog
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsdGEgPSBwcmV2T3AtPm1fYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUgLSBuZXh0T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNp
emU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgZmFpbCA9IGp1bXBJZk5vQXZhaWxhYmxlSW5w
dXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGRlbHRhKSwgaW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICAgICAganVtcChuZXh0T3AtPm1fcmVlbnRyeSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmYWlsLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZGVsdGEpLCBtX3JlZ3MuaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbCA9
IGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG5leHRPcC0+bV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZhaWwubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHByZXZPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA8IG5leHRP
cC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZDMyKEltbTMyKG5leHRPcC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByZXZP
cC0+bV9hbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihuZXh0T3AtPm1fYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUpLCBtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBwcmV2T3AgPSBuZXh0
T3A7CiAgICAgICAgICAgICAgICAgICAgIG5leHRPcCA9ICZtX29wc1tuZXh0T3AtPm1fbmV4dE9w
XTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTM1LDE0ICszMDU4LDE0IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8gcnVuIHRoZSBsYXN0IGFsdGVybmF0aXZlLCB0aGVu
IGZvciAnb25jZSB0aHJvdWdoJwogICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlcyB3ZSBh
cmUgZG9uZSAtIGp1c3QganVtcCBiYWNrIHVwIGludG8gdGhlIGZvcndhcmRzIG1hdGNoaW5nIHBh
dGggYXQgdGhlIEVuZC4KICAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpIHsKLSAgICAg
ICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsK
LSAgICAgICAgICAgICAgICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAg
ICAgICAgICBvcC5tX2p1bXBzLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksICZtX2ppdCk7CisgICAg
ICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoZW5kT3AubV9yZWVudHJ5KTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8g
Rm9yIHJlcGVhdGluZyBhbHRlcm5hdGl2ZXMsIGxpbmsgYW55IGlucHV0IGNoZWNrIGZhaWx1cmUg
ZnJvbSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSB0bwogICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9p
bnQuCi0gICAgICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBuZWVk
c1RvVXBkYXRlTWF0Y2hTdGFydCA9ICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZTsK
IApAQCAtMzE1MSw3ICszMDc0LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBZYXJySgogICAgICAgICAgICAgICAgIC8vIGRpc2p1bmN0aW9uIGlzIDAsIGUuZy4gL2EqfGIv
KS4KICAgICAgICAgICAgICAgICBpZiAobmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQgJiYgYWx0ZXJu
YXRpdmUtPm1fbWluaW11bVNpemUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbmRl
eCBpcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IDEsIHNvIGp1c3Qgc3RvcmUgaXQgbm93IQotICAg
ICAgICAgICAgICAgICAgICBzZXRNYXRjaFN0YXJ0KGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBuZWVk
c1RvVXBkYXRlTWF0Y2hTdGFydCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMzE2
NCwyMiArMzA4NywyMiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJK
CiAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSBt
X3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBoYWQgdGhlIHNhbWUgbWluaW11bSBzaXplIGFz
IHRoZSBkaXNqdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3Qgc2ltcGx5
IGluY3JlbWVudCBpbnB1dCBwb3MgYnkgMSwgbm8gYWRqdXN0bWVudCBiYXNlZCBvbiBtaW5pbXVt
IHNpemUuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGlu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbWludW11bSBmb3IgdGhl
IGxhc3QgYWx0ZXJuYXRpdmUgd2FzIG9uZSBncmVhdGVyIHRoYW4gdGhhbiB0aGF0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGRpc2p1bmN0aW9uLCB3ZSdyZSBhbHJlYWR5IHBy
b2dyZXNzZWQgYnkgMSwgbm90aGluZyB0byBkbyEKICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGRlbHRhID0gKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1f
Ym9keS0+bV9taW5pbXVtU2l6ZSkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRl
bHRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGRlbHRhKSwgaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpJbW0zMihkZWx0YSksIG1fcmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgSnVtcCBtYXRjaEZhaWxlZCA9IGp1bXBJZk5vQXZhaWxhYmxl
SW5wdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbWF0Y2hG
YWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoaW5kZXgsIEltbTMyKG1f
cGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuc3ViMzIobV9yZWdzLmluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobV9w
YXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIG1fcmVncy5yZWdUMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MucmVnVDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTMxODcsMjIgKzMx
MTAsMjIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgICAgICAvLyBmb3IgdGhlIGJvZHkgYXMgYSB3aG9sZS4gSWYgbm8gbW9yZSBpcyBu
ZWVkZWQgdGhlbiB3ZSBkb250IG5lZWQgYW4gYWRkaXRpb25hbAogICAgICAgICAgICAgICAgICAg
ICAvLyBpbnB1dCBjaGVjayBoZXJlIC0ganVtcCBzdHJhaWdodCBiYWNrIHVwIHRvIHRoZSBzdGFy
dCBvZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdp
bk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplID09IG1fcGF0dGVybi5tX2JvZHktPm1f
bWluaW11bVNpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGJlZ2luT3AtPm1fcmVl
bnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKGJlZ2luT3AtPm1fcmVl
bnRyeSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPiBtX3BhdHRlcm4u
bV9ib2R5LT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZDMy
KEltbTMyKGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBtX3BhdHRlcm4u
bV9ib2R5LT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihiZWdpbk9wLT5tX2FsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIG1f
cmVncy5pbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6
ZSAtIGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCBpbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRy
eSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKGZpcnN0SW5wdXRDaGVja0Zh
aWxlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgLSBiZWdpbk9wLT5t
X2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgbV9yZWdzLmluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5PcC0+bV9yZWVudHJ5LCAmbV9q
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChmaXJzdElucHV0Q2hlY2tG
YWlsZWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLy8g
V2UganVtcCB0byBoZXJlIGlmIHdlIGl0ZXJhdGUgdG8gdGhlIHBvaW50IHRoYXQgdGhlcmUgaXMg
aW5zdWZmaWNpZW50IGlucHV0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBhbnkgbWF0
Y2hlcywgYW5kIG5lZWQgdG8gcmV0dXJuIGEgZmFpbHVyZSBzdGF0ZSBmcm9tIEpJVCBjb2RlLgot
ICAgICAgICAgICAgICAgICAgICBtYXRjaEZhaWxlZC5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBtYXRjaEZhaWxlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbGFzdFN0aWNreUFsdGVybmF0aXZlRmFpbHVyZXMubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICBsYXN0U3RpY2t5QWx0ZXJuYXRpdmVGYWlsdXJlcy5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVGYWlsUmV0dXJuKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjYyLDE0
ICszMTg1LDE0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAg
ICAgICAgICAgICAgICAvLyBsaW5rIHRoZSBiYWNrdHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRl
c3RpbmF0aW9uLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBsaW5r
IHRoZSBiYWNrdHJhY2tzIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5n
U3RhdGUubGluayh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIob3AubV9j
aGVja0FkanVzdCksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1
bXAgdG8gaXRzIHN1Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAobmV4dE9w
Lm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5qdW1wKG5leHRPcC5t
X3JlZW50cnkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0JlZ2luKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFzdCBvZiBtb3JlIHRoYW4gb25lIGFsdGVy
bmF0aXZlcyBtdXN0IGp1bXAgYmFjayB0byB0aGUgYmVnaW5uaW5nLgotICAgICAgICAgICAgICAg
ICAgICAgICAgbmV4dE9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0T3AubV9qdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgc2luZ2xlIGFs
dGVybmF0aXZlIG9uIGl0cyBvd24gY2FuIGZhbGwgdGhyb3VnaC4KICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKQEAgLTMyNzgsMTAgKzMy
MDEsMTAgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHdlIGNhbiBsaW5rIHRoZSBi
YWNrdHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRlc3RpbmF0aW9ucy4KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1bXAgdG8gaXRz
IHN1Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGlua1RvKG5leHRPcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8obmV4dE9wLm1fcmVlbnRyeSwgJm1faml0KTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZXMgbXVzdCBq
dW1wIGJhY2sgdG8gdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG5leHRPcC5tX2p1bXBzLCB0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJh
Y2t0cmFja3NUb0p1bXBMaXN0KG5leHRPcC5tX2p1bXBzLCAmbV9qaXQpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgc2luZ2xl
IGFsdGVybmF0aXZlIG9uIGl0cyBvd24gZG8gbm90aGluZyAtIGl0IGNhbiBmYWxsIHRocm91Z2gu
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzMzMSw3ICszMjU0LDcgQEAgY2xhc3MgWWFyckdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIGludG8gdGhlIGVu
ZCBvZiBhIG5vbi1zaW1wbGUgc2V0IG9mIGFsdGVybnRpdmVzIHdlIG5lZWQgdG8ganVtcAogICAg
ICAgICAgICAgICAgIC8vIHRvIHRoZSBiYWNrdHJhY2tpbmcgcmV0dXJuIGFkZHJlc3Mgc2V0IHVw
IGR1cmluZyBnZW5lcmF0aW9uLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX29wID09IFlhcnJP
cENvZGU6Ok5lc3RlZEFsdGVybmF0aXZlRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gUGxhbnQg
YSBqdW1wIHRvIHRoZSByZXR1cm4gYWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKQEAgLTMz
NjgsNyArMzI5MSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
IAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBiYWNrdHJhY2sgdG8gdGhpcyBw
b2ludCBpZiBjYXB0dXJpbmcgb3IgZ3JlZWR5LgogICAgICAgICAgICAgICAgIGlmICgodGVybS0+
Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVTdWJw
YXR0ZXJucykgfHwgdGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYXB0dXJpbmcsIGNsZWFyIHRoZSBjYXB0dXJlICh3
ZSBvbmx5IG5lZWQgdG8gcmVzZXQgc3RhcnQpLgogICAgICAgICAgICAgICAgICAgICBpZiAodGVy
bS0+Y2FwdHVyZSgpICYmIG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVT
dWJwYXR0ZXJucykKQEAgLTMzNzgsMTIgKzMzMDEsMTIgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBm
aW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENsZWFyIHRoZSBmbGFnIGluIHRoZSBzdGFja2ZyYW1lIGluZGljYXRpbmcgd2UgcmFu
IHRocm91Z2ggdGhlIHN1YnBhdHRlcm4uCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2U6OmJlZ2luSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBKdW1wIHRvIGFmdGVyIHRoZSBwYXJlbnRoZXNlcywgc2tpcHBpbmcgdGhlIHN1YnBh
dHRlcm4uCi0gICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5t
X3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29wc1tvcC5t
X25leHRPcF0ubV9yZWVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgYmFja3Ry
YWNrIGZyb20gYWZ0ZXIgdGhlIHBhcmVudGhlc2VzLCB3aGVuIHNraXBwaW5nIHRoZSBzdWJwYXR0
ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBqdW1wIGJhY2sgdG8gaGVyZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhy
b3VnaCgpOwpAQCAtMzM5NCwxMyArMzMxNywxMyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5t
X3Rlcm07CiAKICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50
aWZpZXJUeXBlOjpGaXhlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNr
aW5nU3RhdGUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB3ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZW50aGVzZXMsIG9yIGlmIHdl
CiAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gYSBzdGF0ZSB3aGVyZSB3
ZSBoYWQgc2tpcHBlZCBvdmVyIHRoZSBzdWJwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgIC8v
IChpbiB3aGljaCBjYXNlIHRoZSBmbGFnIHZhbHVlIG9uIHRoZSBzdGFjayB3aWxsIGJlIC0xKS4K
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0g
dGVybS0+ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgSnVtcCBoYWRTa2lwcGVk
ID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbklu
ZGV4KCkpICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRTa2lwcGVkID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBC
YWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOjpiZWdpbkluZGV4KCkpICogc2l6ZW9mKHZvaWQq
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpHcmVlZHkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBHcmVlZHkgcGFyZW50aGVzZXMsIHdlIHNr
aXAgYWZ0ZXIgaGF2aW5nIGFscmVhZHkgdHJpZWQgZ29pbmcKQEAgLTM0MTQsNyArMzMzNyw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG1hdGNoaW5nIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpOb25HcmVlZHkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91
c09wXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhZFNraXBwZWQubGlua1RvKGJlZ2luT3Au
bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZFNraXBwZWQubGlu
a1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwpA
QCAtMzQzNSw3ICszMzU4LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogICAgICAgICAgICAgICAgIC8vIHF1YW50aWZpZWQgd2l0aCBhIG1pbmltdW0gb2YgemVy
bykganVtcCBiYWNrIHRvIHRoZSBmb3J3YXJkcyBtYXRjaGluZwogICAgICAgICAgICAgICAgIC8v
IHBhdGggYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9wID0gbV9vcHNb
b3AubV9uZXh0T3BdOwotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1Rv
KGVuZE9wLm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBZYXJyT3BDb2RlOjpQYXJlbnRo
ZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZDoKQEAgLTM0NjUsNDAgKzMzODgsNDAgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CiAKICAg
ICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpG
aXhlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZt
X2ppdCk7CiAKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBjdXJyUGFyZW5Db250ZXh0
UmVnID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgbmV3UGFyZW5Db250
ZXh0UmVnID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGN1cnJQYXJlbkNvbnRleHRSZWcgPSBtX3JlZ3MucmVnVDA7CisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG5ld1BhcmVuQ29udGV4dFJlZyA9IG1f
cmVncy5yZWdUMTsKIAogICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6cGFyZW5Db250ZXh0
SGVhZEluZGV4KCksIGN1cnJQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVBhcmVuQ29udGV4dChjdXJyUGFyZW5Db250ZXh0
UmVnLCByZWdUMiwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRo
ZXNlcy5sYXN0U3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICByZXN0b3JlUGFyZW5Db250ZXh0KGN1cnJQYXJlbkNvbnRleHRSZWcsIG1f
cmVncy5yZWdUMiwgdGVybS0+cGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLT5wYXJlbnRo
ZXNlcy5sYXN0U3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZnJlZVBhcmVuQ29udGV4dChjdXJy
UGFyZW5Db250ZXh0UmVnLCBuZXdQYXJlbkNvbnRleHRSZWcpOwogICAgICAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUobmV3UGFyZW5Db250ZXh0UmVnLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6OnBhcmVuQ29udGV4dEhlYWRJbmRleCgpKTsK
IAotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50VGVtcG9yYXJ5ID0g
cmVnVDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QwOwogICAgICAgICAgICAgICAgICAgICBs
b2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJl
bnRoZXNlczo6bWF0Y2hBbW91bnRJbmRleCgpLCBjb3VudFRlbXBvcmFyeSk7Ci0gICAgICAgICAg
ICAgICAgICAgIEp1bXAgemVyb0xlbmd0aE1hdGNoID0gYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50
VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgemVy
b0xlbmd0aE1hdGNoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBj
b3VudFRlbXBvcmFyeSk7CiAKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBjb3VudFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIGNvdW50VGVtcG9yYXJ5KTsKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50VGVtcG9yYXJ5LCBwYXJlbnRoZXNlc0ZyYW1l
TG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50SW5kZXgoKSk7
CiAKLSAgICAgICAgICAgICAgICAgICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuanVtcChtX29wc1tvcC5tX25leHRPcF0ubV9y
ZWVudHJ5KTsKIAotICAgICAgICAgICAgICAgICAgICB6ZXJvTGVuZ3RoTWF0Y2gubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgemVyb0xlbmd0aE1hdGNoLmxpbmsoJm1faml0KTsKIAog
ICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmxhZyBpbiB0aGUgc3RhY2tmcmFtZSBp
bmRpY2F0aW5nIHdlIGRpZG4ndCBydW4gdGhyb3VnaCB0aGUgc3VicGF0dGVybi4KLSAgICAgICAg
ICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbiArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVz
ZXM6OmJlZ2luSW5kZXgoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyVHlwZTo6R3JlZWR5KQotICAgICAgICAgICAgICAgICAgICAg
ICAganVtcChtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lmp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgR3JlZWR5LCBqdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllclR5cGU6OkdyZWVk
eSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrdHJhY2sgZnJvbSBhZnRlciB0
aGUgcGFyZW50aGVzZXMsIHdoZW4gc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aWxsIGp1bXAgYmFjayB0byBoZXJlLgotICAgICAgICAgICAgICAg
ICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
b3AubV9qdW1wcy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNTEz
LDcgKzM0MzYsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAg
ICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKICAgICAgICAg
ICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJUeXBlOjpGaXhlZENv
dW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKCZtX2ppdCk7
CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
ID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKIApAQCAtMzUyMSw3ICszNDQ0LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZW50
aGVzZXMsIG9yIGlmIHdlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgY3VycmVudGx5
IGluIGEgc3RhdGUgd2hlcmUgd2UgaGFkIHNraXBwZWQgb3ZlciB0aGUgc3VicGF0dGVybgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gKGluIHdoaWNoIGNhc2UgdGhlIGZsYWcgdmFsdWUgb24g
dGhlIHN0YWNrIHdpbGwgYmUgLTEpLgotICAgICAgICAgICAgICAgICAgICAgICAgSnVtcCBoYWRT
a2lwcGVkID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gICsgQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzOjpiZWdp
bkluZGV4KCkpICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkU2tpcHBlZCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uICArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpKSAqIHNpemVvZih2
b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBHcmVlZHkgcGFyZW50aGVzZXMsIHdlIHNraXAgYWZ0ZXIgaGF2
aW5nIGFscmVhZHkgdHJpZWQgZ29pbmcKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRocm91
Z2ggdGhlIHN1YnBhdHRlcm4sIHNvIGlmIHdlIGdldCBoZXJlIHdlJ3JlIGRvbmUuCkBAIC0zNTM0
LDI0ICszNDU3LDI0IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHBhdGguCiAgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJUeXBlOjpO
b25HcmVlZHkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGJl
Z2luVGVtcG9yYXJ5ID0gcmVnVDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gcmVnVDE7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBiZWdpblRlbXBvcmFyeSA9IG1fcmVncy5y
ZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGNvdW50VGVtcG9yYXJ5ID0gbV9yZWdzLnJlZ1QxOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biArIEJhY2tUcmFja0luZm9QYXJlbnRoZXNlczo6YmVnaW5JbmRleCgpLCBiZWdpblRlbXBvcmFy
eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gzMihFcXVhbCwgYmVnaW5UZW1wb3Jh
cnksIFRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhiZWdpbk9wLm1fcmVlbnRyeSwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIGJlZ2luVGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC0xKSkubGlu
a1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBKdW1wTGlzdCBleGNlZWRlZE1hdGNoTGltaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZXhjZWVkZWRNYXRjaExpbWl0OwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlNYXhDb3VudCAhPSBxdWFudGlmeUluZmlu
aXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24gKyBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXM6Om1hdGNoQW1vdW50
SW5kZXgoKSwgY291bnRUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VlZGVkTWF0Y2hMaW1pdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBjb3VudFRlbXBv
cmFyeSwgSW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGNvdW50VGVtcG9yYXJ5LCBNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodGVybS0+cXVhbnRpdHlNYXhDb3VudCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMzIoQWJvdmUsIGluZGV4LCBiZWdp
blRlbXBvcmFyeSkubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgbV9yZWdz
LmluZGV4LCBiZWdpblRlbXBvcmFyeSkubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCAmbV9qaXQp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlZWRlZE1hdGNoTGltaXQubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VlZGVkTWF0Y2hMaW1pdC5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBtX2JhY2t0
cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CkBAIC0zNTczLDE3ICszNDk2LDE3IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgICAgICAvLyBv
ZiBhIHBhcmVudGhldGljYWwgYXNzZXJ0aW9uIGlmIGVpdGhlciB3ZSBuZWVkIHRvIGNvcnJlY3QK
ICAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgaW5kZXgsIG9yIHRoZSBhc3NlcnRpb24gd2Fz
IGludmVydGVkLgogICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0IHx8IHRlcm0t
PmludmVydCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluaygm
bV9qaXQpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgbV9yZWdzLmluZGV4KTsKIAogICAgICAgICAgICAgICAg
ICAgICAvLyBJbiBhbiBpbnZlcnRlZCBhc3NlcnRpb24gZmFpbHVyZSB0byBtYXRjaCB0aGUgc3Vi
cGF0dGVybgogICAgICAgICAgICAgICAgICAgICAvLyBpcyB0cmVhdGVkIGFzIGEgc3VjY2Vzc2Z1
bCBtYXRjaCAtIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8g
c3VicGF0dGVybi4gV2UgYWxyZWFkeSBoYXZlIGFkanVzdGVkIHRoZSBpbnB1dCBwb3NpdGlvbgog
ICAgICAgICAgICAgICAgICAgICAvLyBiYWNrIHRvIHRoYXQgYmVmb3JlIHRoZSBhc3NlcnRpb24s
IHdoaWNoIGlzIGNvcnJlY3QuCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAoZW5kT3AubV9yZWVudHJ5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0Lmp1bXAoZW5kT3AubV9yZWVudHJ5KTsKIAogICAgICAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMzYwMiw3ICszNTI1LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBZYXJySgogICAgICAgICAgICAgICAgIC8vIHRoaXMgYnVnIHRvbyAocHJlc3Vt
YWJseSBiZWNhdXNlIHRoZXkgdXNlIFlBUlIhKQogCiAgICAgICAgICAgICAgICAgLy8gTmV2ZXIg
YmFja3RyYWNrIGludG8gYW4gYXNzZXJ0aW9uOyBsYXRlciBmYWlsdXJlcyBiYWlsIHRvIGJlZm9y
ZSB0aGUgYmVnaW4uCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFj
a3RyYWNrc1RvSnVtcExpc3Qob3AubV9qdW1wcywgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNrc1RvSnVtcExpc3Qob3AubV9qdW1wcywgJm1f
aml0KTsKIAogICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2
aW91c09wXTsKICAgICAgICAgICAgICAgICBtX2NoZWNrZWRPZmZzZXQgLT0gbGFzdE9wLm1fY2hl
Y2tBZGp1c3Q7CkBAIC0zNjM3LDcgKzM1NjAsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIFlhcnJKCiAgICAgICAgIFlhcnJPcENvZGUgYWx0ZXJuYXRpdmVOZXh0T3BDb2Rl
ID0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OwogICAgICAgICBZYXJy
T3BDb2RlIGFsdGVybmF0aXZlRW5kT3BDb2RlID0gWWFyck9wQ29kZTo6U2ltcGxlTmVzdGVkQWx0
ZXJuYXRpdmVFbmQ7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1JlY3Vy
c2UoKSkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFpc1NhZmVUb1JlY3Vyc2UoKSkpIHsKICAg
ICAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IEpJVEZhaWx1cmVSZWFzb246OlBhcmVudGhlc2lz
TmVzdGVkVG9vRGVlcDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzc0OCw3
ICszNjcxLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZYXJySgogICAg
IC8vIG9uY2UsIGFuZCB3aWxsIG5ldmVyIGJhY2t0cmFjayBiYWNrIGludG8gdGhlIGFzc2VydGlv
bi4KICAgICB2b2lkIG9wQ29tcGlsZVBhcmVudGhldGljYWxBc3NlcnRpb24oUGF0dGVyblRlcm0q
IHRlcm0pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fdm0tPmlzU2FmZVRvUmVjdXJz
ZSgpKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkgewogICAg
ICAgICAgICAgbV9mYWlsdXJlUmVhc29uID0gSklURmFpbHVyZVJlYXNvbjo6UGFyZW50aGVzaXNO
ZXN0ZWRUb29EZWVwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODMzLDcg
KzM3NTYsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIFlhcnJKCiAgICAg
Ly8gdG8gcmV0dXJuIHRoZSBmYWlsaW5nIHJlc3VsdC4KICAgICB2b2lkIG9wQ29tcGlsZUJvZHko
UGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
aXNTYWZlVG9SZWN1cnNlKCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBKSVRG
YWlsdXJlUmVhc29uOjpQYXJlbnRoZXNpc05lc3RlZFRvb0RlZXA7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTM4OTIsNiArMzgxNSw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
ZmluYWwgOiBwdWJsaWMgWWFyckoKICAgICAgICAgICAgIGlmIChjb2xsZWN0Qm95ZXJNb29yZUlu
Zm8oZGlzanVuY3Rpb24sIGN1cnJlbnRBbHRlcm5hdGl2ZUluZGV4LCBibUluZm8uZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgbV9vcHMubGFzdCgpLm1fYm1JbmZvID0gYm1JbmZvLnB0cigpOwog
ICAgICAgICAgICAgICAgIG1fYm1JbmZvcy5hcHBlbmQoV1RGTW92ZShibUluZm8pKTsKKyAgICAg
ICAgICAgICAgICBtX3VzZXNUMiA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApA
QCAtNDAwOCw4ICszOTMyLDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogCiAgICAgY29uc3QgQm95ZXJNb29yZUJpdG1hcDo6TWFwOjpXb3JkVHlwZSogZ2V0Qm95
ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1hcCkKICAgICB7Ci0g
ICAgICAgIGlmIChjb25zdCBhdXRvKiBleGlzdGluZ1BvaW50ZXIgPSBtX2NvZGVCbG9jay50cnlS
ZXVzZUJveWVyTW9vcmVCaXRtYXAobWFwKSkKLSAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUG9p
bnRlcjsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8qIGV4aXN0aW5nUG9pbnRlciA9IG1fYm95ZXJN
b29yZURhdGEtPnRyeVJldXNlQm95ZXJNb29yZUJpdG1hcChtYXApKQorICAgICAgICAgICAgcmV0
dXJuIGV4aXN0aW5nUG9pbnRlcjsKKwogICAgICAgICBhdXRvIGhlYXBNYXAgPSBtYWtlVW5pcXVl
UmVmPEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4obWFwKTsKICAgICAgICAgY29uc3QgYXV0byogcG9p
bnRlciA9IGhlYXBNYXAtPnN0b3JhZ2UoKTsKICAgICAgICAgbV9ibU1hcHMuYXBwZW5kKFdURk1v
dmUoaGVhcE1hcCkpOwpAQCAtNDAyNCw2NCArMzk0OSw2NCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IGZpbmFsIDogcHVibGljIFlhcnJKCiAKICAgICAgICAgQVNTRVJUKG1fZGVjb2RlU3Vycm9nYXRl
UGFpcnMpOwogCi0gICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSA9IGxhYmVs
KCk7CisgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSA9IG1faml0LmxhYmVs
KCk7CiAKLSAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgICAgICBtX2ppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CiAKLSAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChyZWdUMCk7Cisg
ICAgICAgIHRyeVJlYWRVbmljb2RlQ2hhckltcGwobV9yZWdzLnJlZ1QwKTsKIAotICAgICAgICBy
ZXQoKTsKKyAgICAgICAgbV9qaXQucmV0KCk7CiAjZW5kaWYKICAgICB9CiAKICAgICB2b2lkIGdl
bmVyYXRlRW50ZXIoKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KQotICAgICAgICBwdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKLSAgICAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgWDg2UmVn
aXN0ZXJzOjplYnApOworICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4
NlJlZ2lzdGVyczo6ZWJwKTsKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUluaXRpYWxT
dGFydFZhbHVlKQotICAgICAgICAgICAgcHVzaChYODZSZWdpc3RlcnM6OmVieCk7CisgICAgICAg
ICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKIAogI2lmIE9TKFdJTkRPV1MpCi0g
ICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplZGkpOworICAgICAgICBtX2ppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWRpKTsKICNlbmRpZgogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VY
UFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKSB7CiAj
aWYgT1MoV0lORE9XUykKLSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplc2kpOworICAg
ICAgICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OmVzaSk7CiAjZW5kaWYKLSAgICAgICAg
ICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTIpOworICAgICAgICAgICAgbV9qaXQucHVzaChYODZS
ZWdpc3RlcnM6OnIxMik7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIGlmIChtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6cjEzKTsK
LSAgICAgICAgICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpyMTQpOwotICAgICAgICAgICAgcHVzaChY
ODZSZWdpc3RlcnM6OnIxNSk7CisgICAgICAgICAgICBtX2ppdC5wdXNoKFg4NlJlZ2lzdGVyczo6
cjEzKTsKKyAgICAgICAgICAgIG1faml0LnB1c2goWDg2UmVnaXN0ZXJzOjpyMTQpOworICAgICAg
ICAgICAgbV9qaXQucHVzaChYODZSZWdpc3RlcnM6OnIxNSk7CiAgICAgICAgIH0KICNpZiBPUyhX
SU5ET1dTKQogICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6SW5j
bHVkZVN1YnBhdHRlcm5zKQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVy
czo6ZWJwLCA2ICogc2l6ZW9mKHZvaWQqKSksIG91dHB1dCk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWJwLCA2ICogc2l6
ZW9mKHZvaWQqKSksIG1fcmVncy5vdXRwdXQpOwogICAgICAgICAvLyByY3ggaXMgdGhlIHBvaW50
ZXIgdG8gdGhlIGFsbG9jYXRlZCBzcGFjZSBmb3IgcmVzdWx0IGluIHg2NCBXaW5kb3dzLgotICAg
ICAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICAgICAgbV9qaXQucHVzaChYODZSZWdp
c3RlcnM6OmVjeCk7CiAjZW5kaWYKICNlbGlmIENQVShBUk02NCkKICAgICAgICAgaWYgKCFPcHRp
b25zOjp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAg
ICAgICAgICBtX2ppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgIGlmIChtX2RlY29kZVN1
cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVENhZ2UoKSkK
LSAgICAgICAgICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lz
dGVyKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4MTAwMDApLCBzdXBwbGVtZW50
YXJ5UGxhbmVzQmFzZSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweGQ4MDApLCBs
ZWFkaW5nU3Vycm9nYXRlVGFnKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZGMw
MCksIHRyYWlsaW5nU3Vycm9nYXRlVGFnKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5wdXNoUGFp
cihNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjps
aW5rUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDB4MTAwMDApLCBtX3JlZ3Muc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZDgwMCks
IG1fcmVncy5sZWFkaW5nU3Vycm9nYXRlVGFnKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGRjMDApLCBtX3JlZ3MudHJhaWxpbmdTdXJyb2dh
dGVUYWcpOwogICAgICAgICB9CiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgcHVzaChB
Uk1SZWdpc3RlcnM6OnI0KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI1KTsKLSAgICAg
ICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI4
KTsKLSAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnIxMCk7CisgICAgICAgIG1faml0LnB1c2go
QVJNUmVnaXN0ZXJzOjpyNCk7CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyNSk7
CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpyNik7CisgICAgICAgIG1faml0LnB1
c2goQVJNUmVnaXN0ZXJzOjpyOCk7CisgICAgICAgIG1faml0LnB1c2goQVJNUmVnaXN0ZXJzOjpy
MTApOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKQEAg
LTQwODksNzAgKzQwMTQsNzkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBZ
YXJySgogCiAgICAgdm9pZCBnZW5lcmF0ZVJldHVybigpCiAgICAgeworI2lmIEVOQUJMRShZQVJS
X0pJVF9SRUdFWFBfVEVTVF9JTkxJTkUpCisgICAgICAgIGlmIChtX2NvbXBpbGVNb2RlID09IEpJ
VENvbXBpbGVNb2RlOjpJbmxpbmVUZXN0KSB7CisgICAgICAgICAgICBtX2lubGluZWRNYXRjaGVk
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisj
ZW5kaWYKKwogI2lmIENQVShYODZfNjQpCiAjaWYgT1MoV0lORE9XUykKICAgICAgICAgLy8gU3Rv
cmUgdGhlIHJldHVybiB2YWx1ZSBpbiB0aGUgYWxsb2NhdGVkIHNwYWNlIHBvaW50ZWQgYnkgcmN4
LgotICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjplY3gpOwotICAgICAgICBzdG9yZTY0KHJldHVy
blJlZ2lzdGVyLCBBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWN4KSk7Ci0gICAgICAgIHN0b3JlNjQo
cmV0dXJuUmVnaXN0ZXIyLCBBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWN4LCBzaXplb2Yodm9pZCop
KSk7Ci0gICAgICAgIG1vdmUoWDg2UmVnaXN0ZXJzOjplY3gsIHJldHVyblJlZ2lzdGVyKTsKKyAg
ICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICAgICAgbV9qaXQuc3RvcmU2
NChtX3JlZ3MucmV0dXJuUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKFg4NlJlZ2lz
dGVyczo6ZWN4KSk7CisgICAgICAgIG1faml0LnN0b3JlNjQobV9yZWdzLnJldHVyblJlZ2lzdGVy
MiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplY3gsIHNpemVvZih2b2lk
KikpKTsKKyAgICAgICAgbV9qaXQubW92ZShYODZSZWdpc3RlcnM6OmVjeCwgbV9yZWdzLnJldHVy
blJlZ2lzdGVyKTsKICNlbmRpZgogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykg
ewotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjE1KTsKLSAgICAgICAgICAgIHBvcChY
ODZSZWdpc3RlcnM6OnIxNCk7Ci0gICAgICAgICAgICBwb3AoWDg2UmVnaXN0ZXJzOjpyMTMpOwor
ICAgICAgICAgICAgbV9qaXQucG9wKFg4NlJlZ2lzdGVyczo6cjE1KTsKKyAgICAgICAgICAgIG1f
aml0LnBvcChYODZSZWdpc3RlcnM6OnIxNCk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVn
aXN0ZXJzOjpyMTMpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVO
U19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykg
ewotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6cjEyKTsKKyAgICAgICAgICAgIG1faml0
LnBvcChYODZSZWdpc3RlcnM6OnIxMik7CiAjaWYgT1MoV0lORE9XUykKLSAgICAgICAgICAgIHBv
cChYODZSZWdpc3RlcnM6OmVzaSk7CisgICAgICAgICAgICBtX2ppdC5wb3AoWDg2UmVnaXN0ZXJz
Ojplc2kpOwogI2VuZGlmCiAgICAgICAgIH0KICNlbmRpZgogI2lmIE9TKFdJTkRPV1MpCi0gICAg
ICAgIHBvcChYODZSZWdpc3RlcnM6OmVkaSk7CisgICAgICAgIG1faml0LnBvcChYODZSZWdpc3Rl
cnM6OmVkaSk7CiAjZW5kaWYKIAogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fc2F2ZUluaXRpYWxT
dGFydFZhbHVlKQotICAgICAgICAgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJ4KTsKLSAgICAgICAg
cG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICAgICAgICAgIG1faml0LnBvcChYODZSZWdpc3Rl
cnM6OmVieCk7CisgICAgICAgIG1faml0LnBvcChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBD
UFUoQVJNNjQpCiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVENhZ2UoKSkKLSAgICAgICAgICAgICAgICBwb3BQYWly
KGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1f
aml0LnBvcFBhaXIoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fz
c2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKICAgICAgICAgfQogI2VsaWYgQ1BVKEFSTV9USFVNQjIp
Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnIxMCk7Ci0gICAgICAgIHBvcChBUk1SZWdpc3Rl
cnM6OnI4KTsKLSAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwotICAgICAgICBwb3AoQVJN
UmVnaXN0ZXJzOjpyNSk7Ci0gICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyAgICAgICAg
bV9qaXQucG9wKEFSTVJlZ2lzdGVyczo6cjEwKTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJlZ2lz
dGVyczo6cjgpOworICAgICAgICBtX2ppdC5wb3AoQVJNUmVnaXN0ZXJzOjpyNik7CisgICAgICAg
IG1faml0LnBvcChBUk1SZWdpc3RlcnM6OnI1KTsKKyAgICAgICAgbV9qaXQucG9wKEFSTVJlZ2lz
dGVyczo6cjQpOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRp
ZgogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdlKCkpCi0g
ICAgICAgICAgICBmYXJKdW1wKFRydXN0ZWRJbW1QdHIocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVu
Y3Rpb25QdHJUYWcsIE9wZXJhdGlvblB0clRhZz4oJnZtRW50cnlUb1lhcnJKSVRBZnRlcikpLCBP
cGVyYXRpb25QdHJUYWcpOworICAgICAgICAgICAgbV9qaXQuZmFySnVtcChNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgT3Bl
cmF0aW9uUHRyVGFnPigmdm1FbnRyeVRvWWFyckpJVEFmdGVyKSksIE9wZXJhdGlvblB0clRhZyk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldCgpOworICAgICAgICAgICAgbV9qaXQucmV0
KCk7CiAjZWxzZQotICAgICAgICByZXQoKTsKKyAgICAgICAgbV9qaXQucmV0KCk7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICB2b2lkIGxvYWRTdWJQYXR0ZXJuKFJlZ2lzdGVySUQgb3V0cHV0R1BSLCB1
bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIFJlZ2lzdGVySUQgc3RhcnRJbmRleEdQUiwgUmVnaXN0ZXJJ
RCBlbmRJbmRleE9yTGVuR1BSKQorICAgIHZvaWQgbG9hZFN1YlBhdHRlcm4oTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgb3V0cHV0R1BSLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHN0YXJ0SW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGVuZEluZGV4T3JMZW5HUFIpCiAgICAgewotICAgICAgICBsb2FkUGFpcjMyKG91dHB1dEdQ
UiwgVHJ1c3RlZEltbTMyKChzdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSksIHN0YXJ0
SW5kZXhHUFIsIGVuZEluZGV4T3JMZW5HUFIpOworICAgICAgICBtX2ppdC5sb2FkUGFpcjMyKG91
dHB1dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigoc3VicGF0dGVybklkIDw8IDEp
ICogc2l6ZW9mKGludCkpLCBzdGFydEluZGV4R1BSLCBlbmRJbmRleE9yTGVuR1BSKTsKICAgICB9
CiAKIHB1YmxpYzoKLSAgICBZYXJyR2VuZXJhdG9yKFZNKiB2bSwgWWFyclBhdHRlcm4mIHBhdHRl
cm4sIFN0cmluZyYgcGF0dGVyblN0cmluZywgWWFyckNvZGVCbG9jayYgY29kZUJsb2NrLCBDaGFy
U2l6ZSBjaGFyU2l6ZSwgSklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUpCi0gICAgICAgIDogbV92
bSh2bSkKKyAgICBZYXJyR2VuZXJhdG9yKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNvbnN0IFZNKiB2
bSwgWWFyckNvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBZYXJySklUUmVncyYgcmVncywgWWFy
clBhdHRlcm4mIHBhdHRlcm4sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hhclNpemUg
Y2hhclNpemUsIEpJVENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlKQorICAgICAgICA6IG1faml0KGpp
dCkKKyAgICAgICAgLCBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
KyAgICAgICAgLCBtX3JlZ3MocmVncykKICAgICAgICAgLCBtX3BhdHRlcm4ocGF0dGVybikKICAg
ICAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0cmluZykKLSAgICAgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9jaGFyU2l6ZShjaGFyU2l6ZSkKICAgICAgICAg
LCBtX2NvbXBpbGVNb2RlKGNvbXBpbGVNb2RlKQogICAgICAgICAsIG1fZGVjb2RlU3Vycm9nYXRl
UGFpcnMobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjE2ICYmIG1fcGF0dGVybi51bmljb2Rl
KCkpCkBAIC00MTYzLDExICs0MDk3LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3BhcmVuQ29u
dGV4dFNpemVzKGNvbXBpbGVNb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVy
bnMgPyBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyA6IDAsIG1fcGF0dGVybi5tX2JvZHktPm1f
Y2FsbEZyYW1lU2l6ZSkKICNlbmRpZgogICAgIHsKKyAgICAgICAgbV9ib3llck1vb3JlRGF0YSA9
IHN0YXRpY19jYXN0PFlhcnJCb3llck1veWVyRGF0YSo+KG1fY29kZUJsb2NrKTsKKyAgICB9CisK
KyAgICBZYXJyR2VuZXJhdG9yKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNvbnN0IFZNKiB2bSwgWWFy
ckJveWVyTW95ZXJEYXRhKiB5YXJyQk1EYXRhLCBjb25zdCBZYXJySklUUmVncyYgcmVncywgWWFy
clBhdHRlcm4mIHBhdHRlcm4sIGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgQ2hhclNpemUg
Y2hhclNpemUsIEpJVENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlKQorICAgICAgICA6IG1faml0KGpp
dCkKKyAgICAgICAgLCBtX3ZtKHZtKQorICAgICAgICAsIG1fY29kZUJsb2NrKG51bGxwdHIpCisg
ICAgICAgICwgbV9ib3llck1vb3JlRGF0YSh5YXJyQk1EYXRhKQorICAgICAgICAsIG1fcmVncyhy
ZWdzKQorICAgICAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQorICAgICAgICAsIG1fcGF0dGVyblN0
cmluZyhwYXR0ZXJuU3RyaW5nKQorICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCisgICAg
ICAgICwgbV9jb21waWxlTW9kZShjb21waWxlTW9kZSkKKyAgICAgICAgLCBtX2RlY29kZVN1cnJv
Z2F0ZVBhaXJzKG1fY2hhclNpemUgPT0gQ2hhclNpemU6OkNoYXIxNiAmJiBtX3BhdHRlcm4udW5p
Y29kZSgpKQorICAgICAgICAsIG1fdW5pY29kZUlnbm9yZUNhc2UobV9wYXR0ZXJuLnVuaWNvZGUo
KSAmJiBtX3BhdHRlcm4uaWdub3JlQ2FzZSgpKQorICAgICAgICAsIG1fY2Fub25pY2FsTW9kZSht
X3BhdHRlcm4udW5pY29kZSgpID8gQ2Fub25pY2FsTW9kZTo6VW5pY29kZSA6IENhbm9uaWNhbE1v
ZGU6OlVDUzIpCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisg
ICAgICAgICwgbV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zKGZhbHNlKQorICAgICAgICAsIG1f
cGFyZW5Db250ZXh0U2l6ZXMoY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVT
dWJwYXR0ZXJucyA/IG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zIDogMCwgbV9wYXR0ZXJuLm1f
Ym9keS0+bV9jYWxsRnJhbWVTaXplKQorI2VuZGlmCisgICAgeworICAgICAgICBpZiAobV9wYXR0
ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlcykKKyAgICAgICAgICAgIG1fdXNlc1QyID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIGlzU2FmZVRvUmVjdXJzZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlcikKKyAgICAgICAgICAgIHJl
dHVybiBtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLT5pc1NhZmVUb1JlY3Vyc2UoKTsK
KworICAgICAgICByZXR1cm4gbV92bS0+aXNTYWZlVG9SZWN1cnNlKCk7CisgICAgfQorCisgICAg
dm9pZCBzZXRTdGFja0NoZWNrZXIoU3RhY2tDaGVjayogc3RhY2tDaGVja2VyKQorICAgIHsKKyAg
ICAgICAgbV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlciA9IHN0YWNrQ2hlY2tlcjsKICAg
ICB9CiAKLSAgICB2b2lkIGNvbXBpbGUoKQorICAgIHZvaWQgY29tcGlsZShZYXJyQ29kZUJsb2Nr
JiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICBZYXJyQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSBt
X2NvZGVCbG9jazsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0T2ZNYWluQ29k
ZTsKIAogI2lmICFFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAgICAgICAg
aWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKQEAgLTQxOTgsNyArNDE2OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxZYXJyRGlzYXNzZW1i
bGVyPih0aGlzKTsKIAogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CisgICAgICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobV9qaXQubGFiZWwoKSk7CiAKICNpZiBFTkFCTEUo
WUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNO
ZXN0ZWRTdWJwYXR0ZXJucykKQEAgLTQyMDcsNDIgKzQxNzcsNDYgQEAgcHVibGljOgogCiAgICAg
ICAgIGdlbmVyYXRlRW50ZXIoKTsKIAotICAgICAgICBKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1
dCgpOworICAgICAgICBzdGFydE9mTWFpbkNvZGUgPSBtX2ppdC5sYWJlbCgpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOwogICAgICAgICBn
ZW5lcmF0ZUZhaWxSZXR1cm4oKTsKLSAgICAgICAgaGFzSW5wdXQubGluayh0aGlzKTsKKyAgICAg
ICAgaGFzSW5wdXQubGluaygmbV9qaXQpOwogCiAgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNp
emVJbkJ5dGVzID0gYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5t
X2NhbGxGcmFtZVNpemUpOwogICAgICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpIHsKICAg
ICAgICAgICAgIC8vIENoZWNrIHN0YWNrIHNpemUKLSAgICAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICAgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KC1jYWxsRnJhbWVTaXplSW5CeXRlcyksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgbV9yZWdzLnJlZ1QwKTsKICNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQogICAg
ICAgICAgICAgLy8gbWF0Y2hpbmdDb250ZXh0IGlzIHRoZSA1dGggYXJndW1lbnQsIGl0IGlzIGZv
dW5kIG9uIHRoZSBzdGFjay4KLSAgICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0
ID0gcmVnVDE7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAs
IDcgKiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVncy5yZWdUMTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoWDg2UmVnaXN0
ZXJzOjplYnAsIDcgKiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0KTsKICNlbGlmIENQ
VShBUk1fVEhVTUIyKSB8fCBDUFUoTUlQUykKICAgICAgICAgICAgIC8vIG1hdGNoaW5nQ29udGV4
dCBpcyB0aGUgNXRoIGFyZ3VtZW50LCBpdCBpcyBmb3VuZCBvbiB0aGUgc3RhY2suCi0gICAgICAg
ICAgICBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IHJlZ1QxOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQqKSksIG1h
dGNoaW5nQ29udGV4dCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBt
YXRjaGluZ0NvbnRleHQgPSBtX3JlZ3MucmVnVDE7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgNCAqIHNpemVvZih2b2lkKikpLCBtYXRjaGluZ0NvbnRleHQpOworI2Vsc2UKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IG1fcmVn
cy5tYXRjaGluZ0NvbnRleHQ7CiAjZW5kaWYKLSAgICAgICAgICAgIEp1bXAgc3RhY2tPayA9IGJy
YW5jaFB0cihCZWxvd09yRXF1YWwsIEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0Nv
bnRleHRIb2xkZXI6Om9mZnNldE9mU3RhY2tMaW1pdCgpKSwgcmVnVDApOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3RhY2tPayA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3dPckVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtYXRjaGluZ0NvbnRl
eHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkpLCBtX3JlZ3Mu
cmVnVDApOwogCiAgICAgICAgICAgICAvLyBFeGNlZWRlZCBzdGFjayBsaW1pdCwgcHVudCB0byB0
aGUgaW50ZXJwcmV0ZXIuCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoKHZvaWQqKXN0
YXRpY19jYXN0PHNpemVfdD4oSlNSZWdFeHBSZXN1bHQ6OkpJVENvZGVGYWlsdXJlKSksIHJldHVy
blJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdp
c3RlcjIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1JlZ0V4cFJlc3VsdDo6SklUQ29kZUZh
aWx1cmUpKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbV9yZWdzLnJldHVyblJlZ2lzdGVyMik7
CiAgICAgICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogCi0gICAgICAgICAgICBzdGFja09rLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICBtb3ZlKHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgICAgICBzdGFja09rLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUobV9yZWdzLnJlZ1QwLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVRfVU5JQ09ERV9FWFBSRVNTSU9OUykKICAg
ICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCi0gICAgICAgICAgICBnZXRFZmZlY3Rp
dmVBZGRyZXNzKEJhc2VJbmRleChpbnB1dCwgbGVuZ3RoLCBUaW1lc1R3byksIGVuZE9mU3RyaW5n
QWRkcmVzcyk7CisgICAgICAgICAgICBtX2ppdC5nZXRFZmZlY3RpdmVBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgobV9yZWdzLmlucHV0LCBtX3JlZ3MubGVuZ3RoLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNUd28pLCBtX3JlZ3MuZW5kT2ZTdHJpbmdBZGRyZXNzKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmICht
X2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihtYXRjaExpbWl0KSwgcmVtYWluaW5nTWF0Y2hDb3VudCk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF0Y2hMaW1pdCksIG1fcmVncy5yZW1h
aW5pbmdNYXRjaENvdW50KTsKICNlbmRpZgogCiAgICAgICAgIC8vIEluaXRpYWxpemUgc3VicGF0
dGVybnMnIHN0YXJ0cy4gQW5kIGluaXRpYWxpemUgbWF0Y2hTdGFydCBpZiBgIW1fcGF0dGVybi5t
X2JvZHktPm1faGFzRml4ZWRTaXplYC4KQEAgLTQyNTEsMTQgKzQyMjUsMTQgQEAgcHVibGljOgog
ICAgICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gMDsKICAgICAgICAgICAgIC8vIEZp
cnN0IHN1YnBhdHRlcm5JZCdzIHN0YXJ0IGlzIGNvbmZpZ3VyZWQgdG8gYGluZGV4YCBpZiAhbV9w
YXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUuCiAgICAgICAgICAgICBpZiAoIW1fcGF0dGVy
bi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFy
dChpbmRleCk7CisgICAgICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChtX3JlZ3MuaW5kZXgpOwog
ICAgICAgICAgICAgICAgICsrc3VicGF0dGVybklkOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZm9yICg7IHN1YnBhdHRlcm5JZCA8IG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zICsgMTsg
KytzdWJwYXR0ZXJuSWQpCi0gICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoLTEp
LCBBZGRyZXNzKG91dHB1dCwgKHN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KC0xKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9yZWdzLm91dHB1dCwgKHN1YnBhdHRlcm5J
ZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBp
ZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKQotICAgICAgICAgICAgICAgIHNl
dE1hdGNoU3RhcnQoaW5kZXgpOworICAgICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQobV9yZWdz
LmluZGV4KTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQ
UkVTU0lPTlMpCkBAIC00MjcyLDQ1ICs0MjQ2LDYzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKLSAgICAg
ICAgICAgIG1vdmUoaW5kZXgsIGluaXRpYWxTdGFydCk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KG1fcmVncy5pbmRleCwgbV9yZWdzLmluaXRpYWxTdGFydCk7CiAKICAgICAgICAgZ2VuZXJhdGUo
KTsKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mR2VuZXJhdGUobGFiZWwoKSk7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0RW5kT2ZHZW5lcmF0ZShtX2ppdC5sYWJlbCgpKTsKICAgICAgICAgYmFja3RyYWNrKCk7
CiAgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRFbmRPZkJhY2t0cmFjayhsYWJlbCgpKTsKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRFbmRPZkJhY2t0cmFjayhtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBwdHJkaWZmX3Qg
Y29kZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW4oc3RhcnRPZk1haW5D
b2RlLCBtX2ppdC5sYWJlbCgpKTsKKyAgICAgICAgYm9vbCBjYW5JbmxpbmUgPSBtX2NvbXBpbGVN
b2RlICE9IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0dGVybnMKKyAgICAgICAgICAgICYm
ICFtX3BhdHRlcm4uZ2xvYmFsKCkgJiYgIW1fcGF0dGVybi5zdGlja3koKSAmJiAhbV9wYXR0ZXJu
LnVuaWNvZGUoKQorI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQor
ICAgICAgICAgICAgJiYgIW1fY29udGFpbnNOZXN0ZWRTdWJwYXR0ZXJucworI2VuZGlmCisgICAg
ICAgICAgICAmJiAhbV9wYXR0ZXJuLm1fY29udGFpbnNCYWNrcmVmZXJlbmNlczsKIAogICAgICAg
ICBnZW5lcmF0ZVRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKCk7CiAKICAgICAgICAgZ2Vu
ZXJhdGVKSVRGYWlsUmV0dXJuKCk7CiAKICAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKKyAgICAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobV9qaXQubGFiZWwoKSk7CiAKLSAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6WWFyckpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYg
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICAgICAgY29kZUJsb2Nr
LnNldEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJlYXNvbjo6RXhlY3V0YWJs
ZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
YXV0byBiYWNrdHJhY2tSZWNvcmRzID0gbV9iYWNrdHJhY2tpbmdTdGF0ZS5iYWNrdHJhY2tSZWNv
cmRzKCk7CisgICAgICAgIGlmICghYmFja3RyYWNrUmVjb3Jkcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgIEJhY2t0cmFja2luZ1N0YXRlOjpsaW5rQmFja3RyYWNrUmVjb3Jkcyhs
aW5rQnVmZmVyLCBiYWNrdHJhY2tSZWNvcmRzKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4gdHJ5UmVhZFVuaWNv
ZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5
UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSk7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4gdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRy
eSk7CiAKLSAgICAgICAgICAgIGZvciAoYXV0byBjYWxsIDogbV90cnlSZWFkVW5pY29kZUNoYXJh
Y3RlckNhbGxzKQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFk
VW5pY29kZUNoYXJhY3RlckhlbHBlcik7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwg
OiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMpCisgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjYWxsLCB0cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcik7CisgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlu
a0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlciht
X2ppdCwgUkVHRVhQX0NPREVfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OllhcnJKSVQsIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVh
c29uKEpJVEZhaWx1cmVSZWFzb246OkV4ZWN1dGFibGVNZW1vcnlBbGxvY2F0aW9uRmFpbHVyZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBpZiAobV9kaXNhc3Nl
bWJsZXIpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChsaW5rQnVmZmVyKTsKIAog
ICAgICAgICBpZiAobV9jb21waWxlTW9kZSA9PSBKSVRDb21waWxlTW9kZTo6TWF0Y2hPbmx5KSB7
Ci0gICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpCisgICAgICAg
ICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyU2l6ZTo6Q2hhcjgpIHsKICAgICAgICAgICAgICAg
ICBjb2RlQmxvY2suc2V0OEJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfUkVHRVhQX0NPREUobGlu
a0J1ZmZlciwgWWFyck1hdGNoT25seThCaXRQdHJUYWcsICJNYXRjaC1vbmx5IDgtYml0IHJlZ3Vs
YXIgZXhwcmVzc2lvbiIpLCBXVEZNb3ZlKG1fYm1NYXBzKSk7Ci0gICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRJbmxpbmVTdGF0cyhjb2RlU2l6ZSwgY2Fs
bEZyYW1lU2l6ZUluQnl0ZXMsIGNhbklubGluZSwgbV91c2VzVDIpOworICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0MTZCaXRDb2RlTWF0Y2hPbmx5KEZJ
TkFMSVpFX1JFR0VYUF9DT0RFKGxpbmtCdWZmZXIsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZywg
Ik1hdGNoLW9ubHkgMTYtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCBXVEZNb3ZlKG1fYm1NYXBz
KSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0SW5saW5lU3RhdHMoY29kZVNp
emUsIGNhbGxGcmFtZVNpemVJbkJ5dGVzLCBjYW5JbmxpbmUsIG1fdXNlc1QyKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENo
YXJTaXplOjpDaGFyOCkKICAgICAgICAgICAgICAgICBjb2RlQmxvY2suc2V0OEJpdENvZGUoRklO
QUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlciwgWWFycjhCaXRQdHJUYWcsICI4LWJpdCByZWd1
bGFyIGV4cHJlc3Npb24iKSwgV1RGTW92ZShtX2JtTWFwcykpOwpAQCAtNDMyMSw2ICs0MzEzLDEw
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVy
ZVJlYXNvbigqbV9mYWlsdXJlUmVhc29uKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoWUFSUl9KSVRf
UkVHRVhQX1RFU1RfSU5MSU5FKQorICAgIHZvaWQgY29tcGlsZUlubGluZShZYXJyQm95ZXJNb3ll
ckRhdGEmIGJveWVyTW9vcmVEYXRhKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
cGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVyZW5jZXMpOworCisgICAgICAgIC8vIFdlIG5lZWQg
dG8gY29tcGlsZSBiZWZvcmUgZ2VuZXJhdGluZyBjb2RlIHNpbmNlIHdlIHNldCBmbGFncyBiYXNl
ZCBvbiBjb21waWxhdGlvbiB0aGF0CisgICAgICAgIC8vIGFyZSB1c2VkIGR1cmluZyBnZW5lcmF0
aW9uLgorICAgICAgICBvcENvbXBpbGVCb2R5KG1fcGF0dGVybi5tX2JvZHkpOworCisjaWZuZGVm
IEpJVF9VTklDT0RFX0VYUFJFU1NJT05TCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlY29k
ZVN1cnJvZ2F0ZVBhaXJzKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJF
TlNfRVhQUkVTU0lPTlMpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2NvbnRhaW5zTmVzdGVk
U3VicGF0dGVybnMpOworI2VuZGlmCisKKyAgICAgICAgQVNTRVJUKCFtX2ZhaWx1cmVSZWFzb24p
OworCisgICAgICAgIGlmIChtX3VzZXNUMikKKyAgICAgICAgICAgIEFTU0VSVChtX3JlZ3MucmVn
VDIgIT0gTWFjcm9Bc3NlbWJsZXI6OkludmFsaWRHUFJSZWcpOworCisgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlz
YXNzZW1ibHkoKSkpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8WWFy
ckRpc2Fzc2VtYmxlcj4odGhpcyk7CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKG1faml0LmxhYmVsKCkpOwor
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhhc0lucHV0ID0gY2hlY2tJbnB1dCgpOwor
ICAgICAgICBnZW5lcmF0ZUZhaWxSZXR1cm4oKTsKKyAgICAgICAgaGFzSW5wdXQubGluaygmbV9q
aXQpOworCisgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxs
RnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOworICAg
ICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBz
cGFjZSBvbiBzdGFjayBmb3IgbWF0Y2hpbmcgY29udGV4dCBkYXRhLgorICAgICAgICAgICAgbV9q
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5
dGVzKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICB9CisKKyNpZmRlZiBKSVRfVU5JQ09E
RV9FWFBSRVNTSU9OUworICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKKyAgICAg
ICAgICAgIG1faml0LmdldEVmZmVjdGl2ZUFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChtX3JlZ3MuaW5wdXQsIG1fcmVncy5sZW5ndGgsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byks
IG1fcmVncy5lbmRPZlN0cmluZ0FkZHJlc3MpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoWUFSUl9K
SVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0ZWRT
dWJwYXR0ZXJucykKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihtYXRjaExpbWl0KSwgbV9yZWdzLnJlbWFpbmluZ01hdGNoQ291bnQpOworI2VuZGlm
CisKKyAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6OkluY2x1ZGVT
dWJwYXR0ZXJucykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGF0
dGVybi5tX251bVN1YnBhdHRlcm5zICsgMTsgKytpKQorICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG1fcmVncy5vdXRwdXQsIChpIDw8IDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpCisgICAg
ICAgICAgICBzZXRNYXRjaFN0YXJ0KG1fcmVncy5pbmRleCk7CisKKyAgICAgICAgaWYgKG1fcGF0
dGVybi5tX3NhdmVJbml0aWFsU3RhcnRWYWx1ZSkKKyAgICAgICAgICAgIG1faml0Lm1vdmUobV9y
ZWdzLmluZGV4LCBtX3JlZ3MuaW5pdGlhbFN0YXJ0KTsKKworICAgICAgICBnZW5lcmF0ZSgpOwor
ICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0RW5kT2ZHZW5lcmF0ZShtX2ppdC5sYWJlbCgpKTsKKyAgICAgICAgYmFja3RyYWNrKCk7Cisg
ICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRFbmRPZkJhY2t0cmFjayhtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBnZW5lcmF0ZVRyeVJl
YWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKCk7CisKKyAgICAgICAgZ2VuZXJhdGVKSVRGYWlsUmV0
dXJuKCk7CisKKyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShtX2ppdC5sYWJlbCgpKTsKKworICAgICAgICBtX2lubGlu
ZWRGYWlsZWRNYXRjaC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faW5saW5lZE1hdGNoZWQubGlu
aygmbV9qaXQpOworCisgICAgICAgIGF1dG8gYmFja3RyYWNrUmVjb3JkcyA9IG1fYmFja3RyYWNr
aW5nU3RhdGUuYmFja3RyYWNrUmVjb3JkcygpOworICAgICAgICBpZiAoIWJhY2t0cmFja1JlY29y
ZHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBCYWNrdHJhY2tpbmdTdGF0ZTo6
bGlua0JhY2t0cmFja1JlY29yZHMobGlua0J1ZmZlciwgYmFja3RyYWNrUmVjb3Jkcyk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV90cnlSZWFkVW5pY29kZUNo
YXJhY3RlckNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8Tm9QdHJUYWc+IHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnkp
OworCisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2RlQ2hh
cmFjdGVyQ2FsbHMpCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
cnlSZWFkVW5pY29kZUNoYXJhY3RlckhlbHBlcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIGJveWVyTW9vcmVEYXRhLnNhdmVNYXBzKFdURk1vdmUobV9ibU1hcHMpKTsK
KyAgICB9CisjZW5kaWYKKwogICAgIGNvbnN0IGNoYXIqIHZhcmlhbnQoKSBmaW5hbAogICAgIHsK
ICAgICAgICAgaWYgKG1fY29tcGlsZU1vZGUgPT0gSklUQ29tcGlsZU1vZGU6Ok1hdGNoT25seSkg
ewpAQCAtNDUyNiwxMiArNDYxNCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IFZNKiBtX3ZtOworICAgIE1hY3JvQXNzZW1ibGVyJiBtX2ppdDsKKyAgICBjb25zdCBWTSogbV92
bTsKKyAgICBZYXJyQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBZYXJyQm95ZXJNb3llckRh
dGEqIG1fYm95ZXJNb29yZURhdGE7CisgICAgY29uc3QgWWFyckpJVFJlZ3MmIG1fcmVnczsKIAor
ICAgIFN0YWNrQ2hlY2sqIG1fY29tcGlsYXRpb25UaHJlYWRTdGFja0NoZWNrZXIgeyBudWxscHRy
IH07CiAgICAgWWFyclBhdHRlcm4mIG1fcGF0dGVybjsKLSAgICBTdHJpbmcmIG1fcGF0dGVyblN0
cmluZzsKKyAgICBjb25zdCBTdHJpbmcmIG1fcGF0dGVyblN0cmluZzsKIAotICAgIFlhcnJDb2Rl
QmxvY2smIG1fY29kZUJsb2NrOwogICAgIENoYXJTaXplIG1fY2hhclNpemU7CiAgICAgSklUQ29t
cGlsZU1vZGUgbV9jb21waWxlTW9kZTsKIApAQCAtNDU0MSwxNSArNDYzMywxOSBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzOwogICAgIGJvb2wgbV91bmljb2Rl
SWdub3JlQ2FzZTsKKyAgICBib29sIG1fdXNlc1QyOwogICAgIENhbm9uaWNhbE1vZGUgbV9jYW5v
bmljYWxNb2RlOwogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQog
ICAgIGJvb2wgbV9jb250YWluc05lc3RlZFN1YnBhdHRlcm5zOwogICAgIFBhcmVuQ29udGV4dFNp
emVzIG1fcGFyZW5Db250ZXh0U2l6ZXM7CiAjZW5kaWYKLSAgICBKdW1wTGlzdCBtX2Fib3J0RXhl
Y3V0aW9uOwotICAgIEp1bXBMaXN0IG1faGl0TWF0Y2hMaW1pdDsKLSAgICBWZWN0b3I8Q2FsbD4g
bV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckNhbGxzOwotICAgIExhYmVsIG1fdHJ5UmVhZFVuaWNv
ZGVDaGFyYWN0ZXJFbnRyeTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9hYm9ydEV4
ZWN1dGlvbjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9oaXRNYXRjaExpbWl0Owor
ICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4gbV90cnlSZWFkVW5pY29kZUNoYXJhY3Rl
ckNhbGxzOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RyeVJlYWRVbmljb2RlQ2hhcmFj
dGVyRW50cnk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9pbmxpbmVkTWF0Y2hl
ZDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9pbmxpbmVkRmFpbGVkTWF0Y2g7CiAK
ICAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGV4cHJlc3NlZCBhcyBhIGxpbmVhciBzZXF1
ZW5jZSBvZiBvcGVyYXRpb25zLgogICAgIFZlY3RvcjxZYXJyT3AsIDEyOD4gbV9vcHM7CkBAIC00
NjA2LDcgKzQ3MDIsMTMgQEAgc3RhdGljIHZvaWQgZHVtcENvbXBpbGVGYWlsdXJlKEpJVEZhaWx1
cgogCiB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFN0cmluZyYgcGF0dGVy
blN0cmluZywgQ2hhclNpemUgY2hhclNpemUsIFZNKiB2bSwgWWFyckNvZGVCbG9jayYgY29kZUJs
b2NrLCBKSVRDb21waWxlTW9kZSBtb2RlKQogewotICAgIFlhcnJHZW5lcmF0b3Iodm0sIHBhdHRl
cm4sIHBhdHRlcm5TdHJpbmcsIGNvZGVCbG9jaywgY2hhclNpemUsIG1vZGUpLmNvbXBpbGUoKTsK
KyAgICBNYWNyb0Fzc2VtYmxlciBtYXNtOworCisgICAgQVNTRVJUKG1vZGUgPT0gSklUQ29tcGls
ZU1vZGU6Ok1hdGNoT25seSB8fCBtb2RlID09IEpJVENvbXBpbGVNb2RlOjpJbmNsdWRlU3VicGF0
dGVybnMpOworCisgICAgWWFyckpJVERlZmF1bHRSZWdpc3RlcnMgaml0UmVnaXN0ZXJzOworICAg
IFlhcnJHZW5lcmF0b3I8WWFyckpJVERlZmF1bHRSZWdpc3RlcnM+KG1hc20sIHZtLCAmY29kZUJs
b2NrLCBqaXRSZWdpc3RlcnMsIHBhdHRlcm4sIHBhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCBtb2Rl
KS5jb21waWxlKGNvZGVCbG9jayk7CisKICAgICBpZiAoYXV0byBmYWlsdXJlUmVhc29uID0gY29k
ZUJsb2NrLmZhaWx1cmVSZWFzb24oKSkgewogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcENvbXBpbGVkUmVnRXhwUGF0dGVybnMoKSkpIHsKICAgICAgICAgICAgIHBhdHRlcm4uZHVt
cFBhdHRlcm5TdHJpbmcoV1RGOjpkYXRhRmlsZSgpLCBwYXR0ZXJuU3RyaW5nKTsKQEAgLTQ2MTYs
NiArNDcxOCwyMiBAQCB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFN0CiAg
ICAgfQogfQogCisjaWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKyNpZiAh
Q1BVKEFSTTY0KSAmJiAhQ1BVKFg4Nl82NCkgfHwgT1MoV0lORE9XUykKKyNlcnJvciAiTm8gc3Vw
cG9ydCBmb3IgaW5saW5lZCBKSVQnaW5nIG9mIFJlZ0V4cC50ZXN0IGZvciB0aGlzIENQVSAvIE9T
IGNvbWJpbmF0aW9uLiIKKyNlbmRpZgorCit2b2lkIGppdENvbXBpbGVJbmxpbmVkVGVzdChTdGFj
a0NoZWNrKiBtX2NvbXBpbGF0aW9uVGhyZWFkU3RhY2tDaGVja2VyLCBjb25zdCBTdHJpbmcmIHBh
dHRlcm5TdHJpbmcsIE9wdGlvblNldDxZYXJyOjpGbGFncz4gZmxhZ3MsIENoYXJTaXplIGNoYXJT
aXplLCBjb25zdCBWTSogdm0sIFlhcnJCb3llck1veWVyRGF0YSYgYm95ZXJNb29yZURhdGEsIE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIFlhcnJKSVRSZWdpc3RlcnMmIGppdFJlZ2lzdGVycykKK3sKKyAg
ICBZYXJyOjpFcnJvckNvZGUgZXJyb3JDb2RlOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRl
cm4ocGF0dGVyblN0cmluZywgZmxhZ3MsIGVycm9yQ29kZSk7CisKKyAgICBZYXJyR2VuZXJhdG9y
PFlhcnJKSVRSZWdpc3RlcnM+IHlhcnJHZW5lcmF0b3Ioaml0LCB2bSwgJmJveWVyTW9vcmVEYXRh
LCBqaXRSZWdpc3RlcnMsIHBhdHRlcm4sIHBhdHRlcm5TdHJpbmcsIGNoYXJTaXplLCBKSVRDb21w
aWxlTW9kZTo6SW5saW5lVGVzdCk7CisgICAgeWFyckdlbmVyYXRvci5zZXRTdGFja0NoZWNrZXIo
bV9jb21waWxhdGlvblRocmVhZFN0YWNrQ2hlY2tlcik7CisgICAgeWFyckdlbmVyYXRvci5jb21w
aWxlSW5saW5lKGJveWVyTW9vcmVEYXRhKTsKK30KKyNlbmRpZgorCiB9fQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDI4NDQ2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsMTAgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIllhcnIuaCIKICNpbmNs
dWRlICJZYXJyUGF0dGVybi5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9TdGFja0NoZWNrLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjZGVmaW5lIFlB
UlJfQ0FMTApAQCAtNDMsNiArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVk07CiBj
bGFzcyBFeGVjdXRhYmxlUG9vbDsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyOwogCiBuYW1lc3BhY2Ug
WWFyciB7CiAKQEAgLTE5OSw3ICsyMDIsNzIgQEAgZXh0ZXJuICJDIiBFbmNvZGVkTWF0Y2hSZXN1
bHQgdm1FbnRyeVRvWQogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb1lhcnJKSVRBZnRlcih2b2lk
KTsKICNlbmRpZgogCi1jbGFzcyBZYXJyQ29kZUJsb2NrIHsKK2NsYXNzIFlhcnJCb3llck1veWVy
RGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoWWFyckJveWVyTW95ZXJEYXRhKTsKKworcHVibGljOgorICAgIFlhcnJCb3llck1veWVy
RGF0YSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQgc2F2ZU1hcHMoVmVjdG9yPFVuaXF1ZVJlZjxC
b3llck1vb3JlQml0bWFwOjpNYXA+PiBtYXBzKQorICAgIHsKKyAgICAgICAgbV9tYXBzLnJlc2Vy
dmVDYXBhY2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAg
ICAgIG1fbWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkpOworICAgIH0K
KworICAgIHZvaWQgY2xlYXJNYXBzKCkKKyAgICB7CisgICAgICAgIG1fbWFwcy5jbGVhcigpOwor
ICAgIH0KKworICAgIGNvbnN0IEJveWVyTW9vcmVCaXRtYXA6Ok1hcDo6V29yZFR5cGUqIHRyeVJl
dXNlQm95ZXJNb29yZUJpdG1hcChjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXAmIG1hcCkgY29u
c3QKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgc3RvcmVkIDogbV9tYXBzKSB7CisgICAgICAg
ICAgICBpZiAoc3RvcmVkLmdldCgpID09IG1hcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rv
cmVkLT5zdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1hcDo6TWFw
Pj4gbV9tYXBzOworfTsKKworY2xhc3MgWWFyckNvZGVCbG9jayA6IHB1YmxpYyBZYXJyQm95ZXJN
b3llckRhdGEgeworICAgIHN0cnVjdCBJbmxpbmVTdGF0cyB7CisgICAgICAgIElubGluZVN0YXRz
KCkKKyAgICAgICAgICAgIDogbV9pbnNuQ291bnQoMCkKKyAgICAgICAgICAgICwgbV9zdGFja1Np
emUoMCkKKyAgICAgICAgICAgICwgbV9uZWVkc1RlbXAyKGZhbHNlKQorICAgICAgICAgICAgLCBt
X2NhbklubGluZShmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBz
ZXQodW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25lZCBzdGFja1NpemUsIGJvb2wgY2FuSW5saW5l
LCBib29sIG5lZWRzVGVtcDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5zbkNvdW50PSBp
bnNuQ291bnQ7CisgICAgICAgICAgICBtX3N0YWNrU2l6ZSA9IHN0YWNrU2l6ZTsKKyAgICAgICAg
ICAgIG1fbmVlZHNUZW1wMiA9IG5lZWRzVGVtcDI7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICAgICAgbV9jYW5JbmxpbmUgPSBjYW5JbmxpbmU7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgY29kZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc25Db3VudDsgfQorICAg
ICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQor
ICAgICAgICBib29sIGNhbklubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuSW5saW5lOyB9Cisg
ICAgICAgIGJvb2wgbmVlZHNUZW1wMigpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNUZW1wMjsgfQor
CisgICAgICAgIHVuc2lnbmVkIG1faW5zbkNvdW50OworICAgICAgICB1bnNpZ25lZCBtX3N0YWNr
U2l6ZSA6IDMwOworICAgICAgICBib29sIG1fbmVlZHNUZW1wMiA6IDE7CisgICAgICAgIGJvb2wg
bV9jYW5JbmxpbmUgOiAxOworICAgIH07CisKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShZYXJyQ29kZUJsb2NrKTsKIApAQCAtMjE5LDE2ICsy
ODcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFlhcnI4Qml0UHRyVGFnPiByZWYsIFZlY3RvcjxVbmlxdWVSZWY8Qm95ZXJNb29yZUJpdG1h
cDo6TWFwPj4gbWFwcykKICAgICB7CiAgICAgICAgIG1fcmVmOCA9IHJlZjsKLSAgICAgICAgbV9t
YXBzLnJlc2VydmVDYXBhY2l0eShtX21hcHMuc2l6ZSgpICsgbWFwcy5zaXplKCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXBzLnNpemUoKTsgKytpbmRleCkK
LSAgICAgICAgICAgIG1fbWFwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBzW2luZGV4XSkp
OworICAgICAgICBzYXZlTWFwcyhXVEZNb3ZlKG1hcHMpKTsKICAgICB9CiAgICAgdm9pZCBzZXQx
NkJpdENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnIxNkJpdFB0clRhZz4gcmVmLCBWZWN0
b3I8VW5pcXVlUmVmPEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4+IG1hcHMpCiAgICAgewogICAgICAg
ICBtX3JlZjE2ID0gcmVmOwotICAgICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5z
aXplKCkgKyBtYXBzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG1hcHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKG1hcHNbaW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUo
bWFwcykpOwogICAgIH0KIAogICAgIGJvb2wgaGFzOEJpdENvZGVNYXRjaE9ubHkoKSB7IHJldHVy
biBtX21hdGNoT25seTguc2l6ZSgpOyB9CkBAIC0yMzYsMTYgKzMwMCwxMiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXQ4Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8WWFyck1h
dGNoT25seThCaXRQdHJUYWc+IG1hdGNoT25seSwgVmVjdG9yPFVuaXF1ZVJlZjxCb3llck1vb3Jl
Qml0bWFwOjpNYXA+PiBtYXBzKQogICAgIHsKICAgICAgICAgbV9tYXRjaE9ubHk4ID0gbWF0Y2hP
bmx5OwotICAgICAgICBtX21hcHMucmVzZXJ2ZUNhcGFjaXR5KG1fbWFwcy5zaXplKCkgKyBtYXBz
LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHMu
c2l6ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgbV9tYXBzLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKG1hcHNbaW5kZXhdKSk7CisgICAgICAgIHNhdmVNYXBzKFdURk1vdmUobWFwcykpOwogICAg
IH0KICAgICB2b2lkIHNldDE2Qml0Q29kZU1hdGNoT25seShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
WWFyck1hdGNoT25seTE2Qml0UHRyVGFnPiBtYXRjaE9ubHksIFZlY3RvcjxVbmlxdWVSZWY8Qm95
ZXJNb29yZUJpdG1hcDo6TWFwPj4gbWFwcykKICAgICB7CiAgICAgICAgIG1fbWF0Y2hPbmx5MTYg
PSBtYXRjaE9ubHk7Ci0gICAgICAgIG1fbWFwcy5yZXNlcnZlQ2FwYWNpdHkobV9tYXBzLnNpemUo
KSArIG1hcHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgbWFwcy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgICAgICBtX21hcHMudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUobWFwc1tpbmRleF0pKTsKKyAgICAgICAgc2F2ZU1hcHMoV1RGTW92ZShtYXBz
KSk7CiAgICAgfQogCiAgICAgYm9vbCB1c2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IHJldHVy
biBtX3VzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlcjsgfQpAQCAtMjUzLDYgKzMxMywxOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRVc2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1BhdHRl
cm5Db250ZXh0QnVmZmVyID0gdHJ1ZTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIHNldDhCaXRJbmxp
bmVTdGF0cyh1bnNpZ25lZCBpbnNuQ291bnQsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgYm9vbCBjYW5J
bmxpbmUsIGJvb2wgbmVlZHNUMikKKyAgICB7CisgICAgICAgIG1fbWF0Y2hPbmx5OFN0YXRzLnNl
dChpbnNuQ291bnQsIHN0YWNrU2l6ZSwgY2FuSW5saW5lLCBuZWVkc1QyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldDE2Qml0SW5saW5lU3RhdHModW5zaWduZWQgaW5zbkNvdW50LCB1bnNpZ25lZCBz
dGFja1NpemUsIGJvb2wgY2FuSW5saW5lLCBib29sIG5lZWRzVDIpCisgICAgeworICAgICAgICBt
X21hdGNoT25seTE2U3RhdHMuc2V0KGluc25Db3VudCwgc3RhY2tTaXplLCBjYW5JbmxpbmUsIG5l
ZWRzVDIpOworICAgIH0KKworICAgIElubGluZVN0YXRzJiBnZXQ4Qml0SW5saW5lU3RhdHMoKSB7
IHJldHVybiBtX21hdGNoT25seThTdGF0czsgfQorICAgIElubGluZVN0YXRzJiBnZXQxNkJpdElu
bGluZVN0YXRzKCkgeyByZXR1cm4gIG1fbWF0Y2hPbmx5MTZTdGF0czsgfQorCiAgICAgTWF0Y2hS
ZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXImIG1hdGNoaW5nQ29u
dGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKQEAgLTMzOCwxNyAr
NDExLDggQEAgcHVibGljOgogICAgICAgICBtX3JlZjE2ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFlhcnIxNkJpdFB0clRhZz4oKTsKICAgICAgICAgbV9tYXRjaE9ubHk4ID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnPigpOwogICAgICAgICBtX21hdGNoT25s
eTE2ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4oKTsK
LSAgICAgICAgbV9tYXBzLmNsZWFyKCk7CiAgICAgICAgIG1fZmFpbHVyZVJlYXNvbiA9IHN0ZDo6
bnVsbG9wdDsKLSAgICB9Ci0KLSAgICBjb25zdCBCb3llck1vb3JlQml0bWFwOjpNYXA6OldvcmRU
eXBlKiB0cnlSZXVzZUJveWVyTW9vcmVCaXRtYXAoY29uc3QgQm95ZXJNb29yZUJpdG1hcDo6TWFw
JiBtYXApIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0b3JlZCA6IG1fbWFwcykg
ewotICAgICAgICAgICAgaWYgKHN0b3JlZC5nZXQoKSA9PSBtYXApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0b3JlZC0+c3RvcmFnZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICBjbGVhck1hcHMoKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTYsMTcg
KzQyMCwyOCBAQCBwcml2YXRlOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxZYXJyMTZCaXRQ
dHJUYWc+IG1fcmVmMTY7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJNYXRjaE9ubHk4
Qml0UHRyVGFnPiBtX21hdGNoT25seTg7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFlhcnJN
YXRjaE9ubHkxNkJpdFB0clRhZz4gbV9tYXRjaE9ubHkxNjsKLSAgICBWZWN0b3I8VW5pcXVlUmVm
PEJveWVyTW9vcmVCaXRtYXA6Ok1hcD4+IG1fbWFwczsKKyAgICBJbmxpbmVTdGF0cyBtX21hdGNo
T25seThTdGF0czsKKyAgICBJbmxpbmVTdGF0cyBtX21hdGNoT25seTE2U3RhdHM7CisKICAgICBi
b29sIG1fdXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyIHsgZmFsc2UgfTsKICAgICBzdGQ6Om9wdGlv
bmFsPEpJVEZhaWx1cmVSZWFzb24+IG1fZmFpbHVyZVJlYXNvbjsKIH07CiAKIGVudW0gY2xhc3Mg
SklUQ29tcGlsZU1vZGUgOiB1aW50OF90IHsKICAgICBNYXRjaE9ubHksCi0gICAgSW5jbHVkZVN1
YnBhdHRlcm5zCisgICAgSW5jbHVkZVN1YnBhdHRlcm5zLAorICAgIElubGluZVRlc3QKIH07CiB2
b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mLCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIENoYXJT
aXplLCBWTSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgSklUQ29tcGlsZU1vZGUpOwogCisj
aWYgRU5BQkxFKFlBUlJfSklUX1JFR0VYUF9URVNUX0lOTElORSkKKworCitjbGFzcyBZYXJySklU
UmVnaXN0ZXJzOworCit2b2lkIGppdENvbXBpbGVJbmxpbmVkVGVzdChTdGFja0NoZWNrKiwgY29u
c3QgU3RyaW5nJiwgT3B0aW9uU2V0PFlhcnI6OkZsYWdzPiwgQ2hhclNpemUsIGNvbnN0IFZNKiwg
WWFyckJveWVyTW95ZXJEYXRhJiwgTWFjcm9Bc3NlbWJsZXImLCBZYXJySklUUmVnaXN0ZXJzJik7
CisjZW5kaWYKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OllhcnIKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklUUmVnaXN0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVFJlZ2lzdGVycy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVRSZWdpc3RlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShZQVJSX0pJ
VCkKKworI2luY2x1ZGUgIkdQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFj
ZSBZYXJyIHsKKworc3RydWN0IFlhcnJKSVREZWZhdWx0UmVnaXN0ZXJzIHsKK3B1YmxpYzoKKyNp
ZiBDUFUoQVJNX1RIVU1CMikKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbnB1dCA9IEFS
TVJlZ2lzdGVyczo6cjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5kZXggPSBBUk1S
ZWdpc3RlcnM6OnIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGxlbmd0aCA9IEFSTVJl
Z2lzdGVyczo6cjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgb3V0cHV0ID0gQVJNUmVn
aXN0ZXJzOjpyMzsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlZ1QwID0gQVJNUmVn
aXN0ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdUMSA9IEFSTVJlZ2lz
dGVyczo6cjU7CisgICAgLy8gcjYgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyQVJNdjcs
CisgICAgLy8gcjcgaXMgZnAuCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDIgPSBB
Uk1SZWdpc3RlcnM6OnI4OworICAgIC8vIHI5IGlzIHNiIGluIEVBQkkuCisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgaW5pdGlhbFN0YXJ0ID0gQVJNUmVnaXN0ZXJzOjpyMTA7IC8vIHIxMCBp
cyBTTCwgYnV0IG5vIGxvbmdlciBhIHNwZWNpYWwgcmVnaXN0ZXIuCisKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXR1cm5SZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIyID0gQVJNUmVnaXN0ZXJzOjpyMTsK
KworI2VsaWYgQ1BVKEFSTTY0KQorICAgIC8vIEFyZ3VtZW50IHJlZ2lzdGVycworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGlucHV0ID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGluZGV4ID0gQVJNNjRSZWdpc3RlcnM6OngxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGxlbmd0aCA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgbWF0Y2hpbmdDb250ZXh0ID0gQVJNNjRSZWdpc3RlcnM6Ong0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGZyZWVsaXN0UmVnaXN0ZXIgPSBBUk02NFJl
Z2lzdGVyczo6eDQ7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4g
dGhlIHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGZyZWVsaXN0U2l6ZVJl
Z2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong1OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxp
emF0aW9uLgorCisgICAgLy8gU2NyYXRjaCByZWdpc3RlcnMKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZWdUMCA9IEFSTTY0UmVnaXN0ZXJzOjp4NjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZWdUMSA9IEFSTTY0UmVnaXN0ZXJzOjp4NzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZWdUMiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZW1haW5pbmdNYXRjaENvdW50ID0gQVJNNjRSZWdpc3RlcnM6Ong5OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsID0gQVJNNjRSZWdp
c3RlcnM6OngxMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB1bmljb2RlVGVtcCA9IEFS
TTY0UmVnaXN0ZXJzOjp4NTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbml0aWFsU3Rh
cnQgPSBBUk02NFJlZ2lzdGVyczo6eDExOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN1
cHBsZW1lbnRhcnlQbGFuZXNCYXNlID0gQVJNNjRSZWdpc3RlcnM6OngxMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBsZWFkaW5nU3Vycm9nYXRlVGFnID0gQVJNNjRSZWdpc3RlcnM6Ongx
MzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IEFS
TTY0UmVnaXN0ZXJzOjp4MTQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZW5kT2ZTdHJp
bmdBZGRyZXNzID0gQVJNNjRSZWdpc3RlcnM6OngxNTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJldHVyblJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6OngwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJldHVyblJlZ2lzdGVyMiA9IEFSTTY0UmVnaXN0ZXJzOjp4MTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBzdXJyb2dh
dGVUYWdNYXNrID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGZmZmZmYzAwKTsKKyNl
bGlmIENQVShNSVBTKQorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGlucHV0ID0gTUlQU1Jl
Z2lzdGVyczo6YTA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5kZXggPSBNSVBTUmVn
aXN0ZXJzOjphMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBsZW5ndGggPSBNSVBTUmVn
aXN0ZXJzOjphMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBvdXRwdXQgPSBNSVBTUmVn
aXN0ZXJzOjphMzsKKworICAgIC8vIHQwIGlzIHJlc2VydmVkIGZvciBNYWNyb0Fzc2VtYmxlck1J
UFMuCisgICAgLy8gdDEgaXMgcmVzZXJ2ZWQgZm9yIE1hY3JvQXNzZW1ibGVyTUlQUy4KKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdUMCA9IE1JUFNSZWdpc3RlcnM6OnQyOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6dDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDIgPSBNSVBTUmVnaXN0ZXJzOjp0NDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBpbml0aWFsU3RhcnQgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVy
czo6djA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIyID0gTUlQ
U1JlZ2lzdGVyczo6djE7CisKKyNlbGlmIENQVShYODZfNjQpCisjaWYgIU9TKFdJTkRPV1MpCisg
ICAgLy8gQXJndW1lbnQgcmVnaXN0ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgaW5w
dXQgPSBYODZSZWdpc3RlcnM6OmVkaTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBpbmRl
eCA9IFg4NlJlZ2lzdGVyczo6ZXNpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGxlbmd0
aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIG91dHB1
dCA9IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIG1hdGNo
aW5nQ29udGV4dCA9IFg4NlJlZ2lzdGVyczo6cjg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7IC8vIExvYWRlZCBmcm9tIHRo
ZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xvZ3VlLgorICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyOTsgLy8g
T25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyNlbHNlCisgICAgLy8gSWYgdGhlIHJl
dHVybiB2YWx1ZSBkb2Vzbid0IGZpdCBpbiA2NGJpdHMsIGl0cyBkZXN0aW5hdGlvbiBpcyBwb2lu
dGVkIGJ5IHJjeCBhbmQgdGhlIHBhcmFtZXRlcnMgYXJlIHNoaWZ0ZWQuCisgICAgLy8gaHR0cDov
L21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5Lzc1NzJ6dHo0LmFzcHgKKyAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihNYXRjaFJlc3VsdCkgPiBzaXplb2Yodm9pZCopLCAiTWF0Y2hSZXN1
bHQgZG9lcyBub3QgZml0IGluIDY0Yml0cyIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplZHg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
aW5kZXggPSBYODZSZWdpc3RlcnM6OnI4OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGxl
bmd0aCA9IFg4NlJlZ2lzdGVyczo6cjk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgb3V0
cHV0ID0gWDg2UmVnaXN0ZXJzOjpyMTA7CisjZW5kaWYKKworICAgIC8vIFNjcmF0Y2ggcmVnaXN0
ZXJzCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDAgPSBYODZSZWdpc3RlcnM6OmVh
eDsKKyNpZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdUMSA9
IFg4NlJlZ2lzdGVyczo6cjk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVnVDIgPSBY
ODZSZWdpc3RlcnM6OnIxMDsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVn
VDEgPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZWdU
MiA9IFg4NlJlZ2lzdGVyczo6ZWRpOworI2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBpbml0aWFsU3RhcnQgPSBYODZSZWdpc3RlcnM6OmVieDsKKyNpZiAhT1MoV0lORE9XUykK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZW1haW5pbmdNYXRjaENvdW50ID0gWDg2UmVn
aXN0ZXJzOjpyMTI7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlbWFpbmlu
Z01hdGNoQ291bnQgPSBYODZSZWdpc3RlcnM6OmVzaTsKKyNlbmRpZgorICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsID0gWDg2UmVnaXN0ZXJzOjpyMTM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdW5pY29kZVRlbXAgPSBYODZSZWdpc3RlcnM6
OnIxNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBlbmRPZlN0cmluZ0FkZHJlc3MgPSBY
ODZSZWdpc3RlcnM6OnIxNTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJldHVyblJl
Z2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmV0dXJuUmVnaXN0ZXIyID0gWDg2UmVnaXN0ZXJzOjplZHg7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2Ug
PSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4MTAwMDApOworICAgIHN0YXRpYyBjb25z
dGV4cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0g
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigweGQ4MDApOworICAgIHN0YXRpYyBjb25zdGV4
cHIgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiB0cmFpbGluZ1N1cnJvZ2F0ZVRhZyA9IE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhkYzAwKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgc3Vycm9nYXRlVGFnTWFzayA9IE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMHhmZmZmZmMwMCk7CisjZW5kaWYKK307CisKKyNpZiBFTkFC
TEUoWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FKQorY2xhc3MgWWFyckpJVFJlZ2lzdGVycyB7
CitwdWJsaWM6CisgICAgWWFyckpJVFJlZ2lzdGVycygpCisgICAgeworICAgIH0KKworICAgIC8v
IEFyZ3VtZW50IHJlZ2lzdGVycworICAgIEdQUlJlZyBpbnB1dCB7IEludmFsaWRHUFJSZWcgfTsK
KyAgICBHUFJSZWcgaW5kZXggeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIGxlbmd0aCB7
IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgb3V0cHV0IHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgIEdQUlJlZyBtYXRjaGluZ0NvbnRleHQgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVn
IGZyZWVsaXN0UmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgR1BSUmVnIGZyZWVsaXN0
U2l6ZVJlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OworCisgICAgR1BSUmVnIHJldHVyblJlZ2lz
dGVyIHsgSW52YWxpZEdQUlJlZyB9OworICAgIEdQUlJlZyByZXR1cm5SZWdpc3RlcjIgeyBJbnZh
bGlkR1BSUmVnIH07CisKKyAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycworICAgIEdQUlJlZyByZWdU
MCB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgcmVnVDEgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgR1BSUmVnIHJlZ1QyIHsgSW52YWxpZEdQUlJlZyB9OworCisgICAgLy8gVW5pY29kZSBj
aGFyYWN0ZXIgcHJvY2Vzc2luZworICAgIEdQUlJlZyBpbml0aWFsU3RhcnQgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgR1BSUmVnIHJlbWFpbmluZ01hdGNoQ291bnQgeyBJbnZhbGlkR1BSUmVnIH07
CisgICAgR1BSUmVnIHJlZ1VuaWNvZGVJbnB1dEFuZFRyYWlsIHsgSW52YWxpZEdQUlJlZyB9Owor
ICAgIEdQUlJlZyB1bmljb2RlVGVtcCB7IEludmFsaWRHUFJSZWcgfTsKKyAgICBHUFJSZWcgZW5k
T2ZTdHJpbmdBZGRyZXNzIHsgSW52YWxpZEdQUlJlZyB9OworCisgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSA9IE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMHgxMDAwMCk7CisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMiBsZWFkaW5nU3Vycm9nYXRlVGFnID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigweGQ4MDApOworICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgdHJh
aWxpbmdTdXJyb2dhdGVUYWcgPSBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDB4ZGMwMCk7
Cit9OworI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCisKKyNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCShyZXZpc2lvbiAyODQ0
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBQZXRlciBWYXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg0NDYzKQor
KysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAyMS0xMC0xOSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbmxpbmUgUmVnRXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDQ2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGVuYWJsZW1lbnQ6
IEVOQUJMRV9ZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TLgorCisgICAgICAgICogd3Rm
L1BsYXRmb3JtRW5hYmxlLmg6CisKIDIwMjEtMTAtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBTdHJpbmdCdWZmZXIgc2hvdWxkIHJlYWxseSBrbm93IHRoYXQg
c3RyaW5ncyBtaWdodCBiZSA4LWJpdApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCShyZXZp
c2lvbiAyODQ0NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NDcsNiArNzQ3LDcgQEAKIC8qIEVuYWJsZSBKSVQnaW5nIFJlZ3VsYXIgRXhw
cmVzc2lvbnMgdGhhdCBoYXZlIG5lc3RlZCBwYXJlbnRoZXNpcyAuICovCiAjaWYgRU5BQkxFKFlB
UlJfSklUKSAmJiAoQ1BVKEFSTTY0KSB8fCAoQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1MpKSkK
ICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMgMQorI2RlZmlu
ZSBFTkFCTEVfWUFSUl9KSVRfUkVHRVhQX1RFU1RfSU5MSU5FIDEKICNlbmRpZgogCiAvKiBFbmFi
bGUgSklUJ2luZyBSZWd1bGFyIEV4cHJlc3Npb25zIHRoYXQgaGF2ZSBuZXN0ZWQgYmFjayByZWZl
cmVuY2VzLiAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>